package com.tiedup.remake.state;
import net.minecraft.world.entity.player.Player;
/**
* Active coercion interface for kidnapped entities.
*
*
Covers tightening binds, chloroform, electric shocks,
* and forceful item removal by another entity.
*
* @see IRestrainableEntity
* @see IRestrainable
*/
// C6-V2: takeBondageItemBy narrowed from IRestrainable to IRestrainableEntity
public interface ICoercible extends IRestrainableEntity {
// SPECIAL INTERACTIONS
/**
* Tighten binds on this entity (increase resistance).
* Called when master uses paddle/whip on slave.
*
* Effects:
*
* - Resets bind resistance to maximum
* - Plays slap/whip sound
* - Shows message to entity
*
*
* @param tightener The player tightening the binds
*/
void tighten(Player tightener);
/**
* Apply chloroform effect to this entity.
*
* Effects (from original):
*
* - Slowness effect (duration from parameter)
* - Weakness effect
* - Prevents movement/interaction
*
*
* @param duration Effect duration in ticks
*/
void applyChloroform(int duration);
/**
* Shock this kidnapped entity.
* Uses default damage and no message.
*
* Effects:
*
* - Plays electric shock sound
* - Applies damage (default: 1.0F)
* - Shows shock particles (client-side)
*
*/
void shockKidnapped();
/**
* Shock this kidnapped entity with custom message and damage.
*
* @param messageAddon Additional message to send to the entity
* @param damage Damage amount to apply
*/
void shockKidnapped(String messageAddon, float damage);
/**
* Another entity takes a bondage item from this entity.
* Used when master removes items from slave.
*
* C6-V2: Narrowed from IRestrainable to IRestrainableEntity (only uses identity methods)
* This allows NPCs to take items from Players or other NPCs
*
* @param taker The IRestrainableEntity taking the item
* @param slotIndex The slot index (0-5: bind, gag, blindfold, earplugs, collar, clothes)
*/
void takeBondageItemBy(IRestrainableEntity taker, int slotIndex);
// COLLAR TIMERS
/**
* Force-stops and clears any active auto-shock collar timer.
*
* Called when:
*
* - GPS collar is removed
* - Auto-shock collar is removed
* - Entity is freed from slavery
*
*/
default void resetAutoShockTimer() {
// Default no-op (NPCs don't have timers by default)
// PlayerBindState overrides this to clear timer
}
}