From fdc7016c72258b05c7b07edc361173a8e4c8ded1 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Fri, 21 Mar 2025 13:55:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=95=B0=E5=80=BC=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0C4=E9=9F=B3=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/entity/C4Entity.java | 49 ++++++++---------- .../entity/vehicle/AnnihilatorEntity.java | 13 +++++ .../entity/vehicle/Bmp2Entity.java | 6 +++ .../entity/vehicle/Lav150Entity.java | 6 +++ .../entity/vehicle/Yx100Entity.java | 7 +++ .../superbwarfare/init/ModSounds.java | 2 + .../assets/superbwarfare/sounds.json | 16 ++++++ .../superbwarfare/sounds/c4/c4_beep.ogg | Bin 0 -> 4198 bytes .../superbwarfare/sounds/c4/c4_final.ogg | Bin 0 -> 10033 bytes 9 files changed, 71 insertions(+), 28 deletions(-) create mode 100644 src/main/resources/assets/superbwarfare/sounds/c4/c4_beep.ogg create mode 100644 src/main/resources/assets/superbwarfare/sounds/c4/c4_final.ogg diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/C4Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/C4Entity.java index 57092558a..04cec468c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/C4Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/C4Entity.java @@ -1,10 +1,10 @@ package com.atsuishio.superbwarfare.entity; -import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.config.server.ExplosionConfig; import com.atsuishio.superbwarfare.init.ModDamageTypes; import com.atsuishio.superbwarfare.init.ModEntities; import com.atsuishio.superbwarfare.init.ModItems; +import com.atsuishio.superbwarfare.init.ModSounds; import com.atsuishio.superbwarfare.tools.CustomExplosion; import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.ParticleTool; @@ -21,7 +21,6 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.Projectile; @@ -45,7 +44,6 @@ public class C4Entity extends Projectile implements GeoEntity { protected static final EntityDataAccessor LAST_ATTACKER_UUID = SynchedEntityData.defineId(C4Entity.class, EntityDataSerializers.STRING); protected static final EntityDataAccessor TARGET_UUID = SynchedEntityData.defineId(C4Entity.class, EntityDataSerializers.STRING); - public static final EntityDataAccessor HEALTH = SynchedEntityData.defineId(C4Entity.class, EntityDataSerializers.FLOAT); private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); protected boolean inGround; protected boolean onEntity; @@ -63,23 +61,11 @@ public class C4Entity extends Projectile implements GeoEntity { @Override protected void defineSynchedData() { this.entityData.define(LAST_ATTACKER_UUID, "undefined"); - this.entityData.define(HEALTH, 10f); this.entityData.define(TARGET_UUID, "undefined"); } - @Override - public boolean isPickable() { - return !this.isRemoved(); - } - - @Override - public boolean hurt(DamageSource source, float amount) { - return false; - } - @Override public void addAdditionalSaveData(CompoundTag compound) { - compound.putFloat("Health", this.entityData.get(HEALTH)); compound.putString("Target", this.entityData.get(TARGET_UUID)); compound.putString("LastAttacker", this.entityData.get(LAST_ATTACKER_UUID)); @@ -90,10 +76,6 @@ public class C4Entity extends Projectile implements GeoEntity { @Override public void readAdditionalSaveData(CompoundTag compound) { - if (compound.contains("Health")) { - this.entityData.set(HEALTH, compound.getFloat("Health")); - } - if (compound.contains("LastAttacker")) { this.entityData.set(LAST_ATTACKER_UUID, compound.getString("LastAttacker")); } @@ -130,6 +112,14 @@ public class C4Entity extends Projectile implements GeoEntity { this.explode(); } + if (ExplosionConfig.C4_EXPLOSION_COUNTDOWN.get() - tickCount > 39 && tickCount %((20 * (ExplosionConfig.C4_EXPLOSION_COUNTDOWN.get() - tickCount)) / ExplosionConfig.C4_EXPLOSION_COUNTDOWN.get() + 1) == 0) { + this.level().playSound(null, this.getOnPos(), ModSounds.C4_BEEP.get(), SoundSource.PLAYERS, 1, 1); + } + + if (tickCount == ExplosionConfig.C4_EXPLOSION_COUNTDOWN.get() - 39) { + this.level().playSound(null, this.getOnPos(), ModSounds.C4_FINAL.get(), SoundSource.PLAYERS, 2, 1); + } + Vec3 motion = this.getDeltaMovement(); if (this.xRotO == 0.0F && this.yRotO == 0.0F && !this.inGround) { double d0 = motion.horizontalDistance(); @@ -319,22 +309,25 @@ public class C4Entity extends Projectile implements GeoEntity { this.inGround = true; } - public void explode() { - if (!this.level().isClientSide()) { - ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); - ModUtils.queueServerWork(1, () -> this.triggerExplode(this)); - } - this.discard(); - } + private void explode() { + Vec3 pos = position(); + + if (onEntity) { + Entity target = EntityFindUtil.findEntity(level(), entityData.get(TARGET_UUID)); + if (target != null) { + pos = target.position(); + } + } - private void triggerExplode(Entity target) { CustomExplosion explosion = new CustomExplosion(level(), this, ModDamageTypes.causeProjectileBoomDamage(level().registryAccess(), this, this.getOwner()), ExplosionConfig.C4_EXPLOSION_DAMAGE.get(), - target.getX(), target.getY(), target.getZ(), ExplosionConfig.C4_EXPLOSION_RADIUS.get(), ExplosionConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); + pos.x, pos.y, pos.z, ExplosionConfig.C4_EXPLOSION_RADIUS.get(), ExplosionConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); explosion.explode(); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(level(), explosion); ParticleTool.spawnHugeExplosionParticles(level(), position()); explosion.finalizeExplosion(false); + + this.discard(); } @Override 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 871a97854..463605930 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java @@ -3,6 +3,7 @@ package com.atsuishio.superbwarfare.entity.vehicle; import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.config.server.ExplosionConfig; import com.atsuishio.superbwarfare.config.server.VehicleConfig; +import com.atsuishio.superbwarfare.entity.C4Entity; import com.atsuishio.superbwarfare.entity.vehicle.base.CannonEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.EnergyVehicleEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.ThirdPersonCameraPosition; @@ -215,6 +216,18 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity, .multiply(0.3f, ModDamageTypes.CANNON_FIRE) .multiply(0.04f, ModTags.DamageTypes.PROJECTILE_ABSOLUTE) .custom((source, damage) -> getSourceAngle(source, 3) * damage) + .custom((source, damage) -> { + if (source.getDirectEntity() instanceof C4Entity) { + return 40f * damage; + } + return damage; + }) + .custom((source, damage) -> { + if (source.getDirectEntity() instanceof DroneEntity) { + return 8f * damage; + } + return damage; + }) .reduce(12); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java index 276140a01..b6243c80e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java @@ -154,6 +154,12 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit .multiply(0.7f, ModTags.DamageTypes.PROJECTILE_ABSOLUTE) .multiply(8.5f, ModDamageTypes.VEHICLE_STRIKE) .custom((source, damage) -> getSourceAngle(source, 0.4f) * damage) + .custom((source, damage) -> { + if (source.getDirectEntity() instanceof DroneEntity) { + return 1.5f * damage; + } + return damage; + }) .reduce(8); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java index 5aab6b546..a6a5236e6 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java @@ -143,6 +143,12 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt .multiply(0.85f, ModTags.DamageTypes.PROJECTILE_ABSOLUTE) .multiply(10f, ModDamageTypes.VEHICLE_STRIKE) .custom((source, damage) -> getSourceAngle(source, 0.25f) * damage) + .custom((source, damage) -> { + if (source.getDirectEntity() instanceof DroneEntity) { + return 1.5f * damage; + } + return damage; + }) .reduce(7); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java index 897686c12..018495c95 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java @@ -3,6 +3,7 @@ package com.atsuishio.superbwarfare.entity.vehicle; import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.config.server.ExplosionConfig; import com.atsuishio.superbwarfare.config.server.VehicleConfig; +import com.atsuishio.superbwarfare.entity.C4Entity; import com.atsuishio.superbwarfare.entity.projectile.SmallCannonShellEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.ContainerMobileVehicleEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.LandArmorEntity; @@ -188,6 +189,12 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti } return damage; }) + .custom((source, damage) -> { + if (source.getDirectEntity() instanceof C4Entity || source.getDirectEntity() instanceof DroneEntity) { + return 3f * damage; + } + return damage; + }) .reduce(9); } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java index a56a1df81..9b60321dc 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java @@ -423,5 +423,7 @@ public class ModSounds { public static final RegistryObject YX_100_FAR = REGISTRY.register("yx_100_far", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("yx_100_far"))); public static final RegistryObject YX_100_VERYFAR = REGISTRY.register("yx_100_veryfar", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("yx_100_veryfar"))); public static final RegistryObject TURRET_TURN = REGISTRY.register("turret_turn", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("turret_turn"))); + public static final RegistryObject C4_BEEP = REGISTRY.register("c4_beep", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("c4_beep"))); + public static final RegistryObject C4_FINAL = REGISTRY.register("c4_final", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("c4_final"))); } diff --git a/src/main/resources/assets/superbwarfare/sounds.json b/src/main/resources/assets/superbwarfare/sounds.json index bc3fa88ab..fe7cbbddc 100644 --- a/src/main/resources/assets/superbwarfare/sounds.json +++ b/src/main/resources/assets/superbwarfare/sounds.json @@ -2915,5 +2915,21 @@ "stream": false } ] + }, + "c4_beep": { + "sounds": [ + { + "name": "superbwarfare:c4/c4_beep", + "stream": false + } + ] + }, + "c4_final": { + "sounds": [ + { + "name": "superbwarfare:c4/c4_final", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/sounds/c4/c4_beep.ogg b/src/main/resources/assets/superbwarfare/sounds/c4/c4_beep.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4bcd75c51df85c0662ab19a5c996917c90ef86a1 GIT binary patch literal 4198 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 literal 0 HcmV?d00001