From 5712ab089445f01941431fc96ee500fc3d1ca0e5 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Mon, 9 Sep 2024 16:26:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E6=B3=B0=E7=91=9F=E6=9C=A8?= =?UTF-8?q?=E4=BB=93=E8=83=BD=E9=87=8F=E4=B8=BAFE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/item/TaserItemModel.java | 17 +++++- .../item/gun/special/TaserItem.java | 60 +++++++++++++++---- .../network/message/FireMessage.java | 17 +++++- .../superbwarfare/tools/TooltipTool.java | 17 ++++++ 4 files changed, 92 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/mcreator/superbwarfare/client/model/item/TaserItemModel.java b/src/main/java/net/mcreator/superbwarfare/client/model/item/TaserItemModel.java index c7d4acdf4..4a458a255 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/model/item/TaserItemModel.java +++ b/src/main/java/net/mcreator/superbwarfare/client/model/item/TaserItemModel.java @@ -1,18 +1,22 @@ package net.mcreator.superbwarfare.client.model.item; import net.mcreator.superbwarfare.ModUtils; +import net.mcreator.superbwarfare.init.ModPerks; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.item.gun.special.TaserItem; -import net.mcreator.superbwarfare.tools.ItemNBTTool; +import net.mcreator.superbwarfare.perk.PerkHelper; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.capabilities.ForgeCapabilities; import software.bernie.geckolib.core.animatable.model.CoreGeoBone; import software.bernie.geckolib.core.animation.AnimationState; import software.bernie.geckolib.model.GeoModel; +import java.util.concurrent.atomic.AtomicInteger; + public class TaserItemModel extends GeoModel { public static final String TAG_POWER = "Power"; @@ -45,9 +49,16 @@ public class TaserItemModel extends GeoModel { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return; - bar.setScaleX((float) ItemNBTTool.getInt(stack, TAG_POWER, 1200) / 1200); + AtomicInteger energy = new AtomicInteger(0); + stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( + e -> energy.set(e.getEnergyStored()) + ); - if (ItemNBTTool.getInt(stack, TAG_POWER, 1200) >= 400) { + int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), stack); + + bar.setScaleX((float) energy.get() / 12000); + + if (energy.get() >= 2000 + 200 * perkLevel) { bluecover.setScaleX(1); bluecover.setScaleY(1); bluecover.setScaleZ(1); 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 5ab039972..274376b8d 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 @@ -4,6 +4,7 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.client.renderer.item.TaserItemRenderer; +import net.mcreator.superbwarfare.energy.ItemEnergyProvider; import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModPerks; import net.mcreator.superbwarfare.init.ModSounds; @@ -13,15 +14,16 @@ 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.ItemNBTTool; import net.mcreator.superbwarfare.tools.PoseTool; +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.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; @@ -31,12 +33,11 @@ import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Player; -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.item.*; 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 software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; @@ -46,29 +47,50 @@ 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.Set; import java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; +import java.util.function.Supplier; public class TaserItem extends GunItem implements GeoItem, AnimatedItem { private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); public String animationProcedure = "empty"; public static ItemDisplayContext transformType; - public static final String TAG_POWER = "Power"; - public static final int MAX_POWER_SIZE = 1200; + private final Supplier energyCapacity; public TaserItem() { super(new Item.Properties().stacksTo(1).rarity(Rarity.COMMON)); + this.energyCapacity = () -> 12000; } @Override public boolean isBarVisible(ItemStack pStack) { - return ItemNBTTool.getInt(pStack, TAG_POWER, 1200) != 1200; + if (!pStack.getCapability(ForgeCapabilities.ENERGY).isPresent()) { + return false; + } + + AtomicInteger energy = new AtomicInteger(0); + pStack.getCapability(ForgeCapabilities.ENERGY).ifPresent( + e -> energy.set(e.getEnergyStored()) + ); + return energy.get() != 0; } @Override public int getBarWidth(ItemStack pStack) { - return Math.round((float) ItemNBTTool.getInt(pStack, TAG_POWER, 1200) * 13.0F / 1200F); + AtomicInteger energy = new AtomicInteger(0); + pStack.getCapability(ForgeCapabilities.ENERGY).ifPresent( + e -> energy.set(e.getEnergyStored()) + ); + + return Math.round((float) energy.get() * 13.0F / 12000F); + } + + @Override + public ICapabilityProvider initCapabilities(ItemStack stack, CompoundTag tag) { + return new ItemEnergyProvider(stack, energyCapacity.get()); } @Override @@ -193,9 +215,16 @@ public class TaserItem extends GunItem implements GeoItem, AnimatedItem { } int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.SUPER_RECHARGE.get(), stack); - if (ItemNBTTool.getInt(stack, TAG_POWER, 1200) < MAX_POWER_SIZE) { - ItemNBTTool.setInt(stack, TAG_POWER, Mth.clamp(ItemNBTTool.getInt(stack, TAG_POWER, 1200) + 1 + perkLevel, 0, MAX_POWER_SIZE)); - } +// var tag = stack.getOrCreateTag(); + stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( + energy -> { + energy.receiveEnergy(10 + 10 * perkLevel, false); +// int energyStored = energy.getEnergyStored(); +// if (energyStored > 0) { +// energy.receiveEnergy(10, false); +// } + } + ); } protected static boolean check(ItemStack stack) { @@ -223,6 +252,11 @@ 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) { diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java index 30905aec3..2d4120992 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java @@ -11,7 +11,6 @@ import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.perk.AmmoPerk; import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.PerkHelper; -import net.mcreator.superbwarfare.tools.ItemNBTTool; import net.mcreator.superbwarfare.tools.ParticleTool; import net.mcreator.superbwarfare.tools.SeekTool; import net.mcreator.superbwarfare.tools.SoundTool; @@ -31,9 +30,11 @@ import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; +import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.network.NetworkEvent; import org.joml.Vector3d; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Supplier; public class FireMessage { @@ -344,8 +345,14 @@ public class FireMessage { ItemStack stack = player.getMainHandItem(); if (!stack.getOrCreateTag().getBoolean("reloading")) { + int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.VOLT_OVERLOAD.get(), stack); + AtomicBoolean flag = new AtomicBoolean(false); + stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( + iEnergyStorage -> flag.set(iEnergyStorage.getEnergyStored() > 2000 + 200 * perkLevel) + ); + if (!player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getInt("ammo") > 0 - && ItemNBTTool.getInt(stack, "Power", 1200) > 400) { + && flag.get()) { player.getCooldowns().addCooldown(stack.getItem(), 5); @@ -375,7 +382,11 @@ public class FireMessage { stack.getOrCreateTag().putInt("fire_animation", 4); stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); - ItemNBTTool.setInt(stack, "Power", ItemNBTTool.getInt(stack, "Power", 1200) - 400); + + stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( + energy -> energy.extractEnergy(2000 + 200 * perkLevel, false) + ); +// ItemNBTTool.setInt(stack, "Power", ItemNBTTool.getInt(stack, "Power", 1200) - 400); } } } diff --git a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java index 6e5e748e4..37df979ab 100644 --- a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java +++ b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java @@ -192,6 +192,23 @@ public class TooltipTool { ); } + public static void addTaserTips(List tooltip, ItemStack stack) { + tooltip.add(Component.literal("")); + + double damage = ItemNBTTool.getDouble(stack, "damage", 0) + * ItemNBTTool.getDouble(stack, "levelDamageMultiple", 1); + + 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))); + + addPerkTips(tooltip, stack); + + stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( + e -> tooltip.add(Component.literal(e.getEnergyStored() + " / " + e.getMaxEnergyStored() + " FE").withStyle(ChatFormatting.GRAY)) + ); + } + public static void addMonitorTips(List tooltip, String id) { if (id.equals("none")) return;