don't move when charging
This commit is contained in:
parent
7b3a6f229b
commit
24485696f3
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user