Update BlazeFireballGoal's code

This commit is contained in:
DBotThePony 2025-03-23 09:40:48 +07:00
parent 832b5f7d2a
commit 5606096040
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -34,6 +34,7 @@ import net.minecraft.world.entity.projectile.SmallFireball
import net.minecraft.world.level.Level import net.minecraft.world.level.Level
import net.minecraft.world.phys.Vec3 import net.minecraft.world.phys.Vec3
import ru.dbotthepony.mc.otm.core.TranslatableComponent 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.MNames
import ru.dbotthepony.mc.otm.registry.game.MSoundEvents import ru.dbotthepony.mc.otm.registry.game.MSoundEvents
import java.util.* import java.util.*
@ -145,7 +146,7 @@ class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
return 180 return 180
} }
fun shootFireball(math: Float) { private fun shootFireball(math: Float) {
if (level().isClientSide) return if (level().isClientSide) return
val offset_dist = 1.4 val offset_dist = 1.4
@ -170,7 +171,7 @@ class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
level().addFreshEntity(fireball) level().addFreshEntity(fireball)
} }
fun shootMissile(math: Float) { private fun shootMissile(math: Float) {
if (level().isClientSide) return if (level().isClientSide) return
val offset_dist = 1.4 val offset_dist = 1.4
@ -285,7 +286,6 @@ class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
mob.move(net.minecraft.world.entity.MoverType.SELF, dir.scale(1.8)) mob.move(net.minecraft.world.entity.MoverType.SELF, dir.scale(1.8))
if (mob.horizontalCollision) { if (mob.horizontalCollision) {
mob.level().playSound( mob.level().playSound(
null, null,
@ -346,8 +346,12 @@ class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
} }
override fun tick() { override fun tick() {
target?.let { mob.lookControl.setLookAt(it, 30.0f, 30.0f) } var target = target
val target = mob.target ?: return
if (target != null)
mob.lookControl.setLookAt(target, 30.0f, 30.0f)
target = mob.target ?: return
if (moveCD > 0) { if (moveCD > 0) {
moveCD-- moveCD--
@ -373,7 +377,7 @@ class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
class BlazeFireballGoal(private val mob: Enforcer) : Goal() { class BlazeFireballGoal(private val mob: Enforcer) : Goal() {
private var cooldown = 0 private var cooldown = 0
private var fireTick = 0 private val tickList = TickList()
init { init {
setFlags(EnumSet.of(Flag.LOOK)) setFlags(EnumSet.of(Flag.LOOK))
@ -383,47 +387,35 @@ class Enforcer(type: EntityType<Enforcer>, level: Level) : Monster(type,level) {
return mob.target != null && !mob.isCharging return mob.target != null && !mob.isCharging
} }
override fun canContinueToUse(): Boolean {
return canUse()
}
override fun tick() { override fun tick() {
val target = mob.target ?: return val target = mob.target ?: return
mob.lookControl.setLookAt(target, 30.0f, 30.0f) mob.lookControl.setLookAt(target, 30.0f, 30.0f)
if (cooldown > 0) { if (--cooldown <= 0) {
fireTick = 20 cooldown = Mth.nextInt(mob.random, MIN_COOLDOWN, MAX_COOLDOWN) + CYCLE_LENGTH
cooldown--
return
}
if (fireTick > 0){ for (ticks in SHOOT_AT)
fireTick -- tickList.timer(ticks) {
if (fireTick >= 19){
mob.playSound(MSoundEvents.ENFORCER_BEEP, 1.0f, 1.0f)
}
if (fireTick == 15){
mob.shootFireball(0.5f) mob.shootFireball(0.5f)
//could have a better firing sound //could have a better firing sound
mob.playSound(SoundEvents.BLAZE_SHOOT, 1.0f, 1.0f) mob.playSound(SoundEvents.BLAZE_SHOOT, 1.0f, Mth.nextFloat(mob.random, 0.9f, 1.1f))
} }
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 tickList.tick()
} else { }
cooldown = 5 + mob.random.nextInt(10)
} override fun stop() {
super.stop()
cooldown = 0
tickList.clear()
}
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
} }
} }
} }