vary room theme weights — sculk rare, inferno/ice uncommon

This commit is contained in:
Adrien
2026-04-16 15:53:36 +02:00
committed by NotEvil
parent cc8adfe015
commit b47f642532
44 changed files with 117 additions and 222 deletions

View File

@@ -1,10 +1,8 @@
package com.tiedup.remake.state;
import com.tiedup.remake.core.ModSounds;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.entities.LeashProxyEntity;
import com.tiedup.remake.items.base.ILockable;
import com.tiedup.remake.v2.bondage.CollarHelper;
import com.tiedup.remake.network.sync.SyncManager;
import com.tiedup.remake.state.components.PlayerCaptivity;
import com.tiedup.remake.state.components.PlayerClothesPermission;
@@ -19,16 +17,10 @@ import com.tiedup.remake.state.components.PlayerStateQuery;
import com.tiedup.remake.state.components.PlayerStruggle;
import com.tiedup.remake.state.components.PlayerTaskManagement;
import com.tiedup.remake.state.hosts.IPlayerBindStateHost;
import com.tiedup.remake.state.struggle.StruggleBinds;
import com.tiedup.remake.tasks.PlayerStateTask;
import com.tiedup.remake.tasks.TimedInteractTask;
import com.tiedup.remake.tasks.TyingTask;
import com.tiedup.remake.tasks.UntyingTask;
import com.tiedup.remake.util.RestraintEffectUtils;
import com.tiedup.remake.util.teleport.Position;
import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@@ -156,6 +148,16 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
return movement;
}
/** Access task management component (tying, untying, feeding tasks). */
public PlayerTaskManagement tasks() {
return taskManagement;
}
/** Access struggle component (struggle, tighten, cooldowns). */
public PlayerStruggle getStruggle() {
return struggle;
}
/**
* Resets all movement style state to defaults.
* Called on death, logout, and dimension change to ensure clean re-activation.
@@ -385,112 +387,15 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
// Note: getCaptor(), getCaptorManager(), setStruggling(), setStrugglingClient(),
// isStruggling(), getStruggleStartTick() are implemented elsewhere in the class
// ========== Tying/Untying Task Methods ==========
// Delegated to PlayerTaskManagement component
public TyingTask getCurrentTyingTask() {
return taskManagement.getCurrentTyingTask();
}
public void setCurrentTyingTask(TyingTask task) {
taskManagement.setCurrentTyingTask(task);
}
public UntyingTask getCurrentUntyingTask() {
return taskManagement.getCurrentUntyingTask();
}
public void setCurrentUntyingTask(UntyingTask task) {
taskManagement.setCurrentUntyingTask(task);
}
public PlayerStateTask getClientTyingTask() {
return taskManagement.getClientTyingTask();
}
public void setClientTyingTask(PlayerStateTask task) {
taskManagement.setClientTyingTask(task);
}
public PlayerStateTask getClientUntyingTask() {
return taskManagement.getClientUntyingTask();
}
public void setClientUntyingTask(PlayerStateTask task) {
taskManagement.setClientUntyingTask(task);
}
public TimedInteractTask getCurrentFeedingTask() {
return taskManagement.getCurrentFeedingTask();
}
public void setCurrentFeedingTask(TimedInteractTask task) {
taskManagement.setCurrentFeedingTask(task);
}
public PlayerStateTask getClientFeedingTask() {
return taskManagement.getClientFeedingTask();
}
public void setClientFeedingTask(PlayerStateTask task) {
taskManagement.setClientFeedingTask(task);
}
public PlayerStateTask getRestrainedState() {
return taskManagement.getRestrainedState();
}
public void setRestrainedState(PlayerStateTask state) {
taskManagement.setRestrainedState(state);
}
// ========== Struggle & Resistance Methods ==========
// Delegated to PlayerStruggle component
/**
* Entry point for the Struggle logic (Key R).
* Distributes effort between Binds and Collar.
*/
public void struggle() {
struggle.struggle();
}
// Non-delegation methods only — delegation removed, use getStruggle() accessor.
// tighten(Player) is interface-mandated by ICoercible — cannot be removed.
/** Restores resistance to base values when a master tightens the ties. */
public void tighten(Player tightener) {
struggle.tighten(tightener);
}
/**
* Get the StruggleBinds instance for external access (mini-game system).
*/
public StruggleBinds getStruggleBinds() {
return struggle.getStruggleBinds();
}
/**
* Set a cooldown on struggle attempts (used after mini-game exhaustion).
* @param seconds Cooldown duration in seconds
*/
public void setStruggleCooldown(int seconds) {
struggle.setStruggleCooldown(seconds);
}
/**
* v2.5: Check if struggle cooldown is active.
* @return true if cooldown is active (cannot struggle yet)
*/
public boolean isStruggleCooldownActive() {
return struggle.isStruggleCooldownActive();
}
/**
* v2.5: Get remaining struggle cooldown in seconds.
* @return Remaining seconds, or 0 if no cooldown
*/
public int getStruggleCooldownRemaining() {
return struggle.getStruggleCooldownRemaining();
}
// ========== v2.5: Knife Cut Target Methods ==========
// Delegated to PlayerSpecialActions component
@@ -560,16 +465,6 @@ public class PlayerBindState implements IRestrainable, IPlayerBindStateHost {
this.struggleState = new StruggleSnapshot(struggling, current.startTick());
}
/**
* Check if struggle animation should stop (duration expired).
* Delegated to PlayerStruggle component.
* @param currentTick Current game time tick
* @return True if animation has been playing for >= 80 ticks
*/
public boolean shouldStopStruggling(long currentTick) {
return struggle.shouldStopStruggling(currentTick);
}
/**
* Delegated to PlayerEquipment component
*/