From 40d991767b5bceb4fdb8397e87416844ada912da Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Thu, 22 May 2025 15:16:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4projectile=20amount=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/ClientRenderHandler.java | 1 - .../client/tooltip/ClientGunImageTooltip.java | 14 ++++- .../tooltip/ClientShotgunImageTooltip.java | 63 ------------------- .../component/ShotgunImageComponent.java | 19 ------ .../superbwarfare/data/gun/GunData.java | 11 ++++ .../item/gun/shotgun/Aa12Item.java | 9 --- .../item/gun/shotgun/HomemadeShotgunItem.java | 8 --- .../item/gun/shotgun/M870Item.java | 9 --- 8 files changed, 23 insertions(+), 111 deletions(-) delete mode 100644 src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientShotgunImageTooltip.java delete mode 100644 src/main/java/com/atsuishio/superbwarfare/client/tooltip/component/ShotgunImageComponent.java diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java index 4f7c9afd3..b4959b124 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java @@ -18,7 +18,6 @@ public class ClientRenderHandler { @SubscribeEvent public static void registerTooltip(RegisterClientTooltipComponentFactoriesEvent event) { event.register(GunImageComponent.class, ClientGunImageTooltip::new); - event.register(ShotgunImageComponent.class, ClientShotgunImageTooltip::new); event.register(BocekImageComponent.class, ClientBocekImageTooltip::new); event.register(EnergyImageComponent.class, ClientEnergyImageTooltip::new); event.register(CellImageComponent.class, ClientCellImageTooltip::new); 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 ace122c71..e1b769ffd 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientGunImageTooltip.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientGunImageTooltip.java @@ -103,10 +103,18 @@ public class ClientGunImageTooltip implements ClientTooltipComponent { } } } + String dmgStr = FormatTool.format1D(damage) + (extraDamage >= 0 ? " + " + FormatTool.format1D(extraDamage) : ""); + if (data.projectileAmount() > 1) { + if (extraDamage >= 0) { + dmgStr = "(" + dmgStr + ") * " + data.projectileAmount(); + } else { + dmgStr = dmgStr + " * " + data.projectileAmount(); + } + } return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY) .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal(FormatTool.format1D(damage) + (extraDamage >= 0 ? " + " + FormatTool.format1D(extraDamage) : "")) + .append(Component.literal(dmgStr) .withStyle(ChatFormatting.GREEN)); } @@ -114,7 +122,9 @@ public class ClientGunImageTooltip implements ClientTooltipComponent { * 获取武器射速的文本组件 */ protected Component getRpmComponent() { - if (this.stack.getItem() instanceof GunItem && GunData.from(this.stack).getAvailableFireModes().contains(FireMode.AUTO)) { + if (this.stack.getItem() instanceof GunItem && + (GunData.from(this.stack).getAvailableFireModes().contains(FireMode.AUTO) + || GunData.from(this.stack).getAvailableFireModes().contains(FireMode.BURST))) { 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/client/tooltip/ClientShotgunImageTooltip.java b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientShotgunImageTooltip.java deleted file mode 100644 index bd32fe75f..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientShotgunImageTooltip.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.atsuishio.superbwarfare.client.tooltip; - -import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent; -import com.atsuishio.superbwarfare.perk.AmmoPerk; -import com.atsuishio.superbwarfare.perk.Perk; -import com.atsuishio.superbwarfare.tools.FormatTool; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.Component; - -public class ClientShotgunImageTooltip extends ClientGunImageTooltip { - - public ClientShotgunImageTooltip(GunImageComponent tooltip) { - super(tooltip); - } - - @Override - protected Component getDamageComponent() { - boolean slug = false; - - var perk = data.perk.get(Perk.Type.AMMO); - if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { - slug = true; - } - - if (slug) { - double damage = data.damage() * data.projectileAmount(); - double extraDamage = -1; - for (var type : Perk.Type.values()) { - var instance = data.perk.getInstance(type); - if (instance != null) { - damage = instance.perk().getDisplayDamage(damage, data, instance); - if (instance.perk().getExtraDisplayDamage(damage, data, instance) >= 0) { - extraDamage = instance.perk().getExtraDisplayDamage(damage, data, instance); - } - } - } - - return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal(FormatTool.format1D(damage) + (extraDamage >= 0 ? " + " + FormatTool.format1D(extraDamage) : "")).withStyle(ChatFormatting.GREEN)); - } else { - double damage = data.damage(); - double extraDamage = -1; - for (var type : Perk.Type.values()) { - var instance = data.perk.getInstance(type); - if (instance != null) { - damage = instance.perk().getDisplayDamage(damage, data, instance); - if (instance.perk().getExtraDisplayDamage(damage, data, instance) >= 0) { - extraDamage = instance.perk().getExtraDisplayDamage(damage, data, instance); - } - } - } - - return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal(FormatTool.format1D(damage) + " * " + FormatTool.format0D(data.projectileAmount())).withStyle(ChatFormatting.GREEN)) - .append(Component.literal(extraDamage >= 0 ? - ("(" + FormatTool.format1D(damage) + " + " + FormatTool.format1D(extraDamage) + ") * " + FormatTool.format0D(data.projectileAmount())) - : FormatTool.format1D(damage, " * ") + FormatTool.format0D(data.projectileAmount()) - ).withStyle(ChatFormatting.GREEN)); - } - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/component/ShotgunImageComponent.java b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/component/ShotgunImageComponent.java deleted file mode 100644 index 9867b1fb2..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/component/ShotgunImageComponent.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.atsuishio.superbwarfare.client.tooltip.component; - -import net.minecraft.world.item.ItemStack; - -public class ShotgunImageComponent extends GunImageComponent { - - public int width; - public int height; - public ItemStack stack; - - public ShotgunImageComponent(int width, int height, ItemStack stack) { - super(width, height, stack); - } - - public ShotgunImageComponent(ItemStack stack) { - this(32, 16, stack); - } - -} \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java b/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java index 564af459c..01e9ae250 100644 --- a/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java +++ b/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java @@ -151,6 +151,9 @@ public class GunData { public double perkDamageRate() { var perk = this.perk.get(Perk.Type.AMMO); if (perk instanceof AmmoPerk ammoPerk) { + if (ammoPerk.slug) { + return ammoPerk.damageRate * rawProjectileAmount(); + } return ammoPerk.damageRate; } return 1; @@ -207,7 +210,15 @@ public class GunData { return projectileInfo().type; } + public int rawProjectileAmount() { + return defaultGunData().projectileAmount; + } + public int projectileAmount() { + var perk = this.perk.get(Perk.Type.AMMO); + if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { + return 1; + } return defaultGunData().projectileAmount; } 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 190c5e3aa..cbedfa988 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 @@ -2,7 +2,6 @@ package com.atsuishio.superbwarfare.item.gun.shotgun; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.client.renderer.gun.Aa12ItemRenderer; -import com.atsuishio.superbwarfare.client.tooltip.component.ShotgunImageComponent; import com.atsuishio.superbwarfare.data.gun.GunData; import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModEnumExtensions; @@ -12,18 +11,15 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.NotNull; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.*; import software.bernie.geckolib.renderer.GeoItemRenderer; import software.bernie.geckolib.util.GeckoLibUtil; -import java.util.Optional; import java.util.Set; import java.util.function.Supplier; @@ -117,11 +113,6 @@ public class Aa12Item extends GunItem implements GeoItem { return "AA-12"; } - @Override - public @NotNull Optional getTooltipImage(@NotNull ItemStack pStack) { - return Optional.of(new ShotgunImageComponent(pStack)); - } - @Override public boolean isOpenBolt(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 19fb4a8d3..e150cb0c7 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 @@ -2,7 +2,6 @@ package com.atsuishio.superbwarfare.item.gun.shotgun; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.client.renderer.gun.HomemadeShotgunItemRenderer; -import com.atsuishio.superbwarfare.client.tooltip.component.ShotgunImageComponent; import com.atsuishio.superbwarfare.data.gun.GunData; import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModSounds; @@ -17,7 +16,6 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; @@ -28,7 +26,6 @@ import software.bernie.geckolib.animation.*; import software.bernie.geckolib.renderer.GeoItemRenderer; import software.bernie.geckolib.util.GeckoLibUtil; -import java.util.Optional; import java.util.Set; import java.util.function.Supplier; @@ -113,11 +110,6 @@ public class HomemadeShotgunItem extends GunItem implements GeoItem { return "Homemade Shotgun"; } - @Override - public @NotNull Optional getTooltipImage(@NotNull ItemStack pStack) { - return Optional.of(new ShotgunImageComponent(pStack)); - } - @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 1907526de..aca0e354d 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 @@ -2,7 +2,6 @@ package com.atsuishio.superbwarfare.item.gun.shotgun; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.client.renderer.gun.M870ItemRenderer; -import com.atsuishio.superbwarfare.client.tooltip.component.ShotgunImageComponent; import com.atsuishio.superbwarfare.data.gun.GunData; import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModSounds; @@ -11,18 +10,15 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; -import org.jetbrains.annotations.NotNull; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.*; import software.bernie.geckolib.renderer.GeoItemRenderer; import software.bernie.geckolib.util.GeckoLibUtil; -import java.util.Optional; import java.util.Set; import java.util.function.Supplier; @@ -126,9 +122,4 @@ public class M870Item extends GunItem implements GeoItem { public String getGunDisplayName() { return "M870 MCS"; } - - @Override - public @NotNull Optional getTooltipImage(@NotNull ItemStack pStack) { - return Optional.of(new ShotgunImageComponent(pStack)); - } } \ No newline at end of file