添加哨兵component

This commit is contained in:
17146 2024-11-22 21:35:26 +08:00
parent f0e6e4f100
commit 99353b20ea
6 changed files with 78 additions and 195 deletions

View file

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

View file

@ -33,6 +33,7 @@ public class ClientEnergyImageTooltip extends ClientGunImageTooltip {
if (shouldRenderEnergyTooltip()) {
yo += 10;
renderEnergyTooltip(font, guiGraphics, x, y + yo);
yo += 10;
}
if (shouldRenderEditTooltip()) {

View file

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

View file

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

View file

@ -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<Integer> 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<Component> 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<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) {
return Optional.of(new SentinelImageComponent(pStack));
}
}

View file

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