fix(D-01/D): blindfold ID mismatch + dispenser V2 registration (review)

KidnapperTheme: fix "mask_blindfold" → "blindfold_mask" across 8 themes.
The incorrect ID produced ghost items with no definition.

DispenserBehaviors: register GenericBondageDispenseBehavior.forAnyDataDriven()
for the V2 DATA_DRIVEN_ITEM singleton. Dispatches by region from the stack's
definition. V1 per-variant registrations were deleted but V2 replacement
was missing.
This commit is contained in:
NotEvil
2026-04-15 02:10:25 +02:00
parent c265206128
commit ad48b71182
3 changed files with 46 additions and 11 deletions

View File

@@ -30,9 +30,7 @@ public class DispenserBehaviors {
registerClothesBehaviors();
registerRopeArrowBehavior();
// V2 data-driven bondage items register their own dispenser behaviors
// via DataDrivenBondageItem.registerDispenserBehaviors()
registerBondageItemBehavior();
TiedUpMod.LOGGER.info(
"[DispenserBehaviors] Dispenser behaviors registered!"
@@ -46,6 +44,17 @@ public class DispenserBehaviors {
);
}
private static void registerBondageItemBehavior() {
// Single registration for the V2 data-driven item singleton.
// GenericBondageDispenseBehavior inspects the stack's definition to determine behavior.
if (com.tiedup.remake.v2.bondage.V2BondageItems.DATA_DRIVEN_ITEM != null) {
DispenserBlock.registerBehavior(
com.tiedup.remake.v2.bondage.V2BondageItems.DATA_DRIVEN_ITEM.get(),
GenericBondageDispenseBehavior.forAnyDataDriven()
);
}
}
private static void registerRopeArrowBehavior() {
DispenserBlock.registerBehavior(
ModItems.ROPE_ARROW.get(),

View File

@@ -56,6 +56,32 @@ public class GenericBondageDispenseBehavior
// Factory Methods
/** Universal behavior for the V2 data-driven item singleton. Dispatches by region. */
public static GenericBondageDispenseBehavior forAnyDataDriven() {
return new GenericBondageDispenseBehavior(
stack -> DataDrivenItemRegistry.get(stack) != null,
state -> true, // let equip() handle the check
(state, stack) -> {
DataDrivenItemDefinition def = DataDrivenItemRegistry.get(stack);
if (def == null) return;
java.util.Set<BodyRegionV2> regions = def.occupiedRegions();
if (regions.contains(BodyRegionV2.ARMS) && !state.isTiedUp()) {
state.equip(BodyRegionV2.ARMS, stack);
} else if (regions.contains(BodyRegionV2.MOUTH) && !state.isGagged()) {
state.equip(BodyRegionV2.MOUTH, stack);
} else if (regions.contains(BodyRegionV2.EYES) && !state.isBlindfolded()) {
state.equip(BodyRegionV2.EYES, stack);
} else if (regions.contains(BodyRegionV2.NECK) && !state.hasCollar()) {
state.equip(BodyRegionV2.NECK, stack);
} else if (regions.contains(BodyRegionV2.EARS) && !state.hasEarplugs()) {
state.equip(BodyRegionV2.EARS, stack);
} else if (regions.contains(BodyRegionV2.HANDS) && !state.hasMittens()) {
state.equip(BodyRegionV2.HANDS, stack);
}
}
);
}
public static GenericBondageDispenseBehavior forBind() {
return new GenericBondageDispenseBehavior(
BindModeHelper::isBindItem,

View File

@@ -37,7 +37,7 @@ public enum KidnapperTheme {
TAPE(
"duct_tape",
new String[] { "tape_gag", "wrap_gag" },
new String[] { "mask_blindfold" },
new String[] { "blindfold_mask" },
true,
20
),
@@ -47,7 +47,7 @@ public enum KidnapperTheme {
LEATHER(
"leather_straps",
new String[] { "ball_gag", "ball_gag_strap", "panel_gag" },
new String[] { "mask_blindfold" },
new String[] { "blindfold_mask" },
false,
15
),
@@ -57,7 +57,7 @@ public enum KidnapperTheme {
CHAIN(
"chain",
new String[] { "chain_panel_gag", "ball_gag_strap" },
new String[] { "mask_blindfold" },
new String[] { "blindfold_mask" },
false,
10
),
@@ -67,7 +67,7 @@ public enum KidnapperTheme {
MEDICAL(
"medical_straps",
new String[] { "tube_gag", "sponge_gag", "ball_gag" },
new String[] { "mask_blindfold" },
new String[] { "blindfold_mask" },
false,
8
),
@@ -77,7 +77,7 @@ public enum KidnapperTheme {
BEAM(
"beam_cuffs",
new String[] { "beam_panel_gag", "latex_gag" },
new String[] { "mask_blindfold" },
new String[] { "blindfold_mask" },
false,
5
),
@@ -87,7 +87,7 @@ public enum KidnapperTheme {
LATEX(
"latex_sack",
new String[] { "latex_gag", "tube_gag" },
new String[] { "mask_blindfold" },
new String[] { "blindfold_mask" },
false,
3
),
@@ -97,7 +97,7 @@ public enum KidnapperTheme {
ASYLUM(
"straitjacket",
new String[] { "bite_gag", "sponge_gag", "ball_gag" },
new String[] { "mask_blindfold" },
new String[] { "blindfold_mask" },
false,
5
),
@@ -117,7 +117,7 @@ public enum KidnapperTheme {
WRAP(
"wrap",
new String[] { "wrap_gag", "tape_gag" },
new String[] { "mask_blindfold" },
new String[] { "blindfold_mask" },
false,
5
);