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.core.TranslatableComponent
|
||||||
import ru.dbotthepony.mc.otm.registry.MNames
|
import ru.dbotthepony.mc.otm.registry.MNames
|
||||||
import ru.dbotthepony.mc.otm.registry.game.MSoundEvents
|
import ru.dbotthepony.mc.otm.registry.game.MSoundEvents
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
|
class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
|
||||||
val idleState = AnimationState()
|
val idleState = AnimationState()
|
||||||
val chargeState = AnimationState()
|
val chargeState = AnimationState()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
entityData.set(isChargingb, false)
|
|
||||||
idleState.start(tickCount)
|
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.STEP_HEIGHT, 1.0)
|
||||||
.add(Attributes.KNOCKBACK_RESISTANCE, 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)
|
SynchedEntityData.defineId(Enforcer::class.java, EntityDataSerializers.BOOLEAN)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun defineSynchedData(builder: SynchedEntityData.Builder) {
|
override fun defineSynchedData(builder: SynchedEntityData.Builder) {
|
||||||
super.defineSynchedData(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() {
|
override fun registerGoals() {
|
||||||
goalSelector.addGoal(7, LookAtPlayerGoal(this, Player::class.java, 8f))
|
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() {
|
class RammingGoal(private val mob: Enforcer) : Goal() {
|
||||||
private var target: LivingEntity? = null
|
private var target: LivingEntity? = null
|
||||||
|
|
||||||
|
init {
|
||||||
|
setFlags(EnumSet.of(Goal.Flag.MOVE))
|
||||||
|
}
|
||||||
|
|
||||||
private var chargeTime = 0
|
private var chargeTime = 0
|
||||||
private val windupTime = 20
|
private val windupTime = 20
|
||||||
|
private val maxChargeTime = 40
|
||||||
private var chargeDir: Vec3? = null
|
private var chargeDir: Vec3? = null
|
||||||
private var cooldown = 0
|
private var cooldown = 0
|
||||||
private val minCooldown = 20
|
private val minCooldown = 20
|
||||||
private val maxCooldown = 60
|
private val maxCooldown = 60
|
||||||
|
private var isCharging = false
|
||||||
|
|
||||||
override fun canUse(): Boolean {
|
override fun canUse(): Boolean {
|
||||||
if (cooldown > 0) {
|
if (cooldown > 0) {
|
||||||
@ -142,18 +153,22 @@ class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
|
|||||||
return target != null
|
return target != null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun canContinueToUse(): Boolean {
|
||||||
|
return isCharging && chargeTime < maxChargeTime
|
||||||
|
}
|
||||||
|
|
||||||
override fun start() {
|
override fun start() {
|
||||||
|
mob.setCharging(true)
|
||||||
mob.playSound(MSoundEvents.ENFORCER_ALERT, 1.0f, 1.0f)
|
mob.playSound(MSoundEvents.ENFORCER_ALERT, 1.0f, 1.0f)
|
||||||
chargeTime = 0
|
chargeTime = 0
|
||||||
mob.navigation.stop()
|
mob.navigation.stop()
|
||||||
cooldown = minCooldown + mob.random.nextInt(maxCooldown - minCooldown)
|
cooldown = minCooldown + mob.random.nextInt(maxCooldown - minCooldown)
|
||||||
mob.isCharging = true
|
isCharging = true
|
||||||
|
|
||||||
mob.chargeState.start(mob.tickCount)
|
mob.chargeState.start(mob.tickCount)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun tick() {
|
override fun tick() {
|
||||||
if (!mob.isCharging) return
|
if (!isCharging) return
|
||||||
|
|
||||||
chargeTime++
|
chargeTime++
|
||||||
val target = mob.target ?: return
|
val target = mob.target ?: return
|
||||||
@ -202,7 +217,6 @@ class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
|
|||||||
mob.yHeadRot = mob.yRot
|
mob.yHeadRot = mob.yRot
|
||||||
|
|
||||||
mob.move(net.minecraft.world.entity.MoverType.SELF, dir.scale(1.8))
|
mob.move(net.minecraft.world.entity.MoverType.SELF, dir.scale(1.8))
|
||||||
//mob.setDeltaMovement(dir.scale(1.8))
|
|
||||||
|
|
||||||
|
|
||||||
if (mob.horizontalCollision) {
|
if (mob.horizontalCollision) {
|
||||||
@ -232,12 +246,11 @@ class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun stop() {
|
override fun stop() {
|
||||||
mob.isCharging = false
|
mob.setCharging(false)
|
||||||
mob.setDeltaMovement(Vec3.ZERO)
|
mob.setDeltaMovement(Vec3.ZERO)
|
||||||
chargeTime = 0
|
chargeTime = 0
|
||||||
chargeDir = null
|
chargeDir = null
|
||||||
mob.isCharging = false
|
isCharging = false
|
||||||
|
|
||||||
mob.chargeState.stop()
|
mob.chargeState.stop()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -248,7 +261,7 @@ class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
|
|||||||
private var movePos: Vec3? = null
|
private var movePos: Vec3? = null
|
||||||
|
|
||||||
override fun canUse(): Boolean {
|
override fun canUse(): Boolean {
|
||||||
return mob.target != null && !mob.isCharging
|
return mob.target != null && !mob.isCharging()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun canContinueToUse(): Boolean {
|
override fun canContinueToUse(): Boolean {
|
||||||
|
Loading…
Reference in New Issue
Block a user