From 5606096040a80935f656c189662f6a45cf699297 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sun, 23 Mar 2025 09:40:48 +0700 Subject: [PATCH] Update BlazeFireballGoal's code --- .../ru/dbotthepony/mc/otm/entity/Enforcer.kt | 70 ++++++++----------- 1 file changed, 31 insertions(+), 39 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 b3d29e7e3..2a11ff1a8 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/entity/Enforcer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/entity/Enforcer.kt @@ -34,6 +34,7 @@ import net.minecraft.world.entity.projectile.SmallFireball import net.minecraft.world.level.Level import net.minecraft.world.phys.Vec3 import ru.dbotthepony.mc.otm.core.TranslatableComponent +import ru.dbotthepony.mc.otm.core.util.TickList import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.game.MSoundEvents import java.util.* @@ -145,7 +146,7 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { return 180 } - fun shootFireball(math: Float) { + private fun shootFireball(math: Float) { if (level().isClientSide) return val offset_dist = 1.4 @@ -170,7 +171,7 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { level().addFreshEntity(fireball) } - fun shootMissile(math: Float) { + private fun shootMissile(math: Float) { if (level().isClientSide) return val offset_dist = 1.4 @@ -285,7 +286,6 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { mob.move(net.minecraft.world.entity.MoverType.SELF, dir.scale(1.8)) - if (mob.horizontalCollision) { mob.level().playSound( null, @@ -346,8 +346,12 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { } override fun tick() { - target?.let { mob.lookControl.setLookAt(it, 30.0f, 30.0f) } - val target = mob.target ?: return + var target = target + + if (target != null) + mob.lookControl.setLookAt(target, 30.0f, 30.0f) + + target = mob.target ?: return if (moveCD > 0) { moveCD-- @@ -373,7 +377,7 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { class BlazeFireballGoal(private val mob: Enforcer) : Goal() { private var cooldown = 0 - private var fireTick = 0 + private val tickList = TickList() init { setFlags(EnumSet.of(Flag.LOOK)) @@ -383,47 +387,35 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { return mob.target != null && !mob.isCharging } - override fun canContinueToUse(): Boolean { - return canUse() - } - override fun tick() { val target = mob.target ?: return mob.lookControl.setLookAt(target, 30.0f, 30.0f) - if (cooldown > 0) { - fireTick = 20 - cooldown-- - return + if (--cooldown <= 0) { + cooldown = Mth.nextInt(mob.random, MIN_COOLDOWN, MAX_COOLDOWN) + CYCLE_LENGTH + + for (ticks in SHOOT_AT) + tickList.timer(ticks) { + mob.shootFireball(0.5f) + //could have a better firing sound + mob.playSound(SoundEvents.BLAZE_SHOOT, 1.0f, Mth.nextFloat(mob.random, 0.9f, 1.1f)) + } } - if (fireTick > 0){ - fireTick -- + tickList.tick() + } + override fun stop() { + super.stop() + cooldown = 0 + tickList.clear() + } - if (fireTick >= 19){ - mob.playSound(MSoundEvents.ENFORCER_BEEP, 1.0f, 1.0f) - } - - - if (fireTick == 15){ - mob.shootFireball(0.5f) - //could have a better firing sound - mob.playSound(SoundEvents.BLAZE_SHOOT, 1.0f, 1.0f) - } - if (fireTick == 10){ - mob.shootFireball(0.5f) - mob.playSound(SoundEvents.BLAZE_SHOOT, 1.0f, 1.0f) - } - if (fireTick == 5){ - mob.shootFireball(0.5f) - mob.playSound(SoundEvents.BLAZE_SHOOT, 1.0f, 1.0f) - } - - return - } else { - cooldown = 5 + mob.random.nextInt(10) - } + companion object { + private val SHOOT_AT = intArrayOf(5, 10, 15) + private const val MIN_COOLDOWN = 5 + private const val MAX_COOLDOWN = 15 + private const val CYCLE_LENGTH = 20 } } }