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:
@@ -30,9 +30,7 @@ public class DispenserBehaviors {
|
|||||||
|
|
||||||
registerClothesBehaviors();
|
registerClothesBehaviors();
|
||||||
registerRopeArrowBehavior();
|
registerRopeArrowBehavior();
|
||||||
|
registerBondageItemBehavior();
|
||||||
// V2 data-driven bondage items register their own dispenser behaviors
|
|
||||||
// via DataDrivenBondageItem.registerDispenserBehaviors()
|
|
||||||
|
|
||||||
TiedUpMod.LOGGER.info(
|
TiedUpMod.LOGGER.info(
|
||||||
"[DispenserBehaviors] Dispenser behaviors registered!"
|
"[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() {
|
private static void registerRopeArrowBehavior() {
|
||||||
DispenserBlock.registerBehavior(
|
DispenserBlock.registerBehavior(
|
||||||
ModItems.ROPE_ARROW.get(),
|
ModItems.ROPE_ARROW.get(),
|
||||||
|
|||||||
@@ -56,6 +56,32 @@ public class GenericBondageDispenseBehavior
|
|||||||
|
|
||||||
// Factory Methods
|
// 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() {
|
public static GenericBondageDispenseBehavior forBind() {
|
||||||
return new GenericBondageDispenseBehavior(
|
return new GenericBondageDispenseBehavior(
|
||||||
BindModeHelper::isBindItem,
|
BindModeHelper::isBindItem,
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public enum KidnapperTheme {
|
|||||||
TAPE(
|
TAPE(
|
||||||
"duct_tape",
|
"duct_tape",
|
||||||
new String[] { "tape_gag", "wrap_gag" },
|
new String[] { "tape_gag", "wrap_gag" },
|
||||||
new String[] { "mask_blindfold" },
|
new String[] { "blindfold_mask" },
|
||||||
true,
|
true,
|
||||||
20
|
20
|
||||||
),
|
),
|
||||||
@@ -47,7 +47,7 @@ public enum KidnapperTheme {
|
|||||||
LEATHER(
|
LEATHER(
|
||||||
"leather_straps",
|
"leather_straps",
|
||||||
new String[] { "ball_gag", "ball_gag_strap", "panel_gag" },
|
new String[] { "ball_gag", "ball_gag_strap", "panel_gag" },
|
||||||
new String[] { "mask_blindfold" },
|
new String[] { "blindfold_mask" },
|
||||||
false,
|
false,
|
||||||
15
|
15
|
||||||
),
|
),
|
||||||
@@ -57,7 +57,7 @@ public enum KidnapperTheme {
|
|||||||
CHAIN(
|
CHAIN(
|
||||||
"chain",
|
"chain",
|
||||||
new String[] { "chain_panel_gag", "ball_gag_strap" },
|
new String[] { "chain_panel_gag", "ball_gag_strap" },
|
||||||
new String[] { "mask_blindfold" },
|
new String[] { "blindfold_mask" },
|
||||||
false,
|
false,
|
||||||
10
|
10
|
||||||
),
|
),
|
||||||
@@ -67,7 +67,7 @@ public enum KidnapperTheme {
|
|||||||
MEDICAL(
|
MEDICAL(
|
||||||
"medical_straps",
|
"medical_straps",
|
||||||
new String[] { "tube_gag", "sponge_gag", "ball_gag" },
|
new String[] { "tube_gag", "sponge_gag", "ball_gag" },
|
||||||
new String[] { "mask_blindfold" },
|
new String[] { "blindfold_mask" },
|
||||||
false,
|
false,
|
||||||
8
|
8
|
||||||
),
|
),
|
||||||
@@ -77,7 +77,7 @@ public enum KidnapperTheme {
|
|||||||
BEAM(
|
BEAM(
|
||||||
"beam_cuffs",
|
"beam_cuffs",
|
||||||
new String[] { "beam_panel_gag", "latex_gag" },
|
new String[] { "beam_panel_gag", "latex_gag" },
|
||||||
new String[] { "mask_blindfold" },
|
new String[] { "blindfold_mask" },
|
||||||
false,
|
false,
|
||||||
5
|
5
|
||||||
),
|
),
|
||||||
@@ -87,7 +87,7 @@ public enum KidnapperTheme {
|
|||||||
LATEX(
|
LATEX(
|
||||||
"latex_sack",
|
"latex_sack",
|
||||||
new String[] { "latex_gag", "tube_gag" },
|
new String[] { "latex_gag", "tube_gag" },
|
||||||
new String[] { "mask_blindfold" },
|
new String[] { "blindfold_mask" },
|
||||||
false,
|
false,
|
||||||
3
|
3
|
||||||
),
|
),
|
||||||
@@ -97,7 +97,7 @@ public enum KidnapperTheme {
|
|||||||
ASYLUM(
|
ASYLUM(
|
||||||
"straitjacket",
|
"straitjacket",
|
||||||
new String[] { "bite_gag", "sponge_gag", "ball_gag" },
|
new String[] { "bite_gag", "sponge_gag", "ball_gag" },
|
||||||
new String[] { "mask_blindfold" },
|
new String[] { "blindfold_mask" },
|
||||||
false,
|
false,
|
||||||
5
|
5
|
||||||
),
|
),
|
||||||
@@ -117,7 +117,7 @@ public enum KidnapperTheme {
|
|||||||
WRAP(
|
WRAP(
|
||||||
"wrap",
|
"wrap",
|
||||||
new String[] { "wrap_gag", "tape_gag" },
|
new String[] { "wrap_gag", "tape_gag" },
|
||||||
new String[] { "mask_blindfold" },
|
new String[] { "blindfold_mask" },
|
||||||
false,
|
false,
|
||||||
5
|
5
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user