From dc6a704048d009095f4784e98bdebfadefcc3d97 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Wed, 25 Jun 2025 02:10:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E6=BB=9A=E8=BD=BD=E5=85=B7=E8=BF=91?= =?UTF-8?q?=E6=88=98=E5=8F=97=E4=BC=A4=E7=B2=92=E5=AD=90=E5=92=8C=E9=9F=B3?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/vehicle/A10Entity.java | 5 ++++ .../entity/vehicle/DroneEntity.java | 10 ++++++++ .../entity/vehicle/MortarEntity.java | 7 +++++- .../entity/vehicle/Tom6Entity.java | 5 ++++ .../entity/vehicle/WheelChairEntity.java | 5 ++++ .../entity/vehicle/base/VehicleEntity.java | 14 +++++++++++ .../event/PlayerEventHandler.java | 23 ++++++++++++++++--- 7 files changed, 65 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/A10Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/A10Entity.java index 429c59526..7df9854f4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/A10Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/A10Entity.java @@ -165,6 +165,11 @@ public class A10Entity extends ContainerMobileVehicleEntity implements GeoEntity this.entityData.set(LOADED_MISSILE, compound.getInt("LoadedMissile")); } + @Override + public boolean shouldSendHitParticles() { + return false; + } + @Override protected void playStepSound(@NotNull BlockPos pPos, @NotNull BlockState pState) { this.playSound(ModSounds.WHEEL_STEP.get(), (float) (getDeltaMovement().length() * 0.2), random.nextFloat() * 0.1f + 1f); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java index 73778fae8..59015339a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java @@ -112,6 +112,16 @@ public class DroneEntity extends MobileVehicleEntity implements GeoEntity { return false; } + @Override + public boolean shouldSendHitParticles() { + return false; + } + + @Override + public boolean shouldSendHitSounds() { + return false; + } + @Override public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MortarEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MortarEntity.java index 0f2610fa9..2af1a7c16 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MortarEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MortarEntity.java @@ -55,6 +55,11 @@ public class MortarEntity extends VehicleEntity implements GeoEntity { this.entityData.set(YAW, yRot); } + @Override + public boolean shouldSendHitParticles() { + return false; + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); @@ -65,7 +70,7 @@ public class MortarEntity extends VehicleEntity implements GeoEntity { @Override public boolean canBeCollidedWith() { - return false; + return super.canBeCollidedWith(); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java index 3c401aad7..8baeb12ff 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java @@ -94,6 +94,11 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity { this.entityData.set(MELON, compound.getBoolean("Melon")); } + @Override + public boolean shouldSendHitParticles() { + return false; + } + @Override @ParametersAreNonnullByDefault protected void playStepSound(BlockPos pPos, BlockState pState) { diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/WheelChairEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/WheelChairEntity.java index 7aab70a6c..017d0a4ab 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/WheelChairEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/WheelChairEntity.java @@ -85,6 +85,11 @@ public class WheelChairEntity extends MobileVehicleEntity implements GeoEntity { super.readAdditionalSaveData(compound); } + @Override + public boolean shouldSendHitParticles() { + return false; + } + @Override protected void playStepSound(@NotNull BlockPos pPos, @NotNull BlockState pState) { this.playSound(ModSounds.WHEEL_STEP.get(), (float) (getDeltaMovement().length() * 0.3), random.nextFloat() * 0.15f + 1); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java index 2872f05f3..b112f4d38 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java @@ -291,6 +291,20 @@ public abstract class VehicleEntity extends Entity { } } + /** + * 受击时是否出现粒子效果 + */ + public boolean shouldSendHitParticles() { + return true; + } + + /** + * 受击时是否出现音效 + */ + public boolean shouldSendHitSounds() { + return true; + } + public VehicleEntity(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); this.setHealth(this.getMaxHealth()); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java index b774673da..a2a3e1cc2 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java @@ -4,9 +4,8 @@ import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.config.common.GameplayConfig; import com.atsuishio.superbwarfare.config.server.MiscConfig; import com.atsuishio.superbwarfare.data.gun.GunData; -import com.atsuishio.superbwarfare.init.ModAttachments; -import com.atsuishio.superbwarfare.init.ModItems; -import com.atsuishio.superbwarfare.init.ModTags; +import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity; +import com.atsuishio.superbwarfare.init.*; import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.network.message.receive.SimulationDistanceMessage; import com.atsuishio.superbwarfare.tools.InventoryTool; @@ -24,10 +23,13 @@ import net.minecraft.world.item.ItemStack; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.event.AnvilUpdateEvent; +import net.neoforged.neoforge.event.entity.player.AttackEntityEvent; import net.neoforged.neoforge.event.entity.player.PlayerEvent; import net.neoforged.neoforge.event.tick.PlayerTickEvent; import net.neoforged.neoforge.network.PacketDistributor; +import static com.atsuishio.superbwarfare.tools.ParticleTool.sendParticle; + @EventBusSubscriber public class PlayerEventHandler { @@ -189,4 +191,19 @@ public class PlayerEventHandler { event.setMaterialCost(1); } } + + @SubscribeEvent + public static void onAttackEntity(AttackEntityEvent event) { + var target = event.getTarget(); + if (target instanceof VehicleEntity vehicle) { + if (vehicle.shouldSendHitSounds()) { + vehicle.level().playSound(null, vehicle.getOnPos(), ModSounds.HIT.get(), SoundSource.PLAYERS, 1, 1); + } + + if (vehicle.shouldSendHitParticles() && vehicle.level() instanceof ServerLevel serverLevel) { + sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), vehicle.getX(), vehicle.getY() + 0.5 * vehicle.getBbHeight(), vehicle.getZ(), + 2, 0.4, 0.4, 0.4, 0.2, false); + } + } + } }