From 67a7acb39d9e4031bca1590f1e3372c7cc12c10b Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Mon, 14 Jul 2025 00:03:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E5=8F=91=E5=B0=84=E4=B8=AD?= =?UTF-8?q?=E5=9E=8B=E7=81=AB=E7=AE=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/vehicle/Type63Entity.java | 45 ++++--------------- .../item/common/ammo/MediumRocketItem.java | 6 ++- 2 files changed, 14 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Type63Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Type63Entity.java index 81a957da4..253c8984f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Type63Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Type63Entity.java @@ -5,7 +5,10 @@ import com.atsuishio.superbwarfare.config.server.ExplosionConfig; import com.atsuishio.superbwarfare.entity.OBBEntity; import com.atsuishio.superbwarfare.entity.projectile.MediumRocketEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.ContainerMobileVehicleEntity; -import com.atsuishio.superbwarfare.init.*; +import com.atsuishio.superbwarfare.init.ModDamageTypes; +import com.atsuishio.superbwarfare.init.ModSerializers; +import com.atsuishio.superbwarfare.init.ModSounds; +import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.item.common.ammo.MediumRocketItem; import com.atsuishio.superbwarfare.item.common.container.ContainerBlockItem; import com.atsuishio.superbwarfare.tools.CustomExplosion; @@ -186,8 +189,8 @@ public class Type63Entity extends ContainerMobileVehicleEntity implements GeoEnt // 撬棍发射 for (int i = 0; i < 12; i++) { if (items.get(i).getItem() instanceof MediumRocketItem) { - items.set(i, ItemStack.EMPTY); shoot(player, i); + items.set(i, ItemStack.EMPTY); setChanged(); player.swing(InteractionHand.MAIN_HAND); return InteractionResult.SUCCESS; @@ -212,45 +215,15 @@ public class Type63Entity extends ContainerMobileVehicleEntity implements GeoEnt if (level() instanceof ServerLevel server) { ItemStack stack = items.get(i); - float damage; - float radius; - float explosionDamage; - float fireProbability; - int fireTime; - MediumRocketEntity.Type type; - int sparedAmount; - - if (stack.is(ModItems.MEDIUM_ROCKET_AP.get())) { - damage = 500; - radius = 6; - explosionDamage = 100; - fireProbability = 0; - fireTime = 0; - type = MediumRocketEntity.Type.AP; - sparedAmount = 0; - } else if (stack.is(ModItems.MEDIUM_ROCKET_HE.get())) { - damage = 200; - radius = 12; - explosionDamage = 200; - fireProbability = 0.2f; - fireTime = 40; - type = MediumRocketEntity.Type.HE; - sparedAmount = 0; - } else { - damage = 300; - radius = 12; - explosionDamage = 300; - fireProbability = 0; - fireTime = 0; - type = MediumRocketEntity.Type.CM; - sparedAmount = 20; + if (!(stack.getItem() instanceof MediumRocketItem rocketItem)) { + return; } OBB obb = this.barrel[i]; Vec3 shootPos = new Vec3(obb.center()); - MediumRocketEntity entityToSpawn = new MediumRocketEntity(player, server, damage, radius, explosionDamage, fireProbability, fireTime, type, sparedAmount); - entityToSpawn.setPos(shootPos.x, shootPos.y, shootPos.z); + MediumRocketEntity entityToSpawn = rocketItem.createProjectile(server, shootPos); + entityToSpawn.setOwner(player); entityToSpawn.shoot(getShootVector(1).x, getShootVector(1).y, getShootVector(1).z, 10, (float) 0.25); server.addFreshEntity(entityToSpawn); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/MediumRocketItem.java b/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/MediumRocketItem.java index b1284fabd..0e7b4a1b2 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/MediumRocketItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/MediumRocketItem.java @@ -39,6 +39,10 @@ public class MediumRocketItem extends Item implements ProjectileItem { this.sparedAmount = sparedAmount; } + public MediumRocketEntity createProjectile(Level level, Position pos) { + return new MediumRocketEntity(ModEntities.MEDIUM_ROCKET.get(), pos.x(), pos.y(), pos.z(), level, damage, radius, explosionDamage, fireProbability, fireTime, type, sparedAmount); + } + public static class MediumRocketDispenseBehavior extends ProjectileDispenseBehavior { public MediumRocketDispenseBehavior(Item item) { super(item); @@ -53,7 +57,7 @@ public class MediumRocketItem extends Item implements ProjectileItem { @Override @ParametersAreNonnullByDefault public @NotNull Projectile asProjectile(Level level, Position pos, ItemStack stack, Direction direction) { - return new MediumRocketEntity(ModEntities.MEDIUM_ROCKET.get(), pos.x(), pos.y(), pos.z(), level, damage, radius, explosionDamage, fireProbability, fireTime, type, sparedAmount); + return createProjectile(level, pos); } @Override