diff --git a/src/main/java/net/mcreator/superbwarfare/client/ClientRenderHandler.java b/src/main/java/net/mcreator/superbwarfare/client/ClientRenderHandler.java index a76126052..68259e6ad 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/ClientRenderHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/client/ClientRenderHandler.java @@ -4,6 +4,7 @@ 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.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RegisterClientTooltipComponentFactoriesEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -17,6 +18,7 @@ public class ClientRenderHandler { event.register(GunImageComponent.class, ClientGunImageTooltip::new); event.register(ShotgunImageComponent.class, ClientShotgunImageTooltip::new); event.register(BocekImageComponent.class, ClientBocekImageTooltip::new); + event.register(EnergyImageComponent.class, ClientEnergyImageTooltip::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 new file mode 100644 index 000000000..970a0fd87 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/client/tooltip/ClientEnergyImageTooltip.java @@ -0,0 +1,107 @@ +package net.mcreator.superbwarfare.client.tooltip; + +import net.mcreator.superbwarfare.client.tooltip.component.GunImageComponent; +import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.util.Mth; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import org.jetbrains.annotations.NotNull; + +public class ClientEnergyImageTooltip extends ClientGunImageTooltip { + + public ClientEnergyImageTooltip(GunImageComponent tooltip) { + super(tooltip); + } + + @Override + public void renderImage(@NotNull Font font, int x, int y, GuiGraphics guiGraphics) { + guiGraphics.pose().pushPose(); + + renderDamageAndRpmTooltip(font, guiGraphics, x, y); + renderLevelAndUpgradePointTooltip(font, guiGraphics, x, y + 10); + + int yo = 20; + if (shouldRenderBypassAndHeadshotTooltip()) { + renderBypassAndHeadshotTooltip(font, guiGraphics, x, y + yo); + yo += 10; + } + + if (shouldRenderEnergyTooltip()) { + yo += 10; + renderEnergyTooltip(font, guiGraphics, x, y + yo); + } + + if (shouldRenderEditTooltip()) { + renderWeaponEditTooltip(font, guiGraphics, x, y + yo); + yo += 20; + } + + if (shouldRenderPerks()) { + if (!Screen.hasShiftDown()) { + renderPerksShortcut(font, guiGraphics, x, y + yo); + } else { + renderPerks(font, guiGraphics, x, y + yo); + } + } + + guiGraphics.pose().popPose(); + } + + protected boolean shouldRenderEnergyTooltip() { + return stack.getCapability(ForgeCapabilities.ENERGY).isPresent() && stack.getCapability(ForgeCapabilities.ENERGY).resolve().isPresent(); + } + + protected void renderEnergyTooltip(Font font, GuiGraphics guiGraphics, int x, int y) { + guiGraphics.drawString(font, getEnergyComponent(), x, y, 0xFFFFFF); + } + + protected Component getEnergyComponent() { + assert stack.getCapability(ForgeCapabilities.ENERGY).resolve().isPresent(); + var storage = stack.getCapability(ForgeCapabilities.ENERGY).resolve().get(); + int energy = storage.getEnergyStored(); + int maxEnergy = storage.getMaxEnergyStored(); + float percentage = Mth.clamp((float) energy / maxEnergy, 0, 1); + MutableComponent component = Component.literal(""); + + ChatFormatting format; + if (percentage <= .2f) { + format = ChatFormatting.RED; + } else if (percentage <= .6f) { + format = ChatFormatting.YELLOW; + } else { + format = ChatFormatting.GREEN; + } + + int count = (int) (percentage * 50); + for (int i = 0; i < count; i++) { + component.append(Component.literal("|").withStyle(format)); + } + component.append(Component.literal("").withStyle(ChatFormatting.RESET)); + for (int i = 0; i < 50 - count; i++) { + component.append(Component.literal("|").withStyle(ChatFormatting.GRAY)); + } + + component.append(Component.literal(" " + energy + "/" + maxEnergy + " FE").withStyle(ChatFormatting.GRAY)); + + return component; + } + + @Override + public int getHeight() { + int height = super.getHeight(); + if (shouldRenderEnergyTooltip()) height += 20; + return height; + } + + @Override + public int getWidth(@NotNull Font font) { + int width = super.getWidth(font); + if (shouldRenderEnergyTooltip()) + width = Math.max(width, font.width(getEnergyComponent().getVisualOrderText()) + 10); + return width; + } +} diff --git a/src/main/java/net/mcreator/superbwarfare/client/tooltip/component/EnergyImageComponent.java b/src/main/java/net/mcreator/superbwarfare/client/tooltip/component/EnergyImageComponent.java new file mode 100644 index 000000000..9c9684bff --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/client/tooltip/component/EnergyImageComponent.java @@ -0,0 +1,19 @@ +package net.mcreator.superbwarfare.client.tooltip.component; + +import net.minecraft.world.item.ItemStack; + +public class EnergyImageComponent extends GunImageComponent { + + public int width; + public int height; + public ItemStack stack; + + public EnergyImageComponent(int width, int height, ItemStack stack) { + super(width, height, stack); + } + + public EnergyImageComponent(ItemStack stack) { + this(32, 16, stack); + } + +} \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/special/TaserItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/special/TaserItem.java index aa903b4f4..4748761f3 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/special/TaserItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/special/TaserItem.java @@ -3,6 +3,7 @@ package net.mcreator.superbwarfare.item.gun.special; import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.client.PoseTool; import net.mcreator.superbwarfare.client.renderer.item.TaserItemRenderer; +import net.mcreator.superbwarfare.client.tooltip.component.EnergyImageComponent; import net.mcreator.superbwarfare.energy.ItemEnergyProvider; import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; @@ -14,13 +15,11 @@ import net.mcreator.superbwarfare.item.gun.GunItem; import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.tools.GunsTool; -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; @@ -28,11 +27,16 @@ import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.*; +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.Rarity; 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; @@ -42,13 +46,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 TaserItem extends GunItem implements GeoItem, AnimatedItem { + public static final int MAX_ENERGY = 12000; private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); @@ -206,7 +211,7 @@ public class TaserItem extends GunItem implements GeoItem, AnimatedItem { @Override public ResourceLocation getGunIcon() { - return new ResourceLocation(ModUtils.MODID, "textures/gun_icon/taser_icon.png"); + return ModUtils.loc("textures/gun_icon/taser_icon.png"); } @Override @@ -214,11 +219,6 @@ public class TaserItem extends GunItem implements GeoItem, AnimatedItem { return "TASER"; } - @Override - public void appendHoverText(ItemStack stack, Level world, List list, TooltipFlag flag) { - TooltipTool.addTaserTips(list, stack); - } - @Override public boolean canApplyPerk(Perk perk) { return switch (perk.type) { @@ -227,4 +227,10 @@ public class TaserItem extends GunItem implements GeoItem, AnimatedItem { case DAMAGE -> perk == ModPerks.VOLT_OVERLOAD.get(); }; } + + @Override + public @NotNull Optional getTooltipImage(@NotNull ItemStack pStack) { + return Optional.of(new EnergyImageComponent(pStack)); + } + }