don't move when charging

This commit is contained in:
GearShocky 2025-03-16 10:03:41 +05:00
parent 7b3a6f229b
commit 24485696f3

View File

@ -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<Enforcer>, 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<Enforcer>, level: Level) : Monster(type,level) {
.add(Attributes.STEP_HEIGHT, 1.0)
.add(Attributes.KNOCKBACK_RESISTANCE, 1.0)
}
private val isChargingb: EntityDataAccessor<Boolean> =
private val IS_CHARGING: EntityDataAccessor<Boolean> =
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<Enforcer>, 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<Enforcer>, 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<Enforcer>, 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<Enforcer>, 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<Enforcer>, 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 {