- LOCKPICK = ITEMS.register(
"lockpick",
ItemLockpick::new
diff --git a/src/main/java/com/tiedup/remake/items/base/BindVariant.java b/src/main/java/com/tiedup/remake/items/base/BindVariant.java
index 12dee31..400b378 100644
--- a/src/main/java/com/tiedup/remake/items/base/BindVariant.java
+++ b/src/main/java/com/tiedup/remake/items/base/BindVariant.java
@@ -53,7 +53,9 @@ public enum BindVariant {
* Delegates to {@link com.tiedup.remake.core.SettingsAccessor#getBindResistance(String)}.
*/
public int getResistance() {
- return com.tiedup.remake.core.SettingsAccessor.getBindResistance(registryName);
+ return com.tiedup.remake.core.SettingsAccessor.getBindResistance(
+ registryName
+ );
}
public PoseType getPoseType() {
diff --git a/src/main/java/com/tiedup/remake/items/base/IHasResistance.java b/src/main/java/com/tiedup/remake/items/base/IHasResistance.java
index 133eb86..7f26455 100644
--- a/src/main/java/com/tiedup/remake/items/base/IHasResistance.java
+++ b/src/main/java/com/tiedup/remake/items/base/IHasResistance.java
@@ -33,9 +33,7 @@ import net.minecraft.world.item.ItemStack;
* @see SettingsAccessor
*/
public interface IHasResistance {
- // ========================================
// NBT KEYS
- // ========================================
/** NBT key for storing current resistance value (camelCase standard) */
String NBT_CURRENT_RESISTANCE = "currentResistance";
@@ -46,9 +44,7 @@ public interface IHasResistance {
/** NBT key for storing whether item can be struggled out of */
String NBT_CAN_STRUGGLE = "canBeStruggledOut";
- // ========================================
// ABSTRACT METHODS (must implement)
- // ========================================
/**
* Get the item name/ID for resistance config lookup.
@@ -74,9 +70,7 @@ public interface IHasResistance {
*/
void notifyStruggle(LivingEntity entity);
- // ========================================
// DEFAULT METHODS (NBT handling)
- // ========================================
/**
* Get the base resistance from config via SettingsAccessor.
diff --git a/src/main/java/com/tiedup/remake/items/base/ILockable.java b/src/main/java/com/tiedup/remake/items/base/ILockable.java
index f089d86..f1b84e5 100644
--- a/src/main/java/com/tiedup/remake/items/base/ILockable.java
+++ b/src/main/java/com/tiedup/remake/items/base/ILockable.java
@@ -234,7 +234,9 @@ public interface ILockable {
* @return Lock resistance value (default: 250, configurable)
*/
default int getLockResistance() {
- return com.tiedup.remake.core.SettingsAccessor.getPadlockResistance(null);
+ return com.tiedup.remake.core.SettingsAccessor.getPadlockResistance(
+ null
+ );
}
/**
diff --git a/src/main/java/com/tiedup/remake/items/base/ItemBind.java b/src/main/java/com/tiedup/remake/items/base/ItemBind.java
index 0df1f3a..5745ed8 100644
--- a/src/main/java/com/tiedup/remake/items/base/ItemBind.java
+++ b/src/main/java/com/tiedup/remake/items/base/ItemBind.java
@@ -1,17 +1,17 @@
package com.tiedup.remake.items.base;
+import com.tiedup.remake.core.SettingsAccessor;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.network.ModNetwork;
import com.tiedup.remake.network.action.PacketTying;
import com.tiedup.remake.state.IBondageState;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.state.PlayerBindState;
import com.tiedup.remake.tasks.TyingPlayerTask;
import com.tiedup.remake.tasks.TyingTask;
import com.tiedup.remake.util.KidnappedHelper;
-import com.tiedup.remake.core.SettingsAccessor;
import com.tiedup.remake.util.RestraintEffectUtils;
import com.tiedup.remake.util.TiedUpSounds;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.List;
import java.util.UUID;
import net.minecraft.ChatFormatting;
@@ -36,13 +36,10 @@ import org.jetbrains.annotations.Nullable;
* These items restrain a player's movement and actions when equipped.
*
*
Implements {@link IHasResistance} for the struggle/escape system.
- *
Implements {@link ILockable} for the padlock system (Phase 15).
+ *
Implements {@link ILockable} for the padlock system.
*
* Based on original ItemBind from 1.12.2
*
- * Phase 5: Movement speed reduction implemented
- * Phase 7: Resistance system implemented via IHasResistance
- * Phase 15: Added ILockable interface for padlock support
*/
public abstract class ItemBind
extends Item
@@ -68,12 +65,20 @@ public abstract class ItemBind
private static final String MODE_FULL = BIND_MODE_FULL;
private static final String MODE_ARMS = "arms";
private static final String MODE_LEGS = "legs";
- private static final String[] MODE_CYCLE = {MODE_FULL, MODE_ARMS, MODE_LEGS};
- private static final java.util.Map MODE_TRANSLATION_KEYS = java.util.Map.of(
- MODE_FULL, "tiedup.bindmode.full",
- MODE_ARMS, "tiedup.bindmode.arms",
- MODE_LEGS, "tiedup.bindmode.legs"
- );
+ private static final String[] MODE_CYCLE = {
+ MODE_FULL,
+ MODE_ARMS,
+ MODE_LEGS,
+ };
+ private static final java.util.Map MODE_TRANSLATION_KEYS =
+ java.util.Map.of(
+ MODE_FULL,
+ "tiedup.bindmode.full",
+ MODE_ARMS,
+ "tiedup.bindmode.arms",
+ MODE_LEGS,
+ "tiedup.bindmode.legs"
+ );
/**
* Get the bind mode ID string from the stack's NBT.
@@ -85,7 +90,11 @@ public abstract class ItemBind
CompoundTag tag = stack.getTag();
if (tag == null || !tag.contains(NBT_BIND_MODE)) return MODE_FULL;
String value = tag.getString(NBT_BIND_MODE);
- if (MODE_FULL.equals(value) || MODE_ARMS.equals(value) || MODE_LEGS.equals(value)) {
+ if (
+ MODE_FULL.equals(value) ||
+ MODE_ARMS.equals(value) ||
+ MODE_LEGS.equals(value)
+ ) {
return value;
}
return MODE_FULL;
@@ -135,7 +144,10 @@ public abstract class ItemBind
* @return the i18n key for the mode
*/
public static String getBindModeTranslationKey(ItemStack stack) {
- return MODE_TRANSLATION_KEYS.getOrDefault(getBindModeId(stack), "tiedup.bindmode.full");
+ return MODE_TRANSLATION_KEYS.getOrDefault(
+ getBindModeId(stack),
+ "tiedup.bindmode.full"
+ );
}
/**
@@ -221,7 +233,6 @@ public abstract class ItemBind
* Called when the bind is equipped on an entity.
* Applies movement speed reduction only if legs are bound.
*
- * Phase 14.1.5: Refactored to support IBondageState (LivingEntity + NPCs)
* Leg Binding: Speed reduction conditional on mode
* Based on original ItemBind.onEquipped() (1.12.2)
*/
@@ -247,9 +258,13 @@ public abstract class ItemBind
// still need the legacy RestraintEffectUtils speed modifier.
PoseType poseType = getPoseType();
boolean fullImmobilization =
- poseType == PoseType.WRAP || poseType == PoseType.LATEX_SACK;
+ poseType == PoseType.WRAP ||
+ poseType == PoseType.LATEX_SACK;
- RestraintEffectUtils.applyBindSpeedReduction(entity, fullImmobilization);
+ RestraintEffectUtils.applyBindSpeedReduction(
+ entity,
+ fullImmobilization
+ );
TiedUpMod.LOGGER.debug(
"[ItemBind] Applied bind (mode={}, pose={}) to NPC {} - speed reduced (full={})",
modeId,
@@ -270,9 +285,7 @@ public abstract class ItemBind
/**
* Called when the bind is unequipped from an entity.
* Restores normal movement speed for all entities.
- * Phase 7: Resets resistance for next use.
*
- * Phase 14.1.5: Refactored to support IBondageState (LivingEntity + NPCs)
* Based on original ItemBind.onUnequipped() (1.12.2)
*/
@Override
@@ -285,23 +298,23 @@ public abstract class ItemBind
RestraintEffectUtils.removeBindSpeedReduction(entity);
}
- // Phase 7: Reset resistance for next use (uses IHasResistance default method)
IHasResistance.super.resetCurrentResistance(stack);
TiedUpMod.LOGGER.debug(
"[ItemBind] Removed bind from {} - speed {} resistance reset",
entity.getName().getString(),
- entity instanceof Player ? "delegated to MovementStyleManager," : "restored,"
+ entity instanceof Player
+ ? "delegated to MovementStyleManager,"
+ : "restored,"
);
}
- // ========== Phase 6: Tying Interaction ==========
+ // ========== Tying Interaction ==========
/**
* Called when player right-clicks another entity with this bind item.
* Starts or continues a tying task to tie up the target entity.
*
- * Phase 14.2: Unified to support IBondageState (Player + NPCs)
* - Players: Uses tying task with progress bar
* - NPCs: Instant bind (no tying mini-game)
*
@@ -325,14 +338,15 @@ public abstract class ItemBind
return InteractionResult.SUCCESS;
}
- // Phase 14.2: Use KidnappedHelper to support both Players and NPCs
IBondageState targetState = KidnappedHelper.getKidnappedState(target);
if (targetState == null) {
return InteractionResult.PASS; // Target cannot be restrained
}
// Get kidnapper state (player using the item)
- IBondageState kidnapperState = KidnappedHelper.getKidnappedState(player);
+ IBondageState kidnapperState = KidnappedHelper.getKidnappedState(
+ player
+ );
if (kidnapperState == null) {
return InteractionResult.FAIL;
}
@@ -345,7 +359,11 @@ public abstract class ItemBind
// No bind in hand - can't swap, just pass
return InteractionResult.PASS;
}
- ItemStack oldBind = targetState.replaceEquipment(BodyRegionV2.ARMS, stack.copy(), false);
+ ItemStack oldBind = targetState.replaceEquipment(
+ BodyRegionV2.ARMS,
+ stack.copy(),
+ false
+ );
if (!oldBind.isEmpty()) {
stack.shrink(1);
targetState.kidnappedDropItem(oldBind);
@@ -359,7 +377,6 @@ public abstract class ItemBind
return InteractionResult.PASS;
}
- // Phase 7 FIX: Can't tie others if you're tied yourself
if (kidnapperState.isTiedUp()) {
TiedUpMod.LOGGER.debug(
"[ItemBind] {} tried to tie but is tied themselves",
@@ -368,9 +385,7 @@ public abstract class ItemBind
return InteractionResult.PASS;
}
- // ========================================
// SECURITY: Distance and line-of-sight validation (skip for self-tying)
- // ========================================
boolean isSelfTying = player.equals(target);
if (!isSelfTying) {
double maxTieDistance = 4.0; // Max distance to tie (blocks)
@@ -396,13 +411,11 @@ public abstract class ItemBind
}
}
- // Phase 14.2.6: Unified tying for both Players and NPCs
return handleTying(stack, player, target, targetState);
}
/**
* Handle tying any target entity (Player or NPC).
- * Phase 14.2.6: Unified tying system for all IBondageState entities.
*
* Uses progress-based system:
* - update() marks the tick as active
@@ -547,16 +560,17 @@ public abstract class ItemBind
/**
* Get the tying duration in seconds from GameRule.
- * Phase 6: Reads from custom GameRule "tyingPlayerTime"
*
* @param player The player (for accessing world/GameRules)
* @return Duration in seconds (default: 5)
*/
private int getTyingDuration(Player player) {
- return SettingsAccessor.getTyingPlayerTime(player.level().getGameRules());
+ return SettingsAccessor.getTyingPlayerTime(
+ player.level().getGameRules()
+ );
}
- // ========== Phase 7: Resistance System (via IHasResistance) ==========
+ // ========== Resistance System (via IHasResistance) ==========
/**
* Get the item name for GameRule lookup.
@@ -566,7 +580,7 @@ public abstract class ItemBind
*/
public abstract String getItemName();
- // ========== Phase 15: Pose System ==========
+ // ========== Pose System ==========
/**
* Get the pose type for this bind item.
diff --git a/src/main/java/com/tiedup/remake/items/base/ItemBlindfold.java b/src/main/java/com/tiedup/remake/items/base/ItemBlindfold.java
index 627f02b..f3d2371 100644
--- a/src/main/java/com/tiedup/remake/items/base/ItemBlindfold.java
+++ b/src/main/java/com/tiedup/remake/items/base/ItemBlindfold.java
@@ -1,8 +1,8 @@
package com.tiedup.remake.items.base;
import com.tiedup.remake.core.SystemMessageManager;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.util.EquipmentInteractionHelper;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.List;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
@@ -21,8 +21,6 @@ import org.jetbrains.annotations.Nullable;
*
* Based on original ItemBlindfold from 1.12.2
*
- * Phase 1: Basic implementation without rendering effects (added in Phase 5)
- * Phase 8.5: Added interactLivingEntity for equipment on tied players
*/
public abstract class ItemBlindfold
extends Item
@@ -75,7 +73,8 @@ public abstract class ItemBlindfold
target,
state -> state.isBlindfolded(),
(state, item) -> state.equip(BodyRegionV2.EYES, item),
- (state, item) -> state.replaceEquipment(BodyRegionV2.EYES, item, false),
+ (state, item) ->
+ state.replaceEquipment(BodyRegionV2.EYES, item, false),
(p, t) ->
SystemMessageManager.sendToTarget(
p,
diff --git a/src/main/java/com/tiedup/remake/items/base/ItemCollar.java b/src/main/java/com/tiedup/remake/items/base/ItemCollar.java
index 8505c67..d026488 100644
--- a/src/main/java/com/tiedup/remake/items/base/ItemCollar.java
+++ b/src/main/java/com/tiedup/remake/items/base/ItemCollar.java
@@ -1,14 +1,14 @@
package com.tiedup.remake.items.base;
+import com.tiedup.remake.core.SettingsAccessor;
import com.tiedup.remake.core.SystemMessageManager;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.network.sync.SyncManager;
import com.tiedup.remake.state.CollarRegistry;
import com.tiedup.remake.state.IBondageState;
import com.tiedup.remake.util.KidnappedHelper;
-import com.tiedup.remake.core.SettingsAccessor;
import com.tiedup.remake.util.teleport.Position;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@@ -34,10 +34,6 @@ import org.jetbrains.annotations.Nullable;
*
* Based on original ItemCollar from 1.12.2
*
- * Phase 1: Basic implementation
- * Phase 8: Add ownership system, locking, and resistance
- * Phase 14: Add GPS/shock features for special collars
- * Phase 14.1.6: Implements ILockable interface for lock safety
*
* Note: Collars have maxStackSize of 1 (unique items)
*/
@@ -63,7 +59,7 @@ public abstract class ItemCollar
private static final String NBT_BONDAGE_SERVICE = "bondageservice";
private static final String NBT_SERVICE_SENTENCE = "servicesentence";
- // NBT Keys - Blacklist/Whitelist (Phase 14.4)
+ // NBT Keys - Blacklist/Whitelist
private static final String NBT_BLACKLIST = "blacklist";
private static final String NBT_WHITELIST = "whitelist";
@@ -246,15 +242,10 @@ public abstract class ItemCollar
return false;
}
- // ========================================
- // Phase 8.5: Interactive Equipment
- // ========================================
-
/**
* Called when player right-clicks another entity with this collar.
* Allows putting collar on tied-up entities (Players and NPCs) and adds the player as owner.
*
- * Phase 14.1.5: Refactored to support IBondageState (LivingEntity + NPCs)
* Based on original ItemCollar.itemInteractionForEntity()
*
* @param stack The item stack
@@ -286,7 +277,6 @@ public abstract class ItemCollar
return InteractionResult.PASS;
}
- // Phase 8: Add player as owner if not already
ItemStack newCollar = stack.copy();
if (!isOwner(newCollar, player)) {
addOwner(newCollar, player);
@@ -297,7 +287,6 @@ public abstract class ItemCollar
targetState.equip(BodyRegionV2.NECK, newCollar);
stack.shrink(1);
- // Phase 17: Register in CollarRegistry
registerCollarInRegistry(target, newCollar, player);
// Send screen message to target
@@ -359,12 +348,15 @@ public abstract class ItemCollar
}
// Old collar not locked - replace it
- ItemStack replacedCollar = targetState.replaceEquipment(BodyRegionV2.NECK, newCollar, false);
+ ItemStack replacedCollar = targetState.replaceEquipment(
+ BodyRegionV2.NECK,
+ newCollar,
+ false
+ );
if (replacedCollar != null) {
stack.shrink(1);
targetState.kidnappedDropItem(replacedCollar);
- // Phase 17: Update CollarRegistry (unregister old, register new)
unregisterCollarFromRegistry(target);
registerCollarInRegistry(target, newCollar, player);
@@ -394,10 +386,6 @@ public abstract class ItemCollar
return InteractionResult.PASS;
}
- // ========================================
- // Phase 8: Ownership System
- // ========================================
-
/**
* Add an owner to this collar.
* Owners are stored as UUID + name pairs in NBT.
@@ -534,10 +522,6 @@ public abstract class ItemCollar
return !getOwners(stack).isEmpty();
}
- // ========================================
- // Phase 14.4: Blacklist/Whitelist System
- // ========================================
-
/**
* Add a player to this collar's blacklist.
* Blacklisted players will not be targeted when kidnapping mode is active.
@@ -726,15 +710,10 @@ public abstract class ItemCollar
return result;
}
- // ========================================
- // Phase 8: Locking System
- // ========================================
-
/**
* Check if this collar is locked.
* Locked collars cannot be removed normally.
*
- * Phase 14.1.6: Now part of ILockable interface
*
* @param stack The collar ItemStack
* @return true if locked
@@ -751,7 +730,6 @@ public abstract class ItemCollar
/**
* Set the locked state of this collar.
*
- * Phase 14.1.6: Changed return type from void to ItemStack (ILockable interface)
*
* @param stack The collar ItemStack
* @param locked true to lock, false to unlock
@@ -771,7 +749,6 @@ public abstract class ItemCollar
* Check if this collar can be locked.
* By default, all collars are lockable.
*
- * Phase 14.1.6: Added for ILockable interface
*
* @param stack The collar ItemStack
* @return true if lockable (can accept a padlock)
@@ -793,7 +770,6 @@ public abstract class ItemCollar
/**
* Set whether this collar can be locked (lockable state).
*
- * Phase 14.1.6: Added for ILockable interface
*
* @param stack The collar ItemStack
* @param state true to make lockable, false to prevent locking
@@ -812,7 +788,6 @@ public abstract class ItemCollar
* Check if the padlock should be dropped when unlocking.
* Collars have a built-in lock mechanism, so no padlock to drop.
*
- * Phase 20: Collars are inherently lockable, no external padlock needed.
*
* @return false (no padlock to drop for collars)
*/
@@ -821,7 +796,7 @@ public abstract class ItemCollar
return false;
}
- // ========== Phase 20: Key-Lock System ==========
+ // ========== Key-Lock System ==========
/**
* Get the UUID of the key that locked this collar.
@@ -859,14 +834,9 @@ public abstract class ItemCollar
}
}
- // ========================================
- // Phase 8: Resistance System (like ItemBind Phase 7)
- // ========================================
-
/**
* Get the base resistance for this collar from config.
*
- * Phase 14.1.5: Refactored to support LivingEntity
* BUG-003 fix: Now reads from SettingsAccessor (config) instead of GameRules
*
* @param entity The entity (kept for API compatibility)
@@ -880,7 +850,6 @@ public abstract class ItemCollar
* Get the current resistance of this collar.
* Returns base resistance if not yet set.
*
- * Phase 14.1.5: Refactored to support LivingEntity
*
* @param stack The collar ItemStack
* @param entity The entity (for GameRules lookup)
@@ -929,7 +898,6 @@ public abstract class ItemCollar
/**
* Reset the current resistance to base value.
*
- * Phase 14.1.5: Refactored to support LivingEntity
*
* @param stack The collar ItemStack
* @param entity The entity (for GameRules lookup)
@@ -972,9 +940,7 @@ public abstract class ItemCollar
.putBoolean(NBT_CAN_BE_STRUGGLED_OUT, canStruggle);
}
- // ========================================
// Cell ID (Assigned Cell)
- // ========================================
/**
* Get the assigned cell ID from this collar.
@@ -1025,9 +991,7 @@ public abstract class ItemCollar
return getCellId(stack) != null;
}
- // ========================================
// Kidnapping Mode
- // ========================================
/**
* Check if kidnapping mode is enabled.
@@ -1075,9 +1039,7 @@ public abstract class ItemCollar
return hasCellAssigned(stack);
}
- // ========================================
// Tie to Pole (Auto-tie slave in cell)
- // ========================================
/**
* Check if slave should be auto-tied to nearest pole in prison.
@@ -1108,9 +1070,7 @@ public abstract class ItemCollar
stack.getOrCreateTag().putBoolean(NBT_TIE_TO_POLE, enabled);
}
- // ========================================
// Warn Masters
- // ========================================
/**
* Check if owners should be warned when slave is captured.
@@ -1145,9 +1105,7 @@ public abstract class ItemCollar
stack.getOrCreateTag().putBoolean(NBT_WARN_MASTERS, enabled);
}
- // ========================================
// Bondage Service
- // ========================================
/**
* Check if bondage service is enabled on this collar.
@@ -1216,10 +1174,6 @@ public abstract class ItemCollar
}
}
- // ========================================
- // Phase 17: CollarRegistry Integration
- // ========================================
-
/**
* Register a collar in the global CollarRegistry.
* Called when a collar is put on an entity.
@@ -1310,9 +1264,7 @@ public abstract class ItemCollar
);
}
- // ========================================
// ESCAPE DETECTION: Collar Removal Alert
- // ========================================
/**
* Alert nearby kidnappers when a collar is forcibly removed.
@@ -1418,9 +1370,7 @@ public abstract class ItemCollar
}
}
- // ========================================
// LIFECYCLE HOOKS
- // ========================================
/**
* Called when a collar is unequipped from an entity.
@@ -1444,9 +1394,7 @@ public abstract class ItemCollar
onCollarRemoved(entity, true);
}
- // ========================================
// TEXTURE SUBFOLDER
- // ========================================
/**
* Get the texture subfolder for collar items.
diff --git a/src/main/java/com/tiedup/remake/items/base/ItemEarplugs.java b/src/main/java/com/tiedup/remake/items/base/ItemEarplugs.java
index caf68b5..9e7ef97 100644
--- a/src/main/java/com/tiedup/remake/items/base/ItemEarplugs.java
+++ b/src/main/java/com/tiedup/remake/items/base/ItemEarplugs.java
@@ -1,9 +1,9 @@
package com.tiedup.remake.items.base;
import com.tiedup.remake.core.SystemMessageManager;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.util.EquipmentInteractionHelper;
import com.tiedup.remake.util.TiedUpSounds;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.List;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
@@ -22,7 +22,6 @@ import org.jetbrains.annotations.Nullable;
*
* Based on original ItemEarplugs from 1.12.2
*
- * Phase 8.5: Basic implementation + equipment mechanics
* Phase future: Sound blocking effect
*/
public abstract class ItemEarplugs
@@ -67,7 +66,8 @@ public abstract class ItemEarplugs
target,
state -> state.hasEarplugs(),
(state, item) -> state.equip(BodyRegionV2.EARS, item),
- (state, item) -> state.replaceEquipment(BodyRegionV2.EARS, item, false),
+ (state, item) ->
+ state.replaceEquipment(BodyRegionV2.EARS, item, false),
(p, t) ->
SystemMessageManager.sendToTarget(
p,
diff --git a/src/main/java/com/tiedup/remake/items/base/ItemGag.java b/src/main/java/com/tiedup/remake/items/base/ItemGag.java
index b42e485..a7eee05 100644
--- a/src/main/java/com/tiedup/remake/items/base/ItemGag.java
+++ b/src/main/java/com/tiedup/remake/items/base/ItemGag.java
@@ -1,9 +1,9 @@
package com.tiedup.remake.items.base;
import com.tiedup.remake.core.SystemMessageManager;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.util.EquipmentInteractionHelper;
import com.tiedup.remake.util.GagMaterial;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.List;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
@@ -23,9 +23,6 @@ import org.jetbrains.annotations.Nullable;
*
* Based on original ItemGag from 1.12.2
*
- * Phase 1: Basic implementation without gag talk or adjustment (added later)
- * Phase 8.5: Added interactLivingEntity for equipment on tied players
- * Phase 12: Added GagTalk material system
*/
public abstract class ItemGag
extends Item
@@ -85,7 +82,8 @@ public abstract class ItemGag
target,
state -> state.isGagged(),
(state, item) -> state.equip(BodyRegionV2.MOUTH, item),
- (state, item) -> state.replaceEquipment(BodyRegionV2.MOUTH, item, false),
+ (state, item) ->
+ state.replaceEquipment(BodyRegionV2.MOUTH, item, false),
SystemMessageManager::sendGagged,
"ItemGag"
);
diff --git a/src/main/java/com/tiedup/remake/items/base/ItemMittens.java b/src/main/java/com/tiedup/remake/items/base/ItemMittens.java
index 995f579..7616782 100644
--- a/src/main/java/com/tiedup/remake/items/base/ItemMittens.java
+++ b/src/main/java/com/tiedup/remake/items/base/ItemMittens.java
@@ -1,8 +1,8 @@
package com.tiedup.remake.items.base;
import com.tiedup.remake.core.SystemMessageManager;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.util.EquipmentInteractionHelper;
+import com.tiedup.remake.v2.BodyRegionV2;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.LivingEntity;
@@ -14,7 +14,6 @@ import net.minecraft.world.item.ItemStack;
* Base class for mittens items.
* These items block hand interactions (mining, placing, using items) when equipped.
*
- * Phase 14.4: Mittens system
*
* Restrictions when wearing mittens:
* - Cannot mine/break blocks
@@ -57,7 +56,8 @@ public abstract class ItemMittens
target,
state -> state.hasMittens(),
(state, item) -> state.equip(BodyRegionV2.HANDS, item),
- (state, item) -> state.replaceEquipment(BodyRegionV2.HANDS, item, false),
+ (state, item) ->
+ state.replaceEquipment(BodyRegionV2.HANDS, item, false),
(p, t) ->
SystemMessageManager.sendToTarget(
p,
diff --git a/src/main/java/com/tiedup/remake/items/base/ItemOwnerTarget.java b/src/main/java/com/tiedup/remake/items/base/ItemOwnerTarget.java
index 052650c..2c4be8e 100644
--- a/src/main/java/com/tiedup/remake/items/base/ItemOwnerTarget.java
+++ b/src/main/java/com/tiedup/remake/items/base/ItemOwnerTarget.java
@@ -144,24 +144,32 @@ public abstract class ItemOwnerTarget extends Item {
/**
* Check if a player instance matches the item's current target.
*/
- // =====================================================
// TOOLTIP HELPERS
- // =====================================================
/**
* Appends the "Owner: ..." or "Unclaimed (...)" tooltip line.
* @param unclaimedHint text shown when unclaimed (e.g. "Right-click a player")
*/
- protected void appendOwnerTooltip(ItemStack stack, List tooltip, String unclaimedHint) {
+ protected void appendOwnerTooltip(
+ ItemStack stack,
+ List tooltip,
+ String unclaimedHint
+ ) {
if (hasOwner(stack)) {
tooltip.add(
Component.literal("Owner: ")
.withStyle(ChatFormatting.GOLD)
- .append(Component.literal(getOwnerName(stack)).withStyle(ChatFormatting.WHITE))
+ .append(
+ Component.literal(getOwnerName(stack)).withStyle(
+ ChatFormatting.WHITE
+ )
+ )
);
} else {
tooltip.add(
- Component.literal("Unclaimed (" + unclaimedHint + ")").withStyle(ChatFormatting.GRAY)
+ Component.literal(
+ "Unclaimed (" + unclaimedHint + ")"
+ ).withStyle(ChatFormatting.GRAY)
);
}
}
@@ -171,16 +179,30 @@ public abstract class ItemOwnerTarget extends Item {
* the collar nickname if available.
* @return display name, possibly "Nickname (RealName)" if collar has a nickname
*/
- protected String resolveTargetDisplayName(ItemStack stack, @Nullable Level level) {
+ protected String resolveTargetDisplayName(
+ ItemStack stack,
+ @Nullable Level level
+ ) {
String displayName = getTargetName(stack);
if (level != null && hasTarget(stack)) {
Player target = level.getPlayerByUUID(getTargetId(stack));
if (target != null) {
- IBondageState targetState = KidnappedHelper.getKidnappedState(target);
+ IBondageState targetState = KidnappedHelper.getKidnappedState(
+ target
+ );
if (targetState != null && targetState.hasCollar()) {
- ItemStack collar = targetState.getEquipment(BodyRegionV2.NECK);
- if (collar.getItem() instanceof ItemCollar collarItem && collarItem.hasNickname(collar)) {
- displayName = collarItem.getNickname(collar) + " (" + displayName + ")";
+ ItemStack collar = targetState.getEquipment(
+ BodyRegionV2.NECK
+ );
+ if (
+ collar.getItem() instanceof ItemCollar collarItem &&
+ collarItem.hasNickname(collar)
+ ) {
+ displayName =
+ collarItem.getNickname(collar) +
+ " (" +
+ displayName +
+ ")";
}
}
}
diff --git a/src/main/java/com/tiedup/remake/items/base/MittensVariant.java b/src/main/java/com/tiedup/remake/items/base/MittensVariant.java
index 1918265..686d286 100644
--- a/src/main/java/com/tiedup/remake/items/base/MittensVariant.java
+++ b/src/main/java/com/tiedup/remake/items/base/MittensVariant.java
@@ -4,7 +4,7 @@ package com.tiedup.remake.items.base;
* Enum defining all mittens variants.
* Used by GenericMittens to create mittens items via factory pattern.
*
- * Phase 14.4: Mittens system - blocks hand interactions when equipped.
+ *
Mittens system - blocks hand interactions when equipped.
*
*
Issue #12 fix: Added textureSubfolder to eliminate string checks in renderers.
*/
diff --git a/src/main/java/com/tiedup/remake/items/base/PoseType.java b/src/main/java/com/tiedup/remake/items/base/PoseType.java
index fa76ad3..fb9003a 100644
--- a/src/main/java/com/tiedup/remake/items/base/PoseType.java
+++ b/src/main/java/com/tiedup/remake/items/base/PoseType.java
@@ -5,7 +5,6 @@ package com.tiedup.remake.items.base;
* Each pose type has a corresponding animation file for players
* and pose method in BondagePoseHelper for NPCs.
*
- * Phase 15: Pose system for different bind types
*/
public enum PoseType {
/** Standard tied pose - arms behind back, legs frozen */
diff --git a/src/main/java/com/tiedup/remake/items/clothes/GenericClothes.java b/src/main/java/com/tiedup/remake/items/clothes/GenericClothes.java
index 8410c02..706083a 100644
--- a/src/main/java/com/tiedup/remake/items/clothes/GenericClothes.java
+++ b/src/main/java/com/tiedup/remake/items/clothes/GenericClothes.java
@@ -138,7 +138,9 @@ public class GenericClothes extends Item implements ILockable, IV2BondageItem {
else {
ItemStack clothesCopy = stack.copyWithCount(1);
ItemStack oldClothes = targetState.replaceEquipment(
- BodyRegionV2.TORSO, clothesCopy, false
+ BodyRegionV2.TORSO,
+ clothesCopy,
+ false
);
if (!oldClothes.isEmpty()) {
stack.shrink(1);
diff --git a/src/main/java/com/tiedup/remake/labor/LaborTask.java b/src/main/java/com/tiedup/remake/labor/LaborTask.java
index e78d5b4..3e43547 100644
--- a/src/main/java/com/tiedup/remake/labor/LaborTask.java
+++ b/src/main/java/com/tiedup/remake/labor/LaborTask.java
@@ -3,7 +3,6 @@ package com.tiedup.remake.labor;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
@@ -12,6 +11,7 @@ import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraftforge.registries.ForgeRegistries;
+import org.jetbrains.annotations.Nullable;
/**
* Unified "Bring X Items" labor task.
diff --git a/src/main/java/com/tiedup/remake/labor/LaborTaskGenerator.java b/src/main/java/com/tiedup/remake/labor/LaborTaskGenerator.java
index 7d8f16c..c9f864f 100644
--- a/src/main/java/com/tiedup/remake/labor/LaborTaskGenerator.java
+++ b/src/main/java/com/tiedup/remake/labor/LaborTaskGenerator.java
@@ -2,12 +2,12 @@ package com.tiedup.remake.labor;
import java.util.List;
import java.util.Map;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
+import org.jetbrains.annotations.Nullable;
/**
* Generator for random labor tasks.
diff --git a/src/main/java/com/tiedup/remake/minigame/LockpickMiniGameState.java b/src/main/java/com/tiedup/remake/minigame/LockpickMiniGameState.java
index 630eb06..782cac7 100644
--- a/src/main/java/com/tiedup/remake/minigame/LockpickMiniGameState.java
+++ b/src/main/java/com/tiedup/remake/minigame/LockpickMiniGameState.java
@@ -4,7 +4,6 @@ import java.util.Random;
import java.util.UUID;
/**
- * Phase 2: Server-side state for a Lockpick mini-game session.
*
* Tracks:
* - Session UUID (anti-cheat)
diff --git a/src/main/java/com/tiedup/remake/minigame/MiniGameSessionManager.java b/src/main/java/com/tiedup/remake/minigame/MiniGameSessionManager.java
index fc8a4f7..763085c 100644
--- a/src/main/java/com/tiedup/remake/minigame/MiniGameSessionManager.java
+++ b/src/main/java/com/tiedup/remake/minigame/MiniGameSessionManager.java
@@ -41,7 +41,9 @@ public class MiniGameSessionManager {
* Get count of active sessions across both sub-managers (for debugging).
*/
public int getActiveSessionCount() {
- return LockpickSessionManager.getInstance().getActiveSessionCount()
- + StruggleSessionManager.getInstance().getActiveSessionCount();
+ return (
+ LockpickSessionManager.getInstance().getActiveSessionCount() +
+ StruggleSessionManager.getInstance().getActiveSessionCount()
+ );
}
}
diff --git a/src/main/java/com/tiedup/remake/minigame/StruggleSessionManager.java b/src/main/java/com/tiedup/remake/minigame/StruggleSessionManager.java
index 5439932..c628c41 100644
--- a/src/main/java/com/tiedup/remake/minigame/StruggleSessionManager.java
+++ b/src/main/java/com/tiedup/remake/minigame/StruggleSessionManager.java
@@ -4,14 +4,14 @@ import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.items.ItemShockCollar;
import com.tiedup.remake.items.base.ItemBind;
import com.tiedup.remake.items.base.ItemCollar;
-import com.tiedup.remake.v2.BodyRegionV2;
-import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
import com.tiedup.remake.minigame.ContinuousStruggleMiniGameState.TickResult;
import com.tiedup.remake.minigame.ContinuousStruggleMiniGameState.UpdateType;
import com.tiedup.remake.network.ModNetwork;
import com.tiedup.remake.network.minigame.PacketContinuousStruggleState;
import com.tiedup.remake.network.sync.SyncManager;
import com.tiedup.remake.state.PlayerBindState;
+import com.tiedup.remake.v2.BodyRegionV2;
+import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -52,13 +52,13 @@ public class StruggleSessionManager {
* Index: 0=ARMS, 1=MOUTH, 2=EYES, 3=EARS, 4=NECK, 5=TORSO, 6=HANDS.
*/
private static final BodyRegionV2[] SLOT_TO_REGION = {
- BodyRegionV2.ARMS, // 0 = BIND
- BodyRegionV2.MOUTH, // 1 = GAG
- BodyRegionV2.EYES, // 2 = BLINDFOLD
- BodyRegionV2.EARS, // 3 = EARPLUGS
- BodyRegionV2.NECK, // 4 = COLLAR
- BodyRegionV2.TORSO, // 5 = CLOTHES
- BodyRegionV2.HANDS, // 6 = MITTENS
+ BodyRegionV2.ARMS, // 0 = BIND
+ BodyRegionV2.MOUTH, // 1 = GAG
+ BodyRegionV2.EYES, // 2 = BLINDFOLD
+ BodyRegionV2.EARS, // 3 = EARPLUGS
+ BodyRegionV2.NECK, // 4 = COLLAR
+ BodyRegionV2.TORSO, // 5 = CLOTHES
+ BodyRegionV2.HANDS, // 6 = MITTENS
};
private StruggleSessionManager() {}
@@ -277,7 +277,9 @@ public class StruggleSessionManager {
UUID playerId = player.getUUID();
// Reject if an active session already exists
- ContinuousStruggleMiniGameState existing = continuousSessions.get(playerId);
+ ContinuousStruggleMiniGameState existing = continuousSessions.get(
+ playerId
+ );
if (existing != null) {
TiedUpMod.LOGGER.debug(
"[StruggleSessionManager] Rejected furniture session: active session already exists for {}",
@@ -319,13 +321,30 @@ public class StruggleSessionManager {
// Play struggle loop sound from furniture definition (plays once on start;
// true looping sound would require client-side sound management -- future scope)
- net.minecraft.world.entity.Entity furnitureEntity = player.level().getEntity(furnitureEntityId);
- if (furnitureEntity instanceof com.tiedup.remake.v2.furniture.EntityFurniture furniture) {
- com.tiedup.remake.v2.furniture.FurnitureDefinition def = furniture.getDefinition();
+ net.minecraft.world.entity.Entity furnitureEntity = player
+ .level()
+ .getEntity(furnitureEntityId);
+ if (
+ furnitureEntity instanceof
+ com.tiedup.remake.v2.furniture.EntityFurniture furniture
+ ) {
+ com.tiedup.remake.v2.furniture.FurnitureDefinition def =
+ furniture.getDefinition();
if (def != null && def.feedback().struggleLoopSound() != null) {
- player.level().playSound(null, player.getX(), player.getY(), player.getZ(),
- net.minecraft.sounds.SoundEvent.createVariableRangeEvent(def.feedback().struggleLoopSound()),
- SoundSource.PLAYERS, 0.6f, 1.0f);
+ player
+ .level()
+ .playSound(
+ null,
+ player.getX(),
+ player.getY(),
+ player.getZ(),
+ net.minecraft.sounds.SoundEvent.createVariableRangeEvent(
+ def.feedback().struggleLoopSound()
+ ),
+ SoundSource.PLAYERS,
+ 0.6f,
+ 1.0f
+ );
}
}
@@ -481,7 +500,9 @@ public class StruggleSessionManager {
// Check kidnapper notification
if (session.shouldNotifyKidnappers(currentTick)) {
- GuardNotificationHelper.notifyNearbyKidnappersOfStruggle(player);
+ GuardNotificationHelper.notifyNearbyKidnappersOfStruggle(
+ player
+ );
}
// Play struggle sound periodically
@@ -516,7 +537,10 @@ public class StruggleSessionManager {
* Check if shock collar check is applicable for this player.
*/
private boolean shouldCheckShockCollar(ServerPlayer player) {
- ItemStack collar = V2EquipmentHelper.getInRegion(player, BodyRegionV2.NECK);
+ ItemStack collar = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.NECK
+ );
if (collar.isEmpty()) return false;
// Only shock collars can trigger during struggle
@@ -562,8 +586,10 @@ public class StruggleSessionManager {
com.tiedup.remake.v2.BodyRegionV2 region =
session.getTargetRegion();
ItemStack stack =
- com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper
- .getInRegion(player, region);
+ com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper.getInRegion(
+ player,
+ region
+ );
if (stack.isEmpty()) return;
if (
@@ -584,10 +610,17 @@ public class StruggleSessionManager {
if (session.isAccessoryStruggle()) {
// Handle accessory resistance update (V1 path -- slot index is legacy ordinal)
Integer slotIndex = session.getTargetSlot();
- if (slotIndex == null || slotIndex < 0 || slotIndex >= SLOT_TO_REGION.length) return;
+ if (
+ slotIndex == null ||
+ slotIndex < 0 ||
+ slotIndex >= SLOT_TO_REGION.length
+ ) return;
BodyRegionV2 region = SLOT_TO_REGION[slotIndex];
- ItemStack accessoryStack = V2EquipmentHelper.getInRegion(player, region);
+ ItemStack accessoryStack = V2EquipmentHelper.getInRegion(
+ player,
+ region
+ );
if (accessoryStack.isEmpty()) return;
if (
@@ -606,7 +639,10 @@ public class StruggleSessionManager {
}
// Update bind resistance
- ItemStack bindStack = V2EquipmentHelper.getInRegion(player, BodyRegionV2.ARMS);
+ ItemStack bindStack = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.ARMS
+ );
if (
bindStack.isEmpty() ||
!(bindStack.getItem() instanceof ItemBind bind)
@@ -648,15 +684,23 @@ public class StruggleSessionManager {
session.getTargetRegion();
// BUG-001 fix: break lock before unequip (consistent with V1 accessory escape)
ItemStack stackInRegion =
- com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper
- .getInRegion(player, region);
- if (!stackInRegion.isEmpty()
- && stackInRegion.getItem() instanceof com.tiedup.remake.items.base.ILockable lockable) {
+ com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper.getInRegion(
+ player,
+ region
+ );
+ if (
+ !stackInRegion.isEmpty() &&
+ stackInRegion.getItem() instanceof
+ com.tiedup.remake.items.base.ILockable lockable
+ ) {
lockable.breakLock(stackInRegion);
}
ItemStack removed =
- com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper
- .unequipFromRegion(player, region, true);
+ com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper.unequipFromRegion(
+ player,
+ region,
+ true
+ );
if (!removed.isEmpty()) {
if (!player.getInventory().add(removed)) {
player.drop(removed, false);
@@ -678,9 +722,16 @@ public class StruggleSessionManager {
} else {
// Handle accessory escape (V1 path -- slot index is legacy ordinal)
Integer slotIndex = session.getTargetSlot();
- if (slotIndex != null && slotIndex >= 0 && slotIndex < SLOT_TO_REGION.length) {
+ if (
+ slotIndex != null &&
+ slotIndex >= 0 &&
+ slotIndex < SLOT_TO_REGION.length
+ ) {
BodyRegionV2 region = SLOT_TO_REGION[slotIndex];
- ItemStack accessoryStack = V2EquipmentHelper.getInRegion(player, region);
+ ItemStack accessoryStack = V2EquipmentHelper.getInRegion(
+ player,
+ region
+ );
if (!accessoryStack.isEmpty()) {
// Break the lock on the accessory
if (
@@ -691,7 +742,9 @@ public class StruggleSessionManager {
}
// Remove the accessory from the region and drop it
ItemStack removed = V2EquipmentHelper.unequipFromRegion(
- player, region, true
+ player,
+ region,
+ true
);
if (!removed.isEmpty()) {
// Drop the item at player's feet
@@ -716,7 +769,9 @@ public class StruggleSessionManager {
int furnitureEntityId = session.getFurnitureEntityId();
String seatId = session.getFurnitureSeatId();
- net.minecraft.world.entity.Entity entity = player.level().getEntity(furnitureEntityId);
+ net.minecraft.world.entity.Entity entity = player
+ .level()
+ .getEntity(furnitureEntityId);
if (entity == null || entity.isRemoved()) {
TiedUpMod.LOGGER.warn(
"[StruggleSessionManager] Furniture entity {} no longer exists for escape",
@@ -727,7 +782,10 @@ public class StruggleSessionManager {
return;
}
- if (!(entity instanceof com.tiedup.remake.v2.furniture.ISeatProvider provider)) {
+ if (
+ !(entity instanceof
+ com.tiedup.remake.v2.furniture.ISeatProvider provider)
+ ) {
TiedUpMod.LOGGER.warn(
"[StruggleSessionManager] Entity {} is not an ISeatProvider",
furnitureEntityId
@@ -740,38 +798,57 @@ public class StruggleSessionManager {
provider.setSeatLocked(seatId, false);
// Clear persistent data tag (reconnection system)
- net.minecraft.nbt.CompoundTag persistentData = player.getPersistentData();
+ net.minecraft.nbt.CompoundTag persistentData =
+ player.getPersistentData();
persistentData.remove("tiedup_locked_furniture");
// Dismount the player
player.stopRiding();
// Play escape sound: prefer furniture-specific sound, fall back to CHAIN_BREAK
- net.minecraft.sounds.SoundEvent escapeSound = net.minecraft.sounds.SoundEvents.CHAIN_BREAK;
- if (entity instanceof com.tiedup.remake.v2.furniture.EntityFurniture furniture) {
- com.tiedup.remake.v2.furniture.FurnitureDefinition def = furniture.getDefinition();
+ net.minecraft.sounds.SoundEvent escapeSound =
+ net.minecraft.sounds.SoundEvents.CHAIN_BREAK;
+ if (
+ entity instanceof
+ com.tiedup.remake.v2.furniture.EntityFurniture furniture
+ ) {
+ com.tiedup.remake.v2.furniture.FurnitureDefinition def =
+ furniture.getDefinition();
if (def != null && def.feedback().escapeSound() != null) {
- escapeSound = net.minecraft.sounds.SoundEvent.createVariableRangeEvent(
- def.feedback().escapeSound()
- );
+ escapeSound =
+ net.minecraft.sounds.SoundEvent.createVariableRangeEvent(
+ def.feedback().escapeSound()
+ );
}
}
- player.serverLevel().playSound(
- null,
- player.getX(), player.getY(), player.getZ(),
- escapeSound,
- net.minecraft.sounds.SoundSource.PLAYERS,
- 1.0f, 1.0f
- );
+ player
+ .serverLevel()
+ .playSound(
+ null,
+ player.getX(),
+ player.getY(),
+ player.getZ(),
+ escapeSound,
+ net.minecraft.sounds.SoundSource.PLAYERS,
+ 1.0f,
+ 1.0f
+ );
// Broadcast updated furniture state to all tracking clients
- if (entity instanceof com.tiedup.remake.v2.furniture.EntityFurniture furniture) {
- com.tiedup.remake.v2.furniture.network.PacketSyncFurnitureState.sendToTracking(furniture);
+ if (
+ entity instanceof
+ com.tiedup.remake.v2.furniture.EntityFurniture furniture
+ ) {
+ com.tiedup.remake.v2.furniture.network.PacketSyncFurnitureState.sendToTracking(
+ furniture
+ );
}
TiedUpMod.LOGGER.info(
"[StruggleSessionManager] {} escaped furniture {} seat '{}'",
- player.getName().getString(), furnitureEntityId, seatId
+ player.getName().getString(),
+ furnitureEntityId,
+ seatId
);
}
diff --git a/src/main/java/com/tiedup/remake/mixin/MixinLivingEntityBodyRot.java b/src/main/java/com/tiedup/remake/mixin/MixinLivingEntityBodyRot.java
index bb419e6..5eca9ff 100644
--- a/src/main/java/com/tiedup/remake/mixin/MixinLivingEntityBodyRot.java
+++ b/src/main/java/com/tiedup/remake/mixin/MixinLivingEntityBodyRot.java
@@ -1,8 +1,8 @@
package com.tiedup.remake.mixin;
import com.tiedup.remake.state.HumanChairHelper;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.state.PlayerBindState;
+import com.tiedup.remake.v2.BodyRegionV2;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
diff --git a/src/main/java/com/tiedup/remake/mixin/MixinMCAMessenger.java b/src/main/java/com/tiedup/remake/mixin/MixinMCAMessenger.java
index 79ff7c7..318905c 100644
--- a/src/main/java/com/tiedup/remake/mixin/MixinMCAMessenger.java
+++ b/src/main/java/com/tiedup/remake/mixin/MixinMCAMessenger.java
@@ -1,10 +1,10 @@
package com.tiedup.remake.mixin;
import com.tiedup.remake.compat.mca.MCACompat;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.dialogue.GagTalkManager;
import com.tiedup.remake.state.IBondageState;
+import com.tiedup.remake.v2.BodyRegionV2;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.entity.LivingEntity;
diff --git a/src/main/java/com/tiedup/remake/mixin/MixinMCAOpenAIChatAI.java b/src/main/java/com/tiedup/remake/mixin/MixinMCAOpenAIChatAI.java
index 16c5eb3..c705f71 100644
--- a/src/main/java/com/tiedup/remake/mixin/MixinMCAOpenAIChatAI.java
+++ b/src/main/java/com/tiedup/remake/mixin/MixinMCAOpenAIChatAI.java
@@ -1,11 +1,11 @@
package com.tiedup.remake.mixin;
import com.tiedup.remake.compat.mca.MCACompat;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.compat.mca.ai.chatai.TiedUpModule;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.dialogue.GagTalkManager;
import com.tiedup.remake.state.IBondageState;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.List;
import java.util.Optional;
import net.minecraft.world.entity.LivingEntity;
diff --git a/src/main/java/com/tiedup/remake/mixin/MixinMCAVillagerInteraction.java b/src/main/java/com/tiedup/remake/mixin/MixinMCAVillagerInteraction.java
index cc76847..b25ef92 100644
--- a/src/main/java/com/tiedup/remake/mixin/MixinMCAVillagerInteraction.java
+++ b/src/main/java/com/tiedup/remake/mixin/MixinMCAVillagerInteraction.java
@@ -1,13 +1,13 @@
package com.tiedup.remake.mixin;
import com.tiedup.remake.compat.mca.MCACompat;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.items.ItemKey;
import com.tiedup.remake.items.ItemMasterKey;
-import com.tiedup.remake.v2.bondage.IV2BondageItem;
import com.tiedup.remake.items.base.ItemCollar;
import com.tiedup.remake.state.IBondageState;
+import com.tiedup.remake.v2.BodyRegionV2;
+import com.tiedup.remake.v2.bondage.IV2BondageItem;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.Mob;
diff --git a/src/main/java/com/tiedup/remake/mixin/MixinMCAVillagerLeash.java b/src/main/java/com/tiedup/remake/mixin/MixinMCAVillagerLeash.java
index 79d3b7a..a6d11d6 100644
--- a/src/main/java/com/tiedup/remake/mixin/MixinMCAVillagerLeash.java
+++ b/src/main/java/com/tiedup/remake/mixin/MixinMCAVillagerLeash.java
@@ -1,9 +1,9 @@
package com.tiedup.remake.mixin;
import com.tiedup.remake.compat.mca.MCACompat;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.items.base.ItemCollar;
import com.tiedup.remake.state.IBondageState;
+import com.tiedup.remake.v2.BodyRegionV2;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.player.Player;
diff --git a/src/main/java/com/tiedup/remake/mixin/client/MixinCamera.java b/src/main/java/com/tiedup/remake/mixin/client/MixinCamera.java
index ee030c2..c7a94a9 100644
--- a/src/main/java/com/tiedup/remake/mixin/client/MixinCamera.java
+++ b/src/main/java/com/tiedup/remake/mixin/client/MixinCamera.java
@@ -1,10 +1,10 @@
package com.tiedup.remake.mixin.client;
import com.tiedup.remake.items.base.ItemBind;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.items.base.PoseType;
import com.tiedup.remake.state.HumanChairHelper;
import com.tiedup.remake.state.PlayerBindState;
+import com.tiedup.remake.v2.BodyRegionV2;
import net.minecraft.client.Camera;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
diff --git a/src/main/java/com/tiedup/remake/mixin/client/MixinPlayerModel.java b/src/main/java/com/tiedup/remake/mixin/client/MixinPlayerModel.java
index 9c6e79c..9e3153a 100644
--- a/src/main/java/com/tiedup/remake/mixin/client/MixinPlayerModel.java
+++ b/src/main/java/com/tiedup/remake/mixin/client/MixinPlayerModel.java
@@ -1,11 +1,11 @@
package com.tiedup.remake.mixin.client;
import com.tiedup.remake.client.animation.render.DogPoseRenderHandler;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.client.animation.util.DogPoseHelper;
import com.tiedup.remake.items.base.ItemBind;
import com.tiedup.remake.items.base.PoseType;
import com.tiedup.remake.state.PlayerBindState;
+import com.tiedup.remake.v2.BodyRegionV2;
import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.player.AbstractClientPlayer;
import net.minecraft.world.entity.LivingEntity;
diff --git a/src/main/java/com/tiedup/remake/mixin/client/MixinVillagerEntityBaseModelMCA.java b/src/main/java/com/tiedup/remake/mixin/client/MixinVillagerEntityBaseModelMCA.java
index 8842535..044abe1 100644
--- a/src/main/java/com/tiedup/remake/mixin/client/MixinVillagerEntityBaseModelMCA.java
+++ b/src/main/java/com/tiedup/remake/mixin/client/MixinVillagerEntityBaseModelMCA.java
@@ -6,9 +6,9 @@ import com.tiedup.remake.client.animation.util.AnimationIdBuilder;
import com.tiedup.remake.compat.mca.MCACompat;
import com.tiedup.remake.items.base.ItemBind;
import com.tiedup.remake.items.base.PoseType;
+import com.tiedup.remake.state.IBondageState;
import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
-import com.tiedup.remake.state.IBondageState;
import dev.kosmx.playerAnim.impl.IAnimatedPlayer;
import dev.kosmx.playerAnim.impl.animation.AnimationApplier;
import java.util.UUID;
@@ -85,8 +85,14 @@ public class MixinVillagerEntityBaseModelMCA {
}
// Derive bound state from V2 regions, fallback to V1 bind mode NBT
- boolean armsBound = V2EquipmentHelper.isRegionOccupied(villager, BodyRegionV2.ARMS);
- boolean legsBound = V2EquipmentHelper.isRegionOccupied(villager, BodyRegionV2.LEGS);
+ boolean armsBound = V2EquipmentHelper.isRegionOccupied(
+ villager,
+ BodyRegionV2.ARMS
+ );
+ boolean legsBound = V2EquipmentHelper.isRegionOccupied(
+ villager,
+ BodyRegionV2.LEGS
+ );
if (!armsBound && !legsBound && bind.getItem() instanceof ItemBind) {
armsBound = ItemBind.hasArmsBound(bind);
@@ -186,7 +192,12 @@ public class MixinVillagerEntityBaseModelMCA {
}
} else {
// Fallback: entity doesn't support PlayerAnimator, use static poses
- StaticPoseApplier.applyStaticPose(model, poseType, armsBound, legsBound);
+ StaticPoseApplier.applyStaticPose(
+ model,
+ poseType,
+ armsBound,
+ legsBound
+ );
}
// Hide arms for WRAP/LATEX_SACK poses (like DamselModel does)
diff --git a/src/main/java/com/tiedup/remake/mixin/client/MixinVillagerEntityMCAAnimated.java b/src/main/java/com/tiedup/remake/mixin/client/MixinVillagerEntityMCAAnimated.java
index c9f92ba..ab78c6e 100644
--- a/src/main/java/com/tiedup/remake/mixin/client/MixinVillagerEntityMCAAnimated.java
+++ b/src/main/java/com/tiedup/remake/mixin/client/MixinVillagerEntityMCAAnimated.java
@@ -86,9 +86,7 @@ public abstract class MixinVillagerEntityMCAAnimated
}
}
- // ========================================
// IAnimatedPlayer Implementation
- // ========================================
@Override
public AnimationStack getAnimationStack() {
diff --git a/src/main/java/com/tiedup/remake/network/ModNetwork.java b/src/main/java/com/tiedup/remake/network/ModNetwork.java
index 4a38bc8..f6fddfa 100644
--- a/src/main/java/com/tiedup/remake/network/ModNetwork.java
+++ b/src/main/java/com/tiedup/remake/network/ModNetwork.java
@@ -111,111 +111,486 @@ public class ModNetwork {
*/
public static void register() {
// Sync (S2C)
- reg(PacketSyncBindState.class, PacketSyncBindState::encode, PacketSyncBindState::decode, PacketSyncBindState::handle);
- reg(PacketSyncStruggleState.class, PacketSyncStruggleState::encode, PacketSyncStruggleState::decode, PacketSyncStruggleState::handle);
- reg(PacketSyncEnslavement.class, PacketSyncEnslavement::encode, PacketSyncEnslavement::decode, PacketSyncEnslavement::handle);
- reg(PacketSyncLeashProxy.class, PacketSyncLeashProxy::encode, PacketSyncLeashProxy::decode, PacketSyncLeashProxy::handle);
- reg(PacketSyncCollarRegistry.class, PacketSyncCollarRegistry::encode, PacketSyncCollarRegistry::decode, PacketSyncCollarRegistry::handle);
- reg(PacketSyncClothesConfig.class, PacketSyncClothesConfig::encode, PacketSyncClothesConfig::decode, PacketSyncClothesConfig::handle);
- reg(PacketSyncPetBedState.class, PacketSyncPetBedState::encode, PacketSyncPetBedState::decode, PacketSyncPetBedState::handle);
- reg(PacketSyncCellData.class, PacketSyncCellData::encode, PacketSyncCellData::decode, PacketSyncCellData::handle);
- reg(PacketSyncLaborProgress.class, PacketSyncLaborProgress::encode, PacketSyncLaborProgress::decode, PacketSyncLaborProgress::handle);
- reg(PacketSyncArmorStandBondage.class, PacketSyncArmorStandBondage::encode, PacketSyncArmorStandBondage::decode, PacketSyncArmorStandBondage::handle);
- reg(PacketPlayTestAnimation.class, PacketPlayTestAnimation::encode, PacketPlayTestAnimation::decode, PacketPlayTestAnimation::handle);
- reg(PacketSyncMCABondage.class, PacketSyncMCABondage::encode, PacketSyncMCABondage::decode, PacketSyncMCABondage::handle);
+ reg(
+ PacketSyncBindState.class,
+ PacketSyncBindState::encode,
+ PacketSyncBindState::decode,
+ PacketSyncBindState::handle
+ );
+ reg(
+ PacketSyncStruggleState.class,
+ PacketSyncStruggleState::encode,
+ PacketSyncStruggleState::decode,
+ PacketSyncStruggleState::handle
+ );
+ reg(
+ PacketSyncEnslavement.class,
+ PacketSyncEnslavement::encode,
+ PacketSyncEnslavement::decode,
+ PacketSyncEnslavement::handle
+ );
+ reg(
+ PacketSyncLeashProxy.class,
+ PacketSyncLeashProxy::encode,
+ PacketSyncLeashProxy::decode,
+ PacketSyncLeashProxy::handle
+ );
+ reg(
+ PacketSyncCollarRegistry.class,
+ PacketSyncCollarRegistry::encode,
+ PacketSyncCollarRegistry::decode,
+ PacketSyncCollarRegistry::handle
+ );
+ reg(
+ PacketSyncClothesConfig.class,
+ PacketSyncClothesConfig::encode,
+ PacketSyncClothesConfig::decode,
+ PacketSyncClothesConfig::handle
+ );
+ reg(
+ PacketSyncPetBedState.class,
+ PacketSyncPetBedState::encode,
+ PacketSyncPetBedState::decode,
+ PacketSyncPetBedState::handle
+ );
+ reg(
+ PacketSyncCellData.class,
+ PacketSyncCellData::encode,
+ PacketSyncCellData::decode,
+ PacketSyncCellData::handle
+ );
+ reg(
+ PacketSyncLaborProgress.class,
+ PacketSyncLaborProgress::encode,
+ PacketSyncLaborProgress::decode,
+ PacketSyncLaborProgress::handle
+ );
+ reg(
+ PacketSyncArmorStandBondage.class,
+ PacketSyncArmorStandBondage::encode,
+ PacketSyncArmorStandBondage::decode,
+ PacketSyncArmorStandBondage::handle
+ );
+ reg(
+ PacketPlayTestAnimation.class,
+ PacketPlayTestAnimation::encode,
+ PacketPlayTestAnimation::decode,
+ PacketPlayTestAnimation::handle
+ );
+ reg(
+ PacketSyncMCABondage.class,
+ PacketSyncMCABondage::encode,
+ PacketSyncMCABondage::decode,
+ PacketSyncMCABondage::handle
+ );
// Actions (bidirectional)
- reg(PacketTying.class, PacketTying::encode, PacketTying::decode, PacketTying::handle);
- reg(PacketUntying.class, PacketUntying::encode, PacketUntying::decode, PacketUntying::handle);
- reg(PacketForceFeeding.class, PacketForceFeeding::encode, PacketForceFeeding::decode, PacketForceFeeding::handle);
- reg(PacketStruggle.class, PacketStruggle::encode, PacketStruggle::decode, PacketStruggle::handle);
- reg(PacketTighten.class, PacketTighten::encode, PacketTighten::decode, PacketTighten::handle);
- reg(PacketSetKnifeCutTarget.class, PacketSetKnifeCutTarget::encode, PacketSetKnifeCutTarget::decode, PacketSetKnifeCutTarget::handle);
- reg(PacketSelfBondage.class, PacketSelfBondage::encode, PacketSelfBondage::decode, PacketSelfBondage::handle);
- reg(PacketForceSeatModifier.class, PacketForceSeatModifier::encode, PacketForceSeatModifier::decode, PacketForceSeatModifier::handle);
+ reg(
+ PacketTying.class,
+ PacketTying::encode,
+ PacketTying::decode,
+ PacketTying::handle
+ );
+ reg(
+ PacketUntying.class,
+ PacketUntying::encode,
+ PacketUntying::decode,
+ PacketUntying::handle
+ );
+ reg(
+ PacketForceFeeding.class,
+ PacketForceFeeding::encode,
+ PacketForceFeeding::decode,
+ PacketForceFeeding::handle
+ );
+ reg(
+ PacketStruggle.class,
+ PacketStruggle::encode,
+ PacketStruggle::decode,
+ PacketStruggle::handle
+ );
+ reg(
+ PacketTighten.class,
+ PacketTighten::encode,
+ PacketTighten::decode,
+ PacketTighten::handle
+ );
+ reg(
+ PacketSetKnifeCutTarget.class,
+ PacketSetKnifeCutTarget::encode,
+ PacketSetKnifeCutTarget::decode,
+ PacketSetKnifeCutTarget::handle
+ );
+ reg(
+ PacketSelfBondage.class,
+ PacketSelfBondage::encode,
+ PacketSelfBondage::decode,
+ PacketSelfBondage::handle
+ );
+ reg(
+ PacketForceSeatModifier.class,
+ PacketForceSeatModifier::encode,
+ PacketForceSeatModifier::decode,
+ PacketForceSeatModifier::handle
+ );
// Items (C2S)
- reg(PacketAdjustItem.class, PacketAdjustItem::encode, PacketAdjustItem::decode, PacketAdjustItem::handle);
- reg(PacketAdjustRemote.class, PacketAdjustRemote::encode, PacketAdjustRemote::decode, PacketAdjustRemote::handle);
+ reg(
+ PacketAdjustItem.class,
+ PacketAdjustItem::encode,
+ PacketAdjustItem::decode,
+ PacketAdjustItem::handle
+ );
+ reg(
+ PacketAdjustRemote.class,
+ PacketAdjustRemote::encode,
+ PacketAdjustRemote::decode,
+ PacketAdjustRemote::handle
+ );
// Slave management
- reg(PacketSlaveAction.class, PacketSlaveAction::encode, PacketSlaveAction::decode, PacketSlaveAction::handle);
- reg(PacketSlaveItemManage.class, PacketSlaveItemManage::encode, PacketSlaveItemManage::decode, PacketSlaveItemManage::handle);
- reg(PacketSlaveBeingFreed.class, PacketSlaveBeingFreed::encode, PacketSlaveBeingFreed::decode, PacketSlaveBeingFreed::handle);
+ reg(
+ PacketSlaveAction.class,
+ PacketSlaveAction::encode,
+ PacketSlaveAction::decode,
+ PacketSlaveAction::handle
+ );
+ reg(
+ PacketSlaveItemManage.class,
+ PacketSlaveItemManage::encode,
+ PacketSlaveItemManage::decode,
+ PacketSlaveItemManage::handle
+ );
+ reg(
+ PacketSlaveBeingFreed.class,
+ PacketSlaveBeingFreed::encode,
+ PacketSlaveBeingFreed::decode,
+ PacketSlaveBeingFreed::handle
+ );
// NPC commands
- reg(PacketNpcCommand.class, PacketNpcCommand::encode, PacketNpcCommand::decode, PacketNpcCommand::handle);
- reg(PacketOpenCommandWandScreen.class, PacketOpenCommandWandScreen::encode, PacketOpenCommandWandScreen::decode, PacketOpenCommandWandScreen::handle);
- reg(PacketRequestNpcInventory.class, PacketRequestNpcInventory::encode, PacketRequestNpcInventory::decode, PacketRequestNpcInventory::handle);
- reg(PacketDisciplineAction.class, PacketDisciplineAction::encode, PacketDisciplineAction::decode, PacketDisciplineAction::handle);
+ reg(
+ PacketNpcCommand.class,
+ PacketNpcCommand::encode,
+ PacketNpcCommand::decode,
+ PacketNpcCommand::handle
+ );
+ reg(
+ PacketOpenCommandWandScreen.class,
+ PacketOpenCommandWandScreen::encode,
+ PacketOpenCommandWandScreen::decode,
+ PacketOpenCommandWandScreen::handle
+ );
+ reg(
+ PacketRequestNpcInventory.class,
+ PacketRequestNpcInventory::encode,
+ PacketRequestNpcInventory::decode,
+ PacketRequestNpcInventory::handle
+ );
+ reg(
+ PacketDisciplineAction.class,
+ PacketDisciplineAction::encode,
+ PacketDisciplineAction::decode,
+ PacketDisciplineAction::handle
+ );
// Bounty
- reg(PacketRequestBounties.class, PacketRequestBounties::encode, PacketRequestBounties::decode, PacketRequestBounties::handle);
- reg(PacketSendBounties.class, PacketSendBounties::encode, PacketSendBounties::decode, PacketSendBounties::handle);
- reg(PacketDeleteBounty.class, PacketDeleteBounty::encode, PacketDeleteBounty::decode, PacketDeleteBounty::handle);
+ reg(
+ PacketRequestBounties.class,
+ PacketRequestBounties::encode,
+ PacketRequestBounties::decode,
+ PacketRequestBounties::handle
+ );
+ reg(
+ PacketSendBounties.class,
+ PacketSendBounties::encode,
+ PacketSendBounties::decode,
+ PacketSendBounties::handle
+ );
+ reg(
+ PacketDeleteBounty.class,
+ PacketDeleteBounty::encode,
+ PacketDeleteBounty::decode,
+ PacketDeleteBounty::handle
+ );
// Struggle mini-game
- reg(PacketContinuousStruggleState.class, PacketContinuousStruggleState::encode, PacketContinuousStruggleState::decode, PacketContinuousStruggleState::handle);
- reg(PacketContinuousStruggleHold.class, PacketContinuousStruggleHold::encode, PacketContinuousStruggleHold::decode, PacketContinuousStruggleHold::handle);
- reg(PacketContinuousStruggleStop.class, PacketContinuousStruggleStop::encode, PacketContinuousStruggleStop::decode, PacketContinuousStruggleStop::handle);
+ reg(
+ PacketContinuousStruggleState.class,
+ PacketContinuousStruggleState::encode,
+ PacketContinuousStruggleState::decode,
+ PacketContinuousStruggleState::handle
+ );
+ reg(
+ PacketContinuousStruggleHold.class,
+ PacketContinuousStruggleHold::encode,
+ PacketContinuousStruggleHold::decode,
+ PacketContinuousStruggleHold::handle
+ );
+ reg(
+ PacketContinuousStruggleStop.class,
+ PacketContinuousStruggleStop::encode,
+ PacketContinuousStruggleStop::decode,
+ PacketContinuousStruggleStop::handle
+ );
// Lockpick mini-game
- reg(PacketLockpickMiniGameStart.class, PacketLockpickMiniGameStart::encode, PacketLockpickMiniGameStart::decode, PacketLockpickMiniGameStart::handle);
- reg(PacketLockpickMiniGameState.class, PacketLockpickMiniGameState::encode, PacketLockpickMiniGameState::decode, PacketLockpickMiniGameState::handle);
- reg(PacketLockpickMiniGameMove.class, PacketLockpickMiniGameMove::encode, PacketLockpickMiniGameMove::decode, PacketLockpickMiniGameMove::handle);
- reg(PacketLockpickAttempt.class, PacketLockpickAttempt::encode, PacketLockpickAttempt::decode, PacketLockpickAttempt::handle);
- reg(PacketLockpickMiniGameResult.class, PacketLockpickMiniGameResult::encode, PacketLockpickMiniGameResult::decode, PacketLockpickMiniGameResult::handle);
+ reg(
+ PacketLockpickMiniGameStart.class,
+ PacketLockpickMiniGameStart::encode,
+ PacketLockpickMiniGameStart::decode,
+ PacketLockpickMiniGameStart::handle
+ );
+ reg(
+ PacketLockpickMiniGameState.class,
+ PacketLockpickMiniGameState::encode,
+ PacketLockpickMiniGameState::decode,
+ PacketLockpickMiniGameState::handle
+ );
+ reg(
+ PacketLockpickMiniGameMove.class,
+ PacketLockpickMiniGameMove::encode,
+ PacketLockpickMiniGameMove::decode,
+ PacketLockpickMiniGameMove::handle
+ );
+ reg(
+ PacketLockpickAttempt.class,
+ PacketLockpickAttempt::encode,
+ PacketLockpickAttempt::decode,
+ PacketLockpickAttempt::handle
+ );
+ reg(
+ PacketLockpickMiniGameResult.class,
+ PacketLockpickMiniGameResult::encode,
+ PacketLockpickMiniGameResult::decode,
+ PacketLockpickMiniGameResult::handle
+ );
// Merchant trading
- reg(PacketOpenMerchantScreen.class, PacketOpenMerchantScreen::encode, PacketOpenMerchantScreen::decode, PacketOpenMerchantScreen::handle);
- reg(PacketPurchaseTrade.class, PacketPurchaseTrade::encode, PacketPurchaseTrade::decode, PacketPurchaseTrade::handle);
- reg(PacketCloseMerchantScreen.class, PacketCloseMerchantScreen::encode, PacketCloseMerchantScreen::decode, PacketCloseMerchantScreen::handle);
+ reg(
+ PacketOpenMerchantScreen.class,
+ PacketOpenMerchantScreen::encode,
+ PacketOpenMerchantScreen::decode,
+ PacketOpenMerchantScreen::handle
+ );
+ reg(
+ PacketPurchaseTrade.class,
+ PacketPurchaseTrade::encode,
+ PacketPurchaseTrade::decode,
+ PacketPurchaseTrade::handle
+ );
+ reg(
+ PacketCloseMerchantScreen.class,
+ PacketCloseMerchantScreen::encode,
+ PacketCloseMerchantScreen::decode,
+ PacketCloseMerchantScreen::handle
+ );
// Slave trader
- reg(PacketOpenTraderScreen.class, PacketOpenTraderScreen::encode, PacketOpenTraderScreen::decode, PacketOpenTraderScreen::handle);
- reg(PacketBuyCaptive.class, PacketBuyCaptive::encode, PacketBuyCaptive::decode, PacketBuyCaptive::handle);
+ reg(
+ PacketOpenTraderScreen.class,
+ PacketOpenTraderScreen::encode,
+ PacketOpenTraderScreen::decode,
+ PacketOpenTraderScreen::handle
+ );
+ reg(
+ PacketBuyCaptive.class,
+ PacketBuyCaptive::encode,
+ PacketBuyCaptive::decode,
+ PacketBuyCaptive::handle
+ );
// Cell management
- reg(PacketOpenCellManager.class, PacketOpenCellManager::encode, PacketOpenCellManager::decode, PacketOpenCellManager::handle);
- reg(PacketCellAction.class, PacketCellAction::encode, PacketCellAction::decode, PacketCellAction::handle);
- reg(PacketRenameCell.class, PacketRenameCell::encode, PacketRenameCell::decode, PacketRenameCell::handle);
- reg(PacketAssignCellToCollar.class, PacketAssignCellToCollar::encode, PacketAssignCellToCollar::decode, PacketAssignCellToCollar::handle);
- reg(PacketRequestCellList.class, PacketRequestCellList::encode, PacketRequestCellList::decode, PacketRequestCellList::handle);
- reg(PacketOpenCellSelector.class, PacketOpenCellSelector::encode, PacketOpenCellSelector::decode, PacketOpenCellSelector::handle);
- reg(PacketOpenCoreMenu.class, PacketOpenCoreMenu::encode, PacketOpenCoreMenu::decode, (msg, ctx) -> msg.handle(ctx));
- reg(PacketCoreMenuAction.class, PacketCoreMenuAction::encode, PacketCoreMenuAction::decode, PacketCoreMenuAction::handle);
+ reg(
+ PacketOpenCellManager.class,
+ PacketOpenCellManager::encode,
+ PacketOpenCellManager::decode,
+ PacketOpenCellManager::handle
+ );
+ reg(
+ PacketCellAction.class,
+ PacketCellAction::encode,
+ PacketCellAction::decode,
+ PacketCellAction::handle
+ );
+ reg(
+ PacketRenameCell.class,
+ PacketRenameCell::encode,
+ PacketRenameCell::decode,
+ PacketRenameCell::handle
+ );
+ reg(
+ PacketAssignCellToCollar.class,
+ PacketAssignCellToCollar::encode,
+ PacketAssignCellToCollar::decode,
+ PacketAssignCellToCollar::handle
+ );
+ reg(
+ PacketRequestCellList.class,
+ PacketRequestCellList::encode,
+ PacketRequestCellList::decode,
+ PacketRequestCellList::handle
+ );
+ reg(
+ PacketOpenCellSelector.class,
+ PacketOpenCellSelector::encode,
+ PacketOpenCellSelector::decode,
+ PacketOpenCellSelector::handle
+ );
+ reg(
+ PacketOpenCoreMenu.class,
+ PacketOpenCoreMenu::encode,
+ PacketOpenCoreMenu::decode,
+ (msg, ctx) -> msg.handle(ctx)
+ );
+ reg(
+ PacketCoreMenuAction.class,
+ PacketCoreMenuAction::encode,
+ PacketCoreMenuAction::decode,
+ PacketCoreMenuAction::handle
+ );
// Conversation
- reg(PacketOpenConversation.class, PacketOpenConversation::encode, PacketOpenConversation::decode, PacketOpenConversation::handle);
- reg(PacketSelectTopic.class, PacketSelectTopic::encode, PacketSelectTopic::decode, PacketSelectTopic::handle);
- reg(PacketEndConversationC2S.class, PacketEndConversationC2S::encode, PacketEndConversationC2S::decode, PacketEndConversationC2S::handle);
- reg(PacketEndConversationS2C.class, PacketEndConversationS2C::encode, PacketEndConversationS2C::decode, PacketEndConversationS2C::handle);
- reg(PacketRequestConversation.class, PacketRequestConversation::encode, PacketRequestConversation::decode, PacketRequestConversation::handle);
+ reg(
+ PacketOpenConversation.class,
+ PacketOpenConversation::encode,
+ PacketOpenConversation::decode,
+ PacketOpenConversation::handle
+ );
+ reg(
+ PacketSelectTopic.class,
+ PacketSelectTopic::encode,
+ PacketSelectTopic::decode,
+ PacketSelectTopic::handle
+ );
+ reg(
+ PacketEndConversationC2S.class,
+ PacketEndConversationC2S::encode,
+ PacketEndConversationC2S::decode,
+ PacketEndConversationC2S::handle
+ );
+ reg(
+ PacketEndConversationS2C.class,
+ PacketEndConversationS2C::encode,
+ PacketEndConversationS2C::decode,
+ PacketEndConversationS2C::handle
+ );
+ reg(
+ PacketRequestConversation.class,
+ PacketRequestConversation::encode,
+ PacketRequestConversation::decode,
+ PacketRequestConversation::handle
+ );
// Master / pet
- reg(PacketMasterStateSync.class, PacketMasterStateSync::encode, PacketMasterStateSync::decode, PacketMasterStateSync::handle);
- reg(PacketOpenPetRequestMenu.class, PacketOpenPetRequestMenu::encode, PacketOpenPetRequestMenu::decode, PacketOpenPetRequestMenu::handle);
- reg(PacketPetRequest.class, PacketPetRequest::encode, PacketPetRequest::decode, PacketPetRequest::handle);
+ reg(
+ PacketMasterStateSync.class,
+ PacketMasterStateSync::encode,
+ PacketMasterStateSync::decode,
+ PacketMasterStateSync::handle
+ );
+ reg(
+ PacketOpenPetRequestMenu.class,
+ PacketOpenPetRequestMenu::encode,
+ PacketOpenPetRequestMenu::decode,
+ PacketOpenPetRequestMenu::handle
+ );
+ reg(
+ PacketPetRequest.class,
+ PacketPetRequest::encode,
+ PacketPetRequest::decode,
+ PacketPetRequest::handle
+ );
// V2 bondage equipment
- reg(PacketSyncV2Equipment.class, PacketSyncV2Equipment::encode, PacketSyncV2Equipment::decode, PacketSyncV2Equipment::handle);
- reg(PacketV2SelfRemove.class, PacketV2SelfRemove::encode, PacketV2SelfRemove::decode, PacketV2SelfRemove::handle);
- reg(PacketV2StruggleStart.class, PacketV2StruggleStart::encode, PacketV2StruggleStart::decode, PacketV2StruggleStart::handle);
- reg(PacketV2LockToggle.class, PacketV2LockToggle::encode, PacketV2LockToggle::decode, PacketV2LockToggle::handle);
- reg(PacketV2SelfEquip.class, PacketV2SelfEquip::encode, PacketV2SelfEquip::decode, PacketV2SelfEquip::handle);
- reg(PacketV2SelfLock.class, PacketV2SelfLock::encode, PacketV2SelfLock::decode, PacketV2SelfLock::handle);
- reg(PacketV2SelfUnlock.class, PacketV2SelfUnlock::encode, PacketV2SelfUnlock::decode, PacketV2SelfUnlock::handle);
- reg(PacketMasterEquip.class, PacketMasterEquip::encode, PacketMasterEquip::decode, PacketMasterEquip::handle);
+ reg(
+ PacketSyncV2Equipment.class,
+ PacketSyncV2Equipment::encode,
+ PacketSyncV2Equipment::decode,
+ PacketSyncV2Equipment::handle
+ );
+ reg(
+ PacketV2SelfRemove.class,
+ PacketV2SelfRemove::encode,
+ PacketV2SelfRemove::decode,
+ PacketV2SelfRemove::handle
+ );
+ reg(
+ PacketV2StruggleStart.class,
+ PacketV2StruggleStart::encode,
+ PacketV2StruggleStart::decode,
+ PacketV2StruggleStart::handle
+ );
+ reg(
+ PacketV2LockToggle.class,
+ PacketV2LockToggle::encode,
+ PacketV2LockToggle::decode,
+ PacketV2LockToggle::handle
+ );
+ reg(
+ PacketV2SelfEquip.class,
+ PacketV2SelfEquip::encode,
+ PacketV2SelfEquip::decode,
+ PacketV2SelfEquip::handle
+ );
+ reg(
+ PacketV2SelfLock.class,
+ PacketV2SelfLock::encode,
+ PacketV2SelfLock::decode,
+ PacketV2SelfLock::handle
+ );
+ reg(
+ PacketV2SelfUnlock.class,
+ PacketV2SelfUnlock::encode,
+ PacketV2SelfUnlock::decode,
+ PacketV2SelfUnlock::handle
+ );
+ reg(
+ PacketMasterEquip.class,
+ PacketMasterEquip::encode,
+ PacketMasterEquip::decode,
+ PacketMasterEquip::handle
+ );
// Furniture
- reg(PacketSyncFurnitureState.class, PacketSyncFurnitureState::encode, PacketSyncFurnitureState::decode, PacketSyncFurnitureState::handle);
- reg(PacketSyncFurnitureDefinitions.class, PacketSyncFurnitureDefinitions::encode, PacketSyncFurnitureDefinitions::decode, PacketSyncFurnitureDefinitions::handle);
- reg(PacketFurnitureLock.class, PacketFurnitureLock::encode, PacketFurnitureLock::decode, PacketFurnitureLock::handle);
- reg(PacketFurnitureForcemount.class, PacketFurnitureForcemount::encode, PacketFurnitureForcemount::decode, PacketFurnitureForcemount::handle);
- reg(PacketFurnitureEscape.class, PacketFurnitureEscape::encode, PacketFurnitureEscape::decode, PacketFurnitureEscape::handle);
+ reg(
+ PacketSyncFurnitureState.class,
+ PacketSyncFurnitureState::encode,
+ PacketSyncFurnitureState::decode,
+ PacketSyncFurnitureState::handle
+ );
+ reg(
+ PacketSyncFurnitureDefinitions.class,
+ PacketSyncFurnitureDefinitions::encode,
+ PacketSyncFurnitureDefinitions::decode,
+ PacketSyncFurnitureDefinitions::handle
+ );
+ reg(
+ PacketFurnitureLock.class,
+ PacketFurnitureLock::encode,
+ PacketFurnitureLock::decode,
+ PacketFurnitureLock::handle
+ );
+ reg(
+ PacketFurnitureForcemount.class,
+ PacketFurnitureForcemount::encode,
+ PacketFurnitureForcemount::decode,
+ PacketFurnitureForcemount::handle
+ );
+ reg(
+ PacketFurnitureEscape.class,
+ PacketFurnitureEscape::encode,
+ PacketFurnitureEscape::decode,
+ PacketFurnitureEscape::handle
+ );
// Movement style
- reg(PacketSyncMovementStyle.class, PacketSyncMovementStyle::encode, PacketSyncMovementStyle::decode, PacketSyncMovementStyle::handle);
+ reg(
+ PacketSyncMovementStyle.class,
+ PacketSyncMovementStyle::encode,
+ PacketSyncMovementStyle::decode,
+ PacketSyncMovementStyle::handle
+ );
TiedUpMod.LOGGER.info("Registered {} network packets", packetId);
}
diff --git a/src/main/java/com/tiedup/remake/network/NetworkEventHandler.java b/src/main/java/com/tiedup/remake/network/NetworkEventHandler.java
index 659d1fa..90a3449 100644
--- a/src/main/java/com/tiedup/remake/network/NetworkEventHandler.java
+++ b/src/main/java/com/tiedup/remake/network/NetworkEventHandler.java
@@ -77,7 +77,8 @@ public class NetworkEventHandler {
// Sync tracked player's V2 equipment to the tracker (so they see the bondage layers)
com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper.syncTo(
- trackedPlayer, tracker
+ trackedPlayer,
+ tracker
);
// Also sync state flags
@@ -182,7 +183,7 @@ public class NetworkEventHandler {
* 1. The player's own inventory to themselves
* 2. The player's inventory to all other players (so they see the new player)
* 3. All other players' inventories to the new player (so they see everyone)
- * 4. The player's collar registry (Phase 17)
+ * 4. The player's collar registry
*/
@SubscribeEvent
public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
@@ -192,11 +193,12 @@ public class NetworkEventHandler {
SyncManager.syncAll(player);
SyncManager.syncAllPlayersTo(player);
- // Phase 17: Sync collar registry to this player
syncCollarRegistry(player);
// Sync furniture definitions
- com.tiedup.remake.v2.furniture.network.PacketSyncFurnitureDefinitions.sendToPlayer(player);
+ com.tiedup.remake.v2.furniture.network.PacketSyncFurnitureDefinitions.sendToPlayer(
+ player
+ );
// Check for furniture reconnection (player was locked in a seat and disconnected)
handleFurnitureReconnection(player);
@@ -247,9 +249,14 @@ public class NetworkEventHandler {
CompoundTag tag = persistentData.getCompound("tiedup_locked_furniture");
// Read stored data
- if (!tag.contains("x") || !tag.contains("y") || !tag.contains("z")
- || !tag.contains("dim") || !tag.contains("furniture_uuid")
- || !tag.contains("seat_id")) {
+ if (
+ !tag.contains("x") ||
+ !tag.contains("y") ||
+ !tag.contains("z") ||
+ !tag.contains("dim") ||
+ !tag.contains("furniture_uuid") ||
+ !tag.contains("seat_id")
+ ) {
TiedUpMod.LOGGER.warn(
"[Network] Malformed furniture reconnection tag for {}, removing",
player.getName().getString()
@@ -272,7 +279,8 @@ public class NetworkEventHandler {
} catch (IllegalArgumentException e) {
TiedUpMod.LOGGER.warn(
"[Network] Invalid furniture UUID '{}' in reconnection tag for {}, removing",
- furnitureUuidStr, player.getName().getString()
+ furnitureUuidStr,
+ player.getName().getString()
);
persistentData.remove("tiedup_locked_furniture");
return;
@@ -314,18 +322,30 @@ public class NetworkEventHandler {
// Search for the furniture entity near the stored position
Entity furniture = findFurnitureEntity(
- targetLevel, furniturePos, furnitureUuid
+ targetLevel,
+ furniturePos,
+ furnitureUuid
);
- if (furniture == null || !(furniture instanceof ISeatProvider provider)) {
+ if (
+ furniture == null ||
+ !(furniture instanceof ISeatProvider provider)
+ ) {
TiedUpMod.LOGGER.info(
- "[Network] Furniture entity {} not found at {} for reconnection of {}. "
- + "Teleporting player to last furniture position.",
- furnitureUuidStr, furniturePos,
+ "[Network] Furniture entity {} not found at {} for reconnection of {}. " +
+ "Teleporting player to last furniture position.",
+ furnitureUuidStr,
+ furniturePos,
player.getName().getString()
);
// Teleport to furniture position to prevent "disconnect to escape"
- teleportPlayerTo(player, targetLevel, x + 0.5, y, z + 0.5);
+ teleportPlayerTo(
+ player,
+ targetLevel,
+ x + 0.5,
+ y,
+ z + 0.5
+ );
persistentData.remove("tiedup_locked_furniture");
return;
}
@@ -334,17 +354,25 @@ public class NetworkEventHandler {
if (!provider.isSeatLocked(seatId)) {
TiedUpMod.LOGGER.info(
"[Network] Seat '{}' is no longer locked on furniture {}. Freeing {}.",
- seatId, furnitureUuidStr, player.getName().getString()
+ seatId,
+ furnitureUuidStr,
+ player.getName().getString()
);
persistentData.remove("tiedup_locked_furniture");
return;
}
// Teleport to furniture dimension/position if needed
- if (player.level() != targetLevel || player.distanceToSqr(furniture) > 25.0) {
+ if (
+ player.level() != targetLevel ||
+ player.distanceToSqr(furniture) > 25.0
+ ) {
teleportPlayerTo(
- player, targetLevel,
- furniture.getX(), furniture.getY(), furniture.getZ()
+ player,
+ targetLevel,
+ furniture.getX(),
+ furniture.getY(),
+ furniture.getZ()
);
}
@@ -355,16 +383,21 @@ public class NetworkEventHandler {
TiedUpMod.LOGGER.info(
"[Network] Re-mounted {} in furniture {} seat '{}'",
player.getName().getString(),
- furnitureUuidStr, seatId
+ furnitureUuidStr,
+ seatId
);
} else {
TiedUpMod.LOGGER.warn(
"[Network] Failed to re-mount {} in furniture {}. Teleporting to position.",
- player.getName().getString(), furnitureUuidStr
+ player.getName().getString(),
+ furnitureUuidStr
);
teleportPlayerTo(
- player, (ServerLevel) furniture.level(),
- furniture.getX(), furniture.getY(), furniture.getZ()
+ player,
+ (ServerLevel) furniture.level(),
+ furniture.getX(),
+ furniture.getY(),
+ furniture.getZ()
);
persistentData.remove("tiedup_locked_furniture");
}
@@ -384,15 +417,25 @@ public class NetworkEventHandler {
private static void teleportPlayerTo(
ServerPlayer player,
ServerLevel targetLevel,
- double x, double y, double z
+ double x,
+ double y,
+ double z
) {
if (player.serverLevel() == targetLevel) {
player.teleportTo(x, y, z);
} else {
// Cross-dimension: use the project's TeleportHelper for correct handling
com.tiedup.remake.util.teleport.Position pos =
- new com.tiedup.remake.util.teleport.Position(x, y, z, targetLevel.dimension());
- com.tiedup.remake.util.teleport.TeleportHelper.teleportEntity(player, pos);
+ new com.tiedup.remake.util.teleport.Position(
+ x,
+ y,
+ z,
+ targetLevel.dimension()
+ );
+ com.tiedup.remake.util.teleport.TeleportHelper.teleportEntity(
+ player,
+ pos
+ );
}
}
@@ -415,7 +458,8 @@ public class NetworkEventHandler {
// but entity positions can drift slightly due to floating point)
AABB searchBox = new AABB(pos).inflate(2.0);
java.util.List entities = level.getEntitiesOfClass(
- EntityFurniture.class, searchBox,
+ EntityFurniture.class,
+ searchBox,
e -> e.isAlive() && !e.isRemoved()
);
@@ -431,9 +475,11 @@ public class NetworkEventHandler {
for (EntityFurniture entity : entities) {
if (entity.blockPosition().equals(pos)) {
TiedUpMod.LOGGER.debug(
- "[Network] Furniture UUID mismatch but position matches at {}. "
- + "Using entity {} instead of expected {}.",
- pos, entity.getUUID(), expectedUuid
+ "[Network] Furniture UUID mismatch but position matches at {}. " +
+ "Using entity {} instead of expected {}.",
+ pos,
+ entity.getUUID(),
+ expectedUuid
);
return entity;
}
diff --git a/src/main/java/com/tiedup/remake/network/action/PacketStruggle.java b/src/main/java/com/tiedup/remake/network/action/PacketStruggle.java
index e7c2e9f..5cec524 100644
--- a/src/main/java/com/tiedup/remake/network/action/PacketStruggle.java
+++ b/src/main/java/com/tiedup/remake/network/action/PacketStruggle.java
@@ -8,7 +8,6 @@ import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.network.NetworkEvent;
/**
- * Phase 7: Packet for struggling (Client to Server).
*
* Based on original PacketStruggleServer from 1.12.2
*
diff --git a/src/main/java/com/tiedup/remake/network/action/PacketTighten.java b/src/main/java/com/tiedup/remake/network/action/PacketTighten.java
index 9a98503..820898b 100644
--- a/src/main/java/com/tiedup/remake/network/action/PacketTighten.java
+++ b/src/main/java/com/tiedup/remake/network/action/PacketTighten.java
@@ -1,12 +1,12 @@
package com.tiedup.remake.network.action;
import com.tiedup.remake.core.TiedUpMod;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.network.PacketRateLimiter;
-import com.tiedup.remake.state.IRestrainable;
import com.tiedup.remake.state.ICaptor;
+import com.tiedup.remake.state.IRestrainable;
import com.tiedup.remake.state.PlayerBindState;
import com.tiedup.remake.util.KidnappedHelper;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.List;
import java.util.function.Supplier;
import net.minecraft.network.FriendlyByteBuf;
@@ -18,7 +18,6 @@ import net.minecraft.world.phys.Vec3;
import net.minecraftforge.network.NetworkEvent;
/**
- * Phase 7: Packet for tightening binds (Client to Server).
*
* Based on original PacketTightenBinds from 1.12.2
*
diff --git a/src/main/java/com/tiedup/remake/network/base/AbstractProgressPacket.java b/src/main/java/com/tiedup/remake/network/base/AbstractProgressPacket.java
index 96faa05..1439874 100644
--- a/src/main/java/com/tiedup/remake/network/base/AbstractProgressPacket.java
+++ b/src/main/java/com/tiedup/remake/network/base/AbstractProgressPacket.java
@@ -9,7 +9,6 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
/**
- * Phase 2 Refactoring: Abstract base class for progress packets.
*
* Eliminates code duplication between PacketTying and PacketUntying.
* Both packets share identical structure for encoding/decoding/handling,
diff --git a/src/main/java/com/tiedup/remake/network/bounty/PacketDeleteBounty.java b/src/main/java/com/tiedup/remake/network/bounty/PacketDeleteBounty.java
index 6d3427a..570b6da 100644
--- a/src/main/java/com/tiedup/remake/network/bounty/PacketDeleteBounty.java
+++ b/src/main/java/com/tiedup/remake/network/bounty/PacketDeleteBounty.java
@@ -12,7 +12,6 @@ import net.minecraftforge.network.NetworkEvent;
/**
* Packet: Client requests to delete/cancel a bounty.
*
- * Phase 17: Bounty System
*
* Only the bounty client or an admin can delete.
* If client deletes, reward is returned.
diff --git a/src/main/java/com/tiedup/remake/network/bounty/PacketRequestBounties.java b/src/main/java/com/tiedup/remake/network/bounty/PacketRequestBounties.java
index 5a6de2b..e7c2285 100644
--- a/src/main/java/com/tiedup/remake/network/bounty/PacketRequestBounties.java
+++ b/src/main/java/com/tiedup/remake/network/bounty/PacketRequestBounties.java
@@ -13,7 +13,6 @@ import net.minecraftforge.network.NetworkEvent;
/**
* Packet: Client requests bounty list from server.
*
- * Phase 17: Bounty System
*
* Flow: Client → Server → PacketSendBounties → Client
*/
diff --git a/src/main/java/com/tiedup/remake/network/bounty/PacketSendBounties.java b/src/main/java/com/tiedup/remake/network/bounty/PacketSendBounties.java
index 0633c0f..163a2e3 100644
--- a/src/main/java/com/tiedup/remake/network/bounty/PacketSendBounties.java
+++ b/src/main/java/com/tiedup/remake/network/bounty/PacketSendBounties.java
@@ -16,7 +16,6 @@ import net.minecraftforge.network.NetworkEvent;
/**
* Packet: Server sends bounty list to client.
*
- * Phase 17: Bounty System
*
* Flow: Server → Client (opens BountyListScreen)
*/
diff --git a/src/main/java/com/tiedup/remake/network/cell/PacketAssignCellToCollar.java b/src/main/java/com/tiedup/remake/network/cell/PacketAssignCellToCollar.java
index 20c1515..1094b8a 100644
--- a/src/main/java/com/tiedup/remake/network/cell/PacketAssignCellToCollar.java
+++ b/src/main/java/com/tiedup/remake/network/cell/PacketAssignCellToCollar.java
@@ -1,7 +1,6 @@
package com.tiedup.remake.network.cell;
import com.tiedup.remake.cells.CellDataV2;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.cells.CellRegistryV2;
import com.tiedup.remake.core.SystemMessageManager;
import com.tiedup.remake.core.TiedUpMod;
@@ -12,6 +11,7 @@ import com.tiedup.remake.network.sync.SyncManager;
import com.tiedup.remake.personality.PersonalityState;
import com.tiedup.remake.state.IBondageState;
import com.tiedup.remake.util.KidnappedHelper;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.UUID;
import java.util.function.Supplier;
import net.minecraft.network.FriendlyByteBuf;
diff --git a/src/main/java/com/tiedup/remake/network/cell/PacketOpenCellManager.java b/src/main/java/com/tiedup/remake/network/cell/PacketOpenCellManager.java
index ec7120d..83a08a3 100644
--- a/src/main/java/com/tiedup/remake/network/cell/PacketOpenCellManager.java
+++ b/src/main/java/com/tiedup/remake/network/cell/PacketOpenCellManager.java
@@ -194,8 +194,10 @@ public class PacketOpenCellManager extends AbstractClientPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketOpenCellManager pkt) {
- net.minecraft.client.Minecraft mc = net.minecraft.client.Minecraft.getInstance();
+ net.minecraft.client.Minecraft mc =
+ net.minecraft.client.Minecraft.getInstance();
if (mc.player == null) return;
TiedUpMod.LOGGER.info(
@@ -204,7 +206,12 @@ public class PacketOpenCellManager extends AbstractClientPacket {
pkt.isOperator
);
- mc.setScreen(new com.tiedup.remake.client.gui.screens.CellManagerScreen(pkt.cells, pkt.isOperator));
+ mc.setScreen(
+ new com.tiedup.remake.client.gui.screens.CellManagerScreen(
+ pkt.cells,
+ pkt.isOperator
+ )
+ );
}
}
diff --git a/src/main/java/com/tiedup/remake/network/cell/PacketOpenCellSelector.java b/src/main/java/com/tiedup/remake/network/cell/PacketOpenCellSelector.java
index c5fbe04..d7c8848 100644
--- a/src/main/java/com/tiedup/remake/network/cell/PacketOpenCellSelector.java
+++ b/src/main/java/com/tiedup/remake/network/cell/PacketOpenCellSelector.java
@@ -88,8 +88,10 @@ public class PacketOpenCellSelector extends AbstractClientPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketOpenCellSelector pkt) {
- net.minecraft.client.Minecraft mc = net.minecraft.client.Minecraft.getInstance();
+ net.minecraft.client.Minecraft mc =
+ net.minecraft.client.Minecraft.getInstance();
if (mc.player == null) return;
TiedUpMod.LOGGER.info(
@@ -98,7 +100,12 @@ public class PacketOpenCellSelector extends AbstractClientPacket {
pkt.targetEntityUUID.toString().substring(0, 8)
);
- mc.setScreen(new com.tiedup.remake.client.gui.screens.CellSelectorScreen(pkt.targetEntityUUID, pkt.cells));
+ mc.setScreen(
+ new com.tiedup.remake.client.gui.screens.CellSelectorScreen(
+ pkt.targetEntityUUID,
+ pkt.cells
+ )
+ );
}
}
diff --git a/src/main/java/com/tiedup/remake/network/cell/PacketOpenCoreMenu.java b/src/main/java/com/tiedup/remake/network/cell/PacketOpenCoreMenu.java
index 749a353..bbf9f14 100644
--- a/src/main/java/com/tiedup/remake/network/cell/PacketOpenCoreMenu.java
+++ b/src/main/java/com/tiedup/remake/network/cell/PacketOpenCoreMenu.java
@@ -104,6 +104,7 @@ public class PacketOpenCoreMenu extends AbstractClientPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketOpenCoreMenu pkt) {
net.minecraft.client.Minecraft.getInstance().setScreen(
new com.tiedup.remake.client.gui.screens.CellCoreScreen(
diff --git a/src/main/java/com/tiedup/remake/network/cell/PacketSyncCellData.java b/src/main/java/com/tiedup/remake/network/cell/PacketSyncCellData.java
index d879c16..40088c3 100644
--- a/src/main/java/com/tiedup/remake/network/cell/PacketSyncCellData.java
+++ b/src/main/java/com/tiedup/remake/network/cell/PacketSyncCellData.java
@@ -186,6 +186,7 @@ public class PacketSyncCellData extends AbstractClientPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketSyncCellData pkt) {
TiedUpMod.LOGGER.debug(
"[PacketSyncCellData] Received cell sync: {} at {} with {} position types, {} waypoints",
@@ -237,7 +238,9 @@ public class PacketSyncCellData extends AbstractClientPacket {
cell.setPathWaypoints(pkt.pathWaypoints);
// Update the client-side cache
- com.tiedup.remake.client.events.CellHighlightHandler.updateCachedCell(cell);
+ com.tiedup.remake.client.events.CellHighlightHandler.updateCachedCell(
+ cell
+ );
}
}
diff --git a/src/main/java/com/tiedup/remake/network/conversation/PacketEndConversationC2S.java b/src/main/java/com/tiedup/remake/network/conversation/PacketEndConversationC2S.java
index 9ed66d8..1867f66 100644
--- a/src/main/java/com/tiedup/remake/network/conversation/PacketEndConversationC2S.java
+++ b/src/main/java/com/tiedup/remake/network/conversation/PacketEndConversationC2S.java
@@ -32,30 +32,32 @@ public class PacketEndConversationC2S {
}
public void handle(Supplier ctx) {
- ctx.get().enqueueWork(() -> {
- ServerPlayer sender = ctx.get().getSender();
- if (sender == null) return;
+ ctx
+ .get()
+ .enqueueWork(() -> {
+ ServerPlayer sender = ctx.get().getSender();
+ if (sender == null) return;
- if (!PacketRateLimiter.allowPacket(sender, "action")) return;
+ if (!PacketRateLimiter.allowPacket(sender, "action")) return;
- TiedUpMod.LOGGER.info(
- "[PacketEndConversationC2S] {} ended conversation with entity {}",
- sender.getName().getString(),
- entityId
- );
+ TiedUpMod.LOGGER.info(
+ "[PacketEndConversationC2S] {} ended conversation with entity {}",
+ sender.getName().getString(),
+ entityId
+ );
- // Get the damsel entity to properly end with cooldown
- EntityDamsel damsel = null;
- Entity entity = sender.level().getEntity(entityId);
- if (entity instanceof EntityDamsel d) {
- damsel = d;
- }
+ // Get the damsel entity to properly end with cooldown
+ EntityDamsel damsel = null;
+ Entity entity = sender.level().getEntity(entityId);
+ if (entity instanceof EntityDamsel d) {
+ damsel = d;
+ }
- // Always clean up conversation state — this is a teardown packet.
- // Distance check removed: blocking cleanup causes permanent state leak
- // in ConversationManager.activeConversations (reviewer H18 BUG-001).
- ConversationManager.endConversation(sender, damsel);
- });
+ // Always clean up conversation state — this is a teardown packet.
+ // Distance check removed: blocking cleanup causes permanent state leak
+ // in ConversationManager.activeConversations (reviewer H18 BUG-001).
+ ConversationManager.endConversation(sender, damsel);
+ });
ctx.get().setPacketHandled(true);
}
diff --git a/src/main/java/com/tiedup/remake/network/conversation/PacketEndConversationS2C.java b/src/main/java/com/tiedup/remake/network/conversation/PacketEndConversationS2C.java
index 8cfe383..a3975ed 100644
--- a/src/main/java/com/tiedup/remake/network/conversation/PacketEndConversationS2C.java
+++ b/src/main/java/com/tiedup/remake/network/conversation/PacketEndConversationS2C.java
@@ -45,6 +45,7 @@ public class PacketEndConversationS2C {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketEndConversationS2C pkt) {
TiedUpMod.LOGGER.info(
"[PacketEndConversationS2C] Server ended conversation with entity {}",
diff --git a/src/main/java/com/tiedup/remake/network/conversation/PacketOpenConversation.java b/src/main/java/com/tiedup/remake/network/conversation/PacketOpenConversation.java
index 518c7ab..8c6e6f6 100644
--- a/src/main/java/com/tiedup/remake/network/conversation/PacketOpenConversation.java
+++ b/src/main/java/com/tiedup/remake/network/conversation/PacketOpenConversation.java
@@ -12,7 +12,6 @@ import net.minecraftforge.network.NetworkEvent;
* Packet sent from server to client to open the conversation GUI.
* Contains the entity ID, NPC name, and available conversation topics.
*
- * Phase 14: Conversation System
*/
public class PacketOpenConversation {
diff --git a/src/main/java/com/tiedup/remake/network/conversation/PacketRequestConversation.java b/src/main/java/com/tiedup/remake/network/conversation/PacketRequestConversation.java
index b2c7802..1798402 100644
--- a/src/main/java/com/tiedup/remake/network/conversation/PacketRequestConversation.java
+++ b/src/main/java/com/tiedup/remake/network/conversation/PacketRequestConversation.java
@@ -14,7 +14,6 @@ import net.minecraftforge.network.NetworkEvent;
* Packet sent from client to server to request opening a conversation.
* Sent when player clicks the "Ask..." button in DialogueScreen.
*
- * Phase 14: Conversation System
*
* DISABLED: Conversation system not in use. Kept because it is still registered
* in ModNetwork — removing a registered packet would shift packet IDs.
diff --git a/src/main/java/com/tiedup/remake/network/conversation/PacketSelectTopic.java b/src/main/java/com/tiedup/remake/network/conversation/PacketSelectTopic.java
index 661f292..ec0c061 100644
--- a/src/main/java/com/tiedup/remake/network/conversation/PacketSelectTopic.java
+++ b/src/main/java/com/tiedup/remake/network/conversation/PacketSelectTopic.java
@@ -15,7 +15,6 @@ import net.minecraftforge.network.NetworkEvent;
/**
* Packet sent from client to server when player selects a conversation topic.
*
- * Phase 14: Conversation System
*/
public class PacketSelectTopic {
diff --git a/src/main/java/com/tiedup/remake/network/item/PacketAdjustItem.java b/src/main/java/com/tiedup/remake/network/item/PacketAdjustItem.java
index 0af80c8..9a9447d 100644
--- a/src/main/java/com/tiedup/remake/network/item/PacketAdjustItem.java
+++ b/src/main/java/com/tiedup/remake/network/item/PacketAdjustItem.java
@@ -3,9 +3,9 @@ package com.tiedup.remake.network.item;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.items.base.AdjustmentHelper;
import com.tiedup.remake.items.base.IAdjustable;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.network.sync.SyncManager;
import com.tiedup.remake.state.PlayerBindState;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.function.Supplier;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
@@ -13,7 +13,6 @@ import net.minecraft.world.item.ItemStack;
import net.minecraftforge.network.NetworkEvent;
/**
- * Phase 16: Packet for adjusting item Y position (Client to Server).
*
* Sent by client when player adjusts a gag or blindfold position.
* Server validates and applies the adjustment, then syncs to all clients.
diff --git a/src/main/java/com/tiedup/remake/network/item/PacketAdjustRemote.java b/src/main/java/com/tiedup/remake/network/item/PacketAdjustRemote.java
index 96b556b..521a397 100644
--- a/src/main/java/com/tiedup/remake/network/item/PacketAdjustRemote.java
+++ b/src/main/java/com/tiedup/remake/network/item/PacketAdjustRemote.java
@@ -4,11 +4,11 @@ import com.tiedup.remake.core.SystemMessageManager;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.items.base.AdjustmentHelper;
import com.tiedup.remake.items.base.IAdjustable;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.network.sync.SyncManager;
import com.tiedup.remake.state.IBondageState;
import com.tiedup.remake.state.PlayerBindState;
import com.tiedup.remake.state.PlayerCaptorManager;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.UUID;
import java.util.function.Supplier;
import net.minecraft.ChatFormatting;
@@ -21,7 +21,6 @@ import net.minecraftforge.network.NetworkEvent;
/**
* Packet for adjusting a slave's gag/blindfold remotely.
*
- * Phase 16: GUI Revamp - Remote adjustment packet
*
* Security: Distance and dimension validation added to prevent griefing
*/
@@ -253,7 +252,9 @@ public class PacketAdjustRemote {
entity
);
if (kidnapped != null && kidnapped.hasCollar()) {
- ItemStack collarStack = kidnapped.getEquipment(BodyRegionV2.NECK);
+ ItemStack collarStack = kidnapped.getEquipment(
+ BodyRegionV2.NECK
+ );
if (
collarStack.getItem() instanceof
com.tiedup.remake.items.base.ItemCollar collar
diff --git a/src/main/java/com/tiedup/remake/network/labor/PacketSyncLaborProgress.java b/src/main/java/com/tiedup/remake/network/labor/PacketSyncLaborProgress.java
index b03d890..4831009 100644
--- a/src/main/java/com/tiedup/remake/network/labor/PacketSyncLaborProgress.java
+++ b/src/main/java/com/tiedup/remake/network/labor/PacketSyncLaborProgress.java
@@ -89,6 +89,7 @@ public class PacketSyncLaborProgress extends AbstractClientPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketSyncLaborProgress pkt) {
if (pkt.hasTask) {
com.tiedup.remake.client.state.ClientLaborState.setTask(
diff --git a/src/main/java/com/tiedup/remake/network/master/PacketMasterStateSync.java b/src/main/java/com/tiedup/remake/network/master/PacketMasterStateSync.java
index 6a047fd..97cf193 100644
--- a/src/main/java/com/tiedup/remake/network/master/PacketMasterStateSync.java
+++ b/src/main/java/com/tiedup/remake/network/master/PacketMasterStateSync.java
@@ -88,11 +88,15 @@ public class PacketMasterStateSync extends AbstractClientPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketMasterStateSync pkt) {
- net.minecraft.client.Minecraft mc = net.minecraft.client.Minecraft.getInstance();
+ net.minecraft.client.Minecraft mc =
+ net.minecraft.client.Minecraft.getInstance();
if (mc.level == null) return;
- net.minecraft.world.entity.Entity entity = mc.level.getEntity(pkt.entityId);
+ net.minecraft.world.entity.Entity entity = mc.level.getEntity(
+ pkt.entityId
+ );
if (entity instanceof EntityMaster master) {
// Apply state sync
// Note: Client-side state is read-only via synced entity data
diff --git a/src/main/java/com/tiedup/remake/network/minigame/PacketContinuousStruggleState.java b/src/main/java/com/tiedup/remake/network/minigame/PacketContinuousStruggleState.java
index 5253718..27c5cfa 100644
--- a/src/main/java/com/tiedup/remake/network/minigame/PacketContinuousStruggleState.java
+++ b/src/main/java/com/tiedup/remake/network/minigame/PacketContinuousStruggleState.java
@@ -78,8 +78,10 @@ public class PacketContinuousStruggleState extends AbstractClientPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketContinuousStruggleState pkt) {
- net.minecraft.client.Minecraft mc = net.minecraft.client.Minecraft.getInstance();
+ net.minecraft.client.Minecraft mc =
+ net.minecraft.client.Minecraft.getInstance();
if (mc.player == null) {
TiedUpMod.LOGGER.warn(
"[PacketContinuousStruggleState] Player is null, cannot handle packet"
@@ -113,35 +115,40 @@ public class PacketContinuousStruggleState extends AbstractClientPacket {
}
case DIRECTION_CHANGE -> {
if (
- mc.screen instanceof com.tiedup.remake.client.gui.screens.ContinuousStruggleMiniGameScreen screen
+ mc.screen instanceof
+ com.tiedup.remake.client.gui.screens.ContinuousStruggleMiniGameScreen screen
) {
screen.onDirectionChange(pkt.currentDirection);
}
}
case RESISTANCE_UPDATE -> {
if (
- mc.screen instanceof com.tiedup.remake.client.gui.screens.ContinuousStruggleMiniGameScreen screen
+ mc.screen instanceof
+ com.tiedup.remake.client.gui.screens.ContinuousStruggleMiniGameScreen screen
) {
screen.onResistanceUpdate(pkt.currentResistance);
}
}
case SHOCK -> {
if (
- mc.screen instanceof com.tiedup.remake.client.gui.screens.ContinuousStruggleMiniGameScreen screen
+ mc.screen instanceof
+ com.tiedup.remake.client.gui.screens.ContinuousStruggleMiniGameScreen screen
) {
screen.onShock();
}
}
case ESCAPE -> {
if (
- mc.screen instanceof com.tiedup.remake.client.gui.screens.ContinuousStruggleMiniGameScreen screen
+ mc.screen instanceof
+ com.tiedup.remake.client.gui.screens.ContinuousStruggleMiniGameScreen screen
) {
screen.onEscape();
}
}
case END -> {
if (
- mc.screen instanceof com.tiedup.remake.client.gui.screens.ContinuousStruggleMiniGameScreen screen
+ mc.screen instanceof
+ com.tiedup.remake.client.gui.screens.ContinuousStruggleMiniGameScreen screen
) {
screen.onEnd();
}
diff --git a/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickAttempt.java b/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickAttempt.java
index d0a3340..af45b29 100644
--- a/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickAttempt.java
+++ b/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickAttempt.java
@@ -3,11 +3,6 @@ package com.tiedup.remake.network.minigame;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.items.ItemLockpick;
import com.tiedup.remake.items.base.ILockable;
-import com.tiedup.remake.v2.BodyRegionV2;
-import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
-import com.tiedup.remake.v2.furniture.EntityFurniture;
-import com.tiedup.remake.v2.furniture.FurnitureDefinition;
-import com.tiedup.remake.v2.furniture.network.PacketSyncFurnitureState;
import com.tiedup.remake.minigame.LockpickMiniGameState;
import com.tiedup.remake.minigame.LockpickMiniGameState.PickAttemptResult;
import com.tiedup.remake.minigame.LockpickSessionManager;
@@ -15,6 +10,11 @@ import com.tiedup.remake.network.ModNetwork;
import com.tiedup.remake.network.PacketRateLimiter;
import com.tiedup.remake.network.sync.SyncManager;
import com.tiedup.remake.state.PlayerBindState;
+import com.tiedup.remake.v2.BodyRegionV2;
+import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
+import com.tiedup.remake.v2.furniture.EntityFurniture;
+import com.tiedup.remake.v2.furniture.FurnitureDefinition;
+import com.tiedup.remake.v2.furniture.network.PacketSyncFurnitureState;
import java.util.UUID;
import java.util.function.Supplier;
import net.minecraft.ChatFormatting;
@@ -118,14 +118,18 @@ public class PacketLockpickAttempt {
// Check for furniture lockpick context FIRST — if present, this is a
// furniture seat lockpick, not a body item lockpick. The context tag is
// written by PacketFurnitureEscape.handleLockpick() when starting the session.
- CompoundTag furnitureCtx = player.getPersistentData()
+ CompoundTag furnitureCtx = player
+ .getPersistentData()
.getCompound("tiedup_furniture_lockpick_ctx");
if (furnitureCtx != null && furnitureCtx.contains("furniture_id")) {
// H18: Distance check BEFORE ending session — prevents consuming session
// without reward if player moved away (reviewer H18 RISK-001)
int furnitureId = furnitureCtx.getInt("furniture_id");
Entity furnitureEntity = player.level().getEntity(furnitureId);
- if (furnitureEntity == null || player.distanceTo(furnitureEntity) > 10.0) {
+ if (
+ furnitureEntity == null ||
+ player.distanceTo(furnitureEntity) > 10.0
+ ) {
return;
}
@@ -256,7 +260,9 @@ public class PacketLockpickAttempt {
if (passenger != null) {
// Clear reconnection tag before dismount
if (passenger instanceof ServerPlayer passengerPlayer) {
- passengerPlayer.getPersistentData().remove("tiedup_locked_furniture");
+ passengerPlayer
+ .getPersistentData()
+ .remove("tiedup_locked_furniture");
}
passenger.stopRiding();
}
@@ -264,12 +270,20 @@ public class PacketLockpickAttempt {
// Play unlock sound from the furniture definition
FurnitureDefinition def = furniture.getDefinition();
if (def != null && def.feedback().unlockSound() != null) {
- player.level().playSound(
- null,
- entity.getX(), entity.getY(), entity.getZ(),
- SoundEvent.createVariableRangeEvent(def.feedback().unlockSound()),
- SoundSource.BLOCKS, 1.0f, 1.0f
- );
+ player
+ .level()
+ .playSound(
+ null,
+ entity.getX(),
+ entity.getY(),
+ entity.getZ(),
+ SoundEvent.createVariableRangeEvent(
+ def.feedback().unlockSound()
+ ),
+ SoundSource.BLOCKS,
+ 1.0f,
+ 1.0f
+ );
}
// Broadcast updated lock/anim state to all tracking clients
@@ -277,7 +291,9 @@ public class PacketLockpickAttempt {
TiedUpMod.LOGGER.info(
"[PacketLockpickAttempt] Player {} picked furniture lock on entity {} seat '{}'",
- player.getName().getString(), furnitureEntityId, seatId
+ player.getName().getString(),
+ furnitureEntityId,
+ seatId
);
}
@@ -337,7 +353,8 @@ public class PacketLockpickAttempt {
// Check for JAM (5% chance on miss) — only applies to body item lockpick sessions.
// Furniture seat locks do not have a jam mechanic (there is no ILockable item to jam).
boolean jammed = false;
- boolean isFurnitureSession = player.getPersistentData()
+ boolean isFurnitureSession = player
+ .getPersistentData()
.getCompound("tiedup_furniture_lockpick_ctx")
.contains("furniture_id");
@@ -419,7 +436,9 @@ public class PacketLockpickAttempt {
ItemStack lockpickStack = ItemLockpick.findLockpickInInventory(player);
if (!lockpickStack.isEmpty()) {
lockpickStack.setDamageValue(lockpickStack.getDamageValue() + 1);
- if (lockpickStack.getDamageValue() >= lockpickStack.getMaxDamage()) {
+ if (
+ lockpickStack.getDamageValue() >= lockpickStack.getMaxDamage()
+ ) {
lockpickStack.shrink(1);
}
}
@@ -430,7 +449,8 @@ public class PacketLockpickAttempt {
if (state == null) return;
ItemStack collar = V2EquipmentHelper.getInRegion(
- player, BodyRegionV2.NECK
+ player,
+ BodyRegionV2.NECK
);
if (collar.isEmpty()) return;
diff --git a/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameMove.java b/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameMove.java
index bd0a4a4..a767164 100644
--- a/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameMove.java
+++ b/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameMove.java
@@ -10,7 +10,6 @@ import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.network.NetworkEvent;
/**
- * Phase 2: Packet for player position update during lockpick mini-game (Client to Server).
*
* Contains:
* - Session UUID
diff --git a/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameResult.java b/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameResult.java
index a786f5a..33a2be5 100644
--- a/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameResult.java
+++ b/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameResult.java
@@ -8,7 +8,6 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
/**
- * Phase 2: Packet to send lockpick result to client (Server to Client).
*
* Contains:
* - Session UUID
@@ -112,8 +111,10 @@ public class PacketLockpickMiniGameResult extends AbstractClientPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketLockpickMiniGameResult pkt) {
- net.minecraft.client.Minecraft mc = net.minecraft.client.Minecraft.getInstance();
+ net.minecraft.client.Minecraft mc =
+ net.minecraft.client.Minecraft.getInstance();
if (mc.player == null) {
return;
}
@@ -124,10 +125,16 @@ public class PacketLockpickMiniGameResult extends AbstractClientPacket {
pkt.remainingUses
);
- if (mc.screen instanceof com.tiedup.remake.client.gui.screens.LockpickMiniGameScreen screen) {
+ if (
+ mc.screen instanceof
+ com.tiedup.remake.client.gui.screens.LockpickMiniGameScreen screen
+ ) {
switch (pkt.resultType) {
case SUCCESS -> screen.onSuccess();
- case MISSED -> screen.onMissed(pkt.remainingUses, pkt.distance);
+ case MISSED -> screen.onMissed(
+ pkt.remainingUses,
+ pkt.distance
+ );
case OUT_OF_PICKS -> screen.onOutOfPicks();
case CANCELLED -> screen.onCancelled();
}
diff --git a/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameStart.java b/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameStart.java
index 361efe0..bafac97 100644
--- a/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameStart.java
+++ b/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameStart.java
@@ -17,7 +17,6 @@ import net.minecraft.world.item.ItemStack;
import net.minecraftforge.network.NetworkEvent;
/**
- * Phase 2: Packet to start a Lockpick mini-game session (Client to Server).
*
* Sent when player clicks "Lockpick" on a locked item.
*/
@@ -34,7 +33,9 @@ public class PacketLockpickMiniGameStart {
}
public static PacketLockpickMiniGameStart decode(FriendlyByteBuf buf) {
- return new PacketLockpickMiniGameStart(buf.readEnum(BodyRegionV2.class));
+ return new PacketLockpickMiniGameStart(
+ buf.readEnum(BodyRegionV2.class)
+ );
}
public void handle(Supplier ctx) {
diff --git a/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameState.java b/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameState.java
index a3bb13b..b56696b 100644
--- a/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameState.java
+++ b/src/main/java/com/tiedup/remake/network/minigame/PacketLockpickMiniGameState.java
@@ -8,7 +8,6 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
/**
- * Phase 2: Packet to send lockpick initial state to client (Server to Client).
*
* Contains:
* - Session UUID
@@ -69,8 +68,10 @@ public class PacketLockpickMiniGameState extends AbstractClientPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketLockpickMiniGameState pkt) {
- net.minecraft.client.Minecraft mc = net.minecraft.client.Minecraft.getInstance();
+ net.minecraft.client.Minecraft mc =
+ net.minecraft.client.Minecraft.getInstance();
if (mc.player == null) {
return;
}
diff --git a/src/main/java/com/tiedup/remake/network/personality/NpcCommandType.java b/src/main/java/com/tiedup/remake/network/personality/NpcCommandType.java
index 0c33c96..1332716 100644
--- a/src/main/java/com/tiedup/remake/network/personality/NpcCommandType.java
+++ b/src/main/java/com/tiedup/remake/network/personality/NpcCommandType.java
@@ -9,5 +9,5 @@ public enum NpcCommandType {
CANCEL_COMMAND,
SELECT_JOB,
CYCLE_FOLLOW_DISTANCE,
- TOGGLE_AUTO_REST
+ TOGGLE_AUTO_REST,
}
diff --git a/src/main/java/com/tiedup/remake/network/personality/PacketNpcCommand.java b/src/main/java/com/tiedup/remake/network/personality/PacketNpcCommand.java
index cf5ca07..72adc86 100644
--- a/src/main/java/com/tiedup/remake/network/personality/PacketNpcCommand.java
+++ b/src/main/java/com/tiedup/remake/network/personality/PacketNpcCommand.java
@@ -17,7 +17,6 @@ import com.tiedup.remake.personality.PersonalityState;
import com.tiedup.remake.v2.BodyRegionV2;
import java.util.UUID;
import java.util.function.Supplier;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.core.BlockPos;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
@@ -25,6 +24,7 @@ import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.network.NetworkEvent;
+import org.jetbrains.annotations.Nullable;
/**
* Unified C2S packet for all NPC command wand actions.
@@ -39,35 +39,82 @@ public class PacketNpcCommand {
private final NpcCommandType type;
// Optional fields depending on type
- private final String commandName; // GIVE_COMMAND, SELECT_JOB
+ private final String commandName; // GIVE_COMMAND, SELECT_JOB
+
@Nullable
- private final BlockPos targetPos; // GIVE_COMMAND only
- private final boolean refreshScreen; // CYCLE_FOLLOW_DISTANCE, TOGGLE_AUTO_REST
+ private final BlockPos targetPos; // GIVE_COMMAND only
+
+ private final boolean refreshScreen; // CYCLE_FOLLOW_DISTANCE, TOGGLE_AUTO_REST
// --- Constructors for each command type ---
- public static PacketNpcCommand giveCommand(UUID entityUUID, NpcCommand command, @Nullable BlockPos targetPos) {
- return new PacketNpcCommand(entityUUID, NpcCommandType.GIVE_COMMAND, command.name(), targetPos, false);
+ public static PacketNpcCommand giveCommand(
+ UUID entityUUID,
+ NpcCommand command,
+ @Nullable BlockPos targetPos
+ ) {
+ return new PacketNpcCommand(
+ entityUUID,
+ NpcCommandType.GIVE_COMMAND,
+ command.name(),
+ targetPos,
+ false
+ );
}
public static PacketNpcCommand cancelCommand(UUID entityUUID) {
- return new PacketNpcCommand(entityUUID, NpcCommandType.CANCEL_COMMAND, "", null, false);
+ return new PacketNpcCommand(
+ entityUUID,
+ NpcCommandType.CANCEL_COMMAND,
+ "",
+ null,
+ false
+ );
}
public static PacketNpcCommand selectJob(UUID entityUUID, NpcCommand job) {
- return new PacketNpcCommand(entityUUID, NpcCommandType.SELECT_JOB, job.name(), null, false);
+ return new PacketNpcCommand(
+ entityUUID,
+ NpcCommandType.SELECT_JOB,
+ job.name(),
+ null,
+ false
+ );
}
- public static PacketNpcCommand cycleFollowDistance(UUID entityUUID, boolean refreshScreen) {
- return new PacketNpcCommand(entityUUID, NpcCommandType.CYCLE_FOLLOW_DISTANCE, "", null, refreshScreen);
+ public static PacketNpcCommand cycleFollowDistance(
+ UUID entityUUID,
+ boolean refreshScreen
+ ) {
+ return new PacketNpcCommand(
+ entityUUID,
+ NpcCommandType.CYCLE_FOLLOW_DISTANCE,
+ "",
+ null,
+ refreshScreen
+ );
}
- public static PacketNpcCommand toggleAutoRest(UUID entityUUID, boolean refreshScreen) {
- return new PacketNpcCommand(entityUUID, NpcCommandType.TOGGLE_AUTO_REST, "", null, refreshScreen);
+ public static PacketNpcCommand toggleAutoRest(
+ UUID entityUUID,
+ boolean refreshScreen
+ ) {
+ return new PacketNpcCommand(
+ entityUUID,
+ NpcCommandType.TOGGLE_AUTO_REST,
+ "",
+ null,
+ refreshScreen
+ );
}
- private PacketNpcCommand(UUID entityUUID, NpcCommandType type, String commandName,
- @Nullable BlockPos targetPos, boolean refreshScreen) {
+ private PacketNpcCommand(
+ UUID entityUUID,
+ NpcCommandType type,
+ String commandName,
+ @Nullable BlockPos targetPos,
+ boolean refreshScreen
+ ) {
this.entityUUID = entityUUID;
this.type = type;
this.commandName = commandName;
@@ -89,8 +136,11 @@ public class PacketNpcCommand {
}
}
case SELECT_JOB -> buf.writeUtf(commandName);
- case CYCLE_FOLLOW_DISTANCE, TOGGLE_AUTO_REST -> buf.writeBoolean(refreshScreen);
- case CANCEL_COMMAND -> {} // no extra data
+ case CYCLE_FOLLOW_DISTANCE, TOGGLE_AUTO_REST -> buf.writeBoolean(
+ refreshScreen
+ );
+ case CANCEL_COMMAND -> {
+ } // no extra data
}
}
@@ -109,19 +159,23 @@ public class PacketNpcCommand {
}
}
case SELECT_JOB -> cmd = buf.readUtf(32);
- case CYCLE_FOLLOW_DISTANCE, TOGGLE_AUTO_REST -> refresh = buf.readBoolean();
- case CANCEL_COMMAND -> {}
+ case CYCLE_FOLLOW_DISTANCE, TOGGLE_AUTO_REST -> refresh =
+ buf.readBoolean();
+ case CANCEL_COMMAND -> {
+ }
}
return new PacketNpcCommand(uuid, type, cmd, pos, refresh);
}
public void handle(Supplier ctx) {
- ctx.get().enqueueWork(() -> {
- ServerPlayer sender = ctx.get().getSender();
- if (sender == null) return;
- handleServer(sender);
- });
+ ctx
+ .get()
+ .enqueueWork(() -> {
+ ServerPlayer sender = ctx.get().getSender();
+ if (sender == null) return;
+ handleServer(sender);
+ });
ctx.get().setPacketHandled(true);
}
@@ -130,17 +184,25 @@ public class PacketNpcCommand {
private void handleServer(ServerPlayer sender) {
if (!PacketRateLimiter.allowPacket(sender, "action")) return;
- Entity entity = ((net.minecraft.server.level.ServerLevel) sender.level()).getEntity(entityUUID);
+ Entity entity = (
+ (net.minecraft.server.level.ServerLevel) sender.level()
+ ).getEntity(entityUUID);
if (!(entity instanceof EntityDamsel damsel)) {
- TiedUpMod.LOGGER.warn("[PacketNpcCommand:{}] Entity {} not found or not a Damsel",
- type, entityUUID);
+ TiedUpMod.LOGGER.warn(
+ "[PacketNpcCommand:{}] Entity {} not found or not a Damsel",
+ type,
+ entityUUID
+ );
return;
}
double distance = sender.distanceTo(damsel);
if (distance > MAX_COMMAND_RANGE) {
- SystemMessageManager.sendToPlayer(sender,
- SystemMessageManager.MessageCategory.ERROR, "Target is too far away!");
+ SystemMessageManager.sendToPlayer(
+ sender,
+ SystemMessageManager.MessageCategory.ERROR,
+ "Target is too far away!"
+ );
return;
}
@@ -148,7 +210,10 @@ public class PacketNpcCommand {
case GIVE_COMMAND -> handleGiveCommand(sender, damsel);
case CANCEL_COMMAND -> handleCancelCommand(sender, damsel);
case SELECT_JOB -> handleSelectJob(sender, damsel);
- case CYCLE_FOLLOW_DISTANCE -> handleCycleFollowDistance(sender, damsel);
+ case CYCLE_FOLLOW_DISTANCE -> handleCycleFollowDistance(
+ sender,
+ damsel
+ );
case TOGGLE_AUTO_REST -> handleToggleAutoRest(sender, damsel);
}
}
@@ -156,19 +221,32 @@ public class PacketNpcCommand {
private void handleGiveCommand(ServerPlayer sender, EntityDamsel damsel) {
NpcCommand command = NpcCommand.fromString(commandName);
if (command == NpcCommand.NONE && !"NONE".equals(commandName)) {
- TiedUpMod.LOGGER.warn("[PacketNpcCommand:GIVE] Unknown command: {}", commandName);
+ TiedUpMod.LOGGER.warn(
+ "[PacketNpcCommand:GIVE] Unknown command: {}",
+ commandName
+ );
return;
}
boolean success = damsel.giveCommand(sender, command, targetPos);
String npcName = damsel.getNpcName();
if (success) {
- EntityDialogueManager.talkTo(damsel, sender, DialogueCategory.COMMAND_ACCEPT);
- SystemMessageManager.sendToPlayer(sender,
- SystemMessageManager.MessageCategory.INFO,
- npcName + " accepted command: " + command.name());
- TiedUpMod.LOGGER.debug("[PacketNpcCommand:GIVE] {} gave command {} to {}",
- sender.getName().getString(), command.name(), npcName);
+ EntityDialogueManager.talkTo(
+ damsel,
+ sender,
+ DialogueCategory.COMMAND_ACCEPT
+ );
+ SystemMessageManager.sendToPlayer(
+ sender,
+ SystemMessageManager.MessageCategory.INFO,
+ npcName + " accepted command: " + command.name()
+ );
+ TiedUpMod.LOGGER.debug(
+ "[PacketNpcCommand:GIVE] {} gave command {} to {}",
+ sender.getName().getString(),
+ command.name(),
+ npcName
+ );
}
}
@@ -177,16 +255,25 @@ public class PacketNpcCommand {
damsel.cancelCommand();
String npcName = damsel.getNpcName();
- SystemMessageManager.sendToPlayer(sender,
- SystemMessageManager.MessageCategory.INFO, npcName + "'s command cancelled.");
- TiedUpMod.LOGGER.debug("[PacketNpcCommand:CANCEL] {} cancelled command for {}",
- sender.getName().getString(), npcName);
+ SystemMessageManager.sendToPlayer(
+ sender,
+ SystemMessageManager.MessageCategory.INFO,
+ npcName + "'s command cancelled."
+ );
+ TiedUpMod.LOGGER.debug(
+ "[PacketNpcCommand:CANCEL] {} cancelled command for {}",
+ sender.getName().getString(),
+ npcName
+ );
}
private void handleSelectJob(ServerPlayer sender, EntityDamsel damsel) {
NpcCommand job = NpcCommand.fromString(commandName);
if (!job.isWorkCommand()) {
- TiedUpMod.LOGGER.warn("[PacketNpcCommand:JOB] {} is not a work command", commandName);
+ TiedUpMod.LOGGER.warn(
+ "[PacketNpcCommand:JOB] {} is not a work command",
+ commandName
+ );
return;
}
@@ -195,7 +282,9 @@ public class PacketNpcCommand {
String npcName = damsel.getNpcName();
if (state.willObeyCommand(sender, job)) {
- ItemStack mainHand = sender.getItemInHand(InteractionHand.MAIN_HAND);
+ ItemStack mainHand = sender.getItemInHand(
+ InteractionHand.MAIN_HAND
+ );
ItemStack offHand = sender.getItemInHand(InteractionHand.OFF_HAND);
ItemStack wand = null;
@@ -207,17 +296,32 @@ public class PacketNpcCommand {
if (wand != null) {
ItemCommandWand.enterSelectionMode(wand, damsel.getUUID(), job);
- EntityDialogueManager.talkTo(damsel, sender, DialogueCategory.COMMAND_ACCEPT);
- SystemMessageManager.sendToPlayer(sender,
- SystemMessageManager.MessageCategory.INFO,
- npcName + " is ready to " + job.name() + ". Click a chest to set work zone!");
- TiedUpMod.LOGGER.debug("[PacketNpcCommand:JOB] {} accepted job {} - wand in selection mode",
- npcName, job.name());
+ EntityDialogueManager.talkTo(
+ damsel,
+ sender,
+ DialogueCategory.COMMAND_ACCEPT
+ );
+ SystemMessageManager.sendToPlayer(
+ sender,
+ SystemMessageManager.MessageCategory.INFO,
+ npcName +
+ " is ready to " +
+ job.name() +
+ ". Click a chest to set work zone!"
+ );
+ TiedUpMod.LOGGER.debug(
+ "[PacketNpcCommand:JOB] {} accepted job {} - wand in selection mode",
+ npcName,
+ job.name()
+ );
}
}
}
- private void handleCycleFollowDistance(ServerPlayer sender, EntityDamsel damsel) {
+ private void handleCycleFollowDistance(
+ ServerPlayer sender,
+ EntityDamsel damsel
+ ) {
if (!validateCollarOwnership(sender, damsel)) return;
PersonalityState state = damsel.getPersonalityState();
@@ -231,26 +335,39 @@ public class PacketNpcCommand {
};
state.setFollowDistance(next);
- TiedUpMod.LOGGER.debug("[PacketNpcCommand:FOLLOW] {} changed {} follow distance to {}",
- sender.getName().getString(), damsel.getNpcName(), next.name());
+ TiedUpMod.LOGGER.debug(
+ "[PacketNpcCommand:FOLLOW] {} changed {} follow distance to {}",
+ sender.getName().getString(),
+ damsel.getNpcName(),
+ next.name()
+ );
if (refreshScreen) {
sendRefreshedScreen(sender, damsel, state);
}
}
- private void handleToggleAutoRest(ServerPlayer sender, EntityDamsel damsel) {
+ private void handleToggleAutoRest(
+ ServerPlayer sender,
+ EntityDamsel damsel
+ ) {
if (!validateCollarOwnership(sender, damsel)) return;
PersonalityState state = damsel.getPersonalityState();
if (state == null) return;
boolean newState = state.toggleAutoRest();
- TiedUpMod.LOGGER.debug("[PacketNpcCommand:REST] {} toggled {} auto-rest to {}",
- sender.getName().getString(), damsel.getNpcName(), newState ? "ON" : "OFF");
- SystemMessageManager.sendToPlayer(sender,
- SystemMessageManager.MessageCategory.INFO,
- "Auto-Rest: " + (newState ? "ON" : "OFF"));
+ TiedUpMod.LOGGER.debug(
+ "[PacketNpcCommand:REST] {} toggled {} auto-rest to {}",
+ sender.getName().getString(),
+ damsel.getNpcName(),
+ newState ? "ON" : "OFF"
+ );
+ SystemMessageManager.sendToPlayer(
+ sender,
+ SystemMessageManager.MessageCategory.INFO,
+ "Auto-Rest: " + (newState ? "ON" : "OFF")
+ );
if (refreshScreen) {
sendRefreshedScreen(sender, damsel, state);
@@ -259,11 +376,16 @@ public class PacketNpcCommand {
// --- Shared helpers ---
- private boolean validateCollarOwnership(ServerPlayer sender, EntityDamsel damsel) {
+ private boolean validateCollarOwnership(
+ ServerPlayer sender,
+ EntityDamsel damsel
+ ) {
if (!damsel.hasCollar()) {
- SystemMessageManager.sendToPlayer(sender,
- SystemMessageManager.MessageCategory.ERROR,
- damsel.getNpcName() + " is not wearing a collar!");
+ SystemMessageManager.sendToPlayer(
+ sender,
+ SystemMessageManager.MessageCategory.ERROR,
+ damsel.getNpcName() + " is not wearing a collar!"
+ );
return false;
}
@@ -273,17 +395,22 @@ public class PacketNpcCommand {
}
if (!collarItem.getOwners(collar).contains(sender.getUUID())) {
- SystemMessageManager.sendToPlayer(sender,
- SystemMessageManager.MessageCategory.ERROR,
- "You don't own " + damsel.getNpcName() + "'s collar!");
+ SystemMessageManager.sendToPlayer(
+ sender,
+ SystemMessageManager.MessageCategory.ERROR,
+ "You don't own " + damsel.getNpcName() + "'s collar!"
+ );
return false;
}
return true;
}
- private static void sendRefreshedScreen(ServerPlayer sender, EntityDamsel damsel,
- PersonalityState state) {
+ private static void sendRefreshedScreen(
+ ServerPlayer sender,
+ EntityDamsel damsel,
+ PersonalityState state
+ ) {
NpcNeeds needs = state.getNeeds();
String homeType = state.getHomeType().name();
@@ -300,13 +427,24 @@ public class PacketNpcCommand {
}
ModNetwork.sendToPlayer(
- new PacketOpenCommandWandScreen(
- damsel.getUUID(), damsel.getNpcName(),
- state.getPersonality().name(), activeCmd.name(),
- needs.getHunger(), needs.getRest(), state.getMood(),
- state.getFollowDistance().name(), homeType,
- state.isAutoRestEnabled(), "", "",
- activeJobLevelName, activeJobXp, activeJobXpMax),
- sender);
+ new PacketOpenCommandWandScreen(
+ damsel.getUUID(),
+ damsel.getNpcName(),
+ state.getPersonality().name(),
+ activeCmd.name(),
+ needs.getHunger(),
+ needs.getRest(),
+ state.getMood(),
+ state.getFollowDistance().name(),
+ homeType,
+ state.isAutoRestEnabled(),
+ "",
+ "",
+ activeJobLevelName,
+ activeJobXp,
+ activeJobXpMax
+ ),
+ sender
+ );
}
}
diff --git a/src/main/java/com/tiedup/remake/network/personality/PacketRequestNpcInventory.java b/src/main/java/com/tiedup/remake/network/personality/PacketRequestNpcInventory.java
index dd288a4..6c4da6a 100644
--- a/src/main/java/com/tiedup/remake/network/personality/PacketRequestNpcInventory.java
+++ b/src/main/java/com/tiedup/remake/network/personality/PacketRequestNpcInventory.java
@@ -1,9 +1,9 @@
package com.tiedup.remake.network.personality;
import com.tiedup.remake.core.TiedUpMod;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.entities.EntityDamsel;
import com.tiedup.remake.network.PacketRateLimiter;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.function.Supplier;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
diff --git a/src/main/java/com/tiedup/remake/network/personality/PacketSlaveBeingFreed.java b/src/main/java/com/tiedup/remake/network/personality/PacketSlaveBeingFreed.java
index cc4b7a3..301a96b 100644
--- a/src/main/java/com/tiedup/remake/network/personality/PacketSlaveBeingFreed.java
+++ b/src/main/java/com/tiedup/remake/network/personality/PacketSlaveBeingFreed.java
@@ -14,7 +14,6 @@ import net.minecraftforge.network.NetworkEvent;
* Packet sent from server to client to alert an owner that someone
* is trying to free their slave.
*
- * Phase 11: Multiplayer protection system
*/
public class PacketSlaveBeingFreed {
diff --git a/src/main/java/com/tiedup/remake/network/selfbondage/PacketSelfBondage.java b/src/main/java/com/tiedup/remake/network/selfbondage/PacketSelfBondage.java
index 62afb50..1eb0fed 100644
--- a/src/main/java/com/tiedup/remake/network/selfbondage/PacketSelfBondage.java
+++ b/src/main/java/com/tiedup/remake/network/selfbondage/PacketSelfBondage.java
@@ -1,5 +1,6 @@
package com.tiedup.remake.network.selfbondage;
+import com.tiedup.remake.core.SettingsAccessor;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.items.base.*;
import com.tiedup.remake.network.ModNetwork;
@@ -12,7 +13,6 @@ import com.tiedup.remake.tasks.TyingPlayerTask;
import com.tiedup.remake.tasks.TyingTask;
import com.tiedup.remake.tasks.V2TyingPlayerTask;
import com.tiedup.remake.util.KidnappedHelper;
-import com.tiedup.remake.core.SettingsAccessor;
import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.v2.bondage.IV2BondageItem;
import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
@@ -225,8 +225,10 @@ public class PacketSelfBondage {
// Check if all target regions are already occupied or blocked
boolean allBlocked = true;
for (BodyRegionV2 region : v2Item.getOccupiedRegions(stack)) {
- if (!V2EquipmentHelper.isRegionOccupied(player, region)
- && !V2EquipmentHelper.isRegionBlocked(player, region)) {
+ if (
+ !V2EquipmentHelper.isRegionOccupied(player, region) &&
+ !V2EquipmentHelper.isRegionBlocked(player, region)
+ ) {
allBlocked = false;
break;
}
@@ -248,21 +250,23 @@ public class PacketSelfBondage {
// Create V2 tying task (uses V2EquipmentHelper on completion, NOT putBindOn)
V2TyingPlayerTask newTask = new V2TyingPlayerTask(
- stack.copy(), // copy for display/matching
- stack, // live reference for consumption
+ stack.copy(), // copy for display/matching
+ stack, // live reference for consumption
state,
- player, // target is self
+ player, // target is self
tyingSeconds,
player.level(),
- player // kidnapper is also self
+ player // kidnapper is also self
);
TyingTask currentTask = playerState.getCurrentTyingTask();
- if (currentTask == null
- || !currentTask.isSameTarget(player)
- || currentTask.isOutdated()
- || !ItemStack.matches(currentTask.getBind(), stack)) {
+ if (
+ currentTask == null ||
+ !currentTask.isSameTarget(player) ||
+ currentTask.isOutdated() ||
+ !ItemStack.matches(currentTask.getBind(), stack)
+ ) {
// Start new task
playerState.setCurrentTyingTask(newTask);
newTask.start();
diff --git a/src/main/java/com/tiedup/remake/network/slave/PacketMasterEquip.java b/src/main/java/com/tiedup/remake/network/slave/PacketMasterEquip.java
index 3072a8f..daccf5f 100644
--- a/src/main/java/com/tiedup/remake/network/slave/PacketMasterEquip.java
+++ b/src/main/java/com/tiedup/remake/network/slave/PacketMasterEquip.java
@@ -25,7 +25,11 @@ public class PacketMasterEquip {
private final BodyRegionV2 region;
private final int inventorySlot;
- public PacketMasterEquip(UUID targetEntityUUID, BodyRegionV2 region, int inventorySlot) {
+ public PacketMasterEquip(
+ UUID targetEntityUUID,
+ BodyRegionV2 region,
+ int inventorySlot
+ ) {
this.targetEntityUUID = targetEntityUUID;
this.region = region;
this.inventorySlot = inventorySlot;
@@ -38,10 +42,17 @@ public class PacketMasterEquip {
}
public static PacketMasterEquip decode(FriendlyByteBuf buf) {
- return new PacketMasterEquip(buf.readUUID(), buf.readEnum(BodyRegionV2.class), buf.readVarInt());
+ return new PacketMasterEquip(
+ buf.readUUID(),
+ buf.readEnum(BodyRegionV2.class),
+ buf.readVarInt()
+ );
}
- public static void handle(PacketMasterEquip msg, Supplier ctxSupplier) {
+ public static void handle(
+ PacketMasterEquip msg,
+ Supplier ctxSupplier
+ ) {
NetworkEvent.Context ctx = ctxSupplier.get();
ctx.enqueueWork(() -> {
ServerPlayer sender = ctx.getSender();
@@ -49,31 +60,53 @@ public class PacketMasterEquip {
if (!PacketRateLimiter.allowPacket(sender, "action")) return;
// Find target entity (reuse package-private method from PacketSlaveItemManage)
- LivingEntity target = PacketSlaveItemManage.findTargetEntity(sender, msg.targetEntityUUID);
+ LivingEntity target = PacketSlaveItemManage.findTargetEntity(
+ sender,
+ msg.targetEntityUUID
+ );
if (target == null) return;
// Distance check (5 blocks)
if (sender.distanceTo(target) > 5.0f) return;
// Collar ownership check
- IBondageState targetState = KidnappedHelper.getKidnappedState(target);
+ IBondageState targetState = KidnappedHelper.getKidnappedState(
+ target
+ );
if (targetState == null || !targetState.hasCollar()) return;
ItemStack collarStack = targetState.getEquipment(BodyRegionV2.NECK);
if (collarStack.getItem() instanceof ItemCollar collar) {
- if (!collar.isOwner(collarStack, sender) && !sender.hasPermissions(2)) return;
+ if (
+ !collar.isOwner(collarStack, sender) &&
+ !sender.hasPermissions(2)
+ ) return;
}
// Validate sender's inventory slot
- if (msg.inventorySlot < 0 || msg.inventorySlot >= sender.getInventory().getContainerSize()) return;
+ if (
+ msg.inventorySlot < 0 ||
+ msg.inventorySlot >= sender.getInventory().getContainerSize()
+ ) return;
ItemStack stack = sender.getInventory().getItem(msg.inventorySlot);
if (stack.isEmpty()) return;
- if (!(stack.getItem() instanceof IV2BondageItem bondageItem)) return;
- if (!bondageItem.getOccupiedRegions(stack).contains(msg.region)) return;
+ if (
+ !(stack.getItem() instanceof IV2BondageItem bondageItem)
+ ) return;
+ if (
+ !bondageItem.getOccupiedRegions(stack).contains(msg.region)
+ ) return;
// Furniture seat blocks this region
- if (target.isPassenger() && target.getVehicle() instanceof com.tiedup.remake.v2.furniture.ISeatProvider provider) {
- com.tiedup.remake.v2.furniture.SeatDefinition seat = provider.getSeatForPassenger(target);
- if (seat != null && seat.blockedRegions().contains(msg.region)) {
+ if (
+ target.isPassenger() &&
+ target.getVehicle() instanceof
+ com.tiedup.remake.v2.furniture.ISeatProvider provider
+ ) {
+ com.tiedup.remake.v2.furniture.SeatDefinition seat =
+ provider.getSeatForPassenger(target);
+ if (
+ seat != null && seat.blockedRegions().contains(msg.region)
+ ) {
return; // Region blocked by furniture
}
}
@@ -86,7 +119,9 @@ public class PacketMasterEquip {
if (result.displaced() != null) {
for (ItemStack displaced : result.displaced()) {
if (!displaced.isEmpty()) {
- sender.getInventory().placeItemBackInInventory(displaced);
+ sender
+ .getInventory()
+ .placeItemBackInInventory(displaced);
}
}
}
diff --git a/src/main/java/com/tiedup/remake/network/slave/PacketSlaveAction.java b/src/main/java/com/tiedup/remake/network/slave/PacketSlaveAction.java
index 1bdfd68..25bfbc8 100644
--- a/src/main/java/com/tiedup/remake/network/slave/PacketSlaveAction.java
+++ b/src/main/java/com/tiedup/remake/network/slave/PacketSlaveAction.java
@@ -1,7 +1,6 @@
package com.tiedup.remake.network.slave;
import com.tiedup.remake.core.SystemMessageManager;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.items.ItemGpsCollar;
import com.tiedup.remake.items.ItemShockCollar;
@@ -11,6 +10,7 @@ import com.tiedup.remake.state.IRestrainable;
import com.tiedup.remake.state.PlayerBindState;
import com.tiedup.remake.state.PlayerCaptorManager;
import com.tiedup.remake.util.KidnappedHelper;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.UUID;
import java.util.function.Supplier;
import net.minecraft.ChatFormatting;
@@ -25,7 +25,6 @@ import net.minecraftforge.network.NetworkEvent;
* Packet for slave management actions from SlaveManagementScreen.
* Handles: SHOCK, LOCATE, FREE actions on owned slaves.
*
- * Phase 16: GUI Revamp - Slave management packets
*
* Security: Distance and dimension validation added to prevent griefing
*/
@@ -92,7 +91,6 @@ public class PacketSlaveAction {
return;
}
- // Phase 17: PlayerKidnapperManager → PlayerCaptorManager
PlayerCaptorManager manager = senderState.getCaptorManager();
// Find the target - check both formal captives AND collar-owned entities
@@ -103,8 +101,11 @@ public class PacketSlaveAction {
if (manager != null && manager.hasCaptives()) {
for (IBondageState captive : manager.getCaptives()) {
LivingEntity entity = captive.asLivingEntity();
- if (entity != null && entity.getUUID().equals(targetId)
- && captive instanceof IRestrainable r) {
+ if (
+ entity != null &&
+ entity.getUUID().equals(targetId) &&
+ captive instanceof IRestrainable r
+ ) {
targetCaptive = r;
isFormalCaptive = true;
break;
@@ -124,7 +125,9 @@ public class PacketSlaveAction {
entity
);
if (kidnapped != null && kidnapped.hasCollar()) {
- ItemStack collarStack = kidnapped.getEquipment(BodyRegionV2.NECK);
+ ItemStack collarStack = kidnapped.getEquipment(
+ BodyRegionV2.NECK
+ );
if (collarStack.getItem() instanceof ItemCollar collar) {
if (collar.isOwner(collarStack, sender)) {
targetCaptive = kidnapped;
@@ -341,7 +344,6 @@ public class PacketSlaveAction {
);
}
- // Phase 17: PlayerKidnapperManager → PlayerCaptorManager, isFormalSlave → isFormalCaptive
private void handleFree(
ServerPlayer sender,
IRestrainable target,
diff --git a/src/main/java/com/tiedup/remake/network/slave/PacketSlaveItemManage.java b/src/main/java/com/tiedup/remake/network/slave/PacketSlaveItemManage.java
index 3cbb7d3..f78c3bd 100644
--- a/src/main/java/com/tiedup/remake/network/slave/PacketSlaveItemManage.java
+++ b/src/main/java/com/tiedup/remake/network/slave/PacketSlaveItemManage.java
@@ -21,7 +21,6 @@ import net.minecraftforge.network.NetworkEvent;
* Packet sent from client to server when master uses key to manage slave's items.
* Handles LOCK, UNLOCK, and REMOVE operations using the keyUUID system.
*
- * Phase 20: Key-Lock System - Slave Item Management
*/
public class PacketSlaveItemManage {
@@ -161,7 +160,9 @@ public class PacketSlaveItemManage {
}
// Security: Verify sender owns the collar (or is admin)
- ItemStack collarStack = targetState.getEquipment(BodyRegionV2.NECK);
+ ItemStack collarStack = targetState.getEquipment(
+ BodyRegionV2.NECK
+ );
if (
collarStack.getItem() instanceof
com.tiedup.remake.items.base.ItemCollar collar
@@ -178,18 +179,23 @@ public class PacketSlaveItemManage {
}
// Furniture seat blocks this region
- if (targetEntity.isPassenger() && targetEntity.getVehicle() instanceof com.tiedup.remake.v2.furniture.ISeatProvider provider) {
- com.tiedup.remake.v2.furniture.SeatDefinition seat = provider.getSeatForPassenger(targetEntity);
- if (seat != null && seat.blockedRegions().contains(msg.region)) {
+ if (
+ targetEntity.isPassenger() &&
+ targetEntity.getVehicle() instanceof
+ com.tiedup.remake.v2.furniture.ISeatProvider provider
+ ) {
+ com.tiedup.remake.v2.furniture.SeatDefinition seat =
+ provider.getSeatForPassenger(targetEntity);
+ if (
+ seat != null &&
+ seat.blockedRegions().contains(msg.region)
+ ) {
return; // Region blocked by furniture
}
}
// Get item from region (V2 storage)
- ItemStack itemStack = getItemInRegion(
- targetState,
- msg.region
- );
+ ItemStack itemStack = getItemInRegion(targetState, msg.region);
if (itemStack.isEmpty()) {
TiedUpMod.LOGGER.debug(
"[PacketSlaveItemManage] Region {} is empty",
@@ -264,10 +270,7 @@ public class PacketSlaveItemManage {
/**
* Find target entity by UUID (player or NPC).
*/
- static LivingEntity findTargetEntity(
- ServerPlayer sender,
- UUID targetUUID
- ) {
+ static LivingEntity findTargetEntity(ServerPlayer sender, UUID targetUUID) {
// Try player first
Player player = sender.level().getPlayerByUUID(targetUUID);
if (player != null) {
@@ -432,7 +435,6 @@ public class PacketSlaveItemManage {
// Lock with keyUUID
lockable.setLockedByKeyUUID(itemStack, keyUUID);
- // Phase 21: Add lock resistance (configurable, default 250) to bind items when locked
if (
region == BodyRegionV2.ARMS &&
itemStack.getItem() instanceof
diff --git a/src/main/java/com/tiedup/remake/network/sync/PacketPlayTestAnimation.java b/src/main/java/com/tiedup/remake/network/sync/PacketPlayTestAnimation.java
index 9044ed4..67337b5 100644
--- a/src/main/java/com/tiedup/remake/network/sync/PacketPlayTestAnimation.java
+++ b/src/main/java/com/tiedup/remake/network/sync/PacketPlayTestAnimation.java
@@ -40,11 +40,17 @@ public class PacketPlayTestAnimation extends AbstractPlayerSyncPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketPlayTestAnimation pkt, Player player) {
if (pkt.animId.isEmpty()) {
- com.tiedup.remake.client.animation.BondageAnimationManager.stopAnimation(player);
+ com.tiedup.remake.client.animation.BondageAnimationManager.stopAnimation(
+ player
+ );
} else {
- com.tiedup.remake.client.animation.BondageAnimationManager.playAnimation(player, pkt.animId);
+ com.tiedup.remake.client.animation.BondageAnimationManager.playAnimation(
+ player,
+ pkt.animId
+ );
}
}
}
diff --git a/src/main/java/com/tiedup/remake/network/sync/PacketSyncMovementStyle.java b/src/main/java/com/tiedup/remake/network/sync/PacketSyncMovementStyle.java
index b29f8f9..65be72f 100644
--- a/src/main/java/com/tiedup/remake/network/sync/PacketSyncMovementStyle.java
+++ b/src/main/java/com/tiedup/remake/network/sync/PacketSyncMovementStyle.java
@@ -34,7 +34,10 @@ public class PacketSyncMovementStyle extends AbstractPlayerSyncPacket {
* @param playerUUID the affected player's UUID
* @param style the active style, or null to clear
*/
- public PacketSyncMovementStyle(UUID playerUUID, @Nullable MovementStyle style) {
+ public PacketSyncMovementStyle(
+ UUID playerUUID,
+ @Nullable MovementStyle style
+ ) {
super(playerUUID);
this.styleOrdinal = style == null ? NO_STYLE : (byte) style.ordinal();
}
@@ -70,16 +73,25 @@ public class PacketSyncMovementStyle extends AbstractPlayerSyncPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketSyncMovementStyle pkt, Player player) {
MovementStyle style = null;
- if (pkt.styleOrdinal >= 0 && pkt.styleOrdinal < MovementStyle.values().length) {
+ if (
+ pkt.styleOrdinal >= 0 &&
+ pkt.styleOrdinal < MovementStyle.values().length
+ ) {
style = MovementStyle.values()[pkt.styleOrdinal];
}
if (style != null) {
- com.tiedup.remake.client.state.MovementStyleClientState.set(player.getUUID(), style);
+ com.tiedup.remake.client.state.MovementStyleClientState.set(
+ player.getUUID(),
+ style
+ );
} else {
- com.tiedup.remake.client.state.MovementStyleClientState.clear(player.getUUID());
+ com.tiedup.remake.client.state.MovementStyleClientState.clear(
+ player.getUUID()
+ );
}
// Crawl pose management: server sets forced pose for hitbox,
diff --git a/src/main/java/com/tiedup/remake/network/sync/PacketSyncPetBedState.java b/src/main/java/com/tiedup/remake/network/sync/PacketSyncPetBedState.java
index 488e0a4..c7735b8 100644
--- a/src/main/java/com/tiedup/remake/network/sync/PacketSyncPetBedState.java
+++ b/src/main/java/com/tiedup/remake/network/sync/PacketSyncPetBedState.java
@@ -47,12 +47,17 @@ public class PacketSyncPetBedState extends AbstractPlayerSyncPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketSyncPetBedState pkt, Player player) {
if (pkt.mode == 0) {
// CLEAR — only stop animation if no bondage animation should be playing
// (AnimationTickHandler will re-apply bondage anim on next tick if needed)
- com.tiedup.remake.client.animation.BondageAnimationManager.stopAnimation(player);
- com.tiedup.remake.client.state.PetBedClientState.clear(player.getUUID());
+ com.tiedup.remake.client.animation.BondageAnimationManager.stopAnimation(
+ player
+ );
+ com.tiedup.remake.client.state.PetBedClientState.clear(
+ player.getUUID()
+ );
} else {
// Compute bed facing angle from block state
float facingYRot = 0f;
@@ -61,12 +66,22 @@ public class PacketSyncPetBedState extends AbstractPlayerSyncPacket {
facingYRot = state.getValue(PetBedBlock.FACING).toYRot();
}
- com.tiedup.remake.client.state.PetBedClientState.set(player.getUUID(), pkt.mode, facingYRot);
+ com.tiedup.remake.client.state.PetBedClientState.set(
+ player.getUUID(),
+ pkt.mode,
+ facingYRot
+ );
if (pkt.mode == 1) {
- com.tiedup.remake.client.animation.BondageAnimationManager.playAnimation(player, "pet_bed_sit");
+ com.tiedup.remake.client.animation.BondageAnimationManager.playAnimation(
+ player,
+ "pet_bed_sit"
+ );
} else if (pkt.mode == 2) {
- com.tiedup.remake.client.animation.BondageAnimationManager.playAnimation(player, "pet_bed_sleep");
+ com.tiedup.remake.client.animation.BondageAnimationManager.playAnimation(
+ player,
+ "pet_bed_sleep"
+ );
}
}
}
diff --git a/src/main/java/com/tiedup/remake/network/sync/SyncManager.java b/src/main/java/com/tiedup/remake/network/sync/SyncManager.java
index 1a9059d..dc3756d 100644
--- a/src/main/java/com/tiedup/remake/network/sync/SyncManager.java
+++ b/src/main/java/com/tiedup/remake/network/sync/SyncManager.java
@@ -1,19 +1,19 @@
package com.tiedup.remake.network.sync;
import com.mojang.logging.LogUtils;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.network.ModNetwork;
import com.tiedup.remake.util.ValidationHelper;
+import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
import java.util.*;
import java.util.function.Function;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
+import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
/**
@@ -43,7 +43,6 @@ public class SyncManager {
* 2. Create packet from player
* 3. Send to all tracking and self
*
- * Phase 2 Refactoring: Eliminates code duplication in sync methods.
*
* @param player The player to sync (must be ServerPlayer)
* @param packetFactory Function to create packet from player
@@ -114,7 +113,8 @@ public class SyncManager {
public static void syncClothesConfig(Player player) {
ValidationHelper.asServerPlayer(player).ifPresent(serverPlayer -> {
ItemStack clothes = V2EquipmentHelper.getInRegion(
- player, BodyRegionV2.TORSO
+ player,
+ BodyRegionV2.TORSO
);
PacketSyncClothesConfig packet = new PacketSyncClothesConfig(
player.getUUID(),
@@ -182,7 +182,8 @@ public class SyncManager {
// Send other player's clothes config to target
ItemStack clothes = V2EquipmentHelper.getInRegion(
- otherPlayer, BodyRegionV2.TORSO
+ otherPlayer,
+ BodyRegionV2.TORSO
);
if (!clothes.isEmpty()) {
PacketSyncClothesConfig clothesPacket =
diff --git a/src/main/java/com/tiedup/remake/network/trader/PacketBuyCaptive.java b/src/main/java/com/tiedup/remake/network/trader/PacketBuyCaptive.java
index 962211f..01da680 100644
--- a/src/main/java/com/tiedup/remake/network/trader/PacketBuyCaptive.java
+++ b/src/main/java/com/tiedup/remake/network/trader/PacketBuyCaptive.java
@@ -1,7 +1,6 @@
package com.tiedup.remake.network.trader;
import com.tiedup.remake.cells.CampOwnership;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.cells.CellDataV2;
import com.tiedup.remake.cells.CellRegistryV2;
import com.tiedup.remake.core.TiedUpMod;
@@ -10,6 +9,7 @@ import com.tiedup.remake.entities.EntitySlaveTrader;
import com.tiedup.remake.state.IRestrainable;
import com.tiedup.remake.util.KidnappedHelper;
import com.tiedup.remake.util.tasks.ItemTask;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.List;
import java.util.UUID;
import java.util.function.Supplier;
diff --git a/src/main/java/com/tiedup/remake/network/trader/PacketOpenTraderScreen.java b/src/main/java/com/tiedup/remake/network/trader/PacketOpenTraderScreen.java
index 2117ef4..b8881f8 100644
--- a/src/main/java/com/tiedup/remake/network/trader/PacketOpenTraderScreen.java
+++ b/src/main/java/com/tiedup/remake/network/trader/PacketOpenTraderScreen.java
@@ -105,12 +105,16 @@ public class PacketOpenTraderScreen extends AbstractClientPacket {
@OnlyIn(Dist.CLIENT)
private static class ClientHandler {
+
private static void handle(PacketOpenTraderScreen pkt) {
- net.minecraft.client.Minecraft mc = net.minecraft.client.Minecraft.getInstance();
+ net.minecraft.client.Minecraft mc =
+ net.minecraft.client.Minecraft.getInstance();
if (mc.player == null) return;
// Convert network data to screen data
- List screenOffers = new ArrayList<>();
+ List<
+ com.tiedup.remake.client.gui.screens.SlaveTraderScreen.CaptiveOffer
+ > screenOffers = new ArrayList<>();
for (CaptiveOfferData data : pkt.offers) {
screenOffers.add(
new com.tiedup.remake.client.gui.screens.SlaveTraderScreen.CaptiveOffer(
@@ -129,7 +133,11 @@ public class PacketOpenTraderScreen extends AbstractClientPacket {
);
mc.setScreen(
- new com.tiedup.remake.client.gui.screens.SlaveTraderScreen(pkt.traderEntityId, pkt.traderName, screenOffers)
+ new com.tiedup.remake.client.gui.screens.SlaveTraderScreen(
+ pkt.traderEntityId,
+ pkt.traderName,
+ screenOffers
+ )
);
}
}
diff --git a/src/main/java/com/tiedup/remake/personality/CellQuality.java b/src/main/java/com/tiedup/remake/personality/CellQuality.java
index a84ef77..57b2ab5 100644
--- a/src/main/java/com/tiedup/remake/personality/CellQuality.java
+++ b/src/main/java/com/tiedup/remake/personality/CellQuality.java
@@ -2,13 +2,13 @@ package com.tiedup.remake.personality;
import com.tiedup.remake.cells.CellDataV2;
import com.tiedup.remake.v2.blocks.PetBedBlock;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LightLayer;
import net.minecraft.world.level.block.BedBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.CarpetBlock;
+import org.jetbrains.annotations.Nullable;
/**
* Quality of the cell/environment around an NPC's home.
diff --git a/src/main/java/com/tiedup/remake/personality/HomeType.java b/src/main/java/com/tiedup/remake/personality/HomeType.java
index 5b629f4..1081cd9 100644
--- a/src/main/java/com/tiedup/remake/personality/HomeType.java
+++ b/src/main/java/com/tiedup/remake/personality/HomeType.java
@@ -6,7 +6,7 @@ package com.tiedup.remake.personality;
* Home types determine comfort level, which affects:
*
* - Hope regeneration (higher comfort = more hope)
- * - Cell quality evaluation (Phase 6)
+ * - Cell quality evaluation
* - Mental state decay rates
*
*/
diff --git a/src/main/java/com/tiedup/remake/personality/PersonalityState.java b/src/main/java/com/tiedup/remake/personality/PersonalityState.java
index e867674..0faf6b3 100644
--- a/src/main/java/com/tiedup/remake/personality/PersonalityState.java
+++ b/src/main/java/com/tiedup/remake/personality/PersonalityState.java
@@ -5,10 +5,10 @@ import com.tiedup.remake.cells.CellRegistryV2;
import com.tiedup.remake.entities.EntityDamsel;
import java.util.List;
import java.util.UUID;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerLevel;
+import org.jetbrains.annotations.Nullable;
/**
* Main personality state manager for an NPC.
diff --git a/src/main/java/com/tiedup/remake/prison/RansomData.java b/src/main/java/com/tiedup/remake/prison/RansomData.java
index ff41a36..0a944a4 100644
--- a/src/main/java/com/tiedup/remake/prison/RansomData.java
+++ b/src/main/java/com/tiedup/remake/prison/RansomData.java
@@ -1,19 +1,18 @@
package com.tiedup.remake.prison;
+import com.mojang.logging.LogUtils;
import java.util.UUID;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
+import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
-import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.registries.ForgeRegistries;
-import com.mojang.logging.LogUtils;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
/**
- * Phase 2: Data class representing a single ransom demand.
*
* Contains:
* - Captive and captor IDs
@@ -380,11 +379,16 @@ public class RansomData {
tag.putUUID("ransomId", ransomId);
tag.putUUID("captiveId", captiveId);
tag.putUUID("captorId", captorId);
- ResourceLocation demandItemKey = ForgeRegistries.ITEMS.getKey(demandItem);
+ ResourceLocation demandItemKey = ForgeRegistries.ITEMS.getKey(
+ demandItem
+ );
if (demandItemKey != null) {
tag.putString("demandItem", demandItemKey.toString());
} else {
- LOGGER.warn("[RansomData] Unregistered demand item {}, falling back to iron_ingot", demandItem);
+ LOGGER.warn(
+ "[RansomData] Unregistered demand item {}, falling back to iron_ingot",
+ demandItem
+ );
tag.putString("demandItem", "minecraft:iron_ingot");
}
tag.putInt("demandAmount", demandAmount);
@@ -415,7 +419,11 @@ public class RansomData {
);
if (demandItem == null) demandItem = Items.IRON_INGOT;
} catch (Exception e) {
- LOGGER.warn("[RansomData] Failed to parse demand item key '{}', falling back to iron_ingot", itemKey, e);
+ LOGGER.warn(
+ "[RansomData] Failed to parse demand item key '{}', falling back to iron_ingot",
+ itemKey,
+ e
+ );
demandItem = Items.IRON_INGOT;
}
@@ -427,7 +435,10 @@ public class RansomData {
try {
difficulty = RansomDifficulty.valueOf(tag.getString("difficulty"));
} catch (IllegalArgumentException e) {
- LOGGER.warn("[RansomData] Unknown difficulty '{}', falling back to NORMAL", tag.getString("difficulty"));
+ LOGGER.warn(
+ "[RansomData] Unknown difficulty '{}', falling back to NORMAL",
+ tag.getString("difficulty")
+ );
difficulty = RansomDifficulty.NORMAL;
}
RansomState state = RansomState.fromString(tag.getString("state"));
@@ -456,7 +467,9 @@ public class RansomData {
@Override
public String toString() {
- ResourceLocation demandItemKey = ForgeRegistries.ITEMS.getKey(demandItem);
+ ResourceLocation demandItemKey = ForgeRegistries.ITEMS.getKey(
+ demandItem
+ );
return String.format(
"RansomData{id=%s, captive=%s, demand=%dx%s, state=%s, paid=%d/%d}",
ransomId.toString().substring(0, 8),
diff --git a/src/main/java/com/tiedup/remake/prison/service/BondageService.java b/src/main/java/com/tiedup/remake/prison/service/BondageService.java
index 3226db3..b2f4b8b 100644
--- a/src/main/java/com/tiedup/remake/prison/service/BondageService.java
+++ b/src/main/java/com/tiedup/remake/prison/service/BondageService.java
@@ -1,8 +1,8 @@
package com.tiedup.remake.prison.service;
import com.tiedup.remake.core.TiedUpMod;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.state.IBondageState;
+import com.tiedup.remake.v2.BodyRegionV2;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
diff --git a/src/main/java/com/tiedup/remake/prison/service/ItemService.java b/src/main/java/com/tiedup/remake/prison/service/ItemService.java
index f44a477..4ef8634 100644
--- a/src/main/java/com/tiedup/remake/prison/service/ItemService.java
+++ b/src/main/java/com/tiedup/remake/prison/service/ItemService.java
@@ -10,7 +10,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
@@ -20,6 +19,7 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.ChestBlockEntity;
+import org.jetbrains.annotations.Nullable;
/**
* Centralized item management for the prison system.
diff --git a/src/main/java/com/tiedup/remake/prison/service/PrisonerService.java b/src/main/java/com/tiedup/remake/prison/service/PrisonerService.java
index 7fa0a0d..0c1a32b 100644
--- a/src/main/java/com/tiedup/remake/prison/service/PrisonerService.java
+++ b/src/main/java/com/tiedup/remake/prison/service/PrisonerService.java
@@ -1,7 +1,6 @@
package com.tiedup.remake.prison.service;
import com.tiedup.remake.cells.CellDataV2;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.cells.CellRegistryV2;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.entities.AbstractTiedUpNpc;
@@ -17,8 +16,8 @@ import com.tiedup.remake.state.IBondageState;
import com.tiedup.remake.state.ICaptor;
import com.tiedup.remake.state.PlayerBindState;
import com.tiedup.remake.util.KidnappedHelper;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.*;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
@@ -29,6 +28,7 @@ import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
+import org.jetbrains.annotations.Nullable;
/**
* Centralized prisoner lifecycle service.
@@ -109,7 +109,9 @@ public class PrisonerService {
}
// 2. Leash attach
- IBondageState kidnappedState = KidnappedHelper.getKidnappedState(captive);
+ IBondageState kidnappedState = KidnappedHelper.getKidnappedState(
+ captive
+ );
if (kidnappedState == null) {
// Rollback
manager.escape(
@@ -237,7 +239,9 @@ public class PrisonerService {
}
// 3. Unleash: remove captor refs and drop leash
- IBondageState kidnappedState = KidnappedHelper.getKidnappedState(captive);
+ IBondageState kidnappedState = KidnappedHelper.getKidnappedState(
+ captive
+ );
if (kidnappedState != null) {
kidnappedState.free(false); // Drop leash without dialogue/items
captor.removeCaptive(kidnappedState, false);
@@ -307,7 +311,9 @@ public class PrisonerService {
);
// 3. Leash to new captor — forceCapturedBy for damsels
- IBondageState kidnappedState = KidnappedHelper.getKidnappedState(captive);
+ IBondageState kidnappedState = KidnappedHelper.getKidnappedState(
+ captive
+ );
if (kidnappedState == null) {
// Rollback
if (isPlayer) {
@@ -378,7 +384,9 @@ public class PrisonerService {
long gameTime = level.getGameTime();
// 1. Unleash
- IBondageState kidnappedState = KidnappedHelper.getKidnappedState(captive);
+ IBondageState kidnappedState = KidnappedHelper.getKidnappedState(
+ captive
+ );
if (kidnappedState != null && kidnappedState.isCaptive()) {
kidnappedState.free(false);
}
@@ -451,7 +459,9 @@ public class PrisonerService {
ICaptor oldCaptor,
ICaptor newCaptor
) {
- IBondageState kidnappedState = KidnappedHelper.getKidnappedState(captive);
+ IBondageState kidnappedState = KidnappedHelper.getKidnappedState(
+ captive
+ );
if (kidnappedState == null) {
TiedUpMod.LOGGER.warn(
"[PrisonerService] transferCaptive() no kidnapped state for {}",
@@ -479,9 +489,7 @@ public class PrisonerService {
TiedUpMod.LOGGER.warn(
"[PrisonerService] transferCaptive() re-leash to new captor failed, attempting rollback"
);
- if (
- captive instanceof AbstractTiedUpNpc npc
- ) {
+ if (captive instanceof AbstractTiedUpNpc npc) {
npc.forceCapturedBy(oldCaptor);
} else {
kidnappedState.getCapturedBy(oldCaptor);
@@ -739,9 +747,13 @@ public class PrisonerService {
if (state != PrisonerState.CAPTURED) {
boolean hasCollarOwners = collars.hasOwners(playerId);
if (!hasCollarOwners) {
- IBondageState cap = KidnappedHelper.getKidnappedState(player);
+ IBondageState cap = KidnappedHelper.getKidnappedState(
+ player
+ );
ItemStack collar =
- cap != null ? cap.getEquipment(BodyRegionV2.NECK) : ItemStack.EMPTY;
+ cap != null
+ ? cap.getEquipment(BodyRegionV2.NECK)
+ : ItemStack.EMPTY;
if (
!collar.isEmpty() &&
diff --git a/src/main/java/com/tiedup/remake/state/CollarRegistry.java b/src/main/java/com/tiedup/remake/state/CollarRegistry.java
index a2db0b9..08e87e1 100644
--- a/src/main/java/com/tiedup/remake/state/CollarRegistry.java
+++ b/src/main/java/com/tiedup/remake/state/CollarRegistry.java
@@ -26,7 +26,6 @@ import org.jetbrains.annotations.Nullable;
* - "Slave" = Entity wearing a collar owned by a player (passive ownership)
* - "Captive" = Entity attached by leash (active physical control) - managed by PlayerCaptiveManager
*
- * Phase 17: Terminology Refactoring
*/
public class CollarRegistry extends SavedData {
diff --git a/src/main/java/com/tiedup/remake/state/IBondageState.java b/src/main/java/com/tiedup/remake/state/IBondageState.java
index 7b23ef4..6245034 100644
--- a/src/main/java/com/tiedup/remake/state/IBondageState.java
+++ b/src/main/java/com/tiedup/remake/state/IBondageState.java
@@ -28,10 +28,7 @@ import net.minecraft.world.item.ItemStack;
* @see IRestrainable
*/
public interface IBondageState extends ICapturable {
-
- // ========================================
// V2 REGION-BASED EQUIPMENT ACCESS
- // ========================================
/**
* Get the item equipped in a V2 body region.
@@ -75,11 +72,13 @@ public interface IBondageState extends ICapturable {
* @param force If true, replace even if current item is locked
* @return The old ItemStack, or empty if locked (and !force) or nothing equipped
*/
- ItemStack replaceEquipment(BodyRegionV2 region, ItemStack newStack, boolean force);
+ ItemStack replaceEquipment(
+ BodyRegionV2 region,
+ ItemStack newStack,
+ boolean force
+ );
- // ========================================
// STATE QUERIES - BONDAGE EQUIPMENT
- // ========================================
/**
* Check if entity has bind/ropes equipped.
@@ -174,7 +173,6 @@ public interface IBondageState extends ICapturable {
/**
* Check if entity has mittens equipped.
- * Phase 14.4: Mittens system
* @return true if MITTENS slot is not empty
*/
boolean hasMittens();
@@ -213,9 +211,7 @@ public interface IBondageState extends ICapturable {
*/
boolean hasKnives();
- // ========================================
// BULK OPERATIONS
- // ========================================
/**
* Apply a full set of bondage equipment at once.
@@ -298,9 +294,7 @@ public interface IBondageState extends ICapturable {
*/
int getBondageItemsWhichCanBeRemovedCount();
- // ========================================
// CLOTHES PERMISSION SYSTEM
- // ========================================
/**
* Check if a player can remove clothes from this entity.
@@ -326,15 +320,12 @@ public interface IBondageState extends ICapturable {
*/
boolean canChangeClothes();
- // ========================================
// POST-APPLY CALLBACKS
- // ========================================
/**
* Called after a bind is applied.
* Implementations can trigger additional effects (sounds, particles, etc.).
*
- * Phase 14.1.7: Added missing callback (was documented but not defined)
*/
default void checkBindAfterApply() {
// Default: no-op
@@ -373,16 +364,13 @@ public interface IBondageState extends ICapturable {
/**
* Called after mittens are applied.
- * Phase 14.4: Mittens system
*/
default void checkMittensAfterApply() {
// Default: no-op
// NPCs don't need post-apply logic by default
}
- // ========================================
// LOCK SAFETY HELPERS
- // ========================================
/**
* Execute a runnable only if the item is unlocked.
@@ -478,7 +466,10 @@ public interface IBondageState extends ICapturable {
) {
if (stack.isEmpty()) return;
// Locked ILockable items cannot be removed
- if (stack.getItem() instanceof ILockable lockable && lockable.isLocked(stack)) return;
+ if (
+ stack.getItem() instanceof ILockable lockable &&
+ lockable.isLocked(stack)
+ ) return;
// Non-ILockable items or unlocked items: remove and drop
ItemStack removed = takeOff.get();
if (!removed.isEmpty()) {
@@ -486,9 +477,7 @@ public interface IBondageState extends ICapturable {
}
}
- // ========================================
- // RESISTANCE SYSTEM (Phase 14.1.7)
- // ========================================
+ // RESISTANCE SYSTEM
/**
* Get current bind resistance value.
@@ -501,7 +490,6 @@ public interface IBondageState extends ICapturable {
* For Players: Stored in NBT, persists across sessions
*
For NPCs: Default returns 0 (instant escape, can be overridden)
*
- * Phase 14.1.7: Added to enable struggle system for NPCs
*
* @return Current resistance value (0 = can escape)
*/
@@ -517,7 +505,6 @@ public interface IBondageState extends ICapturable {
*
For Players: Updates NBT storage
*
For NPCs: Default no-op (no persistent resistance)
*
- * Phase 14.1.7: Added to enable struggle system for NPCs
*
* @param resistance New resistance value
*/
@@ -531,7 +518,6 @@ public interface IBondageState extends ICapturable {
*
*
Same as bind resistance but for collars.
*
- * Phase 14.1.7: Added for collar struggle system
*
* @return Current collar resistance value
*/
@@ -543,7 +529,6 @@ public interface IBondageState extends ICapturable {
/**
* Set current collar resistance.
*
- * Phase 14.1.7: Added for collar struggle system
*
* @param resistance New resistance value
*/
diff --git a/src/main/java/com/tiedup/remake/state/ICaptor.java b/src/main/java/com/tiedup/remake/state/ICaptor.java
index 3309a1e..f287a51 100644
--- a/src/main/java/com/tiedup/remake/state/ICaptor.java
+++ b/src/main/java/com/tiedup/remake/state/ICaptor.java
@@ -3,40 +3,33 @@ package com.tiedup.remake.state;
import net.minecraft.world.entity.Entity;
/**
- * Phase 8: Master-Captive Relationships
- * Phase 14.1.6: Refactored to use IRestrainable for NPC capture support
- * Phase 17: Terminology refactoring - slave → captive
* C6-V2: Narrowed parameters from IRestrainable to IBondageState (minimum needed type)
*
* Interface for entities that can capture other entities (players or NPCs).
*
- * Terminology (Phase 17):
+ * Terminology:
* - "Captive" = Entity attached by leash (active physical control)
* - "Slave" = Entity wearing a collar owned by someone (passive ownership via CollarRegistry)
*
* Design Pattern:
* - Interface-based design allows both players (PlayerCaptorManager)
- * and NPCs (EntityKidnapper - Phase 14.2+) to act as captors
+ * and NPCs (EntityKidnapper) to act as captors
* - Separates concerns: ICaptor manages captives, IBondageState is managed
*
* Implementation:
- * - PlayerCaptorManager: For player captors (Phase 8)
- * - EntityKidnapper: For NPC captors (Phase 14.2+)
+ * - PlayerCaptorManager: For player captors
+ * - EntityKidnapper: For NPC captors
*
* @see IBondageState
* @see PlayerCaptorManager
*/
public interface ICaptor {
- // ========================================
// Captive Management
- // ========================================
/**
* Add a captive to this captor's captive list.
* Called when capture succeeds.
*
- * Phase 14.1.6: Changed from PlayerBindState to IRestrainable
- * Phase 17: Renamed from addSlave to addCaptive
* C6-V2: Narrowed from IRestrainable to IBondageState
*
* @param captive The IBondageState entity to capture
@@ -47,8 +40,6 @@ public interface ICaptor {
* Remove a captive from this captor's captive list.
* Called when freeing a captive or when captive escapes.
*
- * Phase 14.1.6: Changed from PlayerBindState to IRestrainable
- * Phase 17: Renamed from removeSlave to removeCaptive
* C6-V2: Narrowed from IRestrainable to IBondageState
*
* @param captive The IBondageState captive to remove
@@ -63,8 +54,6 @@ public interface ICaptor {
* - Target must be tied up OR have collar with this captor as owner
* - Target must not already be captured
*
- * Phase 14.1.6: Changed from PlayerBindState to IRestrainable
- * Phase 17: Renamed from canEnslave to canCapture
* C6-V2: Narrowed from IRestrainable to IBondageState
*
* @param target The potential IBondageState captive
@@ -76,8 +65,6 @@ public interface ICaptor {
* Check if this captor can release the given captive.
* Only the current captor can release their captive.
*
- * Phase 14.1.6: Changed from PlayerBindState to IRestrainable
- * Phase 17: Renamed from canFree to canRelease
* C6-V2: Narrowed from IRestrainable to IBondageState
*
* @param captive The IBondageState captive to check
@@ -85,14 +72,11 @@ public interface ICaptor {
*/
boolean canRelease(IBondageState captive);
- // ========================================
// Configuration
- // ========================================
/**
* Whether this captor allows captives to be transferred to other captors.
*
- * Phase 17: Renamed from allowSlaveTransfer to allowCaptiveTransfer
*
* @return true if captive transfer is allowed (default for players)
*/
@@ -101,22 +85,17 @@ public interface ICaptor {
/**
* Whether this captor can have multiple captives simultaneously.
*
- * Phase 17: Renamed from allowMultipleSlaves to allowMultipleCaptives
*
* @return true if multiple captives allowed (default for players)
*/
boolean allowMultipleCaptives();
- // ========================================
// Event Callbacks
- // ========================================
/**
* Called when a captive logs out while captured.
* Allows the captor to handle cleanup or persistence.
*
- * Phase 14.1.6: Changed from PlayerBindState to IRestrainable
- * Phase 17: Renamed from onSlaveLogout to onCaptiveLogout
* C6-V2: Narrowed from IRestrainable to IBondageState
* Note: For NPC captives, this may never be called (NPCs don't log out)
*
@@ -128,8 +107,6 @@ public interface ICaptor {
* Called when a captive is released (freed).
* Allows the captor to react to losing a captive.
*
- * Phase 14.1.6: Changed from PlayerBindState to IRestrainable
- * Phase 17: Renamed from onSlaveReleased to onCaptiveReleased
* C6-V2: Narrowed from IRestrainable to IBondageState
*
* @param captive The IBondageState captive that was released
@@ -140,22 +117,17 @@ public interface ICaptor {
* Called when a captive attempts to struggle.
* Allows the captor to react (e.g., shock collar activation).
*
- * Phase 14.1.6: Changed from PlayerBindState to IRestrainable
- * Phase 17: Renamed from onSlaveStruggle to onCaptiveStruggle
* C6-V2: Narrowed from IRestrainable to IBondageState
*
* @param captive The IBondageState captive that struggled
*/
void onCaptiveStruggle(IBondageState captive);
- // ========================================
// Queries
- // ========================================
/**
* Check if this captor currently has any captives.
*
- * Phase 17: Renamed from hasSlaves to hasCaptives
*
* @return true if captive list is not empty
*/
diff --git a/src/main/java/com/tiedup/remake/state/ICapturable.java b/src/main/java/com/tiedup/remake/state/ICapturable.java
index 9a7318d..b1f97d8 100644
--- a/src/main/java/com/tiedup/remake/state/ICapturable.java
+++ b/src/main/java/com/tiedup/remake/state/ICapturable.java
@@ -1,7 +1,7 @@
package com.tiedup.remake.state;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.world.entity.Entity;
+import org.jetbrains.annotations.Nullable;
/**
* Capture, leash, and transport interface for kidnapped entities.
@@ -14,10 +14,7 @@ import net.minecraft.world.entity.Entity;
* @see IRestrainable
*/
public interface ICapturable extends IRestrainableEntity {
-
- // ========================================
// CAPTURE LIFECYCLE
- // ========================================
/**
* Capture this entity by the given captor.
@@ -44,7 +41,6 @@ public interface ICapturable extends IRestrainableEntity {
*
Use vanilla setLeashedTo() directly on the NPC
*
*
- * Phase 17: Renamed from getEnslavedBy to getCapturedBy
*
* @param captor The captor attempting to capture
* @return true if capture succeeded, false otherwise
@@ -78,15 +74,12 @@ public interface ICapturable extends IRestrainableEntity {
* Only works if current captor allows captive transfer
* ({@link ICaptor#allowCaptiveTransfer()} == true).
*
- * Phase 17: Renamed from transferSlaveryTo to transferCaptivityTo
*
* @param newCaptor The new captor to transfer to
*/
void transferCaptivityTo(ICaptor newCaptor);
- // ========================================
// STATE QUERIES - CAPTURE
- // ========================================
/**
* Check if this entity can be captured.
@@ -107,7 +100,6 @@ public interface ICapturable extends IRestrainableEntity {
* For Players: Returns true when LeashProxyEntity is attached and leashed to captor
* For NPCs: Returns true when vanilla leash is attached
*
- * Phase 17: Renamed from isSlave to isCaptive
*
* @return true if captured (has leash holder)
*/
@@ -147,7 +139,6 @@ public interface ICapturable extends IRestrainableEntity {
/**
* Get the current captor (the entity holding the leash).
*
- * Phase 17: Renamed from getMaster to getCaptor
*
* @return The captor, or null if not captured
*/
diff --git a/src/main/java/com/tiedup/remake/state/ICoercible.java b/src/main/java/com/tiedup/remake/state/ICoercible.java
index 8a2068a..9304415 100644
--- a/src/main/java/com/tiedup/remake/state/ICoercible.java
+++ b/src/main/java/com/tiedup/remake/state/ICoercible.java
@@ -13,10 +13,7 @@ import net.minecraft.world.entity.player.Player;
*/
// C6-V2: takeBondageItemBy narrowed from IRestrainable to IRestrainableEntity
public interface ICoercible extends IRestrainableEntity {
-
- // ========================================
// SPECIAL INTERACTIONS
- // ========================================
/**
* Tighten binds on this entity (increase resistance).
@@ -72,7 +69,6 @@ public interface ICoercible extends IRestrainableEntity {
* Another entity takes a bondage item from this entity.
* Used when master removes items from slave.
*
- * Phase 14.1.7: Changed from PlayerBindState to IRestrainable for polymorphism
* C6-V2: Narrowed from IRestrainable to IRestrainableEntity (only uses identity methods)
* This allows NPCs to take items from Players or other NPCs
*
@@ -81,9 +77,7 @@ public interface ICoercible extends IRestrainableEntity {
*/
void takeBondageItemBy(IRestrainableEntity taker, int slotIndex);
- // ========================================
- // COLLAR TIMERS (Phase 14.1.4)
- // ========================================
+ // COLLAR TIMERS
/**
* Force-stops and clears any active auto-shock collar timer.
diff --git a/src/main/java/com/tiedup/remake/state/IRestrainableEntity.java b/src/main/java/com/tiedup/remake/state/IRestrainableEntity.java
index 289a1de..fa5950b 100644
--- a/src/main/java/com/tiedup/remake/state/IRestrainableEntity.java
+++ b/src/main/java/com/tiedup/remake/state/IRestrainableEntity.java
@@ -1,7 +1,7 @@
package com.tiedup.remake.state;
-import java.util.UUID;
import com.tiedup.remake.v2.BodyRegionV2;
+import java.util.UUID;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
@@ -24,10 +24,7 @@ import net.minecraft.world.level.Level;
* @see IRestrainable
*/
public interface IRestrainableEntity {
-
- // ========================================
// ENTITY IDENTITY
- // ========================================
/**
* Get the underlying LivingEntity.
@@ -62,9 +59,7 @@ public interface IRestrainableEntity {
*/
String getNameFromCollar();
- // ========================================
// LIFECYCLE
- // ========================================
/**
* Called when this entity dies while kidnapped.
@@ -82,9 +77,7 @@ public interface IRestrainableEntity {
*/
boolean onDeathKidnapped(Level world);
- // ========================================
// UTILITY
- // ========================================
/**
* Drop an item at this entity's position.
@@ -102,9 +95,7 @@ public interface IRestrainableEntity {
*/
void teleportToPosition(com.tiedup.remake.util.teleport.Position position);
- // ========================================
// DEFAULT HELPER METHODS - COMMUNICATION & STATE
- // ========================================
/**
* Send a message to this entity (if it can receive messages).
@@ -158,50 +149,77 @@ public interface IRestrainableEntity {
* Get all V2 equipped items (de-duplicated).
* @return Unmodifiable map of region to ItemStack, or empty map if no V2 support.
*/
- default java.util.Map getAllEquippedV2() {
+ default java.util.Map<
+ com.tiedup.remake.v2.BodyRegionV2,
+ ItemStack
+ > getAllEquippedV2() {
com.tiedup.remake.v2.bondage.IV2BondageEquipment equip =
- com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper.getEquipment(asLivingEntity());
+ com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper.getEquipment(
+ asLivingEntity()
+ );
return equip != null ? equip.getAllEquipped() : java.util.Map.of();
}
/**
* Get V2 item in a specific body region.
*/
- default ItemStack getItemInRegion(com.tiedup.remake.v2.BodyRegionV2 region) {
- return com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper
- .getInRegion(asLivingEntity(), region);
+ default ItemStack getItemInRegion(
+ com.tiedup.remake.v2.BodyRegionV2 region
+ ) {
+ return com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper.getInRegion(
+ asLivingEntity(),
+ region
+ );
}
/**
* Equip a V2 item to its declared regions. Server-only.
* @return The equip result.
*/
- default com.tiedup.remake.v2.bondage.V2EquipResult equipToRegion(ItemStack stack) {
- return com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper
- .equipItem(asLivingEntity(), stack);
+ default com.tiedup.remake.v2.bondage.V2EquipResult equipToRegion(
+ ItemStack stack
+ ) {
+ return com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper.equipItem(
+ asLivingEntity(),
+ stack
+ );
}
/**
* Unequip V2 item from a region. Server-only.
*/
- default ItemStack unequipFromRegion(com.tiedup.remake.v2.BodyRegionV2 region) {
- return com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper
- .unequipFromRegion(asLivingEntity(), region);
+ default ItemStack unequipFromRegion(
+ com.tiedup.remake.v2.BodyRegionV2 region
+ ) {
+ return com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper.unequipFromRegion(
+ asLivingEntity(),
+ region
+ );
}
/**
* Unequip V2 item from a region with force option. Server-only.
*/
- default ItemStack unequipFromRegion(com.tiedup.remake.v2.BodyRegionV2 region, boolean force) {
- return com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper
- .unequipFromRegion(asLivingEntity(), region, force);
+ default ItemStack unequipFromRegion(
+ com.tiedup.remake.v2.BodyRegionV2 region,
+ boolean force
+ ) {
+ return com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper.unequipFromRegion(
+ asLivingEntity(),
+ region,
+ force
+ );
}
/**
* Whether this entity has V2 equipment support.
*/
default boolean hasV2Support() {
- return com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper
- .getEquipment(asLivingEntity()) != null;
+ return (
+ com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper.getEquipment(
+ asLivingEntity()
+ ) !=
+ null
+ );
}
}
diff --git a/src/main/java/com/tiedup/remake/state/ISaleable.java b/src/main/java/com/tiedup/remake/state/ISaleable.java
index 404330b..be47863 100644
--- a/src/main/java/com/tiedup/remake/state/ISaleable.java
+++ b/src/main/java/com/tiedup/remake/state/ISaleable.java
@@ -9,7 +9,6 @@ import org.jetbrains.annotations.Nullable;
* @see IRestrainable
*/
public interface ISaleable {
-
/**
* Check if this entity is marked for sale by a captor.
*
diff --git a/src/main/java/com/tiedup/remake/state/PlayerBindState.java b/src/main/java/com/tiedup/remake/state/PlayerBindState.java
index f402813..77bb59f 100644
--- a/src/main/java/com/tiedup/remake/state/PlayerBindState.java
+++ b/src/main/java/com/tiedup/remake/state/PlayerBindState.java
@@ -46,13 +46,13 @@ import org.jetbrains.annotations.Nullable;
* - Track player restraint states (tied, gagged, blindfolded, etc.)
* - Manage bondage equipment lifecycle (put on/take off items)
* - Lifecycle management (connection, death, respawn)
- * - Phase 8: Enslavement lifecycle (can be enslaved, act as master)
- * - Phase 13: Advanced collar features (shocks, GPS tracking)
+ * - Enslavement lifecycle (can be enslaved, act as master)
+ * - Advanced collar features (shocks, GPS tracking)
*
* Thread Safety: This class is accessed from both server and client threads.
* Use appropriate synchronization when accessing the instances map.
*
- * Refactoring: Component-Host pattern (Phase 1 in progress)
+ * Refactoring: Component-Host pattern
*/
public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
@@ -69,7 +69,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
/**
* Get or create a PlayerBindState instance for a player.
- * Phase 15: Updates player reference when entity is recreated (e.g., after observer reconnects).
*
* @param player The player entity
* @return The state instance associated with this player
@@ -85,7 +84,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
new PlayerBindState(player)
);
- // Phase 15: Update player reference if entity was recreated (reconnection scenario)
// This fixes the bug where remote players' animations don't appear after observer reconnects
if (state.player != player) {
state.player = player;
@@ -106,9 +104,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
* Cleans up the instance map when a player leaves the server.
*/
public static void removeInstance(UUID uuid, boolean isClient) {
- Map map = isClient
- ? instancesClient
- : instances;
+ Map map = isClient ? instancesClient : instances;
map.remove(uuid);
}
@@ -119,27 +115,25 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
private volatile Player player;
private boolean online;
- // ========== Phase 1 Components ==========
+ // ========== Core Components ==========
private final PlayerTaskManagement taskManagement;
private final PlayerStateQuery stateQuery;
private final PlayerDataRetrieval dataRetrieval;
private final PlayerSale sale;
- // ========== Phase 2 Components ==========
+ // ========== Struggle Components ==========
private final PlayerSpecialActions specialActions;
private final PlayerClothesPermission clothesPermission;
- // ========== Phase 3 Components ==========
+ // ========== Animation Components ==========
private final PlayerEquipment equipment;
private final PlayerStruggle struggle;
private final PlayerShockCollar shockCollar;
- // ========== Phase 4 Components ==========
+ // ========== Captivity Components ==========
private final PlayerLifecycle lifecycle;
private final PlayerCaptivity captivity;
- // Phase 8: Enslavement fields
- // Phase 17: master → captor, slaveHolderManager → captorManager
private ICaptor captor;
private PlayerCaptorManager captorManager;
// Note: transport field removed - now using IPlayerLeashAccess mixin
@@ -168,7 +162,9 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return activeMovementStyle;
}
- public void setActiveMovementStyle(@Nullable com.tiedup.remake.v2.bondage.movement.MovementStyle style) {
+ public void setActiveMovementStyle(
+ @Nullable com.tiedup.remake.v2.bondage.movement.MovementStyle style
+ ) {
this.activeMovementStyle = style;
}
@@ -234,26 +230,25 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
this.player = player;
this.online = true;
- // Initialize Phase 1 components
+ // Initialize core components
this.taskManagement = new PlayerTaskManagement();
this.stateQuery = new PlayerStateQuery(this);
this.dataRetrieval = new PlayerDataRetrieval(this);
this.sale = new PlayerSale();
- // Initialize Phase 2 components
+ // Initialize struggle components
this.specialActions = new PlayerSpecialActions(this);
this.clothesPermission = new PlayerClothesPermission(this);
- // Initialize Phase 3 components
+ // Initialize animation components
this.equipment = new PlayerEquipment(this);
this.struggle = new PlayerStruggle(this);
this.shockCollar = new PlayerShockCollar(this);
- // Initialize Phase 4 components
+ // Initialize captivity components
this.lifecycle = new PlayerLifecycle(this);
this.captivity = new PlayerCaptivity(this);
- // Phase 17: Enslavement and captive management
this.captor = null;
this.captorManager = new PlayerCaptorManager(player);
}
@@ -301,7 +296,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return stateQuery.hasClothes();
}
- /** Check if player has mittens equipped. Phase 14.4: Mittens system */
+ /** Check if player has mittens equipped. Mittens system */
public boolean hasMittens() {
return stateQuery.hasMittens();
}
@@ -334,7 +329,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
equipment.putClothesOn(clothes);
}
- /** Equips mittens (blocks hand interactions). Phase 14.4: Mittens system. Issue #14 fix: now calls onEquipped. */
+ /** Equips mittens (blocks hand interactions). Mittens system. Issue #14 fix: now calls onEquipped. */
public void putMittensOn(ItemStack mittens) {
equipment.putMittensOn(mittens);
}
@@ -352,7 +347,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return equipment.takeBlindfoldOff();
}
- /** Removes mittens. Phase 14.4: Mittens system */
+ /** Removes mittens. Mittens system */
public ItemStack takeMittensOff() {
return equipment.takeMittensOff();
}
@@ -446,7 +441,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
// Note: getCaptor(), getCaptorManager(), setStruggling(), setStrugglingClient(),
// isStruggling(), getStruggleStartTick() are implemented elsewhere in the class
- // ========== Phase 6: Tying/Untying Task Methods ==========
+ // ========== Tying/Untying Task Methods ==========
// Delegated to PlayerTaskManagement component
public TyingTask getCurrentTyingTask() {
@@ -505,7 +500,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
taskManagement.setRestrainedState(state);
}
- // ========== Phase 7: Struggle & Resistance Methods ==========
+ // ========== Struggle & Resistance Methods ==========
// Delegated to PlayerStruggle component
/**
@@ -637,7 +632,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
}
/**
- * Phase 14.1.7: Now part of IRestrainable interface
* Delegated to PlayerEquipment component
*/
@Override
@@ -646,7 +640,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
}
/**
- * Phase 14.1.7: Now part of IRestrainable interface
* Delegated to PlayerEquipment component
*/
@Override
@@ -655,7 +648,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
}
/**
- * Phase 14.1.7: Added for IRestrainable interface
* Delegated to PlayerEquipment component
*/
@Override
@@ -664,7 +656,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
}
/**
- * Phase 14.1.7: Added for IRestrainable interface
* Delegated to PlayerEquipment component
*/
@Override
@@ -672,12 +663,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
equipment.setCurrentCollarResistance(resistance);
}
- // ========================================
- // Phase 8: IRestrainable Implementation
- // ========================================
-
/**
- * Phase 17: Renamed from getEnslavedBy to getCapturedBy
* Initiates the capture process by a captor.
* Uses the proxy-based leash system (player is NOT mounted).
* Delegated to PlayerCaptivity component.
@@ -692,7 +678,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
captivity.free();
}
- /** Phase 17: Ends captivity and detaches the leash proxy.
+ /** Ends captivity and detaches the leash proxy.
* Delegated to PlayerCaptivity component. */
@Override
public void free(boolean dropLead) {
@@ -700,7 +686,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
}
/**
- * Phase 17: Renamed from transferSlaveryTo to transferCaptivityTo
* Delegated to PlayerCaptivity component.
*/
@Override
@@ -714,7 +699,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
}
/**
- * Phase 17: Renamed from isSlave to isCaptive
* Delegated to PlayerCaptivity component.
*/
@Override
@@ -723,7 +707,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
}
/**
- * Phase 17: Renamed from getMaster to getCaptor
* Also implements IPlayerBindStateHost.
*/
@Override
@@ -769,10 +752,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return player.getName().getString();
}
- // ========================================
- // Phase 13: Shock Functionality
// Delegated to PlayerShockCollar component
- // ========================================
@Override
public void shockKidnapped() {
@@ -789,7 +769,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
}
/**
- * Phase 17: Renamed from checkStillSlave to checkStillCaptive
* Periodically monitors captivity validity.
* Simplified: If any condition is invalid, free the captive immediately.
* Delegated to PlayerCaptivity component.
@@ -816,7 +795,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
}
/**
- * Phase 17: Renamed from getSlaveHolderManager to getCaptorManager
* Manager for capturing other entities (acting as captor).
* Also implements IPlayerBindStateHost.
*/
@@ -825,9 +803,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return captorManager;
}
- // ========================================
// IRestrainable Missing Methods
- // ========================================
@Override
public void teleportToPosition(Position position) {
@@ -872,9 +848,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return dataRetrieval.getNameFromCollar();
}
- // ========================================
// V2 Region-Based Equipment Access
- // ========================================
@Override
public ItemStack getEquipment(BodyRegionV2 region) {
@@ -891,7 +865,8 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
case NECK -> equipment.putCollarOn(stack);
case TORSO -> equipment.putClothesOn(stack);
case HANDS -> equipment.putMittensOn(stack);
- default -> {}
+ default -> {
+ }
}
}
@@ -923,10 +898,8 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return V2EquipmentHelper.unequipFromRegion(player, region, true);
}
- // ========================================
// IRestrainable State Queries
// Delegated to PlayerStateQuery component
- // ========================================
@Override
public boolean canBeTiedUp() {
@@ -943,9 +916,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return stateQuery.hasKnives();
}
- // ========================================
// Sale System - Delegated to PlayerSale component
- // ========================================
@Override
public boolean isForSell() {
@@ -1012,10 +983,8 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return stateQuery.hasBlindingEffect();
}
- // ========================================
// Equipment Take Off (local helpers)
// Delegated to PlayerEquipment component
- // ========================================
public ItemStack takeEarplugsOff() {
return equipment.takeEarplugsOff();
@@ -1025,23 +994,23 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return equipment.takeClothesOff();
}
- // ========================================
// IRestrainable Equipment Put On
// Delegated to PlayerEquipment component
- // ========================================
/** Equips earplugs (muffles sounds). Issue #14 fix: now calls onEquipped. */
public void putEarplugsOn(ItemStack earplugs) {
equipment.putEarplugsOn(earplugs);
}
- // ========================================
// IRestrainable Equipment Replacement (V2 region-based)
// Delegated to PlayerEquipment component (except TORSO - handled by PlayerClothesPermission)
- // ========================================
@Override
- public synchronized ItemStack replaceEquipment(BodyRegionV2 region, ItemStack newStack, boolean force) {
+ public synchronized ItemStack replaceEquipment(
+ BodyRegionV2 region,
+ ItemStack newStack,
+ boolean force
+ ) {
// MEDIUM FIX: Synchronized to prevent race condition during equipment replacement
return switch (region) {
case ARMS -> equipment.replaceBind(newStack, force);
@@ -1055,9 +1024,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
};
}
- // ========================================
// IRestrainable Bulk Operations
- // ========================================
@Override
public void untie(boolean drop) {
@@ -1075,7 +1042,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
// V1 speed reduction handled by MovementStyleManager (V2 tick-based).
// See H6 fix — removing V1 calls prevents double stacking.
- // Phase 17: Free from captivity if applicable
if (isCaptive()) {
free();
}
@@ -1173,10 +1139,8 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return count;
}
- // ========================================
// IRestrainable Callbacks
// Delegated to PlayerEquipment component
- // ========================================
@Override
public void checkGagAfterApply() {
@@ -1198,10 +1162,8 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
equipment.checkCollarAfterApply();
}
- // ========================================
// IRestrainable Special Interactions
// Delegated to PlayerSpecialActions component
- // ========================================
@Override
public void applyChloroform(int duration) {
@@ -1209,7 +1171,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
}
/**
- * Phase 14.1.7: Updated to use IRestrainable parameter (was PlayerBindState)
* C6-V2: Narrowed to IRestrainableEntity
*/
@Override
@@ -1217,10 +1178,8 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
specialActions.takeBondageItemBy(taker, slotIndex);
}
- // ========================================
// IRestrainable Clothes Permissions
// Delegated to PlayerClothesPermission component
- // ========================================
@Override
public boolean canTakeOffClothes(Player player) {
@@ -1237,9 +1196,7 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return clothesPermission.canChangeClothes();
}
- // ========================================
// IRestrainable Lifecycle
- // ========================================
@Override
public boolean onDeathKidnapped(net.minecraft.world.level.Level world) {
@@ -1262,7 +1219,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
// Drop all items
dropBondageItems(true);
- // Phase 17: Free from captivity
if (isCaptive()) {
free();
}
@@ -1271,10 +1227,8 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return lifecycle.onDeathKidnapped(world);
}
- // ========================================
- // IRestrainable Entity Communication (Phase 14.1.3)
+ // IRestrainable Entity Communication
// Delegated to PlayerDataRetrieval component
- // ========================================
@Override
public net.minecraft.world.entity.LivingEntity asLivingEntity() {
diff --git a/src/main/java/com/tiedup/remake/state/PlayerCaptorManager.java b/src/main/java/com/tiedup/remake/state/PlayerCaptorManager.java
index fc73c0a..d247c63 100644
--- a/src/main/java/com/tiedup/remake/state/PlayerCaptorManager.java
+++ b/src/main/java/com/tiedup/remake/state/PlayerCaptorManager.java
@@ -1,23 +1,22 @@
package com.tiedup.remake.state;
import com.tiedup.remake.core.TiedUpMod;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.items.base.ItemCollar;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
+
// C6-V2: IRestrainable → IBondageState (narrowed API)
/**
- * Phase 8: Master-Captive Relationships
- * Phase 17: Renamed from PlayerKidnapperManager, terminology slave → captive
*
* Manages capture relationships for player captors.
*
- * Terminology (Phase 17):
+ * Terminology:
* - "Captive" = Entity attached by leash (active physical control)
* - "Slave" = Entity wearing a collar owned by someone (passive ownership via CollarRegistry)
*
@@ -50,8 +49,6 @@ public class PlayerCaptorManager implements ICaptor {
* List of all captives currently owned by this captor.
* Thread-safe to avoid concurrent modification during iteration.
*
- * Phase 14.1.6: Changed from List to List
- * Phase 17: Renamed from slaves to captives
*/
private final List captives;
@@ -65,13 +62,9 @@ public class PlayerCaptorManager implements ICaptor {
this.captives = new CopyOnWriteArrayList<>();
}
- // ========================================
// ICaptor Implementation
- // ========================================
/**
- * Phase 14.1.6: Changed parameter from PlayerBindState to IBondageState
- * Phase 17: Renamed from addSlave to addCaptive
*/
@Override
public synchronized void addCaptive(IBondageState captive) {
@@ -94,8 +87,6 @@ public class PlayerCaptorManager implements ICaptor {
}
/**
- * Phase 14.1.6: Changed parameter from PlayerBindState to IBondageState
- * Phase 17: Renamed from removeSlave to removeCaptive
*
* Thread Safety: Synchronized on 'this' to match addCaptive and freeAllCaptives.
*/
@@ -127,8 +118,6 @@ public class PlayerCaptorManager implements ICaptor {
}
/**
- * Phase 14.1.6: Changed parameter from PlayerBindState to IBondageState
- * Phase 17: Renamed from canEnslave to canCapture
*/
@Override
public boolean canCapture(IBondageState target) {
@@ -141,7 +130,6 @@ public class PlayerCaptorManager implements ICaptor {
// - Target is tied up, OR
// - Target has collar AND collar has this captor as owner
- // Phase 14.1.6: Use asLivingEntity() instead of getPlayer()
net.minecraft.world.entity.LivingEntity targetEntity =
target.asLivingEntity();
if (targetEntity == null) {
@@ -169,8 +157,6 @@ public class PlayerCaptorManager implements ICaptor {
}
/**
- * Phase 14.1.6: Changed parameter from PlayerBindState to IBondageState
- * Phase 17: Renamed from canFree to canRelease
*/
@Override
public boolean canRelease(IBondageState captive) {
@@ -183,7 +169,6 @@ public class PlayerCaptorManager implements ICaptor {
}
/**
- * Phase 17: Renamed from allowSlaveTransfer to allowCaptiveTransfer
*/
@Override
public boolean allowCaptiveTransfer() {
@@ -192,7 +177,6 @@ public class PlayerCaptorManager implements ICaptor {
}
/**
- * Phase 17: Renamed from allowMultipleSlaves to allowMultipleCaptives
*/
@Override
public boolean allowMultipleCaptives() {
@@ -201,8 +185,6 @@ public class PlayerCaptorManager implements ICaptor {
}
/**
- * Phase 14.1.6: Changed parameter from PlayerBindState to IBondageState
- * Phase 17: Renamed from onSlaveLogout to onCaptiveLogout
* Note: For NPC captives, this is never called (NPCs don't log out)
*/
@Override
@@ -223,8 +205,6 @@ public class PlayerCaptorManager implements ICaptor {
}
/**
- * Phase 14.1.6: Changed parameter from PlayerBindState to IBondageState
- * Phase 17: Renamed from onSlaveReleased to onCaptiveReleased
*/
@Override
public void onCaptiveReleased(IBondageState captive) {
@@ -242,8 +222,6 @@ public class PlayerCaptorManager implements ICaptor {
}
/**
- * Phase 14.1.6: Changed parameter from PlayerBindState to IBondageState
- * Phase 17: Renamed from onSlaveStruggle to onCaptiveStruggle
*/
@Override
public void onCaptiveStruggle(IBondageState captive) {
@@ -256,13 +234,9 @@ public class PlayerCaptorManager implements ICaptor {
captive.getKidnappedName(),
captor.getName().getString()
);
-
- // Phase 8: No action for basic struggle
- // Phase 14: Shock collar would activate here
}
/**
- * Phase 17: Renamed from hasSlaves to hasCaptives
*/
@Override
public boolean hasCaptives() {
@@ -274,14 +248,11 @@ public class PlayerCaptorManager implements ICaptor {
return captor;
}
- // ========================================
// Additional Methods
- // ========================================
/**
* Frees all captives currently owned by this captor.
*
- * Phase 17: Renamed from freeAllSlaves to freeAllCaptives
*
* Thread Safety: Synchronized on 'this' to match addCaptive and removeCaptive.
*
@@ -307,7 +278,6 @@ public class PlayerCaptorManager implements ICaptor {
* Get a copy of the captive list.
* Safe for iteration without concurrent modification issues.
*
- * Phase 17: Renamed from getSlaves to getCaptives
*
* @return Copy of the current captive list
*/
@@ -318,7 +288,6 @@ public class PlayerCaptorManager implements ICaptor {
/**
* Get the number of captives currently owned.
*
- * Phase 17: Renamed from getSlaveCount to getCaptiveCount
*
* @return Captive count
*/
@@ -334,7 +303,6 @@ public class PlayerCaptorManager implements ICaptor {
* - When a player gets captured, their captives transfer to new captor
* - Prevents circular capture issues
*
- * Phase 17: Renamed from transferAllSlavesTo to transferAllCaptivesTo
*
* @param newCaptor The new captor to transfer captives to
*/
@@ -389,7 +357,6 @@ public class PlayerCaptorManager implements ICaptor {
* Clean up invalid captives from the list.
* Removes captives that are no longer valid (offline, transport gone, etc.).
*
- * Phase 17: Renamed from cleanupInvalidSlaves to cleanupInvalidCaptives
*
* Should be called periodically (e.g., on tick).
*/
@@ -421,7 +388,5 @@ public class PlayerCaptorManager implements ICaptor {
});
}
- // ========================================
- // Backward Compatibility (Phase 17)
- // ========================================
+ // Backward Compatibility
}
diff --git a/src/main/java/com/tiedup/remake/state/SocialData.java b/src/main/java/com/tiedup/remake/state/SocialData.java
index 59c76de..a35270d 100644
--- a/src/main/java/com/tiedup/remake/state/SocialData.java
+++ b/src/main/java/com/tiedup/remake/state/SocialData.java
@@ -15,7 +15,6 @@ import net.minecraft.world.level.saveddata.SavedData;
* - Block lists (which players have blocked which other players)
* - Talk area settings (local chat distance per player)
*
- * Phase 18: Social Commands persistence.
*/
public class SocialData extends SavedData {
diff --git a/src/main/java/com/tiedup/remake/state/components/PlayerCaptivity.java b/src/main/java/com/tiedup/remake/state/components/PlayerCaptivity.java
index 87eb1f7..991de9c 100644
--- a/src/main/java/com/tiedup/remake/state/components/PlayerCaptivity.java
+++ b/src/main/java/com/tiedup/remake/state/components/PlayerCaptivity.java
@@ -2,15 +2,14 @@ package com.tiedup.remake.state.components;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.entities.LeashProxyEntity;
-import com.tiedup.remake.state.IPlayerLeashAccess;
import com.tiedup.remake.state.ICaptor;
+import com.tiedup.remake.state.IPlayerLeashAccess;
import com.tiedup.remake.state.hosts.IPlayerBindStateHost;
import net.minecraft.world.entity.player.Player;
import org.jetbrains.annotations.Nullable;
/**
* Component responsible for captivity mechanics and leash proxy management.
- * Phase 17: Advanced capture system (proxy-based leashing)
*
* Single Responsibility: Captivity lifecycle and transport management
* Complexity: VERY HIGH (mixin coupling, network sync, leash proxy coordination)
@@ -35,7 +34,6 @@ public class PlayerCaptivity {
// ========== Captivity Initiation ==========
/**
- * Phase 17: Renamed from getEnslavedBy to getCapturedBy
* Initiates the capture process by a captor.
* Uses the proxy-based leash system (player is NOT mounted).
*
@@ -101,7 +99,6 @@ public class PlayerCaptivity {
}
/**
- * Phase 17: Ends captivity and detaches the leash proxy.
*
* @param dropLead Whether to drop the leash item
*/
@@ -159,7 +156,6 @@ public class PlayerCaptivity {
// ========== Captivity Transfer ==========
/**
- * Phase 17: Renamed from transferSlaveryTo to transferCaptivityTo
* Transfers captivity from current captor to a new captor.
*
* Thread Safety: Synchronized to prevent concurrent transfer attempts.
@@ -206,7 +202,6 @@ public class PlayerCaptivity {
}
/**
- * Phase 17: Renamed from isSlave to isCaptive
* Check if player is currently captured by an entity.
*
* @return true if player has a captor and is leashed
@@ -222,7 +217,6 @@ public class PlayerCaptivity {
/**
* Get the leash proxy entity (transport system).
- * Phase 17: Proxy-based leashing (no mounting).
*
* @return The leash proxy, or null if not leashed
*/
@@ -238,7 +232,6 @@ public class PlayerCaptivity {
// ========== Captivity Monitoring ==========
/**
- * Phase 17: Renamed from checkStillSlave to checkStillCaptive
* Periodically monitors captivity validity.
* Simplified: If any condition is invalid, free the captive immediately.
*
diff --git a/src/main/java/com/tiedup/remake/state/components/PlayerClothesPermission.java b/src/main/java/com/tiedup/remake/state/components/PlayerClothesPermission.java
index fa67cb5..fbdd4d2 100644
--- a/src/main/java/com/tiedup/remake/state/components/PlayerClothesPermission.java
+++ b/src/main/java/com/tiedup/remake/state/components/PlayerClothesPermission.java
@@ -1,9 +1,9 @@
package com.tiedup.remake.state.components;
-import com.tiedup.remake.v2.bondage.IV2BondageItem;
import com.tiedup.remake.state.hosts.IPlayerBindStateHost;
import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.v2.bondage.IV2BondageEquipment;
+import com.tiedup.remake.v2.bondage.IV2BondageItem;
import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
@@ -63,7 +63,10 @@ public class PlayerClothesPermission {
* @return true if clothes can be changed
*/
public boolean canChangeClothes() {
- ItemStack clothes = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.TORSO);
+ ItemStack clothes = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.TORSO
+ );
if (clothes.isEmpty()) return true;
// Check if clothes are locked
@@ -95,20 +98,28 @@ public class PlayerClothesPermission {
*/
public ItemStack replaceClothes(ItemStack newClothes, boolean force) {
Player player = host.getPlayer();
- if (player == null || player.level().isClientSide) return ItemStack.EMPTY;
+ if (
+ player == null || player.level().isClientSide
+ ) return ItemStack.EMPTY;
IV2BondageEquipment equip = V2EquipmentHelper.getEquipment(player);
if (equip == null) return ItemStack.EMPTY;
// Take off old clothes
- ItemStack old = V2EquipmentHelper.unequipFromRegion(player, BodyRegionV2.TORSO);
+ ItemStack old = V2EquipmentHelper.unequipFromRegion(
+ player,
+ BodyRegionV2.TORSO
+ );
// Equip new clothes if we successfully removed old ones
if (!old.isEmpty()) {
equip.setInRegion(BodyRegionV2.TORSO, newClothes.copy());
// Fire lifecycle hook for new item
- if (!newClothes.isEmpty() && newClothes.getItem() instanceof IV2BondageItem newItem) {
+ if (
+ !newClothes.isEmpty() &&
+ newClothes.getItem() instanceof IV2BondageItem newItem
+ ) {
newItem.onEquipped(newClothes, player);
}
diff --git a/src/main/java/com/tiedup/remake/state/components/PlayerDataRetrieval.java b/src/main/java/com/tiedup/remake/state/components/PlayerDataRetrieval.java
index f65c097..73d9db0 100644
--- a/src/main/java/com/tiedup/remake/state/components/PlayerDataRetrieval.java
+++ b/src/main/java/com/tiedup/remake/state/components/PlayerDataRetrieval.java
@@ -29,31 +29,52 @@ public class PlayerDataRetrieval {
// ========== Equipment Getters ==========
public ItemStack getCurrentBind() {
- return V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.ARMS);
+ return V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.ARMS
+ );
}
public ItemStack getCurrentGag() {
- return V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.MOUTH);
+ return V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.MOUTH
+ );
}
public ItemStack getCurrentBlindfold() {
- return V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.EYES);
+ return V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.EYES
+ );
}
public ItemStack getCurrentEarplugs() {
- return V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.EARS);
+ return V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.EARS
+ );
}
public ItemStack getCurrentClothes() {
- return V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.TORSO);
+ return V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.TORSO
+ );
}
public ItemStack getCurrentMittens() {
- return V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.HANDS);
+ return V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.HANDS
+ );
}
public ItemStack getCurrentCollar() {
- return V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.NECK);
+ return V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.NECK
+ );
}
// ========== Player Information ==========
@@ -97,7 +118,6 @@ public class PlayerDataRetrieval {
/**
* Check if player has clothes with small arms flag.
- * TODO Phase 14+: Check clothes NBT for small arms flag
*/
public boolean hasClothesWithSmallArms() {
return false;
diff --git a/src/main/java/com/tiedup/remake/state/components/PlayerEquipment.java b/src/main/java/com/tiedup/remake/state/components/PlayerEquipment.java
index 388f999..a25bfad 100644
--- a/src/main/java/com/tiedup/remake/state/components/PlayerEquipment.java
+++ b/src/main/java/com/tiedup/remake/state/components/PlayerEquipment.java
@@ -1,12 +1,12 @@
package com.tiedup.remake.state.components;
-import com.tiedup.remake.v2.bondage.IV2BondageItem;
import com.tiedup.remake.items.base.ILockable;
import com.tiedup.remake.items.base.ItemBind;
import com.tiedup.remake.items.base.ItemCollar;
import com.tiedup.remake.state.hosts.IPlayerBindStateHost;
import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.v2.bondage.IV2BondageEquipment;
+import com.tiedup.remake.v2.bondage.IV2BondageItem;
import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
import java.util.function.Supplier;
import net.minecraft.world.entity.player.Player;
@@ -61,7 +61,7 @@ public class PlayerEquipment {
host.syncClothesConfig();
}
- /** Equips mittens (blocks hand interactions). Phase 14.4: Mittens system. Issue #14 fix: now calls onEquipped. */
+ /** Equips mittens (blocks hand interactions). Mittens system. Issue #14 fix: now calls onEquipped. */
public void putMittensOn(ItemStack mittens) {
equipInRegion(BodyRegionV2.HANDS, mittens);
checkMittensAfterApply();
@@ -77,40 +77,67 @@ public class PlayerEquipment {
/** Removes binds and restores speed. */
public ItemStack takeBindOff() {
- return V2EquipmentHelper.unequipFromRegion(host.getPlayer(), BodyRegionV2.ARMS);
+ return V2EquipmentHelper.unequipFromRegion(
+ host.getPlayer(),
+ BodyRegionV2.ARMS
+ );
}
public ItemStack takeGagOff() {
- return V2EquipmentHelper.unequipFromRegion(host.getPlayer(), BodyRegionV2.MOUTH);
+ return V2EquipmentHelper.unequipFromRegion(
+ host.getPlayer(),
+ BodyRegionV2.MOUTH
+ );
}
public ItemStack takeBlindfoldOff() {
- return V2EquipmentHelper.unequipFromRegion(host.getPlayer(), BodyRegionV2.EYES);
+ return V2EquipmentHelper.unequipFromRegion(
+ host.getPlayer(),
+ BodyRegionV2.EYES
+ );
}
public ItemStack takeCollarOff() {
- return V2EquipmentHelper.unequipFromRegion(host.getPlayer(), BodyRegionV2.NECK);
+ return V2EquipmentHelper.unequipFromRegion(
+ host.getPlayer(),
+ BodyRegionV2.NECK
+ );
}
- /** Removes mittens. Phase 14.4: Mittens system */
+ /** Removes mittens. Mittens system */
public ItemStack takeMittensOff() {
- ItemStack mittens = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.HANDS);
+ ItemStack mittens = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.HANDS
+ );
if (isLocked(mittens, false)) {
return ItemStack.EMPTY;
}
- return V2EquipmentHelper.unequipFromRegion(host.getPlayer(), BodyRegionV2.HANDS);
+ return V2EquipmentHelper.unequipFromRegion(
+ host.getPlayer(),
+ BodyRegionV2.HANDS
+ );
}
public ItemStack takeEarplugsOff() {
- ItemStack earplugs = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.EARS);
+ ItemStack earplugs = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.EARS
+ );
if (isLocked(earplugs, false)) {
return ItemStack.EMPTY;
}
- return V2EquipmentHelper.unequipFromRegion(host.getPlayer(), BodyRegionV2.EARS);
+ return V2EquipmentHelper.unequipFromRegion(
+ host.getPlayer(),
+ BodyRegionV2.EARS
+ );
}
public ItemStack takeClothesOff() {
- ItemStack clothes = V2EquipmentHelper.unequipFromRegion(host.getPlayer(), BodyRegionV2.TORSO);
+ ItemStack clothes = V2EquipmentHelper.unequipFromRegion(
+ host.getPlayer(),
+ BodyRegionV2.TORSO
+ );
// Sync clothes removal to all tracking clients
host.syncClothesConfig();
return clothes;
@@ -121,7 +148,10 @@ public class PlayerEquipment {
*/
public ItemStack takeCollarOff(boolean force) {
Player player = host.getPlayer();
- ItemStack collar = V2EquipmentHelper.getInRegion(player, BodyRegionV2.NECK);
+ ItemStack collar = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.NECK
+ );
if (collar.isEmpty()) return ItemStack.EMPTY;
if (collar.getItem() instanceof ItemCollar collarItem) {
@@ -135,21 +165,30 @@ public class PlayerEquipment {
/** Replaces the blindfold and returns the old one. Issue #14 fix: now calls lifecycle hooks. */
public ItemStack replaceBlindfold(ItemStack newBlindfold) {
- ItemStack current = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.EYES);
+ ItemStack current = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.EYES
+ );
if (current.isEmpty()) return ItemStack.EMPTY;
return replaceInRegion(BodyRegionV2.EYES, newBlindfold);
}
/** Replaces the gag and returns the old one. Issue #14 fix: now calls lifecycle hooks. */
public ItemStack replaceGag(ItemStack newGag) {
- ItemStack current = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.MOUTH);
+ ItemStack current = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.MOUTH
+ );
if (current.isEmpty()) return ItemStack.EMPTY;
return replaceInRegion(BodyRegionV2.MOUTH, newGag);
}
/** Replaces the collar and returns the old one. Issue #14 fix: now calls lifecycle hooks. */
public ItemStack replaceCollar(ItemStack newCollar) {
- ItemStack current = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.NECK);
+ ItemStack current = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.NECK
+ );
if (current.isEmpty()) return ItemStack.EMPTY;
return replaceInRegion(BodyRegionV2.NECK, newCollar);
}
@@ -176,7 +215,10 @@ public class PlayerEquipment {
if (newBind.isEmpty()) {
return ItemStack.EMPTY;
}
- ItemStack current = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.ARMS);
+ ItemStack current = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.ARMS
+ );
if (isLocked(current, force)) {
return ItemStack.EMPTY;
}
@@ -188,27 +230,42 @@ public class PlayerEquipment {
}
public ItemStack replaceGag(ItemStack newGag, boolean force) {
- ItemStack current = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.MOUTH);
+ ItemStack current = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.MOUTH
+ );
if (isLocked(current, force)) {
return ItemStack.EMPTY;
}
- ItemStack old = V2EquipmentHelper.unequipFromRegion(host.getPlayer(), BodyRegionV2.MOUTH);
+ ItemStack old = V2EquipmentHelper.unequipFromRegion(
+ host.getPlayer(),
+ BodyRegionV2.MOUTH
+ );
putGagOn(newGag);
return old;
}
public ItemStack replaceBlindfold(ItemStack newBlindfold, boolean force) {
- ItemStack current = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.EYES);
+ ItemStack current = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.EYES
+ );
if (isLocked(current, force)) {
return ItemStack.EMPTY;
}
- ItemStack old = V2EquipmentHelper.unequipFromRegion(host.getPlayer(), BodyRegionV2.EYES);
+ ItemStack old = V2EquipmentHelper.unequipFromRegion(
+ host.getPlayer(),
+ BodyRegionV2.EYES
+ );
putBlindfoldOn(newBlindfold);
return old;
}
public ItemStack replaceCollar(ItemStack newCollar, boolean force) {
- ItemStack current = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.NECK);
+ ItemStack current = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.NECK
+ );
if (isLocked(current, force)) {
return ItemStack.EMPTY;
}
@@ -222,7 +279,10 @@ public class PlayerEquipment {
}
public ItemStack replaceEarplugs(ItemStack newEarplugs, boolean force) {
- ItemStack current = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.EARS);
+ ItemStack current = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.EARS
+ );
if (isLocked(current, force)) {
return ItemStack.EMPTY;
}
@@ -236,7 +296,10 @@ public class PlayerEquipment {
}
public ItemStack replaceMittens(ItemStack newMittens, boolean force) {
- ItemStack current = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.HANDS);
+ ItemStack current = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.HANDS
+ );
if (isLocked(current, force)) {
return ItemStack.EMPTY;
}
@@ -250,11 +313,13 @@ public class PlayerEquipment {
// ========== Resistance Methods ==========
/**
- * Phase 14.1.7: Now part of IRestrainable interface
*/
public synchronized int getCurrentBindResistance() {
Player player = host.getPlayer();
- ItemStack stack = V2EquipmentHelper.getInRegion(player, BodyRegionV2.ARMS);
+ ItemStack stack = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.ARMS
+ );
if (
stack.isEmpty() || !(stack.getItem() instanceof ItemBind bind)
) return 0;
@@ -262,11 +327,13 @@ public class PlayerEquipment {
}
/**
- * Phase 14.1.7: Now part of IRestrainable interface
*/
public synchronized void setCurrentBindResistance(int resistance) {
Player player = host.getPlayer();
- ItemStack stack = V2EquipmentHelper.getInRegion(player, BodyRegionV2.ARMS);
+ ItemStack stack = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.ARMS
+ );
if (
stack.isEmpty() || !(stack.getItem() instanceof ItemBind bind)
) return;
@@ -274,11 +341,13 @@ public class PlayerEquipment {
}
/**
- * Phase 14.1.7: Added for IRestrainable interface
*/
public synchronized int getCurrentCollarResistance() {
Player player = host.getPlayer();
- ItemStack stack = V2EquipmentHelper.getInRegion(player, BodyRegionV2.NECK);
+ ItemStack stack = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.NECK
+ );
if (
stack.isEmpty() || !(stack.getItem() instanceof ItemCollar collar)
) return 0;
@@ -286,11 +355,13 @@ public class PlayerEquipment {
}
/**
- * Phase 14.1.7: Added for IRestrainable interface
*/
public synchronized void setCurrentCollarResistance(int resistance) {
Player player = host.getPlayer();
- ItemStack stack = V2EquipmentHelper.getInRegion(player, BodyRegionV2.NECK);
+ ItemStack stack = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.NECK
+ );
if (
stack.isEmpty() || !(stack.getItem() instanceof ItemCollar collar)
) return;
@@ -339,7 +410,10 @@ public class PlayerEquipment {
}
private boolean hasMittens() {
- return V2EquipmentHelper.isRegionOccupied(host.getPlayer(), BodyRegionV2.HANDS);
+ return V2EquipmentHelper.isRegionOccupied(
+ host.getPlayer(),
+ BodyRegionV2.HANDS
+ );
}
// ========== Low-level V2 equipment operations ==========
@@ -380,7 +454,9 @@ public class PlayerEquipment {
*/
private ItemStack replaceInRegion(BodyRegionV2 region, ItemStack newStack) {
Player player = host.getPlayer();
- if (player == null || player.level().isClientSide) return ItemStack.EMPTY;
+ if (
+ player == null || player.level().isClientSide
+ ) return ItemStack.EMPTY;
IV2BondageEquipment equip = V2EquipmentHelper.getEquipment(player);
if (equip == null) return ItemStack.EMPTY;
@@ -388,7 +464,10 @@ public class PlayerEquipment {
ItemStack oldStack = equip.getInRegion(region);
// Call onUnequipped for the old item
- if (!oldStack.isEmpty() && oldStack.getItem() instanceof IV2BondageItem oldItem) {
+ if (
+ !oldStack.isEmpty() &&
+ oldStack.getItem() instanceof IV2BondageItem oldItem
+ ) {
oldItem.onUnequipped(oldStack, player);
}
@@ -396,7 +475,10 @@ public class PlayerEquipment {
equip.setInRegion(region, newStack.copy());
// Call onEquipped for the new item
- if (!newStack.isEmpty() && newStack.getItem() instanceof IV2BondageItem newItem) {
+ if (
+ !newStack.isEmpty() &&
+ newStack.getItem() instanceof IV2BondageItem newItem
+ ) {
newItem.onEquipped(newStack, player);
}
diff --git a/src/main/java/com/tiedup/remake/state/components/PlayerLifecycle.java b/src/main/java/com/tiedup/remake/state/components/PlayerLifecycle.java
index 1b9e764..55d1cba 100644
--- a/src/main/java/com/tiedup/remake/state/components/PlayerLifecycle.java
+++ b/src/main/java/com/tiedup/remake/state/components/PlayerLifecycle.java
@@ -1,11 +1,11 @@
package com.tiedup.remake.state.components;
import com.tiedup.remake.cells.CampOwnership;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.cells.CellRegistryV2;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.items.base.ItemBind;
import com.tiedup.remake.state.hosts.IPlayerBindStateHost;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.UUID;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.player.Player;
@@ -47,7 +47,6 @@ public class PlayerLifecycle {
// Update player reference
host.setOnline(true);
- // Phase 17: Clear captor reference (enslavement ends on disconnect)
host.setCaptor(null);
// Reset struggle animation state (prevent stuck animations)
diff --git a/src/main/java/com/tiedup/remake/state/components/PlayerSale.java b/src/main/java/com/tiedup/remake/state/components/PlayerSale.java
index 69b89c5..35da70d 100644
--- a/src/main/java/com/tiedup/remake/state/components/PlayerSale.java
+++ b/src/main/java/com/tiedup/remake/state/components/PlayerSale.java
@@ -4,7 +4,6 @@ import com.tiedup.remake.util.tasks.ItemTask;
/**
* Component responsible for player sale system.
- * Phase 14.3.5: Sale system fields
*
* Single Responsibility: Sale state management
* Complexity: LOW (simple state tracking)
diff --git a/src/main/java/com/tiedup/remake/state/components/PlayerShockCollar.java b/src/main/java/com/tiedup/remake/state/components/PlayerShockCollar.java
index ae0f901..3385eef 100644
--- a/src/main/java/com/tiedup/remake/state/components/PlayerShockCollar.java
+++ b/src/main/java/com/tiedup/remake/state/components/PlayerShockCollar.java
@@ -1,7 +1,6 @@
package com.tiedup.remake.state.components;
import com.tiedup.remake.core.ModSounds;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.core.SystemMessageManager;
import com.tiedup.remake.core.SystemMessageManager.MessageCategory;
import com.tiedup.remake.core.TiedUpMod;
@@ -10,6 +9,7 @@ import com.tiedup.remake.items.ItemShockCollarAuto;
import com.tiedup.remake.state.hosts.IPlayerBindStateHost;
import com.tiedup.remake.util.GameConstants;
import com.tiedup.remake.util.time.Timer;
+import com.tiedup.remake.v2.BodyRegionV2;
import java.util.List;
import java.util.UUID;
import net.minecraft.ChatFormatting;
@@ -20,7 +20,6 @@ import org.jetbrains.annotations.Nullable;
/**
* Component responsible for shock collar mechanics and GPS tracking.
- * Phase 13: Advanced collar features (shocks, GPS tracking)
*
* Single Responsibility: Collar automation and GPS monitoring
* Complexity: HIGH (synchronized timer, GPS zone checks, network messages)
@@ -32,7 +31,6 @@ public class PlayerShockCollar {
private final IPlayerBindStateHost host;
- // Phase 13: Collar automation fields
// volatile: accessed from synchronized blocks across multiple threads
private volatile Timer timerAutoShockCollar;
private final Object lockTimerAutoShock = new Object();
diff --git a/src/main/java/com/tiedup/remake/state/components/PlayerSpecialActions.java b/src/main/java/com/tiedup/remake/state/components/PlayerSpecialActions.java
index 323ea09..5246187 100644
--- a/src/main/java/com/tiedup/remake/state/components/PlayerSpecialActions.java
+++ b/src/main/java/com/tiedup/remake/state/components/PlayerSpecialActions.java
@@ -9,7 +9,6 @@ import com.tiedup.remake.v2.BodyRegionV2;
/**
* Component responsible for special player interactions.
* v2.5: Knife cut target for accessory cutting
- * Phase 14.1.7: Item transfers between players
*
* Single Responsibility: Special action management
* Complexity: MEDIUM (external dependencies)
@@ -67,14 +66,12 @@ public class PlayerSpecialActions {
}
/**
- * Phase 14.1.7: Transfer bondage item from this player to another.
* Updated to use IRestrainable parameter (was PlayerBindState)
*
* @param taker The entity taking the item
* @param slotIndex The slot index to take from
*/
public void takeBondageItemBy(IRestrainableEntity taker, int slotIndex) {
- // TODO Phase 14+: Transfer item from this player to taker
TiedUpMod.LOGGER.debug(
"[PlayerSpecialActions] {} taking bondage item from {} (slot {})",
taker.getKidnappedName(),
diff --git a/src/main/java/com/tiedup/remake/state/components/PlayerStateQuery.java b/src/main/java/com/tiedup/remake/state/components/PlayerStateQuery.java
index 311e4d4..8cb10b7 100644
--- a/src/main/java/com/tiedup/remake/state/components/PlayerStateQuery.java
+++ b/src/main/java/com/tiedup/remake/state/components/PlayerStateQuery.java
@@ -28,22 +28,34 @@ public class PlayerStateQuery {
/** Check if player has ropes/ties equipped. */
public boolean isTiedUp() {
- return V2EquipmentHelper.isRegionOccupied(host.getPlayer(), BodyRegionV2.ARMS);
+ return V2EquipmentHelper.isRegionOccupied(
+ host.getPlayer(),
+ BodyRegionV2.ARMS
+ );
}
/** Check if player is currently gagged. */
public boolean isGagged() {
- return V2EquipmentHelper.isRegionOccupied(host.getPlayer(), BodyRegionV2.MOUTH);
+ return V2EquipmentHelper.isRegionOccupied(
+ host.getPlayer(),
+ BodyRegionV2.MOUTH
+ );
}
/** Check if player is blindfolded. */
public boolean isBlindfolded() {
- return V2EquipmentHelper.isRegionOccupied(host.getPlayer(), BodyRegionV2.EYES);
+ return V2EquipmentHelper.isRegionOccupied(
+ host.getPlayer(),
+ BodyRegionV2.EYES
+ );
}
/** Check if player has earplugs. */
public boolean hasEarplugs() {
- return V2EquipmentHelper.isRegionOccupied(host.getPlayer(), BodyRegionV2.EARS);
+ return V2EquipmentHelper.isRegionOccupied(
+ host.getPlayer(),
+ BodyRegionV2.EARS
+ );
}
public boolean isEarplugged() {
@@ -52,22 +64,34 @@ public class PlayerStateQuery {
/** Check if player is wearing a collar. */
public boolean hasCollar() {
- return V2EquipmentHelper.isRegionOccupied(host.getPlayer(), BodyRegionV2.NECK);
+ return V2EquipmentHelper.isRegionOccupied(
+ host.getPlayer(),
+ BodyRegionV2.NECK
+ );
}
/** Returns the current collar ItemStack, or empty if none. */
public ItemStack getCurrentCollar() {
if (!hasCollar()) return ItemStack.EMPTY;
- return V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.NECK);
+ return V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.NECK
+ );
}
public boolean hasClothes() {
- return V2EquipmentHelper.isRegionOccupied(host.getPlayer(), BodyRegionV2.TORSO);
+ return V2EquipmentHelper.isRegionOccupied(
+ host.getPlayer(),
+ BodyRegionV2.TORSO
+ );
}
- /** Check if player has mittens equipped. Phase 14.4: Mittens system */
+ /** Check if player has mittens equipped. Mittens system */
public boolean hasMittens() {
- return V2EquipmentHelper.isRegionOccupied(host.getPlayer(), BodyRegionV2.HANDS);
+ return V2EquipmentHelper.isRegionOccupied(
+ host.getPlayer(),
+ BodyRegionV2.HANDS
+ );
}
/** Check if player can be tied up (not already tied). */
@@ -104,7 +128,10 @@ public class PlayerStateQuery {
*/
public boolean hasGaggingEffect() {
if (!isGagged()) return false;
- ItemStack gag = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.MOUTH);
+ ItemStack gag = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.MOUTH
+ );
if (gag.isEmpty()) return false;
return (
gag.getItem() instanceof
@@ -118,7 +145,10 @@ public class PlayerStateQuery {
*/
public boolean hasBlindingEffect() {
if (!isBlindfolded()) return false;
- ItemStack blindfold = V2EquipmentHelper.getInRegion(host.getPlayer(), BodyRegionV2.EYES);
+ ItemStack blindfold = V2EquipmentHelper.getInRegion(
+ host.getPlayer(),
+ BodyRegionV2.EYES
+ );
if (blindfold.isEmpty()) return false;
return (
blindfold.getItem() instanceof
diff --git a/src/main/java/com/tiedup/remake/state/components/PlayerStruggle.java b/src/main/java/com/tiedup/remake/state/components/PlayerStruggle.java
index 29d8280..94aac69 100644
--- a/src/main/java/com/tiedup/remake/state/components/PlayerStruggle.java
+++ b/src/main/java/com/tiedup/remake/state/components/PlayerStruggle.java
@@ -8,7 +8,6 @@ import net.minecraft.world.entity.player.Player;
/**
* Component responsible for struggle mechanics and resistance management.
- * Phase 7: Struggle & Resistance Methods
*
* Single Responsibility: Struggle state and resistance tracking
* Complexity: MEDIUM (volatile fields, animation coordination)
@@ -24,7 +23,6 @@ public class PlayerStruggle {
private final IPlayerBindStateHost host;
private final PlayerBindState state; // Cast reference for struggle system
- // Phase 7 & 8: Struggle state tracking
private final StruggleBinds struggleBindState;
private final StruggleCollar struggleCollarState;
diff --git a/src/main/java/com/tiedup/remake/state/components/PlayerTaskManagement.java b/src/main/java/com/tiedup/remake/state/components/PlayerTaskManagement.java
index bde52d1..55db0ee 100644
--- a/src/main/java/com/tiedup/remake/state/components/PlayerTaskManagement.java
+++ b/src/main/java/com/tiedup/remake/state/components/PlayerTaskManagement.java
@@ -7,7 +7,6 @@ import com.tiedup.remake.tasks.UntyingTask;
/**
* Component responsible for tracking tying/untying tasks.
- * Phase 6: Tying/Untying task tracking (Phase 14.2.6: unified for Players + NPCs)
*
* Single Responsibility: Task state management
* Complexity: LOW (simple getters/setters)
diff --git a/src/main/java/com/tiedup/remake/state/struggle/StruggleAccessory.java b/src/main/java/com/tiedup/remake/state/struggle/StruggleAccessory.java
index 0287a6f..54edfdc 100644
--- a/src/main/java/com/tiedup/remake/state/struggle/StruggleAccessory.java
+++ b/src/main/java/com/tiedup/remake/state/struggle/StruggleAccessory.java
@@ -11,7 +11,6 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
/**
- * Phase 21: Struggle implementation for accessory items (gag, blindfold, earplugs, collar).
*
* Accessories have NO base resistance - only locked items can be struggled.
* Lock adds 250 resistance. Struggle success destroys the padlock (lockable=false).
@@ -189,12 +188,14 @@ public class StruggleAccessory extends StruggleState {
}
/**
- * Phase 13: Trigger shock collar check when struggling against accessories.
*/
@Override
protected boolean onAttempt(PlayerBindState state) {
Player player = state.getPlayer();
- ItemStack collar = V2EquipmentHelper.getInRegion(player, BodyRegionV2.NECK);
+ ItemStack collar = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.NECK
+ );
if (
!collar.isEmpty() &&
diff --git a/src/main/java/com/tiedup/remake/state/struggle/StruggleBinds.java b/src/main/java/com/tiedup/remake/state/struggle/StruggleBinds.java
index cb8c1a9..f32c357 100644
--- a/src/main/java/com/tiedup/remake/state/struggle/StruggleBinds.java
+++ b/src/main/java/com/tiedup/remake/state/struggle/StruggleBinds.java
@@ -1,5 +1,6 @@
package com.tiedup.remake.state.struggle;
+import com.tiedup.remake.core.SettingsAccessor;
import com.tiedup.remake.core.SystemMessageManager;
import com.tiedup.remake.core.SystemMessageManager.MessageCategory;
import com.tiedup.remake.core.TiedUpMod;
@@ -7,7 +8,6 @@ import com.tiedup.remake.items.base.ILockable;
import com.tiedup.remake.items.base.ItemBind;
import com.tiedup.remake.state.IPlayerLeashAccess;
import com.tiedup.remake.state.PlayerBindState;
-import com.tiedup.remake.core.SettingsAccessor;
import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
import net.minecraft.world.entity.item.ItemEntity;
@@ -15,7 +15,6 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
/**
- * Phase 7: Struggle implementation for bind restraints (ropes).
*
* Handles struggling against binds:
* - Gets/sets resistance from equipped bind item
@@ -58,7 +57,6 @@ public class StruggleBinds extends StruggleState {
* - No bind item equipped
* - Bind item has struggle disabled
*
- * Phase 20: Locked items can now be struggled, but with x10 resistance.
* The resistance penalty is applied in StruggleState.struggle().
*
* Based on original StruggleBinds.canStruggle() (lines 33-41)
@@ -73,7 +71,10 @@ public class StruggleBinds extends StruggleState {
return false;
}
- ItemStack bindStack = V2EquipmentHelper.getInRegion(player, BodyRegionV2.ARMS);
+ ItemStack bindStack = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.ARMS
+ );
if (
bindStack.isEmpty() ||
!(bindStack.getItem() instanceof ItemBind bind)
@@ -81,11 +82,10 @@ public class StruggleBinds extends StruggleState {
return false;
}
- // Phase 20: Locked items can now be struggled (with x10 resistance)
// The locked check has been moved to struggle() where decrease is reduced
return bind.canBeStruggledOut(bindStack);
-}
+ }
/**
* Check if the bind item is locked.
@@ -99,7 +99,10 @@ public class StruggleBinds extends StruggleState {
Player player = state.getPlayer();
if (player == null) return false;
- ItemStack bindStack = V2EquipmentHelper.getInRegion(player, BodyRegionV2.ARMS);
+ ItemStack bindStack = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.ARMS
+ );
if (
bindStack.isEmpty() ||
!(bindStack.getItem() instanceof ItemBind bind)
@@ -135,13 +138,15 @@ public class StruggleBinds extends StruggleState {
}
/**
- * Phase 13: Trigger shock collar check even when struggling against binds.
* If shocked, the attempt is missed.
*/
@Override
protected boolean onAttempt(PlayerBindState state) {
Player player = state.getPlayer();
- ItemStack collar = V2EquipmentHelper.getInRegion(player, BodyRegionV2.NECK);
+ ItemStack collar = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.NECK
+ );
if (
!collar.isEmpty() &&
@@ -157,7 +162,6 @@ public class StruggleBinds extends StruggleState {
* Drop the bind items to the ground.
* Accessories are NOT dropped during bind struggle.
*
- * Phase 21: Struggle success destroys the padlock (lockable=false).
*
* Based on original StruggleBinds.dropBondageItems() (lines 50-69)
*
@@ -170,9 +174,11 @@ public class StruggleBinds extends StruggleState {
}
// ONLY drop the BIND slot
- ItemStack stack = V2EquipmentHelper.getInRegion(player, BodyRegionV2.ARMS);
+ ItemStack stack = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.ARMS
+ );
if (!stack.isEmpty()) {
- // Phase 21: Struggle success DESTROYS the padlock
// The bind drops without its padlock (lockable=false)
ItemStack toDrop = stack.copy();
if (
@@ -217,7 +223,6 @@ public class StruggleBinds extends StruggleState {
return;
}
- // Phase 17: 1. Remove from captivity/leash
if (state.isCaptive()) {
state.free();
}
@@ -240,7 +245,6 @@ public class StruggleBinds extends StruggleState {
}
/**
- * Phase 2: External success action for mini-game system.
* Called when player completes struggle mini-game successfully.
*
* @param state The player's bind state
@@ -250,7 +254,6 @@ public class StruggleBinds extends StruggleState {
}
/**
- * Phase 2: Set external cooldown timer (e.g., from mini-game exhaustion).
*
* @param seconds Cooldown duration in seconds
* @param level The level for timer
@@ -310,7 +313,10 @@ public class StruggleBinds extends StruggleState {
return;
}
- ItemStack bindStack = V2EquipmentHelper.getInRegion(target, BodyRegionV2.ARMS);
+ ItemStack bindStack = V2EquipmentHelper.getInRegion(
+ target,
+ BodyRegionV2.ARMS
+ );
if (
bindStack.isEmpty() ||
!(bindStack.getItem() instanceof ItemBind bind)
diff --git a/src/main/java/com/tiedup/remake/state/struggle/StruggleCollar.java b/src/main/java/com/tiedup/remake/state/struggle/StruggleCollar.java
index 48352e7..ec46cad 100644
--- a/src/main/java/com/tiedup/remake/state/struggle/StruggleCollar.java
+++ b/src/main/java/com/tiedup/remake/state/struggle/StruggleCollar.java
@@ -10,7 +10,6 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
/**
- * Phase 8: Master-Slave Relationships
*
* Struggle mechanics specifically for locked collars.
*
@@ -45,7 +44,10 @@ public class StruggleCollar extends StruggleState {
@Override
protected int getResistanceState(PlayerBindState state) {
Player player = state.getPlayer();
- ItemStack collar = V2EquipmentHelper.getInRegion(player, BodyRegionV2.NECK);
+ ItemStack collar = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.NECK
+ );
if (
collar.isEmpty() ||
@@ -66,7 +68,10 @@ public class StruggleCollar extends StruggleState {
@Override
protected void setResistanceState(PlayerBindState state, int resistance) {
Player player = state.getPlayer();
- ItemStack collar = V2EquipmentHelper.getInRegion(player, BodyRegionV2.NECK);
+ ItemStack collar = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.NECK
+ );
if (
collar.isEmpty() ||
@@ -95,12 +100,14 @@ public class StruggleCollar extends StruggleState {
protected boolean canStruggle(PlayerBindState state) {
Player player = state.getPlayer();
- // Phase 13 logic: Can only struggle against collar if NOT tied up
if (state.isTiedUp()) {
return false;
}
- ItemStack collar = V2EquipmentHelper.getInRegion(player, BodyRegionV2.NECK);
+ ItemStack collar = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.NECK
+ );
if (
collar.isEmpty() ||
@@ -134,7 +141,10 @@ public class StruggleCollar extends StruggleState {
@Override
protected boolean onAttempt(PlayerBindState state) {
Player player = state.getPlayer();
- ItemStack collar = V2EquipmentHelper.getInRegion(player, BodyRegionV2.NECK);
+ ItemStack collar = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.NECK
+ );
if (
!collar.isEmpty() &&
@@ -157,7 +167,10 @@ public class StruggleCollar extends StruggleState {
@Override
protected void successAction(PlayerBindState state) {
Player player = state.getPlayer();
- ItemStack collar = V2EquipmentHelper.getInRegion(player, BodyRegionV2.NECK);
+ ItemStack collar = V2EquipmentHelper.getInRegion(
+ player,
+ BodyRegionV2.NECK
+ );
if (
collar.isEmpty() ||
@@ -217,7 +230,10 @@ public class StruggleCollar extends StruggleState {
return;
}
- ItemStack collar = V2EquipmentHelper.getInRegion(target, BodyRegionV2.NECK);
+ ItemStack collar = V2EquipmentHelper.getInRegion(
+ target,
+ BodyRegionV2.NECK
+ );
if (
collar.isEmpty() ||
diff --git a/src/main/java/com/tiedup/remake/state/struggle/StruggleState.java b/src/main/java/com/tiedup/remake/state/struggle/StruggleState.java
index abd637e..308523a 100644
--- a/src/main/java/com/tiedup/remake/state/struggle/StruggleState.java
+++ b/src/main/java/com/tiedup/remake/state/struggle/StruggleState.java
@@ -1,16 +1,15 @@
package com.tiedup.remake.state.struggle;
+import com.tiedup.remake.core.SettingsAccessor;
import com.tiedup.remake.core.SystemMessageManager;
import com.tiedup.remake.core.SystemMessageManager.MessageCategory;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.state.PlayerBindState;
-import com.tiedup.remake.core.SettingsAccessor;
import com.tiedup.remake.util.time.Timer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.GameRules;
/**
- * Phase 7: Base class for struggle mechanics.
*
* Handles the logic for players/NPCs struggling against restraints:
* - Cooldown timer between attempts
@@ -87,7 +86,6 @@ public abstract class StruggleState {
);
}
- // Phase 13: Trigger attempt effects (shock collar check)
if (!onAttempt(state)) {
return; // Interrupted by pain
}
@@ -100,8 +98,12 @@ public abstract class StruggleState {
if (success) {
// Calculate resistance decrease
int currentResistance = getResistanceState(state);
- int minDecrease = SettingsAccessor.getStruggleMinDecrease(gameRules);
- int maxDecrease = SettingsAccessor.getStruggleMaxDecrease(gameRules);
+ int minDecrease = SettingsAccessor.getStruggleMinDecrease(
+ gameRules
+ );
+ int maxDecrease = SettingsAccessor.getStruggleMaxDecrease(
+ gameRules
+ );
int decrease =
minDecrease +
diff --git a/src/main/java/com/tiedup/remake/tasks/PlayerStateTask.java b/src/main/java/com/tiedup/remake/tasks/PlayerStateTask.java
index af8101d..87303a9 100644
--- a/src/main/java/com/tiedup/remake/tasks/PlayerStateTask.java
+++ b/src/main/java/com/tiedup/remake/tasks/PlayerStateTask.java
@@ -6,7 +6,6 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
/**
- * Phase 6: Lightweight client-side task state for displaying progress.
*
* Based on original PlayerStateTask from 1.12.2
*
diff --git a/src/main/java/com/tiedup/remake/tasks/TimedInteractTask.java b/src/main/java/com/tiedup/remake/tasks/TimedInteractTask.java
index 81e208b..55f4102 100644
--- a/src/main/java/com/tiedup/remake/tasks/TimedInteractTask.java
+++ b/src/main/java/com/tiedup/remake/tasks/TimedInteractTask.java
@@ -6,8 +6,6 @@ import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.level.Level;
/**
- * Phase 6: Timed task that involves interacting with a target entity.
- * Phase 14.2.6: Refactored to support any IBondageState entity (Players + NPCs)
*
* Based on original TimedInteractTask from 1.12.2
*
diff --git a/src/main/java/com/tiedup/remake/tasks/TimedTask.java b/src/main/java/com/tiedup/remake/tasks/TimedTask.java
index 3cd75ef..428e401 100644
--- a/src/main/java/com/tiedup/remake/tasks/TimedTask.java
+++ b/src/main/java/com/tiedup/remake/tasks/TimedTask.java
@@ -3,7 +3,6 @@ package com.tiedup.remake.tasks;
import net.minecraft.world.level.Level;
/**
- * Phase 6: Base class for all progress-based tasks (tying, untying, etc.)
*
* Based on original TimedTask from 1.12.2, refactored for continuous click requirement.
*
diff --git a/src/main/java/com/tiedup/remake/tasks/TyingPlayerTask.java b/src/main/java/com/tiedup/remake/tasks/TyingPlayerTask.java
index dc6ac51..7da3492 100644
--- a/src/main/java/com/tiedup/remake/tasks/TyingPlayerTask.java
+++ b/src/main/java/com/tiedup/remake/tasks/TyingPlayerTask.java
@@ -1,11 +1,11 @@
package com.tiedup.remake.tasks;
import com.tiedup.remake.core.TiedUpMod;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.network.ModNetwork;
import com.tiedup.remake.network.action.PacketTying;
import com.tiedup.remake.state.IBondageState;
import com.tiedup.remake.state.PlayerBindState;
+import com.tiedup.remake.v2.BodyRegionV2;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
@@ -13,8 +13,6 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
/**
- * Phase 6: Concrete tying task for tying up any IBondageState entity.
- * Phase 14.2.6: Unified to work with both Players and NPCs.
*
* Based on original TyingPlayerTask from 1.12.2
*
@@ -115,9 +113,7 @@ public class TyingPlayerTask extends TyingTask {
boolean isSelfTying =
kidnapper != null && kidnapper.equals(targetEntity);
- // ========================================
// SECURITY: Validate kidnapper is still close to target (skip for self-tying)
- // ========================================
if (!isSelfTying && kidnapper != null && targetEntity != null) {
double distance = kidnapper.distanceTo(targetEntity);
if (distance > 4.0) {
@@ -290,11 +286,16 @@ public class TyingPlayerTask extends TyingTask {
if (isSelfTying) {
if (kidnapper instanceof ServerPlayer serverPlayer) {
PacketTying completionPacket = new PacketTying(
- -1, this.getMaxSeconds(), true, "yourself"
+ -1,
+ this.getMaxSeconds(),
+ true,
+ "yourself"
);
ModNetwork.sendToPlayer(completionPacket, serverPlayer);
- PlayerBindState playerState = PlayerBindState.getInstance(serverPlayer);
+ PlayerBindState playerState = PlayerBindState.getInstance(
+ serverPlayer
+ );
if (playerState != null) {
playerState.setRestrainedState(null);
}
@@ -302,11 +303,16 @@ public class TyingPlayerTask extends TyingTask {
} else {
if (targetEntity instanceof ServerPlayer serverTarget) {
PacketTying completionPacket = new PacketTying(
- -1, this.getMaxSeconds(), false, kidnapperName
+ -1,
+ this.getMaxSeconds(),
+ false,
+ kidnapperName
);
ModNetwork.sendToPlayer(completionPacket, serverTarget);
- PlayerBindState playerState = PlayerBindState.getInstance(serverTarget);
+ PlayerBindState playerState = PlayerBindState.getInstance(
+ serverTarget
+ );
if (playerState != null) {
playerState.setRestrainedState(null);
}
@@ -314,7 +320,10 @@ public class TyingPlayerTask extends TyingTask {
if (kidnapper instanceof ServerPlayer serverKidnapper) {
PacketTying completionPacket = new PacketTying(
- -1, this.getMaxSeconds(), true, targetName
+ -1,
+ this.getMaxSeconds(),
+ true,
+ targetName
);
ModNetwork.sendToPlayer(completionPacket, serverKidnapper);
}
diff --git a/src/main/java/com/tiedup/remake/tasks/TyingTask.java b/src/main/java/com/tiedup/remake/tasks/TyingTask.java
index 9a9991d..4be440e 100644
--- a/src/main/java/com/tiedup/remake/tasks/TyingTask.java
+++ b/src/main/java/com/tiedup/remake/tasks/TyingTask.java
@@ -6,8 +6,6 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
/**
- * Phase 6: Abstract tying task (binding/gagging an entity).
- * Phase 14.2.6: Refactored to support any IBondageState entity (Players + NPCs)
*
* Based on original TyingTask from 1.12.2
*
diff --git a/src/main/java/com/tiedup/remake/tasks/UntyingPlayerTask.java b/src/main/java/com/tiedup/remake/tasks/UntyingPlayerTask.java
index f681cdb..79371b4 100644
--- a/src/main/java/com/tiedup/remake/tasks/UntyingPlayerTask.java
+++ b/src/main/java/com/tiedup/remake/tasks/UntyingPlayerTask.java
@@ -18,8 +18,6 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
/**
- * Phase 6: Concrete untying task for freeing a tied entity.
- * Phase 14.2.6: Unified to work with both Players and NPCs.
*
* Based on original UntyingPlayerTask from 1.12.2
*
@@ -92,9 +90,7 @@ public class UntyingPlayerTask extends UntyingTask {
*/
@Override
public synchronized void update() {
- // ========================================
// SECURITY: Validate helper is still close to target
- // ========================================
if (helper != null && targetEntity != null) {
double distance = helper.distanceTo(targetEntity);
if (distance > 4.0) {
@@ -184,7 +180,11 @@ public class UntyingPlayerTask extends UntyingTask {
untieTarget();
// Handle Damsel-specific rewards
- if (targetEntity instanceof EntityDamsel damsel && NpcTypeHelper.isDamselOnly(targetEntity) && helper != null) {
+ if (
+ targetEntity instanceof EntityDamsel damsel &&
+ NpcTypeHelper.isDamselOnly(targetEntity) &&
+ helper != null
+ ) {
// Reward the savior (gives emeralds and marks player as savior)
damsel.rewardSavior(helper);
}
@@ -255,8 +255,12 @@ public class UntyingPlayerTask extends UntyingTask {
private void dropBondageItems() {
// For player targets: use V2EquipmentHelper to get all equipped items
if (targetEntity instanceof Player player) {
- Map equipped = V2EquipmentHelper.getAllEquipped(player);
- for (Map.Entry entry : equipped.entrySet()) {
+ Map equipped =
+ V2EquipmentHelper.getAllEquipped(player);
+ for (Map.Entry<
+ BodyRegionV2,
+ ItemStack
+ > entry : equipped.entrySet()) {
ItemStack stack = entry.getValue();
if (!stack.isEmpty()) {
// Drop item at player's position
@@ -375,7 +379,6 @@ public class UntyingPlayerTask extends UntyingTask {
if (targetEntity instanceof Player player) {
V2EquipmentHelper.clearAll(player);
- // Phase 17: Free from captivity/leash if applicable (player-specific)
PlayerBindState playerState = PlayerBindState.getInstance(player);
if (playerState != null && playerState.isCaptive()) {
playerState.free();
diff --git a/src/main/java/com/tiedup/remake/tasks/UntyingTask.java b/src/main/java/com/tiedup/remake/tasks/UntyingTask.java
index 5ceeb43..620c8ab 100644
--- a/src/main/java/com/tiedup/remake/tasks/UntyingTask.java
+++ b/src/main/java/com/tiedup/remake/tasks/UntyingTask.java
@@ -5,8 +5,6 @@ import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.level.Level;
/**
- * Phase 6: Abstract untying task (freeing a tied entity).
- * Phase 14.2.6: Refactored to support any IBondageState entity (Players + NPCs)
*
* Based on original UntyingTask from 1.12.2
*
diff --git a/src/main/java/com/tiedup/remake/tasks/V2TyingPlayerTask.java b/src/main/java/com/tiedup/remake/tasks/V2TyingPlayerTask.java
index 47f1f86..f36f27c 100644
--- a/src/main/java/com/tiedup/remake/tasks/V2TyingPlayerTask.java
+++ b/src/main/java/com/tiedup/remake/tasks/V2TyingPlayerTask.java
@@ -78,7 +78,9 @@ public class V2TyingPlayerTask extends TyingPlayerTask {
}
// Consume the held item
heldStack.shrink(1);
- TiedUpMod.LOGGER.debug("[V2TyingPlayerTask] V2 equip succeeded, item consumed");
+ TiedUpMod.LOGGER.debug(
+ "[V2TyingPlayerTask] V2 equip succeeded, item consumed"
+ );
} else {
TiedUpMod.LOGGER.warn(
"[V2TyingPlayerTask] V2 equip BLOCKED after tying — regions may have changed"
diff --git a/src/main/java/com/tiedup/remake/util/FoodEffects.java b/src/main/java/com/tiedup/remake/util/FoodEffects.java
index a7c0e00..f35dc96 100644
--- a/src/main/java/com/tiedup/remake/util/FoodEffects.java
+++ b/src/main/java/com/tiedup/remake/util/FoodEffects.java
@@ -1,9 +1,9 @@
package com.tiedup.remake.util;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
+import org.jetbrains.annotations.Nullable;
/**
* Calculates the effects of feeding food items to NPCs.
diff --git a/src/main/java/com/tiedup/remake/util/GagMaterial.java b/src/main/java/com/tiedup/remake/util/GagMaterial.java
index 6f2119f..4b5a688 100644
--- a/src/main/java/com/tiedup/remake/util/GagMaterial.java
+++ b/src/main/java/com/tiedup/remake/util/GagMaterial.java
@@ -5,8 +5,6 @@ import com.tiedup.remake.core.ModConfig;
/**
* GagMaterial DNA - Defines the "sound" and behavior of different gag materials.
*
- * Phase 15: Added PANEL, LATEX, RING, BITE, SPONGE, BAGUETTE
- * Phase 16: Enhanced with phonetic properties for realistic speech transformation
*/
public enum GagMaterial {
// Original materials
@@ -63,7 +61,6 @@ public enum GagMaterial {
0.0f
),
- // Phase 15: New materials
PANEL(
new String[] { "m", "n" },
new String[] { "mm", "nn" },
@@ -148,7 +145,6 @@ public enum GagMaterial {
private final float defaultComprehension;
private final double defaultTalkRange;
- // Phase 16: Phonetic properties
private final String dominantConsonant;
private final String dominantVowel;
private final float plosiveBleed; // b,d,g,k,p,t - require lip/tongue
diff --git a/src/main/java/com/tiedup/remake/util/GameConstants.java b/src/main/java/com/tiedup/remake/util/GameConstants.java
index 0b5f65d..e26a0b6 100644
--- a/src/main/java/com/tiedup/remake/util/GameConstants.java
+++ b/src/main/java/com/tiedup/remake/util/GameConstants.java
@@ -1,7 +1,6 @@
package com.tiedup.remake.util;
/**
- * Phase 4 Refactoring: Centralized game constants.
*
* Contains all magic numbers extracted from across the codebase
* for better maintainability and easier tuning.
diff --git a/src/main/java/com/tiedup/remake/util/ItemNBTHelper.java b/src/main/java/com/tiedup/remake/util/ItemNBTHelper.java
index b7ee7fd..c7e592d 100644
--- a/src/main/java/com/tiedup/remake/util/ItemNBTHelper.java
+++ b/src/main/java/com/tiedup/remake/util/ItemNBTHelper.java
@@ -3,11 +3,11 @@ package com.tiedup.remake.util;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag;
import net.minecraft.world.item.ItemStack;
+import org.jetbrains.annotations.Nullable;
/**
* Utility class for common NBT operations on ItemStacks.
@@ -27,9 +27,7 @@ public final class ItemNBTHelper {
// Utility class - no instantiation
}
- // ========================================
// BOOLEAN OPERATIONS
- // ========================================
/**
* Get a boolean value from an ItemStack's NBT.
@@ -75,9 +73,7 @@ public final class ItemNBTHelper {
stack.getOrCreateTag().putBoolean(key, value);
}
- // ========================================
// INTEGER OPERATIONS
- // ========================================
/**
* Get an integer value from an ItemStack's NBT.
@@ -119,9 +115,7 @@ public final class ItemNBTHelper {
stack.getOrCreateTag().putInt(key, value);
}
- // ========================================
// STRING OPERATIONS
- // ========================================
/**
* Get a string value from an ItemStack's NBT.
@@ -177,9 +171,7 @@ public final class ItemNBTHelper {
}
}
- // ========================================
// UUID OPERATIONS
- // ========================================
/**
* Get a UUID value from an ItemStack's NBT.
@@ -231,9 +223,7 @@ public final class ItemNBTHelper {
return tag != null && tag.hasUUID(key);
}
- // ========================================
// UUID LIST OPERATIONS
- // ========================================
/**
* Get a list of UUIDs from an ItemStack's NBT.
@@ -351,9 +341,7 @@ public final class ItemNBTHelper {
return getUUIDList(stack, key).contains(uuid);
}
- // ========================================
// GENERIC OPERATIONS
- // ========================================
/**
* Check if an ItemStack's NBT contains a key.
diff --git a/src/main/java/com/tiedup/remake/util/KidnapExplosion.java b/src/main/java/com/tiedup/remake/util/KidnapExplosion.java
index 4f60221..7d64427 100644
--- a/src/main/java/com/tiedup/remake/util/KidnapExplosion.java
+++ b/src/main/java/com/tiedup/remake/util/KidnapExplosion.java
@@ -4,7 +4,6 @@ import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.state.IBondageState;
import com.tiedup.remake.state.PlayerBindState;
import java.util.List;
-import org.jetbrains.annotations.Nullable;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.server.level.ServerLevel;
@@ -15,11 +14,11 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.AABB;
+import org.jetbrains.annotations.Nullable;
/**
* Kidnap Explosion - Applies bondage to entities in an area.
*
- * Phase 16: Blocks
*
* Used by EntityKidnapBomb when it explodes.
* Applies stored bondage items to all kidnappable entities in radius.
diff --git a/src/main/java/com/tiedup/remake/util/KidnappedHelper.java b/src/main/java/com/tiedup/remake/util/KidnappedHelper.java
index 2a90638..2fc43ea 100644
--- a/src/main/java/com/tiedup/remake/util/KidnappedHelper.java
+++ b/src/main/java/com/tiedup/remake/util/KidnappedHelper.java
@@ -1,15 +1,14 @@
package com.tiedup.remake.util;
import com.tiedup.remake.compat.mca.MCACompat;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.state.IRestrainable;
import com.tiedup.remake.state.PlayerBindState;
+import com.tiedup.remake.v2.BodyRegionV2;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import org.jetbrains.annotations.Nullable;
/**
- * Phase 14.1: Helper utility for working with IRestrainable entities.
*
* Provides convenient methods for obtaining IRestrainable instances from various entity types.
*
@@ -20,8 +19,8 @@ import org.jetbrains.annotations.Nullable;
* Supported Entity Types
*
* - Player: Uses {@link PlayerBindState} singleton
- * - EntityDamsel (Phase 14.2): Implements IRestrainable directly
- * - EntityKidnapper (Phase 14.2): Implements IRestrainable directly
+ * - EntityDamsel: Implements IRestrainable directly
+ * - EntityKidnapper: Implements IRestrainable directly
* - Other entities: Returns null (not kidnappable)
*
*
@@ -166,7 +165,6 @@ public class KidnappedHelper {
* @return true if the entity is enslaved, false otherwise
*/
/**
- * Phase 17: Renamed from isSlave to isCaptive
*/
public static boolean isCaptive(LivingEntity entity) {
IRestrainable state = getKidnappedState(entity);
diff --git a/src/main/java/com/tiedup/remake/util/MessageDispatcher.java b/src/main/java/com/tiedup/remake/util/MessageDispatcher.java
index b2af84d..6c0f2a0 100644
--- a/src/main/java/com/tiedup/remake/util/MessageDispatcher.java
+++ b/src/main/java/com/tiedup/remake/util/MessageDispatcher.java
@@ -1,10 +1,10 @@
package com.tiedup.remake.util;
import com.tiedup.remake.dialogue.GagTalkManager;
-import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.entities.EntityDamsel;
import com.tiedup.remake.state.IBondageState;
import com.tiedup.remake.state.PlayerBindState;
+import com.tiedup.remake.v2.BodyRegionV2;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.server.MinecraftServer;
@@ -35,9 +35,7 @@ public final class MessageDispatcher {
// Utility class - no instantiation
}
- // ========================================
// EARPLUG-AWARE METHODS
- // ========================================
/**
* Send a message to a player (respects earplugs).
@@ -149,9 +147,7 @@ public final class MessageDispatcher {
return true;
}
- // ========================================
// BYPASS METHODS (ignore earplugs)
- // ========================================
/**
* Send a critical system message that IGNORES earplugs.
@@ -182,9 +178,7 @@ public final class MessageDispatcher {
target.displayClientMessage(message, true);
}
- // ========================================
// INTERNAL HELPERS
- // ========================================
/**
* Check if a player has earplugs equipped.
@@ -200,9 +194,7 @@ public final class MessageDispatcher {
return state != null && state.hasEarplugs();
}
- // ========================================
// NPC DIALOGUE METHODS
- // ========================================
/**
* Send a dialogue message from an entity to a player.
@@ -230,7 +222,11 @@ public final class MessageDispatcher {
// Apply gag talk if entity is a gagged NPC
String finalMessage = message;
- if (entity instanceof com.tiedup.remake.entities.AbstractTiedUpNpc npc && npc.isGagged()) {
+ if (
+ entity instanceof
+ com.tiedup.remake.entities.AbstractTiedUpNpc npc &&
+ npc.isGagged()
+ ) {
ItemStack gag = npc.getEquipment(BodyRegionV2.MOUTH);
IBondageState state = KidnappedHelper.getKidnappedState(npc);
if (state != null && !gag.isEmpty()) {
diff --git a/src/main/java/com/tiedup/remake/util/ModGameRules.java b/src/main/java/com/tiedup/remake/util/ModGameRules.java
index 2c13e42..c111d37 100644
--- a/src/main/java/com/tiedup/remake/util/ModGameRules.java
+++ b/src/main/java/com/tiedup/remake/util/ModGameRules.java
@@ -4,7 +4,6 @@ import com.tiedup.remake.core.TiedUpMod;
import net.minecraft.world.level.GameRules;
/**
- * Phase 6: Custom GameRules for TiedUp mod.
*
* Manages configurable values for gameplay mechanics.
* GameRules can be changed via /gamerule command in-game.
@@ -13,9 +12,7 @@ import net.minecraft.world.level.GameRules;
*/
public class ModGameRules {
- // =====================================================
// RESTRAINT MECHANICS
- // =====================================================
/** Time (in seconds) required to tie up a player. Default: 5 */
public static GameRules.Key TYING_PLAYER_TIME;
@@ -26,9 +23,7 @@ public class ModGameRules {
/** Resistance added by a padlock when locked on an item. Default: 250 */
public static GameRules.Key PADLOCK_RESISTANCE;
- // =====================================================
// STRUGGLE SYSTEM
- // =====================================================
/** Enable/disable struggle system. Default: true */
public static GameRules.Key STRUGGLE;
@@ -41,34 +36,33 @@ public class ModGameRules {
/** Cooldown between struggle attempts (ticks, 20 = 1s). Default: 80 (4s) */
public static GameRules.Key