package emu.grasscutter.game.entity; import emu.grasscutter.data.binout.config.ConfigEntityGadget; import emu.grasscutter.game.props.FightProperty; import emu.grasscutter.game.world.Scene; import emu.grasscutter.utils.Position; import lombok.Getter; public abstract class EntityBaseGadget extends GameEntity { @Getter(onMethod_ = @Override) protected final Position position; @Getter(onMethod_ = @Override) protected final Position rotation; public EntityBaseGadget(Scene scene) { this(scene, null, null); } public EntityBaseGadget(Scene scene, Position position, Position rotation) { super(scene); this.position = position != null ? position.clone() : new Position(); this.rotation = rotation != null ? rotation.clone() : new Position(); } public abstract int getGadgetId(); @Override public int getEntityTypeId() { return this.getGadgetId(); } @Override public void onDeath(int killerId) { super.onDeath(killerId); // Invoke super class's onDeath() method. } protected void fillFightProps(ConfigEntityGadget configGadget) { if (configGadget == null || configGadget.getCombat() == null) { return; } var combatData = configGadget.getCombat(); var combatProperties = combatData.getProperty(); var targetHp = combatProperties.getHP(); setFightProperty(FightProperty.FIGHT_PROP_MAX_HP, targetHp); setFightProperty(FightProperty.FIGHT_PROP_BASE_HP, targetHp); if (combatProperties.isInvincible()) { targetHp = Float.POSITIVE_INFINITY; } setFightProperty(FightProperty.FIGHT_PROP_CUR_HP, targetHp); var atk = combatProperties.getAttack(); setFightProperty(FightProperty.FIGHT_PROP_BASE_ATTACK, atk); setFightProperty(FightProperty.FIGHT_PROP_CUR_ATTACK, atk); var def = combatProperties.getDefence(); setFightProperty(FightProperty.FIGHT_PROP_BASE_DEFENSE, def); setFightProperty(FightProperty.FIGHT_PROP_CUR_DEFENSE, def); setLockHP(combatProperties.isLockHP()); } }