Răsfoiți Sursa

为物品显示其强化等级

LTCatt 6 ani în urmă
părinte
comite
1bde2baf7b

+ 35 - 0
src/main/java/com/hexdragon/corere/item/EnchantmentHelperRe.java

@@ -0,0 +1,35 @@
+package com.hexdragon.corere.item;
+
+import com.sun.istack.internal.NotNull;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.enchantment.EnchantmentHelper;
+import net.minecraft.item.EnchantedBookItem;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.nbt.ListNBT;
+
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class EnchantmentHelperRe {
+
+    // 获取物品的所有诅咒附魔
+    public static Map<Enchantment, Integer> getCurseEnchantments(@NotNull ItemStack stack) {
+        return EnchantmentHelper.getEnchantments(stack).entrySet().stream().filter((pair) -> pair.getKey().isCurse()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+    }
+
+    // 获取物品的所有非诅咒附魔
+    public static Map<Enchantment, Integer> getNonCurseEnchantments(@NotNull ItemStack stack) {
+        return EnchantmentHelper.getEnchantments(stack).entrySet().stream().filter((pair) -> !pair.getKey().isCurse()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+    }
+
+    // 获取物品的附魔强化等级
+    public static Integer getEnchantmentLevel(@NotNull ItemStack stack) {
+        int level = 0;
+        for (Map.Entry<Enchantment, Integer> entry : EnchantmentHelper.deserializeEnchantments(stack.getEnchantmentTagList()).entrySet()) {
+            if (!entry.getKey().isCurse()) level += entry.getValue();
+        }
+        return level;
+    }
+
+}

+ 13 - 3
src/main/java/com/hexdragon/enchre/mixin/item/ItemMixin.java

@@ -1,7 +1,9 @@
 package com.hexdragon.enchre.mixin.item;
 package com.hexdragon.enchre.mixin.item;
 
 
+import com.hexdragon.corere.item.EnchantmentHelperRe;
 import com.hexdragon.enchre.registry.RegMain;
 import com.hexdragon.enchre.registry.RegMain;
 import net.minecraft.block.BlockState;
 import net.minecraft.block.BlockState;
+import net.minecraft.enchantment.Enchantment;
 import net.minecraft.item.Item;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
 import net.minecraft.item.ItemStack;
 import net.minecraft.util.IItemProvider;
 import net.minecraft.util.IItemProvider;
@@ -16,13 +18,21 @@ import org.spongepowered.asm.mixin.injection.Inject;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
 import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
 import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
 
 
+import java.io.FileReader;
+import java.util.Map;
+
 @Mixin(Item.class)
 @Mixin(Item.class)
 public abstract class ItemMixin extends net.minecraftforge.registries.ForgeRegistryEntry<net.minecraft.item.Item> implements IItemProvider, net.minecraftforge.common.extensions.IForgeItem {
 public abstract class ItemMixin extends net.minecraftforge.registries.ForgeRegistryEntry<net.minecraft.item.Item> implements IItemProvider, net.minecraftforge.common.extensions.IForgeItem {
 
 
-    // 为物品名称添加附魔等级
-    @Shadow public String getTranslationKey(ItemStack stack) {return "";}
+    // 为物品名称添加附魔等级:例如为带有时运 II 的镐重命名为 “铁镐 +2”
+    @Shadow public String getTranslationKey(ItemStack stack) {return null;}
     @Overwrite public ITextComponent getDisplayName(ItemStack stack) {
     @Overwrite public ITextComponent getDisplayName(ItemStack stack) {
-        return new StringTextComponent(new TranslationTextComponent(this.getTranslationKey(stack)).getString() + "test");
+        int level = EnchantmentHelperRe.getEnchantmentLevel(stack);
+        if (level > 0) {
+            return new StringTextComponent(new TranslationTextComponent(this.getTranslationKey(stack)).getString() + " +" + level);
+        } else {
+            return new TranslationTextComponent(this.getTranslationKey(stack));
+        }
     }
     }
 
 
 }
 }