feature/d01-branch-d-cleanup #9
@@ -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(),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user