From 2d5858bd292bb482729e65dad56a7cd965d4dcd2 Mon Sep 17 00:00:00 2001 From: GearShocky Date: Mon, 17 Mar 2025 08:12:25 +0500 Subject: [PATCH] beep --- .../ru/dbotthepony/mc/otm/entity/Enforcer.kt | 41 ++++++++++-------- .../mc/otm/registry/game/MSoundEvents.kt | 2 + .../sounds/entity/enforcer/enforcer_beep.ogg | Bin 0 -> 5248 bytes .../entity/enforcer/enforcer_charge.ogg | Bin 0 -> 16878 bytes 4 files changed, 24 insertions(+), 19 deletions(-) create mode 100644 src/main/resources/assets/overdrive_that_matters/sounds/entity/enforcer/enforcer_beep.ogg create mode 100644 src/main/resources/assets/overdrive_that_matters/sounds/entity/enforcer/enforcer_charge.ogg 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 bf4753201..f24fc232d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/entity/Enforcer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/entity/Enforcer.kt @@ -6,6 +6,7 @@ import net.minecraft.network.syncher.EntityDataSerializers import net.minecraft.network.syncher.SynchedEntityData import net.minecraft.server.level.ServerBossEvent import net.minecraft.server.level.ServerLevel +import net.minecraft.server.level.ServerPlayer import net.minecraft.sounds.SoundEvent import net.minecraft.sounds.SoundEvents import net.minecraft.sounds.SoundSource @@ -33,12 +34,9 @@ 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.isFire import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.game.MSoundEvents import java.util.* -import kotlin.math.cos -import kotlin.math.sin class Enforcer(type: EntityType, level: Level) : Monster(type,level) { val idleState = AnimationState() @@ -75,7 +73,6 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { return entityData.get(IS_CHARGING) } - override fun registerGoals() { goalSelector.addGoal(7, LookAtPlayerGoal(this, Player::class.java, 8f)) goalSelector.addGoal(3, NearestAttackableTargetGoal(this, LivingEntity::class.java, 10, true, true) { entity -> @@ -89,6 +86,7 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { goalSelector.addGoal(2, RammingGoal(this)) goalSelector.addGoal(2, StayNearGoal(this)) goalSelector.addGoal(2, BlazeFireballGoal(this)) + targetSelector.addGoal(1, HurtByTargetGoal(this)) } @@ -98,7 +96,7 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { return false } - override fun getHurtSound(damageSource: net.minecraft.world.damagesource.DamageSource): SoundEvent { + override fun getHurtSound(damageSource: DamageSource): SoundEvent { return SoundEvents.HEAVY_CORE_BREAK } @@ -108,25 +106,20 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { //fire inv //there should be a better way - override fun isInvulnerableTo(source: DamageSource): Boolean { - return source.isFire || super.isInvulnerableTo(source) - } - - override fun hurt(source: DamageSource, amount: Float): Boolean { - if (source.isFire) return false - return super.hurt(source, amount) + override fun fireImmune(): Boolean { + return true } ///boss healthbar private val bossEvent: ServerBossEvent = ServerBossEvent(TranslatableComponent(MNames.ENFORCER), BossEvent.BossBarColor.RED, BossEvent.BossBarOverlay.PROGRESS) - override fun startSeenByPlayer(player: net.minecraft.server.level.ServerPlayer) { + override fun startSeenByPlayer(player: ServerPlayer) { super.startSeenByPlayer(player) bossEvent.addPlayer(player) } - override fun stopSeenByPlayer(player: net.minecraft.server.level.ServerPlayer) { + override fun stopSeenByPlayer(player: ServerPlayer) { super.stopSeenByPlayer(player) bossEvent.removePlayer(player) } @@ -134,9 +127,13 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { override fun aiStep() { super.aiStep() bossEvent.progress = this.health / this.maxHealth + + if (!this.isOnFire) { + this.clearFire() + } } - override fun die(cause: net.minecraft.world.damagesource.DamageSource) { + override fun die(cause: DamageSource) { super.die(cause) bossEvent.removeAllPlayers() } @@ -198,7 +195,7 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { level().addFreshEntity(fireball) } - //charge attack, could possibly leave a smoke trail too idk + //charge attack class RammingGoal(private val mob: Enforcer) : Goal() { private var target: LivingEntity? = null @@ -211,7 +208,7 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { private val maxChargeTime = 40 private var chargeDir: Vec3? = null private var cooldown = 0 - private val minCooldown = 20 + private val minCooldown = 35 private val maxCooldown = 60 private var isCharging = false @@ -281,7 +278,7 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { stop() return } - mob.playSound(MSoundEvents.ANDROID_JUMP_BOOST, 1.0f, 1.0f) + mob.playSound(MSoundEvents.ENFORCER_CHARGE, 1.0f, 1.0f) } val dir = chargeDir ?: return @@ -310,7 +307,7 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { target.push(knockback.x, 0.5, knockback.z) - val damageAmount = 10.0f + val damageAmount = 14.0f target.hurt(mob.damageSources().mobAttack(mob), damageAmount) stop() @@ -400,6 +397,12 @@ class Enforcer(type: EntityType, level: Level) : Monster(type,level) { if (fireTick > 0){ fireTick -- + + 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 diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MSoundEvents.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MSoundEvents.kt index 5c38d8ded..7db4ba865 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MSoundEvents.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MSoundEvents.kt @@ -28,6 +28,8 @@ object MSoundEvents { val LOADER_AMBIENT by make("loader_ambient") val ENFORCER_ALERT by make("enforcer_alert") + val ENFORCER_CHARGE by make("enforcer_charge") + val ENFORCER_BEEP by make("enforcer_beep") fun register(bus: IEventBus) { registry.register(bus) diff --git a/src/main/resources/assets/overdrive_that_matters/sounds/entity/enforcer/enforcer_beep.ogg b/src/main/resources/assets/overdrive_that_matters/sounds/entity/enforcer/enforcer_beep.ogg new file mode 100644 index 0000000000000000000000000000000000000000..18c48c6ff0974dfef80409a4af89ae0f2efc969e GIT binary patch literal 5248 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 Lgub9_EFvF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/sounds/entity/enforcer/enforcer_charge.ogg b/src/main/resources/assets/overdrive_that_matters/sounds/entity/enforcer/enforcer_charge.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f95337ca34202451ce5959ed3408f55f9cc822d3 GIT binary patch literal 16878 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

2#Z;^}6kcbeF#N1bxm~UBhz=2S)V+c`j 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 N%%RDK5|jf3{|i$#w2=S+ literal 0 HcmV?d00001