From 9402c35894c85447fc0e22ce86a32399ea8cfbdd Mon Sep 17 00:00:00 2001 From: Atsuishio <842960157@qq.com> Date: Tue, 15 Apr 2025 00:52:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B0=8F=E9=B8=9F=E5=A4=A7?= =?UTF-8?q?=E9=99=80=E8=9E=BA=EF=BC=8C=E4=BF=AE=E5=A4=8Dvictor=E6=94=BE?= =?UTF-8?q?=E5=A4=A7=E5=80=8D=E7=8E=87=E9=94=99=E8=AF=AF=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=B3=A2=E5=A1=9E=E5=85=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/client/ClickHandler.java | 9 ++--- .../client/overlay/AmmoBarOverlay.java | 10 +---- .../renderer/item/BocekItemRenderer.java | 5 ++- .../entity/vehicle/Ah6Entity.java | 2 +- .../event/ClientEventHandler.java | 10 ++++- .../item/gun/smg/VectorItem.java | 2 +- .../item/gun/special/BocekItem.java | 37 ++++++++++--------- .../data/superbwarfare/guns/bocek.json | 1 + 8 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index 009db789b..68ddf6008 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -336,7 +336,6 @@ public class ClickHandler { if (!stack.is(ModItems.BOCEK.get())) { player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1); } else { - player.playSound(ModSounds.BOCEK_PULL_1P.get(), 1, 1); handTimer = 0; } @@ -367,13 +366,13 @@ public class ClickHandler { public static void handleWeaponFireRelease() { PacketDistributor.sendToServer(new FireMessage(1, handTimer, zoom)); - ClientEventHandler.holdFire = false; - ClientEventHandler.holdFireVehicle = false; - ClientEventHandler.customRpm = 0; + bowPull = false; + holdFire = false; + holdFireVehicle = false; + customRpm = 0; } public static void handleWeaponZoomPress(Player player, ItemStack stack) { - if (!(stack.getItem() instanceof GunItem)) return; PacketDistributor.sendToServer(new ZoomMessage(0)); if (player.getVehicle() instanceof VehicleEntity pVehicle && player.getVehicle() instanceof WeaponVehicleEntity iVehicle && iVehicle.hasWeapon(pVehicle.getSeatIndex(player)) && iVehicle.banHand(player)) { diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java index d79a79e4c..6cbcd5900 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java @@ -45,22 +45,16 @@ public class AmmoBarOverlay implements LayeredDraw.Layer { private static int getGunAmmoCount(Player player) { ItemStack stack = player.getMainHandItem(); - // TODO 替换为直接使用背包弹药判断 if (stack.getItem() == ModItems.MINIGUN.get()) { return GunData.from(stack).countAmmo(player); } - - if (stack.getItem() == ModItems.BOCEK.get()) { - return GunData.from(stack).countAmmo(player); - } - return GunData.from(stack).ammo.get(); } private static String getPlayerAmmoCount(Player player) { ItemStack stack = player.getMainHandItem(); - if (stack.getItem() == ModItems.MINIGUN.get() || stack.getItem() == ModItems.BOCEK.get()) { + if (stack.getItem() == ModItems.MINIGUN.get()) { return ""; } @@ -180,7 +174,7 @@ public class AmmoBarOverlay implements LayeredDraw.Layer { poseStack.pushPose(); poseStack.scale(1.5f, 1.5f, 1f); - if ((stack.getItem() == ModItems.MINIGUN.get() || stack.getItem() == ModItems.BOCEK.get()) && hasCreativeAmmo()) { + if (stack.getItem() == ModItems.MINIGUN.get() && hasCreativeAmmo()) { guiGraphics.drawString( Minecraft.getInstance().font, "∞", diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/BocekItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/BocekItemRenderer.java index f89dfd3ea..240ca77da 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/BocekItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/BocekItemRenderer.java @@ -87,11 +87,12 @@ public class BocekItemRenderer extends GeoItemRenderer { } if (name.equals("arrow")) { - bone.setHidden(GunsTool.getGunIntTag(tag, "ArrowEmpty") > 0); + bone.setHidden(GunsTool.getGunIntTag(tag, "ArrowEmpty") > 1); } if (name.equals("jian")) { - bone.setHidden(!GunData.from(itemStack).hasAmmo(player)); + var data = GunData.from(itemStack); + bone.setHidden(data.ammo.get() == 0); } if (renderingArms) { 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 6f586c5e0..1eafee34a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java @@ -319,7 +319,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity engineStartOver = false; } } - } else { + } else if (!onGround() && engineStartOver) { this.entityData.set(POWER, Math.max(this.entityData.get(POWER) - 0.0003f, 0.01f)); destroyRot += 0.15f; diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 0fbca86e6..13ef361cd 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -121,6 +121,7 @@ public class ClientEventHandler { public static MillisTimer clientTimerVehicle = new MillisTimer(); public static boolean holdFire = false; + public static boolean bowPull = false; public static boolean zoom = false; public static boolean breath = false; @@ -1454,7 +1455,14 @@ public class ClientEventHandler { private static void handleBowPullAnimation(LivingEntity entity, ItemStack stack) { float times = 4 * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8); - if (holdFire && entity instanceof Player player && !player.getCooldowns().isOnCooldown(stack.getItem())) { + var data = GunData.from(stack); + + if (holdFire && data.ammo.get() > 0 && !bowPull && stack.is(ModItems.BOCEK.get())) { + entity.playSound(ModSounds.BOCEK_PULL_1P.get(), 1, 1); + bowPull = true; + } + + if (bowPull) { pullTimer = Math.min(pullTimer + 0.024 * times, 1.4); bowTimer = Math.min(bowTimer + 0.018 * times, 1); handTimer = Math.min(handTimer + 0.018 * times, 1); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java index c6bdb2470..a15724341 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java @@ -130,7 +130,7 @@ public class VectorItem extends GunItem implements GeoItem { @Override public double getCustomZoom(ItemStack stack) { int scopeType = GunData.from(stack).attachment.get(AttachmentType.SCOPE); - return scopeType == 2 ? (NBTTool.getTag(stack).getBoolean("ScopeAlt") ? 0 : 2.75) : 0; + return scopeType == 2 ? (NBTTool.getTag(stack).getBoolean("ScopeAlt") ? 0 : 0.75) : 0; } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/special/BocekItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/special/BocekItem.java index e31988c47..8325cf943 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/special/BocekItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/special/BocekItem.java @@ -94,19 +94,22 @@ public class BocekItem extends GunItem implements GeoItem, ReleaseSpecialWeapon public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { super.inventoryTick(stack, world, entity, slot, selected); var data = GunData.from(stack); - final var tag = data.tag(); - if (GunsTool.getGunIntTag(tag, "ArrowEmpty") > 0) { - GunsTool.setGunIntTag(tag, "ArrowEmpty", GunsTool.getGunIntTag(tag, "ArrowEmpty") - 1); + if (entity instanceof Player player) { + if (GunsTool.getGunIntTag(GunData.from(stack).tag, "ArrowEmpty") > 0) { + GunsTool.setGunIntTag(GunData.from(stack).tag, "ArrowEmpty", GunsTool.getGunIntTag(GunData.from(stack).tag, "ArrowEmpty") - 1); + } + + if (GunsTool.getGunIntTag(GunData.from(stack).tag, "ArrowEmpty") == 0 && data.ammo.get() == 0 && (data.countAmmo(player) > 0 || InventoryTool.hasCreativeAmmoBox(player))) { + if (!InventoryTool.hasCreativeAmmoBox(player)) { + data.consumeAmmo(player, 1); + } + data.ammo.set(1); + } data.save(); } } - // TODO 替换硬编码判断 - protected static boolean check(ItemStack stack) { - return stack.getItem() == Items.ARROW; - } - @Override public ResourceLocation getGunIcon() { return Mod.loc("textures/gun_icon/bocek_icon.png"); @@ -145,16 +148,17 @@ public class BocekItem extends GunItem implements GeoItem, ReleaseSpecialWeapon public void fireOnRelease(Player player, final GunData data, double power, boolean zoom) { if (player.level().isClientSide()) return; + ItemStack stack = player.getMainHandItem(); + var perk = data.perk.get(Perk.Type.AMMO); + + if (data.ammo.get() == 0) return; + if (player instanceof ServerPlayer serverPlayer) { SoundTool.stopSound(serverPlayer, ModSounds.BOCEK_PULL_1P.getId(), SoundSource.PLAYERS); SoundTool.stopSound(serverPlayer, ModSounds.BOCEK_PULL_3P.getId(), SoundSource.PLAYERS); PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10)); } - var tag = data.tag(); - var stack = data.stack(); - var perk = data.perk.get(Perk.Type.AMMO); - if (power * 12 >= 6) { if (zoom) { spawnBullet(player, power, true); @@ -178,12 +182,9 @@ public class BocekItem extends GunItem implements GeoItem, ReleaseSpecialWeapon } } - player.getCooldowns().addCooldown(stack.getItem(), 7); - GunsTool.setGunIntTag(tag, "ArrowEmpty", 7); - - if (!InventoryTool.hasCreativeAmmoBox(player)) { - data.consumeAmmo(player, 1); - } + GunsTool.setGunIntTag(GunData.from(stack).tag, "ArrowEmpty", 7); + data.ammo.set(data.ammo.get() - 1); + data.save(); } } } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/bocek.json b/src/main/resources/data/superbwarfare/guns/bocek.json index 52b58eae0..35644a564 100644 --- a/src/main/resources/data/superbwarfare/guns/bocek.json +++ b/src/main/resources/data/superbwarfare/guns/bocek.json @@ -5,5 +5,6 @@ "Damage": 48, "Weight": 3, "BypassesArmor": 0.25, + "Magazine": 1, "AmmoType": "minecraft:arrow" } \ No newline at end of file