From 6a715f7721734ca8590cdcfb10885457417b3f15 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Thu, 8 Aug 2024 04:23:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0perk=E7=9B=B8=E5=85=B3tool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/event/TempEventHandler.java | 28 ++++++++++++ .../net/mcreator/superbwarfare/perk/Perk.java | 2 +- .../superbwarfare/perk/PerkHelper.java | 16 ++++++- .../superbwarfare/tools/TooltipTool.java | 43 +++++++++++++++++++ .../assets/superbwarfare/lang/en_us.json | 7 +-- .../assets/superbwarfare/lang/zh_cn.json | 7 +-- 6 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 src/main/java/net/mcreator/superbwarfare/event/TempEventHandler.java diff --git a/src/main/java/net/mcreator/superbwarfare/event/TempEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/TempEventHandler.java new file mode 100644 index 000000000..e9be47cab --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/event/TempEventHandler.java @@ -0,0 +1,28 @@ +package net.mcreator.superbwarfare.event; + +import net.mcreator.superbwarfare.item.PerkItem; +import net.mcreator.superbwarfare.perk.PerkHelper; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.AnvilUpdateEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE) +public class TempEventHandler { + + @SubscribeEvent + public static void onAnvilUpdate(AnvilUpdateEvent event) { + ItemStack left = event.getLeft(); + ItemStack right = event.getRight(); + + if (right.getItem() instanceof PerkItem perkItem) { + ItemStack output = left.copy(); + + PerkHelper.setPerk(output, perkItem.getPerk()); + + event.setOutput(output); + event.setCost(10); + event.setMaterialCost(1); + } + } +} diff --git a/src/main/java/net/mcreator/superbwarfare/perk/Perk.java b/src/main/java/net/mcreator/superbwarfare/perk/Perk.java index ca9ddd5d8..750d3f5ef 100644 --- a/src/main/java/net/mcreator/superbwarfare/perk/Perk.java +++ b/src/main/java/net/mcreator/superbwarfare/perk/Perk.java @@ -11,7 +11,7 @@ public class Perk { public enum Type { AMMO("Ammo"), - FUNCTIONAL("Func"), + FUNCTIONAL("Functional"), DAMAGE("Damage"); private final String type; diff --git a/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java b/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java index 01825cba7..0ddd5656d 100644 --- a/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java +++ b/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java @@ -14,6 +14,9 @@ public class PerkHelper { private static final String TAG_PERK_LEVEL = "level"; private static final String TAG_PERK = "Perks"; + /** + * 把一个Perk封装成nbt进行存储 + */ public static CompoundTag makePerk(@Nullable ResourceLocation pId, int pLevel) { CompoundTag compoundtag = new CompoundTag(); compoundtag.putString(TAG_PERK_ID, String.valueOf(pId)); @@ -38,7 +41,7 @@ public class PerkHelper { @Nullable public static ResourceLocation getPerkId(Perk perk) { return ModPerks.PERKS.getEntries().stream() - .filter(p -> p.get().type == perk.type) + .filter(p -> p.get().descriptionId.equals(perk.descriptionId)) .findFirst() .map(RegistryObject::getId) .orElse(null); @@ -61,4 +64,15 @@ public class PerkHelper { return tag.getCompound(type.getName()); } + public static void setPerk(ItemStack stack, Perk perk, int level) { + CompoundTag perkTag = new CompoundTag(); + perkTag.put(perk.type.getName(), makePerk(getPerkId(perk), level)); + + stack.addTagElement(TAG_PERK, perkTag); + } + + public static void setPerk(ItemStack stack, Perk perk) { + setPerk(stack, perk, 1); + } + } diff --git a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java index 2bf1c4613..8d67dd20a 100644 --- a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java +++ b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java @@ -1,9 +1,12 @@ package net.mcreator.superbwarfare.tools; import net.mcreator.superbwarfare.entity.DroneEntity; +import net.mcreator.superbwarfare.perk.Perk; +import net.mcreator.superbwarfare.perk.PerkHelper; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -33,6 +36,7 @@ public class TooltipTool { addLevelTips(tooltip, stack); addBypassTips(tooltip, stack); + addPerkTips(tooltip, stack); } public static void addShotgunTips(List tooltip, ItemStack stack, int count) { @@ -78,7 +82,46 @@ public class TooltipTool { 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))); + } + // TODO 实现正确的nbt获取 + private static void addPerkTips(List 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); + + tooltip.add(Component.literal(damageTag.toString())); + + if (!ammoTag.isEmpty() || !functionalTag.isEmpty() || !damageTag.isEmpty()) { + tooltip.add(Component.translatable("perk.superbwarfare.tips").withStyle(ChatFormatting.WHITE)); + } + + if (!ammoTag.isEmpty()) { + 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." + ammoTag.getString("id")).withStyle(ChatFormatting.GRAY)) + .append(Component.literal("Lvl. " + ammoTag.getInt("level")).withStyle(ChatFormatting.GRAY))); + addHideText(tooltip, Component.translatable("perk.superbwarfare." + ammoTag.getString("id") + ".desc").withStyle(ChatFormatting.GRAY)); + } + + if (!functionalTag.isEmpty()) { + 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." + functionalTag.getString("id")).withStyle(ChatFormatting.GRAY)) + .append(Component.literal("Lvl. " + functionalTag.getInt("level")).withStyle(ChatFormatting.GRAY))); + addHideText(tooltip, Component.translatable("perk.superbwarfare." + functionalTag.getString("id") + ".desc").withStyle(ChatFormatting.GRAY)); + } + + if (!damageTag.isEmpty()) { + 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." + damageTag.getString("id")).withStyle(ChatFormatting.GRAY)) + .append(Component.literal("Lvl. " + damageTag.getInt("level")).withStyle(ChatFormatting.GRAY))); + addHideText(tooltip, Component.translatable("perk.superbwarfare." + damageTag.getString("id") + ".desc").withStyle(ChatFormatting.GRAY)); + } } public static void addBocekTips(List tooltip, ItemStack stack) { diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 6e2dbf380..caf49c586 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -177,10 +177,11 @@ "item.superbwarfare.kill_clip": "Kill Clip", + "perk.superbwarfare.tips": "[Perks]", "perk.superbwarfare.slot": "Type: ", - "perk.superbwarfare.slot_0": "Ammo Perk", - "perk.superbwarfare.slot_1": "Functional Perk", - "perk.superbwarfare.slot_2": "Damage Perk", + "perk.superbwarfare.slot_Ammo": "子弹模组", + "perk.superbwarfare.slot_Functional": "功能模组", + "perk.superbwarfare.slot_Damage": "伤害模组", "perk.superbwarfare.kill_clip.desc": "Increases the damage of weapon after dealing a final blow", "death.attack.gunfire": "%1$s was shoot by %2$s", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index da1318b7d..bb5f82b1e 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -177,10 +177,11 @@ "item.superbwarfare.kill_clip": "杀戮弹匣", + "perk.superbwarfare.tips": "[武器模组]", "perk.superbwarfare.slot": "类型: ", - "perk.superbwarfare.slot_0": "子弹模组", - "perk.superbwarfare.slot_1": "功能模组", - "perk.superbwarfare.slot_2": "伤害模组", + "perk.superbwarfare.slot_Ammo": "子弹模组", + "perk.superbwarfare.slot_Functional": "功能模组", + "perk.superbwarfare.slot_Damage": "伤害模组", "perk.superbwarfare.kill_clip.desc": "完成击杀后填装可提升武器伤害", "death.attack.gunfire": "%1$s被%2$s射爆了",