Files
TiedUp-/src/main/java/com/tiedup/remake/entities/EntityKidnapperElite.java
NotEvil a71093ba9c Remove internal phase comments and format code
Strip all Phase references, TODO/FUTURE roadmap notes, and internal
planning comments from the codebase. Run Prettier for consistent
formatting across all Java files.
2026-04-12 01:25:55 +02:00

162 lines
4.6 KiB
Java

package com.tiedup.remake.entities;
import com.tiedup.remake.core.SettingsAccessor;
import com.tiedup.remake.dialogue.SpeakerType;
import com.tiedup.remake.entities.skins.EliteKidnapperSkinManager;
import com.tiedup.remake.entities.skins.Gender;
import java.util.UUID;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.Style;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.level.Level;
/**
* Elite Kidnapper - Rare, faster, more dangerous kidnapper variant.
*
*
* Differences from regular EntityKidnapper:
* - Faster movement speed (0.35 vs 0.27)
* - Higher health (40 vs 20)
* - Faster capture time (10 ticks vs 20 ticks)
* - Dark red name color
* - Dedicated elite skins (Suki, Carol, Athena, Evelyn)
* - Rarer spawns
* - Higher item probabilities
*
* Refactored: Uses parent's variant system via virtual methods.
*/
public class EntityKidnapperElite extends EntityKidnapper {
// CONSTANTS
public static final double ELITE_MAX_HEALTH = 40.0D;
public static final double ELITE_MOVEMENT_SPEED = 0.35D;
public static final double ELITE_KNOCKBACK_RESISTANCE = 0.9D;
public static final double ELITE_FOLLOW_RANGE = 60.0D;
public static final double ELITE_ATTACK_DAMAGE = 8.0D;
public static final int ELITE_CAPTURE_TIME_TICKS = 10;
public static final int ELITE_NAME_COLOR = 0xAA0000;
// CONSTRUCTOR
public EntityKidnapperElite(
EntityType<? extends EntityKidnapperElite> type,
Level level
) {
super(type, level);
}
// ATTRIBUTES
/**
* Create elite kidnapper attributes.
* Faster and tougher than regular kidnappers.
*/
public static AttributeSupplier.Builder createAttributes() {
return Mob.createMobAttributes()
.add(Attributes.MAX_HEALTH, ELITE_MAX_HEALTH)
.add(Attributes.MOVEMENT_SPEED, ELITE_MOVEMENT_SPEED)
.add(Attributes.KNOCKBACK_RESISTANCE, ELITE_KNOCKBACK_RESISTANCE)
.add(Attributes.FOLLOW_RANGE, ELITE_FOLLOW_RANGE)
.add(Attributes.ATTACK_DAMAGE, ELITE_ATTACK_DAMAGE);
}
// VARIANT SYSTEM - Override virtual methods
@Override
public KidnapperVariant lookupVariantById(String variantId) {
return EliteKidnapperSkinManager.CORE.getVariant(variantId);
}
@Override
public KidnapperVariant computeVariantForEntity(UUID entityUUID) {
Gender preferredGender = SettingsAccessor.getPreferredSpawnGender(
this.level() != null ? this.level().getGameRules() : null
);
return EliteKidnapperSkinManager.CORE.getVariantForEntity(
entityUUID,
preferredGender
);
}
@Override
public String getVariantTextureFolder() {
return "textures/entity/kidnapper/elite/";
}
@Override
public String getDefaultVariantId() {
return "suki";
}
@Override
public void applyVariantName(KidnapperVariant variant) {
// Elite variants always use their default name
this.setNpcName(variant.defaultName());
}
@Override
public String getVariantNBTKey() {
// Use different key for backward compatibility with existing saves
return "EliteVariantName";
}
// CAPTURE TIMING (Faster for Elite)
/**
* Elite kidnappers tie up targets in half the time.
*/
@Override
public int getCaptureBindTime() {
return ELITE_CAPTURE_TIME_TICKS;
}
/**
* Elite kidnappers gag targets in half the time.
*/
@Override
public int getCaptureGagTime() {
return ELITE_CAPTURE_TIME_TICKS;
}
// DISPLAY
@Override
public Component getDisplayName() {
return Component.literal(this.getNpcName()).withStyle(
Style.EMPTY.withColor(ELITE_NAME_COLOR)
);
}
// OVERRIDES
/**
* Elite kidnappers use higher item probabilities.
* - 100% bind (same as regular)
* - 100% gag (instead of 50%)
* - 80% mittens (instead of 40%)
* - 60% earplugs (instead of 30%)
* - 40% blindfold (instead of 20%)
*/
@Override
public KidnapperItemSelector.SelectionResult selectItemsForKidnapper() {
return KidnapperItemSelector.selectForEliteKidnapper();
}
// DIALOGUE SPEAKER (Elite-specific)
@Override
public SpeakerType getSpeakerType() {
return SpeakerType.KIDNAPPER_ELITE;
}
@Override
public int getSpeakerMood() {
// Elite kidnappers are always confident
return 70;
}
}