From ff3041ceed10ea29e43b85732c007799531734ff Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Tue, 7 Jan 2025 19:32:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BD=8E=E8=A1=80=E9=87=8F?= =?UTF-8?q?=E5=92=8C=E9=94=81=E5=AE=9A=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../projectile/JavelinMissileEntity.java | 6 +++ .../entity/vehicle/Ah6Entity.java | 7 ++- .../entity/vehicle/AnnihilatorEntity.java | 28 +---------- .../entity/vehicle/Mk42Entity.java | 33 ------------- .../entity/vehicle/Mle1934Entity.java | 33 +------------ .../entity/vehicle/SpeedboatEntity.java | 1 + .../entity/vehicle/VehicleEntity.java | 45 ++++++++++++++++++ .../superbwarfare/init/ModSounds.java | 5 ++ .../item/gun/launcher/JavelinItem.java | 18 +++++-- .../superbwarfare/tools/SeekTool.java | 2 +- .../assets/superbwarfare/sounds.json | 40 ++++++++++++++++ .../superbwarfare/sounds/warning/locked.ogg | Bin 0 -> 5573 bytes .../superbwarfare/sounds/warning/locking.ogg | Bin 0 -> 4992 bytes .../sounds/warning/low_health.ogg | Bin 0 -> 8090 bytes .../superbwarfare/sounds/warning/missile.ogg | Bin 0 -> 5418 bytes .../sounds/warning/no_health.ogg | Bin 0 -> 10799 bytes 16 files changed, 120 insertions(+), 98 deletions(-) create mode 100644 src/main/resources/assets/superbwarfare/sounds/warning/locked.ogg create mode 100644 src/main/resources/assets/superbwarfare/sounds/warning/locking.ogg create mode 100644 src/main/resources/assets/superbwarfare/sounds/warning/low_health.ogg create mode 100644 src/main/resources/assets/superbwarfare/sounds/warning/missile.ogg create mode 100644 src/main/resources/assets/superbwarfare/sounds/warning/no_health.ogg diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/JavelinMissileEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/JavelinMissileEntity.java index b05b86c74..3df8a19dd 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/JavelinMissileEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/JavelinMissileEntity.java @@ -2,6 +2,7 @@ package com.atsuishio.superbwarfare.entity.projectile; import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.entity.AnimatedEntity; +import com.atsuishio.superbwarfare.entity.vehicle.VehicleEntity; import com.atsuishio.superbwarfare.init.ModDamageTypes; import com.atsuishio.superbwarfare.init.ModEntities; import com.atsuishio.superbwarfare.init.ModItems; @@ -20,11 +21,13 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.animal.Pig; import net.minecraft.world.entity.boss.enderdragon.EnderDragon; import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.entity.projectile.ThrowableItemProjectile; @@ -187,6 +190,9 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo this.entityData.set(TARGET_X, (float) entity.getX()); this.entityData.set(TARGET_Y, (float) entity.getEyeY()); this.entityData.set(TARGET_Z, (float) entity.getZ()); + if ((!entity.getPassengers().isEmpty() || entity instanceof VehicleEntity) && entity.tickCount %((int)Math.max(0.04 * this.distanceTo(entity),2)) == 0) { + entity.level().playSound(null, entity.getOnPos(), entity instanceof Pig ? SoundEvents.PIG_HURT : ModSounds.MISSILE_WARNING.get(), SoundSource.PLAYERS, 2, 1f); + } } double px = this.getX(); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java index 1a0426fba..7aa5975b8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java @@ -177,6 +177,9 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli this.setDeltaMovement(this.getDeltaMovement().multiply(0.6, 0.6, 0.6)); this.hurt(ModDamageTypes.causeVehicleStrikeDamage(this.level().registryAccess(), this, this.getFirstPassenger() == null ? this : this.getFirstPassenger()), 26 + (float) (60 * ((lastTickSpeed - 0.4) * (lastTickSpeed - 0.4)))); } + + lowHealthWarning(); + this.refreshDimensions(); } @@ -441,7 +444,7 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli projectileRight.heBullet(true, 1); projectileRight.bypassArmorRate(0.2f); projectileRight.setPos(worldPositionRight.x, worldPositionRight.y, worldPositionRight.z); - projectileRight.shoot(player, this.getLookAngle().x, this.getLookAngle().y + 0.025, this.getLookAngle().z, 20, + projectileRight.shoot(player, this.getLookAngle().x, this.getLookAngle().y + 0.018, this.getLookAngle().z, 20, (float) 0.2); this.level().addFreshEntity(projectileRight); sendParticle((ServerLevel) this.level(), ParticleTypes.LARGE_SMOKE, worldPositionRight.x, worldPositionRight.y, worldPositionRight.z, 1, 0, 0, 0, 0, false); @@ -460,7 +463,7 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli projectileLeft.heBullet(true, 1); projectileLeft.bypassArmorRate(0.2f); projectileLeft.setPos(worldPositionLeft.x, worldPositionLeft.y, worldPositionLeft.z); - projectileLeft.shoot(player, this.getLookAngle().x, this.getLookAngle().y + 0.025, this.getLookAngle().z, 20, + projectileLeft.shoot(player, this.getLookAngle().x, this.getLookAngle().y + 0.018, this.getLookAngle().z, 20, (float) 0.2); this.level().addFreshEntity(projectileLeft); sendParticle((ServerLevel) this.level(), ParticleTypes.LARGE_SMOKE, worldPositionLeft.x, worldPositionLeft.y, worldPositionLeft.z, 1, 0, 0, 0, 0, false); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java index 90bf5c7b9..bb570e1cf 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java @@ -12,7 +12,6 @@ import com.atsuishio.superbwarfare.tools.*; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; @@ -22,7 +21,6 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.damagesource.DamageSource; @@ -163,31 +161,7 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity, this.setDeltaMovement(this.getDeltaMovement().add(0.0, -0.04, 0.0)); } - if (this.level() instanceof ServerLevel serverLevel) { - if (this.getHealth() <= 0.4 * this.getMaxHealth()) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 2, 0.75, 0.5, 0.75, 0.01, false); - } - - if (this.getHealth() <= 0.25 * this.getMaxHealth()) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - } - - if (this.getHealth() <= 0.15 * this.getMaxHealth()) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - } - - if (this.getHealth() <= 0.1 * this.getMaxHealth()) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 2, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 2, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.FLAME, this.getX(), this.getY() + 3.2, this.getZ(), 4, 0.6, 0.1, 0.6, 0.05, false); - ParticleTool.sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY() + 3, this.getZ(), 4, 0.1, 0.1, 0.1, 0.4, false); - if (this.tickCount % 15 == 0) { - this.level().playSound(null, this.getOnPos(), SoundEvents.FIRE_AMBIENT, SoundSource.PLAYERS, 1, 1); - } - } - } + lowHealthWarning(); float delta = Math.abs(getYRot() - yRotO); while (getYRot() > 180F) { diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java index 9259e0c46..2e20b5b88 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java @@ -20,7 +20,6 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.damagesource.DamageSource; @@ -137,38 +136,6 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, ICannonEntit this.setDeltaMovement(this.getDeltaMovement().add(0.0, -0.04, 0.0)); } - if (this.getHealth() <= 0.4 * this.getMaxHealth()) { - if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 2, 0.75, 0.5, 0.75, 0.01, false); - } - } - - if (this.getHealth() <= 0.25 * this.getMaxHealth()) { - if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - } - } - - if (this.getHealth() <= 0.15 * this.getMaxHealth()) { - if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - } - } - - if (this.getHealth() <= 0.1 * this.getMaxHealth()) { - if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 2, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 2, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.FLAME, this.getX(), this.getY() + 3.2, this.getZ(), 4, 0.6, 0.1, 0.6, 0.05, false); - ParticleTool.sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY() + 3, this.getZ(), 4, 0.1, 0.1, 0.1, 0.4, false); - } - if (this.tickCount % 15 == 0) { - this.level().playSound(null, this.getOnPos(), SoundEvents.FIRE_AMBIENT, SoundSource.PLAYERS, 1, 1); - } - } - this.refreshDimensions(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java index 9589be21f..26c3b96e3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java @@ -20,7 +20,6 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.damagesource.DamageSource; @@ -152,37 +151,7 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, ICannonEn this.setDeltaMovement(this.getDeltaMovement().add(0.0, -0.04, 0.0)); } - if (this.getHealth() <= 0.4 * this.getMaxHealth()) { - if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 2, 0.75, 0.5, 0.75, 0.01, false); - } - } - - if (this.getHealth() <= 0.25 * this.getMaxHealth()) { - if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - } - } - - if (this.getHealth() <= 0.15 * this.getMaxHealth()) { - if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 1, 0.75, 0.5, 0.75, 0.01, false); - } - } - - if (this.getHealth() <= 0.1 * this.getMaxHealth()) { - if (this.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 2, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 2.5, this.getZ(), 2, 0.75, 0.5, 0.75, 0.01, false); - ParticleTool.sendParticle(serverLevel, ParticleTypes.FLAME, this.getX(), this.getY() + 3.2, this.getZ(), 4, 0.6, 0.1, 0.6, 0.05, false); - ParticleTool.sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY() + 3, this.getZ(), 4, 0.1, 0.1, 0.1, 0.4, false); - } - if (this.tickCount % 15 == 0) { - this.level().playSound(null, this.getOnPos(), SoundEvents.FIRE_AMBIENT, SoundSource.PLAYERS, 1, 1); - } - } + lowHealthWarning(); this.refreshDimensions(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java index 949656852..24a22641e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java @@ -201,6 +201,7 @@ public class SpeedboatEntity extends ContainerMobileEntity implements GeoEntity, collideBlock(); gunnerAngle(); + lowHealthWarning(); this.refreshDimensions(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java index 500b5f7cb..fa85a35cf 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java @@ -2,16 +2,21 @@ package com.atsuishio.superbwarfare.entity.vehicle; import com.atsuishio.superbwarfare.init.ModDamageTypes; import com.atsuishio.superbwarfare.init.ModItems; +import com.atsuishio.superbwarfare.init.ModParticleTypes; +import com.atsuishio.superbwarfare.init.ModSounds; import com.atsuishio.superbwarfare.item.ContainerBlockItem; +import com.atsuishio.superbwarfare.tools.ParticleTool; import com.google.common.collect.Lists; import com.mojang.math.Axis; import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -259,6 +264,46 @@ public class VehicleEntity extends Entity { this.refreshDimensions(); } + public void lowHealthWarning() { + if (this.getHealth() <= 0.4 * this.getMaxHealth()) { + if (this.level() instanceof ServerLevel serverLevel) { + ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 2, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); + } + } + + if (this.getHealth() <= 0.25 * this.getMaxHealth()) { + if (this.level() instanceof ServerLevel serverLevel) { + ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); + ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); + } + } + + if (this.getHealth() <= 0.15 * this.getMaxHealth()) { + if (this.level() instanceof ServerLevel serverLevel) { + ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); + ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 1, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); + } + } + + if (this.getHealth() <= 0.1 * this.getMaxHealth()) { + if (this.level() instanceof ServerLevel serverLevel) { + ParticleTool.sendParticle(serverLevel, ParticleTypes.LARGE_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 2, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); + ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.getX(), this.getY() + 0.7f * getBbHeight(), this.getZ(), 2, 0.35 * this.getBbWidth(), 0.15 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.01, false); + ParticleTool.sendParticle(serverLevel, ParticleTypes.FLAME, this.getX(), this.getY() + 0.85f * getBbHeight(), this.getZ(), 4, 0.35 * this.getBbWidth(), 0.12 * this.getBbHeight(), 0.35 * this.getBbWidth(), 0.05, false); + ParticleTool.sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY() + 0.85f * getBbHeight(), this.getZ(), 4, 0.1 * this.getBbWidth(), 0.05 * this.getBbHeight(), 0.1 * this.getBbWidth(), 0.4, false); + } + if (this.tickCount % 15 == 0) { + this.level().playSound(null, this.getOnPos(), SoundEvents.FIRE_AMBIENT, SoundSource.PLAYERS, 1, 1); + } + } + + if (this.getHealth() < 0.1f * this.getMaxHealth() && tickCount %13 == 0) { + this.level().playSound(null, this.getOnPos(), ModSounds.NO_HEALTH.get(), SoundSource.PLAYERS, 1, 1); + } else if (this.getHealth() >= 0.1f && this.getHealth() < 0.4f * this.getMaxHealth() && tickCount %10 == 0) { + this.level().playSound(null, this.getOnPos(), ModSounds.LOW_HEALTH.get(), SoundSource.PLAYERS, 1, 1); + } + } + public void destroy() { } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java index 8eb966790..4584a1b82 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java @@ -369,5 +369,10 @@ public class ModSounds { public static final RegistryObject INTO_CANNON = REGISTRY.register("into_cannon", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("into_cannon"))); public static final RegistryObject INTO_MISSILE = REGISTRY.register("into_missile", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("into_missile"))); public static final RegistryObject MISSILE_RELOAD = REGISTRY.register("missile_reload", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("missile_reload"))); + public static final RegistryObject LOW_HEALTH = REGISTRY.register("low_health", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("low_health"))); + public static final RegistryObject NO_HEALTH = REGISTRY.register("no_health", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("no_health"))); + public static final RegistryObject LOCKING_WARNING = REGISTRY.register("locking_warning", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("locking_warning"))); + public static final RegistryObject LOCKED_WARNING = REGISTRY.register("locked_warning", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("locked_warning"))); + public static final RegistryObject MISSILE_WARNING = REGISTRY.register("missile_warning", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("missile_warning"))); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java index cf184487f..ff2ca6b8c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java @@ -4,6 +4,7 @@ import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.client.PoseTool; import com.atsuishio.superbwarfare.client.renderer.item.JavelinItemRenderer; import com.atsuishio.superbwarfare.client.tooltip.component.LauncherImageComponent; +import com.atsuishio.superbwarfare.entity.vehicle.VehicleEntity; import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModSounds; @@ -20,10 +21,13 @@ import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.animal.Pig; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.ItemDisplayContext; @@ -136,7 +140,7 @@ public class JavelinItem extends GunItem implements GeoItem, AnimatedItem { @Override public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { super.inventoryTick(stack, world, entity, slot, selected); - if (entity instanceof Player player) { + if (entity instanceof Player player && selected) { var tag = stack.getOrCreateTag(); GunsTool.setGunIntTag(stack, "MaxAmmo", getAmmoCount(player)); @@ -145,20 +149,28 @@ public class JavelinItem extends GunItem implements GeoItem, AnimatedItem { Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 512, 8); if (seekingEntity != null && seekingEntity == targetEntity) { tag.putInt("SeekTime", tag.getInt("SeekTime") + 1); + if (tag.getInt("SeekTime") > 0 && (!seekingEntity.getPassengers().isEmpty() || seekingEntity instanceof VehicleEntity) && seekingEntity.tickCount %3 == 0) { + seekingEntity.level().playSound(null, seekingEntity.getOnPos(), seekingEntity instanceof Pig ? SoundEvents.PIG_HURT : ModSounds.LOCKING_WARNING.get(), SoundSource.PLAYERS, 1, 1f); + } } else { tag.putInt("SeekTime", 0); } if (tag.getInt("SeekTime") == 1 && player instanceof ServerPlayer serverPlayer) { - SoundTool.playLocalSound(serverPlayer, ModSounds.JAVELIN_LOCK.get(), 2, 1); + SoundTool.playLocalSound(serverPlayer, ModSounds.JAVELIN_LOCK.get(), 1, 1); } if (seekingEntity != null && tag.getInt("SeekTime") > 20) { if (player instanceof ServerPlayer serverPlayer) { - SoundTool.playLocalSound(serverPlayer, ModSounds.JAVELIN_LOCKON.get(), 2, 1); + SoundTool.playLocalSound(serverPlayer, ModSounds.JAVELIN_LOCKON.get(), 1, 1); + } + if ((!seekingEntity.getPassengers().isEmpty() || seekingEntity instanceof VehicleEntity) && seekingEntity.tickCount %2 == 0) { + seekingEntity.level().playSound(null, seekingEntity.getOnPos(), seekingEntity instanceof Pig ? SoundEvents.PIG_HURT : ModSounds.LOCKED_WARNING.get(), SoundSource.PLAYERS, 1, 0.95f); } } } + } else { + stack.getOrCreateTag().putInt("SeekTime", 0); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/SeekTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/SeekTool.java index 20e4afc59..b6646edcc 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/SeekTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/SeekTool.java @@ -74,7 +74,7 @@ public class SeekTool { && e.isAlive() && !(e instanceof ItemEntity || e instanceof ExperienceOrb || e instanceof HangingEntity || e instanceof ProjectileEntity || e instanceof Projectile || e instanceof ArmorStand) && (e instanceof LivingEntity || e instanceof VehicleEntity) - && !(e instanceof Player player && (player.isCreative() || player.isSpectator())) + && !(e instanceof Player player && (player.isSpectator())) && (!e.isAlliedTo(entity) || e.getTeam() == null || e.getTeam().getName().equals("TDM"))) { return level.clip(new ClipContext(entity.getEyePosition(), e.getEyePosition(), ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, entity)).getType() != HitResult.Type.BLOCK; diff --git a/src/main/resources/assets/superbwarfare/sounds.json b/src/main/resources/assets/superbwarfare/sounds.json index adcd671f0..c02f8e830 100644 --- a/src/main/resources/assets/superbwarfare/sounds.json +++ b/src/main/resources/assets/superbwarfare/sounds.json @@ -2600,5 +2600,45 @@ "stream": false } ] + }, + "low_health": { + "sounds": [ + { + "name": "superbwarfare:warning/low_health", + "stream": false + } + ] + }, + "no_health": { + "sounds": [ + { + "name": "superbwarfare:warning/no_health", + "stream": false + } + ] + }, + "locking_warning": { + "sounds": [ + { + "name": "superbwarfare:warning/locking", + "stream": false + } + ] + }, + "locked_warning": { + "sounds": [ + { + "name": "superbwarfare:warning/locked", + "stream": false + } + ] + }, + "missile_warning": { + "sounds": [ + { + "name": "superbwarfare:warning/missile", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/sounds/warning/locked.ogg b/src/main/resources/assets/superbwarfare/sounds/warning/locked.ogg new file mode 100644 index 0000000000000000000000000000000000000000..59ea2d7b9f19672879126b9a9eb6a4abe88cb345 GIT binary patch literal 5573 zcmb7IcUY52w|~LV5$R3P1W^eB5{he3T%;$276?5`i!`G`2ndJ<1r`txFhqo)phOLV z3u;hUMO`#E`pgNptt^X%&v79!N|W$ z{+d-iXdt%s*agQ09SR}E=y`b9A>sZe#>P8PD3mb~t`{6cA%(&ZAA$!R_N02jgUx?P zjZMsmNP!^{u~kJ|tZlqRAV~EP6xX}x&_2$F}OvZ|jLN$vL+o+qVTb5Kso5Kxm< z4!wyP^?;hce^oQ76YwZ-vrrWXfs6$NJ@uM`D$Ag^jsx=?NKQ*suw6=&V7 zrH~bFSbcT{9gj8S`BCQYOFX0ev3C)kDsK&x{M88kfP=LFW~h)U(7dW|)h#$g6L^lv zSMIFU>h9C(ey`P|u-RR4bDxRf0N&ig)RN$7H|R<5CJ>47Tf(6kqvot5tZrK4b;s)mwNZ9E#M-vS;vUmIA9Dg^{yGG3?4VdF8Q6L3ZacfXN6EZrz^q%z+1<=} z;J>II$|=Hl0gfO_4=^HWlBRh94dP%M$CX7>Z0#tc)gRU-(D zi|8+wU=RC%xxT%{)7R>i0hLKF*~+Q+T-7I3O5w8iF}V-X6JSQ>NJ&(^6cJE=hBD{7 zr35@+_eUco3?D0SZb47gTT4&ElXJy`l@V7EXE(&2kvm(4YDZRV$jPpu-)jX27kwx9^#~PRq zdWGb0rY}%#pdF)F9G>4c76@=8YZX!8P~o9@d&M<`_((5`0jMZDDgDobd#Br@pxyV6 z+Vfru1oLV<3xk>99Y^*(M;*PBMtn-;4<+-5a`vmGlYANfs;jO8PapxDgm9z>XQSGf zr(CS1RuA|GavY+S+w!#@=j%G%)OGGR=>A~l`q8XU$qs~zhYGPzg*u>0^4LKfFeeQV zNP}^t;X0E4on+s-Wd6cG>Jasx$N{j?LFZ07{u?>DFLvf`!W8KG7HknBhkgFSEB2-T zg`BeRtgA&?S2MC^GII4Y84;PqmGzencHEe2_>c8(dqCqzs-@&;(;*RB9(Ubv~!4dGQk(XZUs{q-G zK=P6ZRvz9FIn9ibL$a75T*MVRr2{?1Jk^h3Gb#OOWIkTdjp1TmF+I6xWN9jR*F?3z z&ma{*1qMZnLUL{IcVh-@-TTelKjHeQmVL2A%mB_q$&N5+>rQa?=8*e5N&fw215ZHL z+})GlZcZNdB#eH+4KSRC2FdOOs(&3h=qPz~!E)d>=#rns68+=J!wV$;p&SRHDsP~Q z>g+v8_Mno9N_Imk1aF4jU?ItyLET?SdNyR+N3|QI6WysK|3V@^j^w-GJoK4LV59-* z#2qS8{Sg1B3&7BRAoV51mTcm7@@^V`R< z#_e?K=py-9*jVG4_mf{+^P@(8N6pny#u{%JJospOoaB>uC1Ui-+)~44Sx7ld8ujpC(W2wEx>s(9>l8(c?i!FAUY?Ongc1I5=m&@z})=T@5*J zms?|&EoS0#x$k79KtKs%!?;{lS@Wh2l%WI#%E!o|#1ME{a38Sbtg#9q@+LDCpNZHjE4)Zt^`It7 z96@oxPBX#n1_V5lnQO6f_}6gooJZDHD2Gfj>9Q93+NpG`KB|x&EX!{8!e?6pgIVTUB4VLSljlRQ+T+3?qSv8)``Jyf` zuI{974rY+ezl;P|p*f7G$l7VukRHwyFN%BrDlgKxc4{QJ%W_&hw7Xtnoi%V!)dq>G z<3*BD(^@}_BY8lTA#Vf-gvJLofgil5V6TRNDt1e86!&3UQHZM{Pb;L$vV{@VUB6K5 zp9i2WyAwP}MQ-8%wo*dars}n*r-~z5nP+?9%|#Tvek=1-9=4^3B9HB0o^r!t&jSjB zq!(bZ)oFMvmdydMl@`GEU@zTAt4wg|Sm{HwhtUR|A8p;uNyD|eJxX>10F`k9PM;ZJ zu+DIm0|HpU@gxjVsn3)IiO~><`~~3{Du9FYK&*f>`Xzb5j4(tcfqOoPD&+9UAwB}m za2=V5KJ*MALM=V0Xry6&xpBK}+dJGEs7Xl+qDde0(VnOXH>eS=N*scMWUa*!X|mQJ zE2LXHA~!=&V3P<0Z%Q?B3vb6laFA)joBg7y!DAWB1`VLnvBK{E)d*kJ|97JT&3aEj z<12xWUQ2GZ3rR^!uYy6pgRDFR#Hht9-HIp1Q|hUBJcdg z3N}qU_6HBi66h01kt~pO>#b%hbRhjfDgI62{~A|;$NrcBrb!`$a|KO#sz8f?64(_| z`YdG#Ix-HP#6VbSsHbmg&X$0qkTCE;sto7)9Yop-Hafi>-V9HdMz%0HvdB|fS8&Kw zdLb8;o^e*yUq)pO$Y$jQsgr1msGf122qYmXg@>$yQp#;oCFL(SHQl{?8+`3pho(E) z8i;2~4O+RQv>^i{C#!ni}TgY3>pOkNY0ZBVHJ(T)s_xtp%W8<*W zOLz&vcNqjO%ykgdCN8hgr{(ZVn}lOVyCeo9kU&qNCJCr1NYvKWtgUb2y@;ZYi8WqP zC=xU<*lN}<_)3Jqgr9w|K%G^w;ImJ_S1_4dk~2UexgEV-Pr7^ibPSL3c=6{ z;}du1NlQkVIQx-H}|P=;hFNrghro3P!;m zft?F{7i4}%Z%GKWPt$(f=wkVOC=k5jknv`?X%lRdh+~Y`X0a+0=*wXdW!fAKCiZ^b zUd&B}y(_v5o*Bp}o(aGe#r3b0Z@$E|_^^UecD&qW15Z+Z=3&YGpFdD%c|uYxjNGKaX_G z_ZKyc{H@$gY2{9^ZRy2pnCFN8ylne(^G@lyax+AgdX3kfGxEe5CndBzXE=c|Ulk1gu zXfYjD?D|lANSddw@|)XOyr-kL7amiM1^7ZIB7^NYlp2$#vzS+{0H zYlHM2E~KX%m)y9)%{sp8#Y3CMaFp!5R9)?xJGg{3$@<9kO=pf?{pt}g&DyILk4mU8 z93L#)6|_ZTzOw6-A6adymQTYqi**A5inTW_JI>);TWt3BXiVA`Y*cGi=vKLS(+b_# zxRF=zak$-=g%e%3M_PQ*Xuo~JX2?KrWmt=N(WJy7-xMTaW1&dd4d~#Sx>SXCl@S_g z7S^Gxig0gTGF*Rp97}On7vbbLZ4utDa;sPyOQ?}2#g`;^ik`5vTSI%jd+O_hSDwx} z+vANTeqP~gj(6U2JTtO#2+qR2d~oPG?9%z|wB@ywU7J%JGdgyw-aEoSeR?VORj!n|GbVR7le=;MlWeuO!UQB%3j2=OYil6`3%I$9(R2>-Ur6(cLMX z;gJj9Ww4C)-^KXnS|260Uhr)nJC~yx_e*p)_wv53&&@yYdOhZm{oEwr#-QRh?RbZS z+j6VJ#lP$9*H#g66myb>DyG2S6A>5vcHtMu5g4>9xmYa$o4I=+24ipv0ZP3DKf;AuFiNo1Klb7q@zVqrpD8 zyCu4uOkAkHo|x^0kFc*3{a~3b&oD9laMP6cHdL(Bm+%@_snANFoQ{zCv)u*3=QD|< z$mieFLdTCRIQgu_C0czwcJ>kz9lkj-=C$GLK;Lz@_Nq~(=Rcp~r2n*)aT8s>akMux z40TNT!@Z2UughCmUUeg%v*XphgAF)u;x2E3Hn{qfX(UUS?i6p1Uh|=b@L7%jYm=e> z^$yw~)Bfzg^V>O*WFr=k$+0eev*@mF0!>pQ5H8RF^*Ai^Rbm>75fve`u7ohq+uE{~qfE9UIm8?a9q0T*`{M$(y6icQT1*ezm{d6SMfD zUnM;~+s*64gIRVwC2WR!`$Ze&ahmoPrE1s*@<`rqh^eJFf9RzI`5y?_#_q3}t}y#{ zRde_~){ePr2=zwGXvl%xIO=pz{cjNJxr8h+_k!*ZDk58YZY& z*_mZkk;gU&_4@W!Hxiw~zdal~0@*uVI=Xl%9zDsqt@r(O4?H7OyI^z1E?td(Hmm+Z_gsV{?M1>eHgeYoJP@sT_2!R4d z4V9o#P_PEYekdsSOXOk#2o|UURj7)nSTD!3Z({q{^T+wV^FEu+yfeEqJG1lKop;05 zt-$~dK0RJ|6=AXmrG{FD+Osn;HlByDP+nC4e1y-cjVR^+b<_rA=HCx869wN+C9J?K zrXnN%eom;V^pK(0Blv5Af6NXRJJC8g*qca*a&&NTA(2Q9OoDZ6438a0*tvrcvonMr zN{Ds-Bz16fViFNUC=HdOFFia%Q9v7j)aCy8=G5MN1^_q!L{)2x541Nd{CXhmysy!L zEQESk<=eYIs~%EM8_t;@=z=^R!70ud0CkW`)GkXL_juB z?nU<_XDkaxJ)XEvFVohI&;T$<6m83NBf6hu#$O##ToRi@tSpJ`B%ZV2b(7i%NA%o& zuP6-kzz{0}X*QAy0i9;2h~zzO(0ago_U#)&I?e+s`Kwd=D)DBId?00qXfZMTK0`6gOvDI?qt z;GRM+Xmp}>8M8N#=oI!s8((~LE;th6j#mULXNP(*4cRxCS~=R=bm38b5? z5+@y2dQJc!9rt+_TV~>8vnh;z$0-wG8GEe{3*iZ1C7-(@b_m@jsf%b?6B|;G~43AU2oO zCOq<;2S&BQpOE9b+oNE6)=@M+r>@(&Mn6QIgm;=u2 z0R~&Xhdo@!j=Gi-QI|5d@L3z=e~ugoo8{!ZhkpM=PTp^>c`K*|RuKhXDv={8J^fhn z)Bi$_Xj{&?lALo{In!Br*4f4J*<}~%f7;%8Y39biZGR&N0tPm3x|R1okkd%A@Py#G zVjD28^3lByo(@Ugrk`&B0FC+B^~h0T6-2j_)1BpXJ4T2*_#+mc-ImkB zitp%;glGGM5`;W~8*QoBh|?)O8xp%->LMe<*Iat1^y>W}nzYh<5j+fb!CwtdM>j$r zc%cAJ+ftlQ_ajaT6ZMEWVDd?qtAK$$%iAf#s4>t5>$i0FX0bx>ZUkE#@-)Z0; ze02^AVFWpIheH@6ul)y#0|w>XAO=6GjvJHA9a(T6xC&pn50aQsd%434?5M$GzDiYL zP!&HQOwJAFbD4(TgT{=oVsCj7JFJ+$xrqH>(5sK{Ef+9@`0S`6=GY!~#6rN}D?Xz* z14<{Z@tOD?V{1=CLz|&Aj6H0+xZo>vqke zU*<<|+6(w2Z@3S(j@~>z_waq|3C_rE(o7w1^yVeoTk~rUvcvaR#*b9ayuI=G#!dT~ z8>G>jmyHafx~)4NE!}o(Ez*51Kv;=Qv#v z*GU>(*-meQjs7QD`^g;=SV9; zSe)8P6PB!8V6xt(77DneNj$5Yj2IWHj4R+;LSceJRb*=kR7E7Vbd#x2mD}&uaE8BK ziwP~e8mb~nTA(VsmT*t1U9lk6j@U93+g;yM9Hmt*&8OwUR4BJA(aGbLfB%IuuZpa!KZ6lwh9Y-3C$%ux=pL_NItElgomSb3XcTRXr+*% z5(Nb`T6G4UMw3V(Y;_RWZtoR@TZoWDhhhU#n|9lF&3gqovxjS~?izXzKveEQIDJkG zd7Yh#0}~kGgfQfM{sTj#FdBrJzn~n$hj0iONJ2OxuTut`7=wH^Jm+KhN{)id3P(7@ zbzCNS#{-B6)6AHX`!}AxyJ?SYd+x6W8VxN#s?PTCr4tp~Y-^OO(gYv|>!E3xf%Sk@ zp}@nBxDtTqMid}4raK01Yo`GMtTYMDk(_FHS;k6W2dPY&^7a4fl(*{tyE6vAhfRR- zkI{FYXs_~SrDbGRse{|FDrdnQb$e`8anE5ApH8P!#YH}(X@a1DPOE0fsD5IxBJyZ$ z;&*Ttq$W|hFc~8g>{{`xS(v4f91^6g#bP|Gilm72q)McCR<844BpnWc-qbG?(2tT@ zH*%iV|EP$ql1{IU*jt1v`;hOG>oNkF4C2!BU%s&v8$wP#6|$@ z8i!Y6wEC&IkcjkSUv5kW%EX7IGC>x(o#=xEIsR5|jz?UkpO>v>Hbzbf zA}s~Bs~sMxQ8HV7?zdLrfHcgyny<&pw1-Gl%KH+OPR&_R;j?qK~*>+bXw+jPrVGZy(t8FE{Vqc=J_O z$Cc_t?fdg*q!`|O!@1V4e^`5(?K}42Uqa@Ne9a14iiX*j8va^=M>3Z*rSs9G!rZ<{Lx9mW zWP(3`v)Peq3FgLPY+w{3J!ZFLJ}X4e?%vu14T~^F$?s9=b@$pyI;r1Zuz`Wn2FnH> zz4zY4sfKIS>t5mW5ryCX>g3?B?wbOmfByJuZSloc;;i61GUbqUU&nkU`#fa~Z;S~#V;=}ZtZENe?P`i*ShN1{gg1xtSSJ@=4T7b7~f?ceq9u~|`f z+P*Qdw2N9g|56V)ao+em*)|W{VKDvL-?|q(TS74f&nYhqOb|uM$DQAO;j8i0t}p;L zJ>l~HsP_+x5(TDxtU(gm^*Xvy2n_U$z*|t0ruGbczZ!+zm}-`)UenZ!c5rRPQqVY; zRzEjW{~`6>c|Cw>-Id-nzZSjgfm%2a|F>`a^1zlX{k_)2uf|<3OS9X~UoM$O>Fe8E z&Gi*IZ~6f(8np(vb@P>bPrNb)l$!_V5260mrrUkd z@*>JT3V=t8cNaX)fA0k14jt42u6&LGo^q?z0lX9k=3|dq1B%&ZTiMH~iO>uh04`n3 zuH*||n)d>ic+A543MPjsxTNlICru5yo-Ctsl}NoN8qHru)&9+<+Z%LhVB&|-8AM?Qq4!#`fhcUW$sLc{*r4Bkm6LW} z#(4g;_B>f=aDw_rzEj(&*s~P1xwGGf1r`n3U6AY8?RL2IlDvDPSMyf{v{$x1;V^KG z+^Y#V1B%VupCuiuK7KgRSfYQ2Uq)YQf6QPu(dfcCa{9`4z4zuT7*|AIE3c5%7Pa3p zbi^zw10juPxB^hq25_{4m&_j8_FvmYnnB;)t9f(hR*`zb3EC81=koot(z>EUtP@+J z@-T+WK-G?s)9zy~wrZo3hkki=`SiY#h-dt7P9;CFzPospZ$n|w@%{3Bp0>l_&C1$_ z!b7qTAE@6L9*QvKe*Mia0sith=ezI6+UQ&37q+cUc^eVBn6HJ(O}MtM)2arwO)cD{ mu}s&f^!B3;lZLog^*0@C_9tC9eSO1Vy-VPqSE@Df=>GwIW*g}M literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/superbwarfare/sounds/warning/low_health.ogg b/src/main/resources/assets/superbwarfare/sounds/warning/low_health.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c06c5182f3ace2776f72b8e7f807506dcbbe2315 GIT binary patch literal 8090 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 hqG{tL}tR$%}D literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/superbwarfare/sounds/warning/missile.ogg b/src/main/resources/assets/superbwarfare/sounds/warning/missile.ogg new file mode 100644 index 0000000000000000000000000000000000000000..832563ddd3bdd89eec6d4050a944ab9422b478d0 GIT binary patch literal 5418 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 KqYwHa+5Z7LmK#X` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/superbwarfare/sounds/warning/no_health.ogg b/src/main/resources/assets/superbwarfare/sounds/warning/no_health.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b33928a7d5b23222babf93617e890037c955409c GIT binary patch literal 10799 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 SgWh>rG8M`$F+;Qk-z2({Dz literal 0 HcmV?d00001