diff --git a/src/main/java/net/mcreator/superbwarfare/client/ClientRenderHandler.java b/src/main/java/net/mcreator/superbwarfare/client/ClientRenderHandler.java index 68259e6ad..f23e535de 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/ClientRenderHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/client/ClientRenderHandler.java @@ -1,10 +1,7 @@ package net.mcreator.superbwarfare.client; import net.mcreator.superbwarfare.client.tooltip.*; -import net.mcreator.superbwarfare.client.tooltip.component.BocekImageComponent; -import net.mcreator.superbwarfare.client.tooltip.component.GunImageComponent; -import net.mcreator.superbwarfare.client.tooltip.component.ShotgunImageComponent; -import net.mcreator.superbwarfare.client.tooltip.component.EnergyImageComponent; +import net.mcreator.superbwarfare.client.tooltip.component.*; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RegisterClientTooltipComponentFactoriesEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -19,6 +16,7 @@ public class ClientRenderHandler { event.register(ShotgunImageComponent.class, ClientShotgunImageTooltip::new); event.register(BocekImageComponent.class, ClientBocekImageTooltip::new); event.register(EnergyImageComponent.class, ClientEnergyImageTooltip::new); + event.register(SentinelImageComponent.class, ClientSentinelImageTooltip::new); } } diff --git a/src/main/java/net/mcreator/superbwarfare/client/tooltip/ClientEnergyImageTooltip.java b/src/main/java/net/mcreator/superbwarfare/client/tooltip/ClientEnergyImageTooltip.java index 970a0fd87..74f5f0910 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/tooltip/ClientEnergyImageTooltip.java +++ b/src/main/java/net/mcreator/superbwarfare/client/tooltip/ClientEnergyImageTooltip.java @@ -33,6 +33,7 @@ public class ClientEnergyImageTooltip extends ClientGunImageTooltip { if (shouldRenderEnergyTooltip()) { yo += 10; renderEnergyTooltip(font, guiGraphics, x, y + yo); + yo += 10; } if (shouldRenderEditTooltip()) { diff --git a/src/main/java/net/mcreator/superbwarfare/client/tooltip/ClientSentinelImageTooltip.java b/src/main/java/net/mcreator/superbwarfare/client/tooltip/ClientSentinelImageTooltip.java new file mode 100644 index 000000000..e15586cc3 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/client/tooltip/ClientSentinelImageTooltip.java @@ -0,0 +1,44 @@ +package net.mcreator.superbwarfare.client.tooltip; + +import net.mcreator.superbwarfare.client.tooltip.component.GunImageComponent; +import net.mcreator.superbwarfare.tools.ItemNBTTool; +import net.mcreator.superbwarfare.tools.TooltipTool; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraftforge.common.capabilities.ForgeCapabilities; + +import java.text.DecimalFormat; +import java.util.concurrent.atomic.AtomicBoolean; + +public class ClientSentinelImageTooltip extends ClientEnergyImageTooltip { + + public ClientSentinelImageTooltip(GunImageComponent tooltip) { + super(tooltip); + } + + @Override + protected Component getDamageComponent() { + AtomicBoolean flag = new AtomicBoolean(false); + + stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( + e -> flag.set(e.getEnergyStored() > 0) + ); + + if (flag.get()) { + double damage = (ItemNBTTool.getDouble(stack, "damage", 0) + + ItemNBTTool.getDouble(stack, "sentinelChargeDamage", 0)) + * TooltipTool.perkDamage(stack); + return Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) + .append(Component.literal("").withStyle(ChatFormatting.RESET)) + .append(Component.literal(new DecimalFormat("##.#").format(damage) + (TooltipTool.heBullet(stack) ? " + " + new DecimalFormat("##.#") + .format(0.8 * damage * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")) + .withStyle(ChatFormatting.AQUA).withStyle(ChatFormatting.BOLD)); + } else { + double damage = ItemNBTTool.getDouble(stack, "damage", 0) * TooltipTool.perkDamage(stack); + return Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) + .append(Component.literal("").withStyle(ChatFormatting.RESET)) + .append(Component.literal(new DecimalFormat("##.#").format(damage) + (TooltipTool.heBullet(stack) ? new DecimalFormat("##.#") + .format(0.4 * damage * (1 + 0.1 * TooltipTool.heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN)); + } + } +} diff --git a/src/main/java/net/mcreator/superbwarfare/client/tooltip/component/SentinelImageComponent.java b/src/main/java/net/mcreator/superbwarfare/client/tooltip/component/SentinelImageComponent.java new file mode 100644 index 000000000..3041a0fb4 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/client/tooltip/component/SentinelImageComponent.java @@ -0,0 +1,19 @@ +package net.mcreator.superbwarfare.client.tooltip.component; + +import net.minecraft.world.item.ItemStack; + +public class SentinelImageComponent extends GunImageComponent { + + public int width; + public int height; + public ItemStack stack; + + public SentinelImageComponent(int width, int height, ItemStack stack) { + super(width, height, stack); + } + + public SentinelImageComponent(ItemStack stack) { + this(32, 16, stack); + } + +} \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java index 054f157c3..1a674f43e 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java @@ -3,6 +3,7 @@ package net.mcreator.superbwarfare.item.gun.sniper; import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.client.PoseTool; import net.mcreator.superbwarfare.client.renderer.item.SentinelItemRenderer; +import net.mcreator.superbwarfare.client.tooltip.component.SentinelImageComponent; import net.mcreator.superbwarfare.energy.ItemEnergyProvider; import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; @@ -14,27 +15,26 @@ import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.RarityTool; -import net.mcreator.superbwarfare.tools.TooltipTool; import net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.InteractionHand; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; +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 net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import net.minecraftforge.client.extensions.common.IClientItemExtensions; import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.capabilities.ICapabilityProvider; +import org.jetbrains.annotations.NotNull; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; @@ -44,13 +44,14 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; -import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; import java.util.function.Supplier; public class SentinelItem extends GunItem implements GeoItem, AnimatedItem { + private final Supplier energyCapacity; private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); @@ -175,11 +176,6 @@ public class SentinelItem extends GunItem implements GeoItem, AnimatedItem { return this.cache; } - @Override - public void appendHoverText(ItemStack stack, Level world, List list, TooltipFlag flag) { - TooltipTool.addSentinelTips(list, stack); - } - @Override public void inventoryTick(ItemStack itemStack, Level world, Entity entity, int slot, boolean selected) { super.inventoryTick(itemStack, world, entity, slot, selected); @@ -220,7 +216,7 @@ public class SentinelItem extends GunItem implements GeoItem, AnimatedItem { @Override public ResourceLocation getGunIcon() { - return new ResourceLocation(ModUtils.MODID, "textures/gun_icon/sentinel_icon.png"); + return ModUtils.loc("textures/gun_icon/sentinel_icon.png"); } @Override @@ -232,4 +228,10 @@ public class SentinelItem extends GunItem implements GeoItem, AnimatedItem { public boolean canApplyPerk(Perk perk) { return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk); } + + @Override + public @NotNull Optional getTooltipImage(@NotNull ItemStack pStack) { + return Optional.of(new SentinelImageComponent(pStack)); + } + } \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java index a6e21d103..0c5b863de 100644 --- a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java +++ b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java @@ -1,21 +1,14 @@ package net.mcreator.superbwarfare.tools; import net.mcreator.superbwarfare.init.ModPerks; -import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.perk.AmmoPerk; import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.PerkHelper; -import net.minecraft.ChatFormatting; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import java.text.DecimalFormat; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; public class TooltipTool { @@ -46,178 +39,4 @@ public class TooltipTool { return 0; } - private static void addRpmTips(List tooltip, ItemStack stack) { - tooltip.add(Component.translatable("des.superbwarfare.tips.rpm").withStyle(ChatFormatting.GRAY) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal(new DecimalFormat("##").format(ItemNBTTool.getDouble(stack, "rpm", 0) + ItemNBTTool.getDouble(stack, "customRpm", 0))).withStyle(ChatFormatting.GREEN))); - } - - private static void addLevelTips(List tooltip, ItemStack stack) { - int level = ItemNBTTool.getInt(stack, "Level", 0); - double rate = ItemNBTTool.getDouble(stack, "Exp", 0) / (20 * Math.pow(level, 2) + 160 * level + 20); - - ChatFormatting formatting; - if (level < 10) { - formatting = ChatFormatting.WHITE; - } else if (level < 20) { - formatting = ChatFormatting.AQUA; - } else if (level < 30) { - formatting = ChatFormatting.LIGHT_PURPLE; - } else if (level < 40) { - formatting = ChatFormatting.GOLD; - } else { - formatting = ChatFormatting.RED; - } - - tooltip.add(Component.translatable("des.superbwarfare.tips.level").withStyle(ChatFormatting.GRAY) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal(level + " " + new DecimalFormat("##.##").format(rate * 100) + "%").withStyle(formatting).withStyle(ChatFormatting.BOLD))); - - int upgradePoint = Mth.floor(ItemNBTTool.getDouble(stack, "UpgradePoint", 0)); - - tooltip.add(Component.translatable("des.superbwarfare.tips.upgrade_point").withStyle(ChatFormatting.GRAY) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal(String.valueOf(upgradePoint)).withStyle(ChatFormatting.GRAY).withStyle(ChatFormatting.BOLD))); - - } - - private static void addBypassTips(List tooltip, ItemStack stack) { - double perkBypassArmorRate = 0; - var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); - - if (perk instanceof AmmoPerk ammoPerk) { - int level = PerkHelper.getItemPerkLevel(perk, stack); - perkBypassArmorRate = ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0); - } - double byPassRate = Math.max(ItemNBTTool.getDouble(stack, "BypassesArmor", 0) + perkBypassArmorRate, 0); - - tooltip.add(Component.translatable("des.superbwarfare.tips.bypass").withStyle(ChatFormatting.GRAY) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal(new DecimalFormat("##.##").format(byPassRate * 100) + "%").withStyle(ChatFormatting.GOLD).withStyle(ChatFormatting.BOLD))); - } - - private static void addPerkTips(List tooltip, ItemStack stack) { - CompoundTag ammoTag = PerkHelper.getPerkTag(stack, Perk.Type.AMMO); - CompoundTag functionalTag = PerkHelper.getPerkTag(stack, Perk.Type.FUNCTIONAL); - CompoundTag damageTag = PerkHelper.getPerkTag(stack, Perk.Type.DAMAGE); - - if (!ammoTag.isEmpty() || !functionalTag.isEmpty() || !damageTag.isEmpty()) { - tooltip.add(Component.literal("")); - tooltip.add(Component.translatable("perk.superbwarfare.tips").withStyle(ChatFormatting.GOLD)); - } - - if (!ammoTag.isEmpty()) { - var ids = ammoTag.getString("id").split(":"); - if (ids.length <= 1) return; - String id = ids[1]; - var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); - tooltip.add(Component.translatable("perk.superbwarfare.slot_Ammo").withStyle(ChatFormatting.YELLOW) - .append(Component.literal(" >> ")) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.WHITE)) - .append(Component.literal(" Lvl. " + ammoTag.getInt("level")).withStyle(ChatFormatting.WHITE))); - addHideText(tooltip, Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY)); - if (perk instanceof AmmoPerk ammoPerk) { - if (ammoPerk.damageRate < 1) { - addHideText(tooltip, Component.translatable("des.superbwarfare.perk_damage_reduce").withStyle(ChatFormatting.RED)); - } else if (ammoPerk.damageRate > 1) { - addHideText(tooltip, Component.translatable("des.superbwarfare.perk_damage_plus").withStyle(ChatFormatting.GREEN)); - } - - if (ammoPerk.speedRate < 1) { - addHideText(tooltip, Component.translatable("des.superbwarfare.perk_speed_reduce").withStyle(ChatFormatting.RED)); - } else if (ammoPerk.speedRate > 1) { - addHideText(tooltip, Component.translatable("des.superbwarfare.perk_speed_plus").withStyle(ChatFormatting.GREEN)); - } - - if (ammoPerk.slug && stack.is(ModTags.Items.SHOTGUN)) { - addHideText(tooltip, Component.translatable("des.superbwarfare.perk_slug").withStyle(ChatFormatting.YELLOW)); - } - } - } - - if (!functionalTag.isEmpty()) { - var ids = functionalTag.getString("id").split(":"); - if (ids.length <= 1) return; - String id = ids[1]; - tooltip.add(Component.translatable("perk.superbwarfare.slot_Functional").withStyle(ChatFormatting.GREEN) - .append(Component.literal(" >> ")) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.WHITE)) - .append(Component.literal(" Lvl. " + functionalTag.getInt("level")).withStyle(ChatFormatting.WHITE))); - addHideText(tooltip, Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY)); - } - - if (!damageTag.isEmpty()) { - var ids = damageTag.getString("id").split(":"); - if (ids.length <= 1) return; - String id = ids[1]; - tooltip.add(Component.translatable("perk.superbwarfare.slot_Damage").withStyle(ChatFormatting.RED) - .append(Component.literal(" >> ")) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.translatable("item.superbwarfare." + id).withStyle(ChatFormatting.WHITE)) - .append(Component.literal(" Lvl. " + damageTag.getInt("level")).withStyle(ChatFormatting.WHITE))); - addHideText(tooltip, Component.translatable("des.superbwarfare." + id).withStyle(ChatFormatting.GRAY)); - } - } - - public static void addSentinelTips(List tooltip, ItemStack stack) { - tooltip.add(Component.literal("")); - - AtomicBoolean flag = new AtomicBoolean(false); - - stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( - e -> flag.set(e.getEnergyStored() > 0) - ); - - if (flag.get()) { - double damage = (ItemNBTTool.getDouble(stack, "damage", 0) + - ItemNBTTool.getDouble(stack, "sentinelChargeDamage", 0)) - * perkDamage(stack); - - tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal(new DecimalFormat("##.#").format(damage) + (heBullet(stack) ? " + " + new DecimalFormat("##.#").format(0.8 * damage * (1 + 0.1 * heBulletLevel(stack))) : "")).withStyle(ChatFormatting.AQUA).withStyle(ChatFormatting.BOLD))); - } else { - double damage = ItemNBTTool.getDouble(stack, "damage", 0) * perkDamage(stack); - - tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal(new DecimalFormat("##.#").format(damage) + (heBullet(stack) ? new DecimalFormat("##.#").format(0.4 * damage * (1 + 0.1 * heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN))); - } - - if (stack.is(ModTags.Items.IS_AUTO_WEAPON)) { - addRpmTips(tooltip, stack); - } - addLevelTips(tooltip, stack); - addBypassTips(tooltip, stack); - addPerkTips(tooltip, stack); - - stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( - e -> tooltip.add(Component.literal(e.getEnergyStored() + " / " + e.getMaxEnergyStored() + " FE").withStyle(ChatFormatting.GRAY)) - ); - } - - public static void addTaserTips(List tooltip, ItemStack stack) { - tooltip.add(Component.literal("")); - - double damage = ItemNBTTool.getDouble(stack, "damage", 0); - - tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal(new DecimalFormat("##.#").format(damage)).withStyle(ChatFormatting.GREEN))); - - addLevelTips(tooltip, stack); - int upgradePoint = Mth.floor(ItemNBTTool.getDouble(stack, "UpgradePoint", 0)); - - tooltip.add(Component.translatable("des.superbwarfare.tips.upgrade_point").withStyle(ChatFormatting.GRAY) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal(String.valueOf(upgradePoint)).withStyle(ChatFormatting.GRAY).withStyle(ChatFormatting.BOLD))); - addPerkTips(tooltip, stack); - - stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( - e -> tooltip.add(Component.literal(e.getEnergyStored() + " / " + e.getMaxEnergyStored() + " FE").withStyle(ChatFormatting.GRAY)) - ); - } - }