From 89108597851c2aa600d40606579c0908ea90e981 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Fri, 20 Dec 2024 13:49:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4Ivehicle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/entity/AnnihilatorEntity.java | 10 ++++++++++ .../superbwarfare/entity/ICannonEntity.java | 5 +++-- .../superbwarfare/entity/IVehicleEntity.java | 3 ++- .../atsuishio/superbwarfare/entity/Mk42Entity.java | 10 ++++++++++ .../superbwarfare/entity/Mle1934Entity.java | 10 ++++++++++ .../superbwarfare/entity/SpeedboatEntity.java | 14 ++++++++++++-- .../network/message/VehicleFireMessage.java | 7 ++++++- 7 files changed, 53 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java index 7c83aac2c..a393dd8d5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java @@ -541,6 +541,11 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit return (int)MAX_ENERGY; } + @Override + public void vehicleShoot(Player player) { + + } + @Override public float getHealth() { return this.entityData.get(HEALTH).intValue(); @@ -565,4 +570,9 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit public boolean canShoot(Player player) { return true; } + + @Override + public int getAmmoCount() { + return 0; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/ICannonEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/ICannonEntity.java index ac513e654..124617666 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/ICannonEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/ICannonEntity.java @@ -1,6 +1,7 @@ package com.atsuishio.superbwarfare.entity; +import net.minecraft.world.entity.player.Player; + public interface ICannonEntity extends IVehicleEntity { - float getHealth(); - float getMaxHealth(); + 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 a8b6e8132..e12fd9ff9 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/IVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/IVehicleEntity.java @@ -3,10 +3,11 @@ package com.atsuishio.superbwarfare.entity; import net.minecraft.world.entity.player.Player; public interface IVehicleEntity { - void cannonShoot(Player player); + 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 0a3ff5c1f..8d8c9d84c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/Mk42Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/Mk42Entity.java @@ -421,6 +421,11 @@ 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(); @@ -445,4 +450,9 @@ public class Mk42Entity extends Entity implements GeoEntity, ICannonEntity { public boolean canShoot(Player player) { return true; } + + @Override + public int getAmmoCount() { + return 0; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/Mle1934Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/Mle1934Entity.java index 5515cb3d3..97a85aa79 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/Mle1934Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/Mle1934Entity.java @@ -516,6 +516,11 @@ 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(); @@ -540,4 +545,9 @@ public class Mle1934Entity extends Entity implements GeoEntity, ICannonEntity { public boolean canShoot(Player player) { return true; } + + @Override + public int getAmmoCount() { + return 0; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java index d653fbbfd..829447144 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java @@ -84,7 +84,6 @@ 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); @@ -94,6 +93,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, public static final EntityDataAccessor ROTOR = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.FLOAT); public static final EntityDataAccessor HEAT = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.INT); protected static final EntityDataAccessor LAST_ATTACKER_UUID = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.STRING); + public static final EntityDataAccessor AMMO = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.INT); public static final float MAX_HEALTH = CannonConfig.SPEEDBOAT_HP.get(); public static final float MAX_ENERGY = CannonConfig.SPEEDBOAT_MAX_ENERGY.get().floatValue(); @@ -127,6 +127,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, @Override protected void defineSynchedData() { + this.entityData.define(AMMO, 0); this.entityData.define(FIRE_ANIM, 0); this.entityData.define(HEALTH, MAX_HEALTH); this.entityData.define(ENERGY, 0f); @@ -309,6 +310,10 @@ 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()); + turretYRotO = this.getTurretYRot(); turretXRotO = this.getTurretXRot(); @@ -373,7 +378,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, * 机枪塔开火 */ @Override - public void cannonShoot(Player player) { + public void vehicleShoot(Player player) { if (this.cannotFire) return; ProjectileEntity projectile = new ProjectileEntity(player.level()) @@ -921,4 +926,9 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, && !player.getMainHandItem().is(ModTags.Items.GUN) && !cannotFire; } + + @Override + public int getAmmoCount() { + return 0; + } } 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 0f2c8edee..f6adb97f4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleFireMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/VehicleFireMessage.java @@ -1,5 +1,6 @@ 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; @@ -34,9 +35,13 @@ public class VehicleFireMessage { return; } - if (player.getVehicle() instanceof IVehicleEntity entity) { + if (player.getVehicle() instanceof ICannonEntity entity) { entity.cannonShoot(player); } + + if (player.getVehicle() instanceof IVehicleEntity iVehicle && !(player.getVehicle() instanceof ICannonEntity)) { + iVehicle.vehicleShoot(player); + } } }); context.setPacketHandled(true);