feat(D-01/D): V1 cleanup — delete 28 files, ~5400 lines removed
D1: ThreadLocal alert suppression moved from ItemCollar to CollarHelper.
onCollarRemoved() logic (kidnapper alert) moved to CollarHelper.
D2+D3: Deleted 17 V1 item classes + 4 V1-only interfaces:
ItemBind, ItemGag, ItemBlindfold, ItemCollar, ItemEarplugs, ItemMittens,
ItemColor, ItemClassicCollar, ItemShockCollar, ItemShockCollarAuto,
ItemGpsCollar, ItemChokeCollar, ItemHood, ItemMedicalGag,
IBondageItem, IHasGaggingEffect, IHasBlindingEffect, IAdjustable
D4: KidnapperTheme/KidnapperItemSelector/DispenserBehaviors migrated
from variant enums to string-based DataDrivenItemRegistry IDs.
D5: Deleted 11 variant enums + Generic* factories + ItemBallGag3D:
BindVariant, GagVariant, BlindfoldVariant, EarplugsVariant, MittensVariant,
GenericBind, GenericGag, GenericBlindfold, GenericEarplugs, GenericMittens
D6: ModItems cleaned — all V1 bondage registrations removed.
D7: ModCreativeTabs rewritten — iterates DataDrivenItemRegistry.
D8+D9: All V2 helpers cleaned (V1 fallbacks removed), orphan imports removed.
Zero V1 bondage code references remain (only Javadoc comments).
All bondage items are now data-driven via 47 JSON definitions.
This commit is contained in:
@@ -2,16 +2,19 @@ package com.tiedup.remake.dispenser;
|
||||
|
||||
import com.tiedup.remake.core.TiedUpMod;
|
||||
import com.tiedup.remake.items.ModItems;
|
||||
import com.tiedup.remake.items.base.*;
|
||||
import net.minecraft.world.level.block.DispenserBlock;
|
||||
|
||||
/**
|
||||
* Registration class for all TiedUp dispenser behaviors.
|
||||
*
|
||||
* Allows dispensers to:
|
||||
* - Equip bondage items (binds, gags, blindfolds, collars, earplugs, clothes) on entities
|
||||
* - Equip bondage items (via data-driven V2 system) on entities
|
||||
* - Shoot rope arrows
|
||||
*
|
||||
* Note: V1 per-variant dispenser registrations have been removed.
|
||||
* Data-driven bondage items use a single universal dispenser behavior
|
||||
* registered via DataDrivenBondageItem system.
|
||||
*
|
||||
* Based on original behaviors package from 1.12.2
|
||||
*/
|
||||
public class DispenserBehaviors {
|
||||
@@ -25,72 +28,17 @@ public class DispenserBehaviors {
|
||||
"[DispenserBehaviors] Registering dispenser behaviors..."
|
||||
);
|
||||
|
||||
registerBindBehaviors();
|
||||
registerGagBehaviors();
|
||||
registerBlindfoldBehaviors();
|
||||
registerCollarBehaviors();
|
||||
registerEarplugsBehaviors();
|
||||
registerClothesBehaviors();
|
||||
registerRopeArrowBehavior();
|
||||
|
||||
// V2 data-driven bondage items register their own dispenser behaviors
|
||||
// via DataDrivenBondageItem.registerDispenserBehaviors()
|
||||
|
||||
TiedUpMod.LOGGER.info(
|
||||
"[DispenserBehaviors] Dispenser behaviors registered!"
|
||||
);
|
||||
}
|
||||
|
||||
private static void registerBindBehaviors() {
|
||||
var behavior = GenericBondageDispenseBehavior.forBind();
|
||||
for (BindVariant variant : BindVariant.values()) {
|
||||
DispenserBlock.registerBehavior(
|
||||
ModItems.getBind(variant),
|
||||
behavior
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static void registerGagBehaviors() {
|
||||
var behavior = GenericBondageDispenseBehavior.forGag();
|
||||
for (GagVariant variant : GagVariant.values()) {
|
||||
DispenserBlock.registerBehavior(ModItems.getGag(variant), behavior);
|
||||
}
|
||||
DispenserBlock.registerBehavior(ModItems.MEDICAL_GAG.get(), behavior);
|
||||
DispenserBlock.registerBehavior(ModItems.HOOD.get(), behavior);
|
||||
}
|
||||
|
||||
private static void registerBlindfoldBehaviors() {
|
||||
var behavior = GenericBondageDispenseBehavior.forBlindfold();
|
||||
for (BlindfoldVariant variant : BlindfoldVariant.values()) {
|
||||
DispenserBlock.registerBehavior(
|
||||
ModItems.getBlindfold(variant),
|
||||
behavior
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static void registerCollarBehaviors() {
|
||||
var behavior = GenericBondageDispenseBehavior.forCollar();
|
||||
DispenserBlock.registerBehavior(
|
||||
ModItems.CLASSIC_COLLAR.get(),
|
||||
behavior
|
||||
);
|
||||
DispenserBlock.registerBehavior(ModItems.SHOCK_COLLAR.get(), behavior);
|
||||
DispenserBlock.registerBehavior(
|
||||
ModItems.SHOCK_COLLAR_AUTO.get(),
|
||||
behavior
|
||||
);
|
||||
DispenserBlock.registerBehavior(ModItems.GPS_COLLAR.get(), behavior);
|
||||
}
|
||||
|
||||
private static void registerEarplugsBehaviors() {
|
||||
var behavior = GenericBondageDispenseBehavior.forEarplugs();
|
||||
for (EarplugsVariant variant : EarplugsVariant.values()) {
|
||||
DispenserBlock.registerBehavior(
|
||||
ModItems.getEarplugs(variant),
|
||||
behavior
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static void registerClothesBehaviors() {
|
||||
DispenserBlock.registerBehavior(
|
||||
ModItems.CLOTHES.get(),
|
||||
|
||||
@@ -1,16 +1,21 @@
|
||||
package com.tiedup.remake.dispenser;
|
||||
|
||||
import com.tiedup.remake.items.base.*;
|
||||
import com.tiedup.remake.state.IBondageState;
|
||||
import com.tiedup.remake.v2.BodyRegionV2;
|
||||
import com.tiedup.remake.v2.bondage.BindModeHelper;
|
||||
import com.tiedup.remake.v2.bondage.CollarHelper;
|
||||
import com.tiedup.remake.v2.bondage.component.ComponentType;
|
||||
import com.tiedup.remake.v2.bondage.component.GaggingComponent;
|
||||
import com.tiedup.remake.v2.bondage.datadriven.DataDrivenBondageItem;
|
||||
import com.tiedup.remake.v2.bondage.datadriven.DataDrivenItemDefinition;
|
||||
import com.tiedup.remake.v2.bondage.datadriven.DataDrivenItemRegistry;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Predicate;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
/**
|
||||
* Generic dispenser behavior for equipping bondage items.
|
||||
* Replaces individual BindDispenseBehavior, GagDispenseBehavior, etc.
|
||||
* Uses V2 data-driven item detection instead of V1 class checks.
|
||||
*
|
||||
* Use factory methods to create instances for each bondage type.
|
||||
*/
|
||||
@@ -18,23 +23,23 @@ public class GenericBondageDispenseBehavior
|
||||
extends EquipBondageDispenseBehavior
|
||||
{
|
||||
|
||||
private final Class<? extends Item> itemClass;
|
||||
private final Predicate<ItemStack> itemCheck;
|
||||
private final Predicate<IBondageState> canEquipCheck;
|
||||
private final BiConsumer<IBondageState, ItemStack> equipAction;
|
||||
|
||||
private GenericBondageDispenseBehavior(
|
||||
Class<? extends Item> itemClass,
|
||||
Predicate<ItemStack> itemCheck,
|
||||
Predicate<IBondageState> canEquipCheck,
|
||||
BiConsumer<IBondageState, ItemStack> equipAction
|
||||
) {
|
||||
this.itemClass = itemClass;
|
||||
this.itemCheck = itemCheck;
|
||||
this.canEquipCheck = canEquipCheck;
|
||||
this.equipAction = equipAction;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isValidItem(ItemStack stack) {
|
||||
return !stack.isEmpty() && itemClass.isInstance(stack.getItem());
|
||||
return !stack.isEmpty() && itemCheck.test(stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -53,7 +58,7 @@ public class GenericBondageDispenseBehavior
|
||||
|
||||
public static GenericBondageDispenseBehavior forBind() {
|
||||
return new GenericBondageDispenseBehavior(
|
||||
ItemBind.class,
|
||||
BindModeHelper::isBindItem,
|
||||
state -> !state.isTiedUp(),
|
||||
(s, i) -> s.equip(BodyRegionV2.ARMS, i)
|
||||
);
|
||||
@@ -61,7 +66,7 @@ public class GenericBondageDispenseBehavior
|
||||
|
||||
public static GenericBondageDispenseBehavior forGag() {
|
||||
return new GenericBondageDispenseBehavior(
|
||||
ItemGag.class,
|
||||
stack -> DataDrivenBondageItem.getComponent(stack, ComponentType.GAGGING, GaggingComponent.class) != null,
|
||||
state -> !state.isGagged(),
|
||||
(s, i) -> s.equip(BodyRegionV2.MOUTH, i)
|
||||
);
|
||||
@@ -69,7 +74,10 @@ public class GenericBondageDispenseBehavior
|
||||
|
||||
public static GenericBondageDispenseBehavior forBlindfold() {
|
||||
return new GenericBondageDispenseBehavior(
|
||||
ItemBlindfold.class,
|
||||
stack -> {
|
||||
DataDrivenItemDefinition def = DataDrivenItemRegistry.get(stack);
|
||||
return def != null && def.occupiedRegions().contains(BodyRegionV2.EYES);
|
||||
},
|
||||
state -> !state.isBlindfolded(),
|
||||
(s, i) -> s.equip(BodyRegionV2.EYES, i)
|
||||
);
|
||||
@@ -77,7 +85,7 @@ public class GenericBondageDispenseBehavior
|
||||
|
||||
public static GenericBondageDispenseBehavior forCollar() {
|
||||
return new GenericBondageDispenseBehavior(
|
||||
ItemCollar.class,
|
||||
CollarHelper::isCollar,
|
||||
state -> !state.hasCollar(),
|
||||
(s, i) -> s.equip(BodyRegionV2.NECK, i)
|
||||
);
|
||||
@@ -85,7 +93,10 @@ public class GenericBondageDispenseBehavior
|
||||
|
||||
public static GenericBondageDispenseBehavior forEarplugs() {
|
||||
return new GenericBondageDispenseBehavior(
|
||||
ItemEarplugs.class,
|
||||
stack -> {
|
||||
DataDrivenItemDefinition def = DataDrivenItemRegistry.get(stack);
|
||||
return def != null && def.occupiedRegions().contains(BodyRegionV2.EARS);
|
||||
},
|
||||
state -> !state.hasEarplugs(),
|
||||
(s, i) -> s.equip(BodyRegionV2.EARS, i)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user