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 12980c5ee..5e3f94914 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java @@ -10,12 +10,10 @@ import com.atsuishio.superbwarfare.item.gun.data.GunData; import com.atsuishio.superbwarfare.tools.InventoryTool; import com.atsuishio.superbwarfare.tools.NBTTool; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.ChatFormatting; import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.LayeredDraw; -import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -123,26 +121,15 @@ public class AmmoBarOverlay implements LayeredDraw.Layer { 12, 12); } else { - if (stack.getItem() != ModItems.TRACHELIUM.get()) { - guiGraphics.blit(fireMode, - w - 95, - h - 21, - 0, - 0, - 8, - 8, - 8, - 8); - } else { - guiGraphics.drawString( - Minecraft.getInstance().font, - data.DA.get() ? Component.translatable("des.superbwarfare.revolver.sa").withStyle(ChatFormatting.BOLD) : Component.translatable("des.superbwarfare.revolver.da").withStyle(ChatFormatting.BOLD), - w - 96, - h - 20, - 0xFFFFFF, - false - ); - } + guiGraphics.blit(fireMode, + w - 95, + h - 21, + 0, + 0, + 8, + 8, + 8, + 8); } if (stack.getItem() != ModItems.MINIGUN.get() && stack.getItem() != ModItems.TRACHELIUM.get()) { diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/Qbz95ItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/Qbz95ItemRenderer.java index 372e1c114..29b0041be 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/Qbz95ItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/Qbz95ItemRenderer.java @@ -116,7 +116,7 @@ public class Qbz95ItemRenderer extends GeoItemRenderer { bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); } - AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.04375, 0.3); + AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0.02, 1.12375, 0.3); ItemModelHelper.handleGunAttachments(bone, itemStack, name); diff --git a/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemTagProvider.java b/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemTagProvider.java index 92bd154c7..9a86b277d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemTagProvider.java +++ b/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemTagProvider.java @@ -104,8 +104,6 @@ public class ModItemTagProvider extends ItemTagsProvider { .addTag(ModTags.Items.LAUNCHER_GRENADE); this.tag(ModTags.Items.LAUNCHER_GRENADE).add(ModItems.M_79.get(), ModItems.SECONDARY_CATACLYSM.get()); - this.tag(ModTags.Items.REVOLVER).add(ModItems.TRACHELIUM.get()); - this.tag(ModTags.Items.MILITARY_ARMOR).add(ModItems.RU_CHEST_6B43.get(), ModItems.US_CHEST_IOTV.get()); this.tag(ModTags.Items.BLUEPRINT).addTags(ModTags.Items.COMMON_BLUEPRINT, ModTags.Items.RARE_BLUEPRINT, ModTags.Items.EPIC_BLUEPRINT, diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index b27f011c7..69c1c7697 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -195,19 +195,6 @@ public class ClientEventHandler { return player.getVehicle() instanceof VehicleEntity vehicle && vehicle.allowFreeCam() && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON && ModKeyMappings.FREE_CAMERA.isDown(); } - private static boolean revolverPre(GunData data) { - Player player = Minecraft.getInstance().player; - if (player == null) return false; - ItemStack stack = player.getMainHandItem(); - if (!stack.is(ModTags.Items.REVOLVER)) { - return true; - } else if (stack.is(ModTags.Items.REVOLVER) && (data.DA.get() || data.canImmediatelyShoot.get())) { - return true; - } else { - return revolverPreTime >= 1; - } - } - private static boolean isMoving() { Player player = Minecraft.getInstance().player; return Minecraft.getInstance().options.keyLeft.isDown() @@ -566,11 +553,10 @@ public class ClientEventHandler { int cooldown = (int) Math.round(1000 / rps); //左轮类 - if (clientTimer.getProgress() == 0 && stack.is(ModTags.Items.REVOLVER) && ((holdFire && !data.DA.get()) - || (data.bolt.actionTimer.get() < 7 && data.bolt.actionTimer.get() > 2) || data.canImmediatelyShoot.get())) { + if (clientTimer.getProgress() == 0 && stack.is(ModItems.TRACHELIUM.get()) && holdFire) { revolverPreTime = Mth.clamp(revolverPreTime + 0.3 * times, 0, 1); revolverWheelPreTime = Mth.clamp(revolverWheelPreTime + 0.32 * times, 0, revolverPreTime > 0.7 ? 1 : 0.55); - } else if (!data.DA.get() && !data.canImmediatelyShoot.get()) { + } else { revolverPreTime = Mth.clamp(revolverPreTime - 1.2 * times, 0, 1); } @@ -590,8 +576,7 @@ public class ClientEventHandler { && !data.charging() && data.hasEnoughAmmoToShoot(player) && !player.getCooldowns().isOnCooldown(stack.getItem()) - && !GunData.from(stack).bolt.needed.get() - && revolverPre(data)) + && !GunData.from(stack).bolt.needed.get()) )) { if (mode == 0) { if (clientTimer.getProgress() == 0) { @@ -703,7 +688,7 @@ public class ClientEventHandler { } // 判断是否为栓动武器(BoltActionTime > 0),并在开火后给一个需要上膛的状态 - if (data.defaultActionTime() > 0 && data.ammo.get() > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) { + if (data.defaultActionTime() > 0 && data.ammo.get() > 1) { data.bolt.needed.set(true); } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java index 53afe0b9d..89769e208 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java @@ -60,9 +60,6 @@ public class GunEventHandler { if (data.bolt.actionTimer.get() == 1) { data.bolt.needed.set(false); - if (stack.is(ModTags.Items.REVOLVER)) { - data.canImmediatelyShoot.set(true); - } } } } @@ -83,9 +80,7 @@ public class GunEventHandler { double shooterHeight = player.getEyePosition().distanceTo((Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(new Vec3(0, -1, 0).scale(10)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos()))); - if (stack.is(ModTags.Items.REVOLVER)) return; - - Mod.queueServerWork((int) (data.defaultActionTime() / 2 + 1.5 * shooterHeight), () -> { + Mod.queueServerWork((int) (data.bolt.actionTimer.get() / 2 + 1.5 * shooterHeight), () -> { if (stack.is(ModTags.Items.SHOTGUN)) { SoundTool.playLocalSound(serverPlayer, ModSounds.SHELL_CASING_SHOTGUN.get(), (float) Math.max(0.75 - 0.12 * shooterHeight, 0), 1); } else if (stack.is(ModTags.Items.SNIPER_RIFLE)) { diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModTags.java b/src/main/java/com/atsuishio/superbwarfare/init/ModTags.java index a9095241d..1ee001148 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModTags.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModTags.java @@ -25,8 +25,6 @@ public class ModTags { public static final TagKey LAUNCHER = tag("launcher"); public static final TagKey LAUNCHER_GRENADE = tag("launcher/grenade"); - public static final TagKey REVOLVER = tag("revolver"); - public static final TagKey NORMAL_GUN = tag("normal_gun"); public static final TagKey MILITARY_ARMOR = tag("military_armor"); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java index 9c044ded0..7f09e5c92 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -532,14 +532,9 @@ public abstract class GunItem extends Item implements CustomRendererItem { data.holdOpen.set(true); } - // TODO 替换左轮判断方式 - if (data.stack.is(ModTags.Items.REVOLVER)) { - data.canImmediatelyShoot.set(true); - } - // TODO 替换左轮判断方式 // 判断是否为栓动武器(BoltActionTime > 0),并在开火后给一个需要上膛的状态 - if (data.defaultActionTime() > 0 && data.ammo.get() > (data.stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) { + if (data.defaultActionTime() > 0 && data.ammo.get() > 1) { data.bolt.needed.set(true); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java index 9421b0255..b437b276b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java @@ -1,6 +1,5 @@ package com.atsuishio.superbwarfare.item.gun.data; -import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.data.subdata.*; import com.atsuishio.superbwarfare.item.gun.data.value.*; @@ -66,8 +65,6 @@ public class GunData { exp = new DoubleValue(data, "Exp"); upgradePoint = new DoubleValue(data, "UpgradePoint"); - canImmediatelyShoot = new BooleanValue(data, "CanImmediatelyShoot"); - DA = new BooleanValue(data, "DA"); isEmpty = new BooleanValue(data, "IsEmpty"); closeHammer = new BooleanValue(data, "CloseHammer"); stopped = new BooleanValue(data, "Stopped"); @@ -416,7 +413,7 @@ public class GunData { int ammoNeeded = mag - ammo + (extraOne ? 1 : 0); // 空仓换弹的栓动武器应该在换弹后取消待上膛标记 - if (ammo == 0 && defaultActionTime() > 0 && !stack.is(ModTags.Items.REVOLVER)) { + if (ammo == 0 && defaultActionTime() > 0) { bolt.needed.set(false); } @@ -461,8 +458,6 @@ public class GunData { return charge.time() > 0; } - public final BooleanValue canImmediatelyShoot; - public final BooleanValue DA; public final BooleanValue isEmpty; public final BooleanValue closeHammer; public final BooleanValue stopped; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Trachelium.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Trachelium.java index 347686fd6..761c1475a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Trachelium.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Trachelium.java @@ -242,11 +242,6 @@ public class Trachelium extends GunItem implements GeoItem { } } - @Override - public int getCustomBoltActionTime(ItemStack stack) { - return GunData.from(stack).DA.get() ? 12 : 0; - } - @Override public boolean canSwitchScope(ItemStack stack) { return GunData.from(stack).attachment.get(AttachmentType.SCOPE) == 2; diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireKeyMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireKeyMessage.java index a1a0db0f9..60f81ef7c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireKeyMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireKeyMessage.java @@ -2,7 +2,6 @@ package com.atsuishio.superbwarfare.network.message.send; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.event.GunEventHandler; -import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.data.GunData; import io.netty.buffer.ByteBuf; @@ -59,7 +58,7 @@ public record FireKeyMessage(int msgType, double power, boolean zoom) implements var data = GunData.from(stack); if (data.defaultActionTime() > 0 - && data.ammo.get() > (stack.is(ModTags.Items.REVOLVER) ? -1 : 0) + && data.ammo.get() > 0 && data.bolt.actionTimer.get() == 0 && !(data.reload.normal() || data.reload.empty()) && !data.reloading() diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireModeMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireModeMessage.java index 2cc85435b..51c1bb04e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireModeMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/FireModeMessage.java @@ -108,15 +108,6 @@ public record FireModeMessage(int msgType) implements CustomPacketPayload { SoundTool.playLocalSound(serverPlayer, ModSounds.CANNON_ZOOM_OUT.get()); } } - - if (stack.getItem() == ModItems.TRACHELIUM.get() && !data.bolt.needed.get()) { - data.DA.set(!data.DA.get()); - if (!data.canImmediatelyShoot.get()) { - data.bolt.needed.set(true); - } - } - - data.save(); } } diff --git a/src/main/resources/data/superbwarfare/guns/trachelium.json b/src/main/resources/data/superbwarfare/guns/trachelium.json index 05582377b..e84d10e07 100644 --- a/src/main/resources/data/superbwarfare/guns/trachelium.json +++ b/src/main/resources/data/superbwarfare/guns/trachelium.json @@ -11,5 +11,6 @@ "BypassesArmor": 0.3, "SoundRadius": 10, "RPM": 240, - "AmmoType": "@RifleAmmo" + "AmmoType": "@RifleAmmo", + "ShootDelay": 6 } \ No newline at end of file