From 6ebd1be6728175de7643d8de20c30634c1d45721 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Fri, 20 Dec 2024 14:15:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/AnnihilatorEntity.java | 11 +++------- .../superbwarfare/entity/ICannonEntity.java | 4 +--- .../superbwarfare/entity/IVehicleEntity.java | 7 +++++++ .../superbwarfare/entity/Mk42Entity.java | 9 ++------- .../superbwarfare/entity/Mle1934Entity.java | 11 +++------- .../superbwarfare/entity/SpeedboatEntity.java | 5 ++--- .../event/LivingEventHandler.java | 20 +++++++++++-------- .../mixins/MouseHandlerMixin.java | 1 - .../network/message/VehicleFireMessage.java | 7 +------ 9 files changed, 31 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java index a393dd8d5..438de3a9f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java @@ -386,7 +386,7 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit } @Override - public void cannonShoot(Player player) { + public void vehicleShoot(Player player) { if (this.entityData.get(COOL_DOWN) > 0) { return; } @@ -538,12 +538,7 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit @Override public int getMaxEnergy() { - return (int)MAX_ENERGY; - } - - @Override - public void vehicleShoot(Player player) { - + return (int) MAX_ENERGY; } @Override @@ -553,7 +548,7 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit @Override public float getMaxHealth() { - return (int)MAX_HEALTH; + return (int) MAX_HEALTH; } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/ICannonEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/ICannonEntity.java index 124617666..3537d3060 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/ICannonEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/ICannonEntity.java @@ -1,7 +1,5 @@ package com.atsuishio.superbwarfare.entity; -import net.minecraft.world.entity.player.Player; - public interface ICannonEntity extends IVehicleEntity { - void cannonShoot(Player player); + } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/IVehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/IVehicleEntity.java index e12fd9ff9..b0e794f96 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/IVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/IVehicleEntity.java @@ -3,11 +3,18 @@ package com.atsuishio.superbwarfare.entity; import net.minecraft.world.entity.player.Player; public interface IVehicleEntity { + void vehicleShoot(Player player); + float getHealth(); + float getMaxHealth(); + boolean isDriver(Player player); + int mainGunRpm(); + boolean canShoot(Player player); + int getAmmoCount(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/Mk42Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/Mk42Entity.java index 8d8c9d84c..6659ddcea 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/Mk42Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/Mk42Entity.java @@ -263,7 +263,7 @@ public class Mk42Entity extends Entity implements GeoEntity, ICannonEntity { } @Override - public void cannonShoot(Player player) { + public void vehicleShoot(Player player) { if (this.entityData.get(COOL_DOWN) > 0) { return; } @@ -421,11 +421,6 @@ public class Mk42Entity extends Entity implements GeoEntity, ICannonEntity { return this.cache; } - @Override - public void vehicleShoot(Player player) { - - } - @Override public float getHealth() { return this.entityData.get(HEALTH).intValue(); @@ -433,7 +428,7 @@ public class Mk42Entity extends Entity implements GeoEntity, ICannonEntity { @Override public float getMaxHealth() { - return (int)MAX_HEALTH; + return (int) MAX_HEALTH; } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/Mle1934Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/Mle1934Entity.java index 97a85aa79..ee85456b1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/Mle1934Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/Mle1934Entity.java @@ -277,7 +277,7 @@ public class Mle1934Entity extends Entity implements GeoEntity, ICannonEntity { } @Override - public void cannonShoot(Player player) { + public void vehicleShoot(Player player) { if (this.entityData.get(COOL_DOWN) > 0) { return; } @@ -443,7 +443,7 @@ public class Mle1934Entity extends Entity implements GeoEntity, ICannonEntity { for (Entity target : level.getEntitiesOfClass(Entity.class, new AABB(center, center).inflate(20), e -> true).stream().sorted(Comparator.comparingDouble(e -> e.distanceToSqr(center))).toList()) { if (target instanceof ServerPlayer serverPlayer) { - ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShakeClientMessage(15,15,45, this.getX(), this.getEyeY(), this.getZ())); + ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShakeClientMessage(15, 15, 45, this.getX(), this.getEyeY(), this.getZ())); } } } @@ -516,11 +516,6 @@ public class Mle1934Entity extends Entity implements GeoEntity, ICannonEntity { return this.cache; } - @Override - public void vehicleShoot(Player player) { - - } - @Override public float getHealth() { return this.entityData.get(HEALTH).intValue(); @@ -528,7 +523,7 @@ public class Mle1934Entity extends Entity implements GeoEntity, ICannonEntity { @Override public float getMaxHealth() { - return (int)MAX_HEALTH; + return (int) MAX_HEALTH; } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java index 829447144..58abe8b63 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java @@ -84,6 +84,7 @@ import java.util.Comparator; import java.util.List; public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, IVehicleEntity, HasCustomInventoryScreen, ContainerEntity { + public static final EntityDataAccessor FIRE_ANIM = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.INT); public static final EntityDataAccessor HEALTH = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.FLOAT); public static final EntityDataAccessor ENERGY = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.FLOAT); @@ -310,9 +311,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, cannotFire = false; } - // TODO 获取弹药数量 - - this.entityData.set(AMMO, this.getItemStacks().stream().filter(stack -> stack.is(ModItems.HEAVY_AMMO.get())).count()); + this.entityData.set(AMMO, this.getItemStacks().stream().filter(stack -> stack.is(ModItems.HEAVY_AMMO.get())).mapToInt(ItemStack::getCount).sum()); turretYRotO = this.getTurretYRot(); turretXRotO = this.getTurretXRot(); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java index b4ccd576b..b90c3b0d4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java @@ -64,14 +64,7 @@ public class LivingEventHandler { return; } - if (event.getEntity().getVehicle() != null && event.getEntity().getVehicle() instanceof IVehicleEntity) { - event.setAmount(0.3f * event.getAmount()); - } - - if (event.getEntity().getVehicle() != null && event.getEntity().getVehicle() instanceof ICannonEntity) { - event.setCanceled(true); - } - + handleVehicleHurt(event); handleGunPerksWhenHurt(event); renderDamageIndicator(event); reduceBulletDamage(event); @@ -96,6 +89,17 @@ public class LivingEventHandler { } } + private static void handleVehicleHurt(LivingHurtEvent event) { + var vehicle = event.getEntity().getVehicle(); + if (vehicle != null) { + if (vehicle instanceof ICannonEntity) { + event.setCanceled(true); + } else if (vehicle instanceof IVehicleEntity) { + event.setAmount(0.3f * event.getAmount()); + } + } + } + /** * 计算子弹伤害衰减 */ diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java index 76c402aa6..6b6c8d78e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java @@ -63,7 +63,6 @@ public class MouseHandlerMixin { double zoom = 1.25 + stack.getOrCreateTag().getDouble("CustomZoom"); float customSens = (float) stack.getOrCreateTag().getInt("sensitivity"); - if (!player.getMainHandItem().isEmpty() && mc.options.getCameraType() == CameraType.FIRST_PERSON) { return original / Math.max((1 + (0.2 * (zoom - (0.3 * customSens)) * ClientEventHandler.zoomTime)), 0.1); } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleFireMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleFireMessage.java index f6adb97f4..fa7003f4a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleFireMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleFireMessage.java @@ -1,6 +1,5 @@ package com.atsuishio.superbwarfare.network.message; -import com.atsuishio.superbwarfare.entity.ICannonEntity; import com.atsuishio.superbwarfare.entity.IVehicleEntity; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.level.Level; @@ -35,11 +34,7 @@ public class VehicleFireMessage { return; } - if (player.getVehicle() instanceof ICannonEntity entity) { - entity.cannonShoot(player); - } - - if (player.getVehicle() instanceof IVehicleEntity iVehicle && !(player.getVehicle() instanceof ICannonEntity)) { + if (player.getVehicle() instanceof IVehicleEntity iVehicle) { iVehicle.vehicleShoot(player); } }