From 7db5683de17f0f1269d5ea5cea6116a82c53dd8f Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Mon, 7 Apr 2025 01:18:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0projectile=E7=9A=84=E5=8F=91?= =?UTF-8?q?=E5=B0=84=E7=89=A9=E5=AD=97=E6=AE=B5=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/projectile/ProjectileEntity.java | 24 +++++++++++++++++++ .../entity/vehicle/Ah6Entity.java | 4 ++-- .../entity/vehicle/Bmp2Entity.java | 2 +- .../entity/vehicle/Lav150Entity.java | 2 +- .../entity/vehicle/SpeedboatEntity.java | 2 +- .../entity/vehicle/Yx100Entity.java | 7 +++--- .../superbwarfare/event/GunEventHandler.java | 3 ++- .../network/message/send/FireMessage.java | 3 ++- 8 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java index 8f90d0483..70e5ac5b8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java @@ -99,6 +99,7 @@ public class ProjectileEntity extends Projectile implements IEntityWithComplexSp private float knockback = 0.05f; private boolean forceKnockback = false; private final ArrayList mobEffects = new ArrayList<>(); + private String gunItemId; public ProjectileEntity(EntityType entityType, Level level) { super(entityType, level); @@ -322,6 +323,10 @@ public class ProjectileEntity extends Projectile implements IEntityWithComplexSp this.beast = tag.getBoolean("Beast"); this.forceKnockback = tag.getBoolean("ForceKnockback"); + + if (tag.contains("GunId")) { + this.gunItemId = tag.getString("GunId"); + } } @Override @@ -336,6 +341,10 @@ public class ProjectileEntity extends Projectile implements IEntityWithComplexSp tag.putBoolean("Beast", this.beast); tag.putBoolean("ForceKnockback", this.forceKnockback); + + if (this.gunItemId != null) { + tag.putString("GunId", this.gunItemId); + } } @Override @@ -807,6 +816,11 @@ public class ProjectileEntity extends Projectile implements IEntityWithComplexSp return this.zoom; } + @Nullable + public String getGunItemId() { + return this.gunItemId; + } + /** * Builders */ @@ -891,4 +905,14 @@ public class ProjectileEntity extends Projectile implements IEntityWithComplexSp this.forceKnockback = true; return this; } + + public ProjectileEntity setGunItemId(ItemStack stack) { + this.gunItemId = stack.getDescriptionId(); + return this; + } + + public ProjectileEntity setGunItemId(String id) { + this.gunItemId = id; + return this; + } } 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 9e5ade262..a80bc235a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java @@ -567,7 +567,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity worldPositionLeft = transformPosition(transform, x, y, z); if (this.entityData.get(AMMO) > 0 || hasCreativeAmmo) { - ProjectileEntity projectileRight = ((ProjectileWeapon) getWeapon(0)).create(player); + ProjectileEntity projectileRight = ((ProjectileWeapon) getWeapon(0)).create(player).setGunItemId(this.getType().getDescriptionId()); projectileRight.setPos(worldPositionRight.x, worldPositionRight.y, worldPositionRight.z); projectileRight.shoot(player, this.getLookAngle().x, this.getLookAngle().y + 0.018, this.getLookAngle().z, 20, @@ -580,7 +580,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity } if (this.entityData.get(AMMO) > 0 || hasCreativeAmmo) { - ProjectileEntity projectileLeft = ((ProjectileWeapon) getWeapon(0)).create(player); + ProjectileEntity projectileLeft = ((ProjectileWeapon) getWeapon(0)).create(player).setGunItemId(this.getType().getDescriptionId()); projectileLeft.setPos(worldPositionLeft.x, worldPositionLeft.y, worldPositionLeft.z); projectileLeft.shoot(player, this.getLookAngle().x, this.getLookAngle().y + 0.018, this.getLookAngle().z, 20, 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 69d813de7..3230882a2 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java @@ -335,7 +335,7 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit Vector4f worldPosition = transformPosition(transform, x, y, z); if (this.entityData.get(AMMO) > 0 || hasCreativeAmmo) { - var projectileRight = ((ProjectileWeapon) getWeapon(0)).create(player); + var projectileRight = ((ProjectileWeapon) getWeapon(0)).create(player).setGunItemId(this.getType().getDescriptionId()); projectileRight.bypassArmorRate(0.2f); projectileRight.setPos(worldPosition.x - 1.1 * this.getDeltaMovement().x, worldPosition.y, worldPosition.z - 1.1 * this.getDeltaMovement().z); 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 c9491171d..4ce80d3f5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java @@ -283,7 +283,7 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt Vector4f worldPosition = transformPosition(transform, x, y, z); if (this.entityData.get(AMMO) > 0 || hasCreativeAmmo) { - var projectile = ((ProjectileWeapon) getWeapon(0)).create(player); + var projectile = ((ProjectileWeapon) getWeapon(0)).create(player).setGunItemId(this.getType().getDescriptionId()); projectile.bypassArmorRate(0.2f); projectile.setPos(worldPosition.x - 1.1 * this.getDeltaMovement().x, worldPosition.y, worldPosition.z - 1.1 * this.getDeltaMovement().z); 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 8f034e160..eb74ff5ea 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java @@ -204,7 +204,7 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo Vector4f worldPosition = transformPosition(transform, x, y, z); - var projectile = ((ProjectileWeapon) getWeapon(0)).create(player); + var projectile = ((ProjectileWeapon) getWeapon(0)).create(player).setGunItemId(this.getType().getDescriptionId()); projectile.bypassArmorRate(0.4f); projectile.setPos(worldPosition.x + 0.5 * this.getDeltaMovement().x, worldPosition.y, worldPosition.z + 0.5 * this.getDeltaMovement().z); 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 ce1f4dc3e..6b0c01130 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java @@ -252,7 +252,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti if (reloadCoolDown > 0 && ( (entityData.get(LOADED_AMMO_TYPE) == 0 && (hasCreativeAmmo || countItem(ModItems.AP_5_INCHES.get()) > 0)) || - (entityData.get(LOADED_AMMO_TYPE) == 1 && (hasCreativeAmmo || countItem(ModItems.HE_5_INCHES.get()) > 0)) + (entityData.get(LOADED_AMMO_TYPE) == 1 && (hasCreativeAmmo || countItem(ModItems.HE_5_INCHES.get()) > 0)) )) { reloadCoolDown--; } @@ -438,7 +438,6 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti } } - Level level = player.level(); final Vec3 center = new Vec3(this.getX(), this.getEyeY(), this.getZ()); @@ -454,7 +453,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti Vector4f worldPosition = transformPosition(transform, -0.12f, 0.15f, 2f); if (this.entityData.get(MG_AMMO) > 0 || hasCreativeAmmo) { - var projectileRight = ((ProjectileWeapon) getWeapon(0)).create(player); + var projectileRight = ((ProjectileWeapon) getWeapon(0)).create(player).setGunItemId(this.getType().getDescriptionId() + ".1"); projectileRight.setPos(worldPosition.x - 1.1 * this.getDeltaMovement().x, worldPosition.y, worldPosition.z - 1.1 * this.getDeltaMovement().z); projectileRight.shoot(player, getBarrelVector(1).x, getBarrelVector(1).y + 0.005f, getBarrelVector(1).z, 36, @@ -499,7 +498,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti Vector4f worldPosition = transformPosition(transform, 0, -0.25f, 0); var projectile = (ProjectileWeapon) getWeapon(1); - var projectileEntity = projectile.create(player); + var projectileEntity = projectile.create(player).setGunItemId(this.getType().getDescriptionId() + ".2"); projectileEntity.setPos(worldPosition.x - 1.1 * this.getDeltaMovement().x, worldPosition.y, worldPosition.z - 1.1 * this.getDeltaMovement().z); projectileEntity.shoot(getGunnerVector(1).x, getGunnerVector(1).y + 0.005f, getGunnerVector(1).z, 20, 0.3f); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java index 39254106c..a36b5963a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java @@ -202,7 +202,8 @@ public class GunEventHandler { .damage(perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? projectileAmount * damage : damage) .damage(damage) .headShot(headshot) - .zoom(zoom); + .zoom(zoom) + .setGunItemId(stack); if (perk instanceof AmmoPerk ammoPerk) { int level = data.perk.getLevel(perk); diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireMessage.java index 827424d9e..7fa51b5fa 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireMessage.java @@ -140,7 +140,8 @@ public record FireMessage(int msgType) implements CustomPacketPayload { ProjectileEntity projectile = new ProjectileEntity(player.level()) .shooter(player) .headShot(headshot) - .zoom(zoom); + .zoom(zoom) + .setGunItemId(stack); if (perk instanceof AmmoPerk ammoPerk) { int level = data.perk.getLevel(perk);