From 24485696f350cad594b757edf69eef4c5525dd28 Mon Sep 17 00:00:00 2001 From: GearShocky Date: Sun, 16 Mar 2025 10:03:41 +0500 Subject: [PATCH] don't move when charging --- .../ru/dbotthepony/mc/otm/entity/Enforcer.kt | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/entity/Enforcer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/entity/Enforcer.kt index 638ba5a24..a38ffaaa9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/entity/Enforcer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/entity/Enforcer.kt @@ -30,12 +30,13 @@ import net.minecraft.world.level.Level import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.game.MSoundEvents +import java.util.* class Enforcer(type: EntityType, level: Level) : Monster(type,level) { val idleState = AnimationState() val chargeState = AnimationState() + init { - entityData.set(isChargingb, false) idleState.start(tickCount) } @@ -48,18 +49,23 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { .add(Attributes.STEP_HEIGHT, 1.0) .add(Attributes.KNOCKBACK_RESISTANCE, 1.0) } - private val isChargingb: EntityDataAccessor = + private val IS_CHARGING: EntityDataAccessor = SynchedEntityData.defineId(Enforcer::class.java, EntityDataSerializers.BOOLEAN) } override fun defineSynchedData(builder: SynchedEntityData.Builder) { super.defineSynchedData(builder) - builder.define(isChargingb, false) + builder.define(IS_CHARGING, false) + } + + fun setCharging(value: Boolean) { + entityData.set(IS_CHARGING, value) + } + + fun isCharging(): Boolean { + return entityData.get(IS_CHARGING) } - var isCharging: Boolean - get() = entityData.get(isChargingb) - set(value) = entityData.set(isChargingb, value) override fun registerGoals() { goalSelector.addGoal(7, LookAtPlayerGoal(this, Player::class.java, 8f)) @@ -124,13 +130,18 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { class RammingGoal(private val mob: Enforcer) : Goal() { private var target: LivingEntity? = null + init { + setFlags(EnumSet.of(Goal.Flag.MOVE)) + } + private var chargeTime = 0 private val windupTime = 20 + private val maxChargeTime = 40 private var chargeDir: Vec3? = null private var cooldown = 0 private val minCooldown = 20 private val maxCooldown = 60 - + private var isCharging = false override fun canUse(): Boolean { if (cooldown > 0) { @@ -142,18 +153,22 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { return target != null } + override fun canContinueToUse(): Boolean { + return isCharging && chargeTime < maxChargeTime + } + override fun start() { + mob.setCharging(true) mob.playSound(MSoundEvents.ENFORCER_ALERT, 1.0f, 1.0f) chargeTime = 0 mob.navigation.stop() cooldown = minCooldown + mob.random.nextInt(maxCooldown - minCooldown) - mob.isCharging = true - + isCharging = true mob.chargeState.start(mob.tickCount) } override fun tick() { - if (!mob.isCharging) return + if (!isCharging) return chargeTime++ val target = mob.target ?: return @@ -202,7 +217,6 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { mob.yHeadRot = mob.yRot mob.move(net.minecraft.world.entity.MoverType.SELF, dir.scale(1.8)) - //mob.setDeltaMovement(dir.scale(1.8)) if (mob.horizontalCollision) { @@ -232,12 +246,11 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { } override fun stop() { - mob.isCharging = false + mob.setCharging(false) mob.setDeltaMovement(Vec3.ZERO) chargeTime = 0 chargeDir = null - mob.isCharging = false - + isCharging = false mob.chargeState.stop() } } @@ -248,7 +261,7 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { private var movePos: Vec3? = null override fun canUse(): Boolean { - return mob.target != null && !mob.isCharging + return mob.target != null && !mob.isCharging() } override fun canContinueToUse(): Boolean {