替换泰瑟木仓能量为FE

This commit is contained in:
Atsuihsio 2024-09-09 16:26:21 +08:00
parent 9669ea45fe
commit 5712ab0894
4 changed files with 92 additions and 19 deletions

View file

@ -1,18 +1,22 @@
package net.mcreator.superbwarfare.client.model.item; package net.mcreator.superbwarfare.client.model.item;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.init.ModPerks;
import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.gun.special.TaserItem; 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.client.Minecraft;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; 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.animatable.model.CoreGeoBone;
import software.bernie.geckolib.core.animation.AnimationState; import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.model.GeoModel; import software.bernie.geckolib.model.GeoModel;
import java.util.concurrent.atomic.AtomicInteger;
public class TaserItemModel extends GeoModel<TaserItem> { public class TaserItemModel extends GeoModel<TaserItem> {
public static final String TAG_POWER = "Power"; public static final String TAG_POWER = "Power";
@ -45,9 +49,16 @@ public class TaserItemModel extends GeoModel<TaserItem> {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return; 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.setScaleX(1);
bluecover.setScaleY(1); bluecover.setScaleY(1);
bluecover.setScaleZ(1); bluecover.setScaleZ(1);

View file

@ -4,6 +4,7 @@ import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.renderer.item.TaserItemRenderer; 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.ModItems;
import net.mcreator.superbwarfare.init.ModPerks; import net.mcreator.superbwarfare.init.ModPerks;
import net.mcreator.superbwarfare.init.ModSounds; 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.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.ItemNBTTool;
import net.mcreator.superbwarfare.tools.PoseTool; import net.mcreator.superbwarfare.tools.PoseTool;
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.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.util.Mth;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.effect.MobEffects; import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.Entity; 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.AttributeModifier;
import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item; import net.minecraft.world.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.ICapabilityProvider;
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;
@ -46,29 +47,50 @@ 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.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Supplier;
public class TaserItem extends GunItem implements GeoItem, AnimatedItem { public class TaserItem extends GunItem implements GeoItem, AnimatedItem {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public String animationProcedure = "empty"; public String animationProcedure = "empty";
public static ItemDisplayContext transformType; public static ItemDisplayContext transformType;
public static final String TAG_POWER = "Power"; private final Supplier<Integer> energyCapacity;
public static final int MAX_POWER_SIZE = 1200;
public TaserItem() { public TaserItem() {
super(new Item.Properties().stacksTo(1).rarity(Rarity.COMMON)); super(new Item.Properties().stacksTo(1).rarity(Rarity.COMMON));
this.energyCapacity = () -> 12000;
} }
@Override @Override
public boolean isBarVisible(ItemStack pStack) { 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 @Override
public int getBarWidth(ItemStack pStack) { 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 @Override
@ -193,9 +215,16 @@ public class TaserItem extends GunItem implements GeoItem, AnimatedItem {
} }
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.SUPER_RECHARGE.get(), stack); int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.SUPER_RECHARGE.get(), stack);
if (ItemNBTTool.getInt(stack, TAG_POWER, 1200) < MAX_POWER_SIZE) { // var tag = stack.getOrCreateTag();
ItemNBTTool.setInt(stack, TAG_POWER, Mth.clamp(ItemNBTTool.getInt(stack, TAG_POWER, 1200) + 1 + perkLevel, 0, MAX_POWER_SIZE)); 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) { protected static boolean check(ItemStack stack) {
@ -223,6 +252,11 @@ 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) {

View file

@ -11,7 +11,6 @@ import net.mcreator.superbwarfare.network.ModVariables;
import net.mcreator.superbwarfare.perk.AmmoPerk; import net.mcreator.superbwarfare.perk.AmmoPerk;
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.ItemNBTTool;
import net.mcreator.superbwarfare.tools.ParticleTool; import net.mcreator.superbwarfare.tools.ParticleTool;
import net.mcreator.superbwarfare.tools.SeekTool; import net.mcreator.superbwarfare.tools.SeekTool;
import net.mcreator.superbwarfare.tools.SoundTool; 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.ItemStack;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import org.joml.Vector3d; import org.joml.Vector3d;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Supplier; import java.util.function.Supplier;
public class FireMessage { public class FireMessage {
@ -344,8 +345,14 @@ public class FireMessage {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.getOrCreateTag().getBoolean("reloading")) { 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 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); player.getCooldowns().addCooldown(stack.getItem(), 5);
@ -375,7 +382,11 @@ public class FireMessage {
stack.getOrCreateTag().putInt("fire_animation", 4); stack.getOrCreateTag().putInt("fire_animation", 4);
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); 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);
} }
} }
} }

View file

@ -192,6 +192,23 @@ public class TooltipTool {
); );
} }
public static void addTaserTips(List<Component> 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<Component> tooltip, String id) { public static void addMonitorTips(List<Component> tooltip, String id) {
if (id.equals("none")) return; if (id.equals("none")) return;