添加FE component

This commit is contained in:
17146 2024-11-22 21:19:48 +08:00
parent 221eed727f
commit f0e6e4f100
4 changed files with 144 additions and 10 deletions

View file

@ -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.BocekImageComponent;
import net.mcreator.superbwarfare.client.tooltip.component.GunImageComponent; import net.mcreator.superbwarfare.client.tooltip.component.GunImageComponent;
import net.mcreator.superbwarfare.client.tooltip.component.ShotgunImageComponent; 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.api.distmarker.Dist;
import net.minecraftforge.client.event.RegisterClientTooltipComponentFactoriesEvent; import net.minecraftforge.client.event.RegisterClientTooltipComponentFactoriesEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
@ -17,6 +18,7 @@ public class ClientRenderHandler {
event.register(GunImageComponent.class, ClientGunImageTooltip::new); event.register(GunImageComponent.class, ClientGunImageTooltip::new);
event.register(ShotgunImageComponent.class, ClientShotgunImageTooltip::new); event.register(ShotgunImageComponent.class, ClientShotgunImageTooltip::new);
event.register(BocekImageComponent.class, ClientBocekImageTooltip::new); event.register(BocekImageComponent.class, ClientBocekImageTooltip::new);
event.register(EnergyImageComponent.class, ClientEnergyImageTooltip::new);
} }
} }

View file

@ -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;
}
}

View file

@ -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);
}
}

View file

@ -3,6 +3,7 @@ package net.mcreator.superbwarfare.item.gun.special;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool; import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.TaserItemRenderer; 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.energy.ItemEnergyProvider;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; 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.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.tools.TooltipTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.InteractionHand; 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.Entity;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player; 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.minecraft.world.level.Level;
import net.minecraftforge.client.extensions.common.IClientItemExtensions; import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.common.capabilities.ICapabilityProvider;
import org.jetbrains.annotations.NotNull;
import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager; 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.core.object.PlayState;
import software.bernie.geckolib.util.GeckoLibUtil; import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.List; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Supplier; import java.util.function.Supplier;
public class TaserItem extends GunItem implements GeoItem, AnimatedItem { public class TaserItem extends GunItem implements GeoItem, AnimatedItem {
public static final int MAX_ENERGY = 12000; public static final int MAX_ENERGY = 12000;
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
@ -206,7 +211,7 @@ public class TaserItem extends GunItem implements GeoItem, AnimatedItem {
@Override @Override
public ResourceLocation getGunIcon() { public ResourceLocation getGunIcon() {
return new ResourceLocation(ModUtils.MODID, "textures/gun_icon/taser_icon.png"); return ModUtils.loc("textures/gun_icon/taser_icon.png");
} }
@Override @Override
@ -214,11 +219,6 @@ public class TaserItem extends GunItem implements GeoItem, AnimatedItem {
return "TASER"; return "TASER";
} }
@Override
public void appendHoverText(ItemStack stack, Level world, List<Component> list, TooltipFlag flag) {
TooltipTool.addTaserTips(list, stack);
}
@Override @Override
public boolean canApplyPerk(Perk perk) { public boolean canApplyPerk(Perk perk) {
return switch (perk.type) { return switch (perk.type) {
@ -227,4 +227,10 @@ public class TaserItem extends GunItem implements GeoItem, AnimatedItem {
case DAMAGE -> perk == ModPerks.VOLT_OVERLOAD.get(); case DAMAGE -> perk == ModPerks.VOLT_OVERLOAD.get();
}; };
} }
@Override
public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) {
return Optional.of(new EnergyImageComponent(pStack));
}
} }