diff --git a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientGunImageTooltip.java b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientGunImageTooltip.java index 9cce867e9..d504aee4e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientGunImageTooltip.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientGunImageTooltip.java @@ -5,6 +5,7 @@ import com.atsuishio.superbwarfare.init.ModKeyMappings; import com.atsuishio.superbwarfare.init.ModPerks; import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.item.gun.GunItem; +import com.atsuishio.superbwarfare.item.gun.data.FireMode; import com.atsuishio.superbwarfare.item.gun.data.GunData; import com.atsuishio.superbwarfare.perk.AmmoPerk; import com.atsuishio.superbwarfare.perk.Perk; @@ -113,7 +114,7 @@ public class ClientGunImageTooltip implements ClientTooltipComponent { * 获取武器射速的文本组件 */ protected Component getRpmComponent() { - if (this.stack.getItem() instanceof GunItem gunItem && gunItem.isAutoWeapon(this.stack)) { + if (this.stack.getItem() instanceof GunItem && GunData.from(this.stack).getAvailableFireModes().contains(FireMode.AUTO)) { return Component.translatable("des.superbwarfare.guns.rpm").withStyle(ChatFormatting.GRAY) .append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal(FormatTool.format0D(data.rpm())) 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 0077c8ac4..0e10d2af5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -197,33 +197,6 @@ public abstract class GunItem extends Item implements CustomRendererItem { return false; } - /** - * 是否使用弹匣换弹 - * - * @param stack 武器物品 - */ - public boolean isMagazineReload(ItemStack stack) { - return false; - } - - /** - * 是否使用弹夹换弹 - * - * @param stack 武器物品 - */ - public boolean isClipReload(ItemStack stack) { - return false; - } - - /** - * 是否是单发装填换弹 - * - * @param stack 武器物品 - */ - public boolean isIterativeReload(ItemStack stack) { - return false; - } - /** * 开膛待击 * @@ -242,15 +215,6 @@ public abstract class GunItem extends Item implements CustomRendererItem { return false; } - /** - * 武器是否为全自动武器 - * - * @param stack 武器物品 - */ - public boolean isAutoWeapon(ItemStack stack) { - return false; - } - /** * 武器是否能进行改装 * diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/DefaultGunData.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/DefaultGunData.java index ed1b04e13..7dbfc990e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/DefaultGunData.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/DefaultGunData.java @@ -39,6 +39,9 @@ public class DefaultGunData { @SerializedName("AvailableFireModes") public Set availableFireModes = Set.of(FireMode.SEMI); + @SerializedName("ReloadTypes") + public Set reloadTypes = Set.of(ReloadType.MAGAZINE); + @SerializedName("BurstAmount") public int burstAmount; @SerializedName("BypassesArmor") 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 e05cbab6a..b85c64ecf 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 @@ -195,6 +195,10 @@ public class GunData { return defaultGunData().headshot + item.getCustomHeadshot(stack); } + public Set reloadTypes() { + return defaultGunData().reloadTypes; + } + public int defaultNormalReloadTime() { return defaultGunData().normalReloadTime; } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/ReloadType.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/ReloadType.java new file mode 100644 index 000000000..93b16c77b --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/ReloadType.java @@ -0,0 +1,12 @@ +package com.atsuishio.superbwarfare.item.gun.data; + +import com.google.gson.annotations.SerializedName; + +public enum ReloadType { + @SerializedName("Magazine") + MAGAZINE, + @SerializedName("Clip") + CLIP, + @SerializedName("Iterative") + ITERATIVE, +} diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Glock17Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Glock17Item.java index b84b5c631..e2810b8e4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Glock17Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Glock17Item.java @@ -108,11 +108,6 @@ public class Glock17Item extends GunItem implements GeoItem { return "GLOCK-17"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Glock18Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Glock18Item.java index d1d6db281..d7d8628ce 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Glock18Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Glock18Item.java @@ -110,11 +110,6 @@ public class Glock18Item extends GunItem implements GeoItem { return "GLOCK-18"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; @@ -125,11 +120,6 @@ public class Glock18Item extends GunItem implements GeoItem { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean canEjectShell(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/M1911Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/M1911Item.java index 28c1b1b1c..ff4481082 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/M1911Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/M1911Item.java @@ -110,11 +110,6 @@ public class M1911Item extends GunItem implements GeoItem { return "M-1911"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Mp443Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Mp443Item.java index 770cb6582..344a2fb4c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Mp443Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Mp443Item.java @@ -107,11 +107,6 @@ public class Mp443Item extends GunItem implements GeoItem { return "MP-443"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; 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 2483b878f..c345865a9 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 @@ -294,11 +294,6 @@ public class Trachelium extends GunItem implements GeoItem { return "TRACHELIUM"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isCustomizable(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/heavy/Ntw20Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/heavy/Ntw20Item.java index 4303fa2c8..bfd0a1129 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/heavy/Ntw20Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/heavy/Ntw20Item.java @@ -155,11 +155,6 @@ public class Ntw20Item extends GunItem implements GeoItem { return "NTW-20"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java index b57a372dc..b326ba9e0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java @@ -195,11 +195,6 @@ public class JavelinItem extends GunItem implements GeoItem { return Optional.of(new LauncherImageComponent(pStack)); } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public String getAmmoDisplayName(GunData data) { return "Javelin Missile"; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java index 618e4bf96..2bfc4bb8e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java @@ -103,12 +103,6 @@ public class M79Item extends GunItem implements GeoItem { public @NotNull Optional getTooltipImage(@NotNull ItemStack pStack) { return Optional.of(new LauncherImageComponent(pStack)); } - - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public String getAmmoDisplayName(GunData data) { return "40mm Grenade"; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java index d21d58b86..fdc1beece 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java @@ -132,11 +132,6 @@ public class RpgItem extends GunItem implements GeoItem { return Optional.of(new LauncherImageComponent(pStack)); } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean shootBullet(Player player, GunData data, double spread, boolean zoom) { Level level = player.level(); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java index aaf54c631..2faca2e83 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java @@ -205,11 +205,6 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, EnergyStorag return new ItemAttributeModifiers(list, true); } - @Override - public boolean isIterativeReload(ItemStack stack) { - return true; - } - @Override public boolean hasMeleeAttack(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/DevotionItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/DevotionItem.java index 8d20867d8..2beb1efe3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/DevotionItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/DevotionItem.java @@ -92,11 +92,6 @@ public class DevotionItem extends GunItem implements GeoItem { return "Devotion"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; @@ -107,11 +102,6 @@ public class DevotionItem extends GunItem implements GeoItem { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean canEjectShell(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/M60Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/M60Item.java index dc03d8f91..4521c0407 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/M60Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/M60Item.java @@ -128,21 +128,11 @@ public class M60Item extends GunItem implements GeoItem { return "M60"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean canEjectShell(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/MinigunItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/MinigunItem.java index 5e7856775..754b9756a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/MinigunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/MinigunItem.java @@ -80,9 +80,4 @@ public class MinigunItem extends GunItem implements GeoItem { return "M134 MINIGUN"; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/RpkItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/RpkItem.java index 1ee5bc441..e39458487 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/RpkItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/RpkItem.java @@ -194,11 +194,6 @@ public class RpkItem extends GunItem implements GeoItem { return GunData.from(stack).attachment.get(AttachmentType.SCOPE) == 2; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; @@ -209,11 +204,6 @@ public class RpkItem extends GunItem implements GeoItem { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean isCustomizable(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java index 7c2d448a7..949315ad0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java @@ -164,11 +164,6 @@ public class AK12Item extends GunItem implements GeoItem { return "AK-12"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; @@ -179,11 +174,6 @@ public class AK12Item extends GunItem implements GeoItem { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean isCustomizable(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java index 0267cb8ec..037830b33 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java @@ -172,11 +172,6 @@ public class AK47Item extends GunItem implements GeoItem { return "AK-47"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; @@ -187,11 +182,6 @@ public class AK47Item extends GunItem implements GeoItem { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean isCustomizable(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java index ba3dab020..5220a77ac 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java @@ -172,11 +172,6 @@ public class Hk416Item extends GunItem implements GeoItem { return "HK-416"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; @@ -187,11 +182,6 @@ public class Hk416Item extends GunItem implements GeoItem { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean isCustomizable(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/InsidiousItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/InsidiousItem.java index dd4eadf29..558c3afca 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/InsidiousItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/InsidiousItem.java @@ -87,9 +87,4 @@ public class InsidiousItem extends GunItem implements GeoItem { public String getGunDisplayName() { return "INSIDIOUS"; } - - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java index 748efaae4..4efc9ba55 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java @@ -178,11 +178,6 @@ public class M4Item extends GunItem implements GeoItem { return "M4A1"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; @@ -193,11 +188,6 @@ public class M4Item extends GunItem implements GeoItem { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean isCustomizable(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/MarlinItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/MarlinItem.java index e7e164f37..ae23cd414 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/MarlinItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/MarlinItem.java @@ -127,9 +127,4 @@ public class MarlinItem extends GunItem implements GeoItem { public String getGunDisplayName() { return "MARLIN-1894"; } - - @Override - public boolean isIterativeReload(ItemStack stack) { - return true; - } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java index 7c49a4ca0..b0865bb74 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java @@ -174,11 +174,6 @@ public class Mk14Item extends GunItem implements GeoItem { return "MK-14"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; @@ -189,11 +184,6 @@ public class Mk14Item extends GunItem implements GeoItem { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean isCustomizable(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java index bc5c07c86..71cfb2d5d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java @@ -187,11 +187,6 @@ public class Qbz95Item extends GunItem implements GeoItem { return "QBZ-95-1"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; @@ -202,11 +197,6 @@ public class Qbz95Item extends GunItem implements GeoItem { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean isCustomizable(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/SksItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/SksItem.java index 8dc124817..44dfe52c7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/SksItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/SksItem.java @@ -112,11 +112,6 @@ public class SksItem extends GunItem implements GeoItem { return "SKS"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/Aa12Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/Aa12Item.java index 903e7079a..7fd6aaf67 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/Aa12Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/Aa12Item.java @@ -122,11 +122,6 @@ public class Aa12Item extends GunItem implements GeoItem { return Optional.of(new ShotgunImageComponent(pStack)); } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; @@ -137,11 +132,6 @@ public class Aa12Item extends GunItem implements GeoItem { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean canEjectShell(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java index a9e661494..f09e09279 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java @@ -124,11 +124,6 @@ public class HomemadeShotgunItem extends GunItem implements GeoItem { return Optional.of(new ShotgunImageComponent(pStack)); } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/M870Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/M870Item.java index 65ca3d596..83ca6b36b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/M870Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/M870Item.java @@ -137,9 +137,4 @@ public class M870Item extends GunItem implements GeoItem { public @NotNull Optional getTooltipImage(@NotNull ItemStack pStack) { return Optional.of(new ShotgunImageComponent(pStack)); } - - @Override - public boolean isIterativeReload(ItemStack stack) { - return true; - } } \ No newline at end of file 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 45529f02e..d5b6d18e8 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 @@ -155,11 +155,6 @@ public class VectorItem extends GunItem implements GeoItem { return "VECTOR"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; @@ -170,11 +165,6 @@ public class VectorItem extends GunItem implements GeoItem { return true; } - @Override - public boolean isAutoWeapon(ItemStack stack) { - return true; - } - @Override public boolean isCustomizable(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/HuntingRifleItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/HuntingRifleItem.java index 36e032fe8..a853469f9 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/HuntingRifleItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/HuntingRifleItem.java @@ -86,9 +86,4 @@ public class HuntingRifleItem extends GunItem implements GeoItem { public String getGunDisplayName() { return "Hunting Rifle"; } - - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/K98Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/K98Item.java index 0f00a27c5..1ff137cc3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/K98Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/K98Item.java @@ -136,14 +136,4 @@ public class K98Item extends GunItem implements GeoItem { public String getGunDisplayName() { return "KAR-98K"; } - - @Override - public boolean isClipReload(ItemStack stack) { - return true; - } - - @Override - public boolean isIterativeReload(ItemStack stack) { - return true; - } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/M98bItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/M98bItem.java index 5921bba43..a1b0778af 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/M98bItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/M98bItem.java @@ -111,11 +111,6 @@ public class M98bItem extends GunItem implements GeoItem { return "M98-B"; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java index de8a39dda..94ebbcbfe 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java @@ -134,9 +134,4 @@ public class MosinNagantItem extends GunItem implements GeoItem { public String getGunDisplayName() { return "MOSIN NAGANT"; } - - @Override - public boolean isIterativeReload(ItemStack stack) { - return true; - } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java index 794e63a26..c9ec91356 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java @@ -174,11 +174,6 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem return Optional.of(new SentinelImageComponent(pStack)); } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SvdItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SvdItem.java index 5a36e85f4..51229236d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SvdItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SvdItem.java @@ -158,11 +158,6 @@ public class SvdItem extends GunItem implements GeoItem { return true; } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public boolean isOpenBolt(ItemStack stack) { return true; 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 4c941c948..9f5c2911e 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 @@ -154,11 +154,6 @@ public class BocekItem extends GunItem implements GeoItem { public void onShoot(GunData data, Player player, double spread, boolean zoom) { } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public void onFireKeyRelease(GunData data, Player player, double power, boolean zoom) { super.onFireKeyRelease(data, player, power, zoom); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/special/TaserItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/special/TaserItem.java index 89b154d27..aeec4f09d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/special/TaserItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/special/TaserItem.java @@ -155,11 +155,6 @@ public class TaserItem extends GunItem implements GeoItem, EnergyStorageItem { return Optional.of(new EnergyImageComponent(pStack)); } - @Override - public boolean isMagazineReload(ItemStack stack) { - return true; - } - @Override public String getAmmoDisplayName(GunData data) { return "Electrode Rod"; diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/ReloadMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/ReloadMessage.java index 296a24a9e..61621cde7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/ReloadMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/ReloadMessage.java @@ -3,6 +3,7 @@ package com.atsuishio.superbwarfare.network.message.send; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.data.GunData; +import com.atsuishio.superbwarfare.item.gun.data.ReloadType; import io.netty.buffer.ByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; @@ -40,9 +41,10 @@ public record ReloadMessage(int msgType) implements CustomPacketPayload { && data.reload.time() == 0 && data.bolt.actionTimer.get() == 0 ) { - boolean canSingleReload = gunItem.isIterativeReload(stack); - boolean canReload = gunItem.isMagazineReload(stack) && !gunItem.isClipReload(stack); - boolean clipLoad = data.ammo.get() == 0 && gunItem.isClipReload(stack); + var reloadTypes = data.reloadTypes(); + boolean canSingleReload = reloadTypes.contains(ReloadType.ITERATIVE); + boolean canReload = reloadTypes.contains(ReloadType.MAGAZINE) && !reloadTypes.contains(ReloadType.CLIP); + boolean clipLoad = data.ammo.get() == 0 && reloadTypes.contains(ReloadType.CLIP); // 检查备弹 if (!data.hasBackupAmmo(player)) return; diff --git a/src/main/resources/data/superbwarfare/guns/ak_47.json b/src/main/resources/data/superbwarfare/guns/ak_47.json index 44587408c..44de94909 100644 --- a/src/main/resources/data/superbwarfare/guns/ak_47.json +++ b/src/main/resources/data/superbwarfare/guns/ak_47.json @@ -15,7 +15,10 @@ "BypassesArmor": 0.2, "SoundRadius": 14, "RPM": 600, - "AvailableFireModes": ["Semi", "Auto"], + "AvailableFireModes": [ + "Semi", + "Auto" + ], "AmmoType": "@RifleAmmo", "AvailablePerks": [ "@Ammo", diff --git a/src/main/resources/data/superbwarfare/guns/k_98.json b/src/main/resources/data/superbwarfare/guns/k_98.json index 2023ba9be..1a2d477e5 100644 --- a/src/main/resources/data/superbwarfare/guns/k_98.json +++ b/src/main/resources/data/superbwarfare/guns/k_98.json @@ -9,6 +9,10 @@ "BoltActionTime": 22, "Weight": 5, "DefaultFireMode": "Auto", + "ReloadTypes": [ + "Clip", + "Iterative" + ], "EmptyReloadTime": 59, "PrepareTime": 29, "IterativeTime": 11, diff --git a/src/main/resources/data/superbwarfare/guns/m_870.json b/src/main/resources/data/superbwarfare/guns/m_870.json index bb12a3b4b..042903b9c 100644 --- a/src/main/resources/data/superbwarfare/guns/m_870.json +++ b/src/main/resources/data/superbwarfare/guns/m_870.json @@ -8,6 +8,9 @@ "Magazine": 8, "ProjectileAmount": 12, "Weight": 4, + "ReloadTypes": [ + "Iterative" + ], "PrepareTime": 7, "PrepareLoadTime": 36, "IterativeTime": 16, diff --git a/src/main/resources/data/superbwarfare/guns/marlin.json b/src/main/resources/data/superbwarfare/guns/marlin.json index b4ea212df..a831632af 100644 --- a/src/main/resources/data/superbwarfare/guns/marlin.json +++ b/src/main/resources/data/superbwarfare/guns/marlin.json @@ -7,6 +7,9 @@ "Velocity": 38, "Magazine": 8, "Weight": 3, + "ReloadTypes": [ + "Iterative" + ], "PrepareTime": 7, "IterativeTime": 16, "FinishTime": 19, diff --git a/src/main/resources/data/superbwarfare/guns/mosin_nagant.json b/src/main/resources/data/superbwarfare/guns/mosin_nagant.json index 528333a38..2766f57b8 100644 --- a/src/main/resources/data/superbwarfare/guns/mosin_nagant.json +++ b/src/main/resources/data/superbwarfare/guns/mosin_nagant.json @@ -7,6 +7,9 @@ "Headshot": 3, "Velocity": 42, "Magazine": 5, + "ReloadTypes": [ + "Iterative" + ], "BoltActionTime": 22, "Weight": 5, "PrepareTime": 29, diff --git a/src/main/resources/data/superbwarfare/guns/secondary_cataclysm.json b/src/main/resources/data/superbwarfare/guns/secondary_cataclysm.json index a5f869e1b..05711d4ca 100644 --- a/src/main/resources/data/superbwarfare/guns/secondary_cataclysm.json +++ b/src/main/resources/data/superbwarfare/guns/secondary_cataclysm.json @@ -8,6 +8,9 @@ "Velocity": 3.75, "Magazine": 8, "Weight": 9, + "ReloadTypes": [ + "Iterative" + ], "PrepareLoadTime": 31, "IterativeTime": 20, "FinishTime": 19,