diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchUtils.java b/src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchUtils.java index ffdcdef0..985e1a4e 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchUtils.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchUtils.java @@ -1,52 +1,34 @@ package org.auioc.mcmod.arnicalib.game.enchantment; -import org.apache.commons.lang3.RandomUtils; +import org.auioc.mcmod.arnicalib.base.random.RandomUtils; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; +@Deprecated(since = "5.6.2", forRemoval = true) public interface EnchUtils { static void enchantOne(ListTag enchantments, int index, int level) { - CompoundTag nbt = enchantments.getCompound(index); - nbt.putShort("lvl", (short) (nbt.getShort("lvl") + level)); + EnchantmentTagUtils.increaseLevel(enchantments, index, level); } static void enchantOne(CompoundTag enchantment, int level) { - enchantment.putShort("lvl", (short) (enchantment.getShort("lvl") + level)); + EnchantmentTagUtils.increaseLevel(enchantment, level); } static void enchantAll(ListTag enchantments, int level) { - for (int i = 0; i < enchantments.size(); i++) { - enchantOne(enchantments.getCompound(i), level); - } + EnchantmentTagUtils.increaseLevel(enchantments, level); } static void enchantRandom(ListTag enchantments, int level) { - enchantOne(enchantments.getCompound(RandomUtils.nextInt(0, enchantments.size())), level); + EnchantmentTagUtils.increaseLevel(enchantments.getCompound(RandomUtils.nextInt(0, enchantments.size())), level); } - static CompoundTag getHighestEnchantment(ListTag enchantments) { - int index = 0; - short highestLevel = 0; - for (int i = 0, l = enchantments.size(); i < l; i++) { - short lvl = enchantments.getCompound(i).getShort("lvl"); - if (lvl > highestLevel) { - index = i; - highestLevel = lvl; - } - } - return enchantments.getCompound(index); + return EnchantmentTagUtils.getHighest(enchantments); } static boolean isOverLimit(ListTag enchantments) { - for (int i = 0, l = enchantments.size(); i < l; i++) { - CompoundTag ench = enchantments.getCompound(i); - if (ench.getShort("lvl") > (EnchantmentRegistry.getOrElseThrow(ench.getString("id"))).getMaxLevel()) { - return true; - } - } - return false; + return EnchantmentTagUtils.hasOverLimitEnchantment(enchantments); } } diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchantmentTagUtils.java b/src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchantmentTagUtils.java new file mode 100644 index 00000000..d1814458 --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchantmentTagUtils.java @@ -0,0 +1,44 @@ +package org.auioc.mcmod.arnicalib.game.enchantment; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; + +public class EnchantmentTagUtils { + + public static void increaseLevel(ListTag tag, int index, int level) { + CompoundTag nbt = tag.getCompound(index); + nbt.putShort("lvl", (short) (nbt.getShort("lvl") + level)); + } + + public static void increaseLevel(ListTag tag, int level) { + for (int i = 0; i < tag.size(); i++) increaseLevel(tag.getCompound(i), level); + } + + public static void increaseLevel(CompoundTag tag, int level) { + tag.putShort("lvl", (short) (tag.getShort("lvl") + level)); + } + + public static CompoundTag getHighest(ListTag tag) { + int index = 0; + short highestLevel = 0; + for (int i = 0, l = tag.size(); i < l; i++) { + short lvl = tag.getCompound(i).getShort("lvl"); + if (lvl > highestLevel) { + index = i; + highestLevel = lvl; + } + } + return tag.getCompound(index); + } + + public static boolean hasOverLimitEnchantment(ListTag tag) { + for (int i = 0, l = tag.size(); i < l; i++) { + CompoundTag ench = tag.getCompound(i); + if (ench.getShort("lvl") > (EnchantmentRegistry.getOrElseThrow(ench.getString("id"))).getMaxLevel()) { + return true; + } + } + return false; + } + +} diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchantmentUtils.java b/src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchantmentUtils.java new file mode 100644 index 00000000..7d718871 --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchantmentUtils.java @@ -0,0 +1,70 @@ +package org.auioc.mcmod.arnicalib.game.enchantment; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import org.apache.commons.lang3.Validate; +import net.minecraft.nbt.ListTag; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; + +public class EnchantmentUtils { + + public static List> sortByLevel(Map enchantmentMap) { + Validate.notEmpty(enchantmentMap); + return enchantmentMap.entrySet().stream().sorted(Entry.comparingByValue()).toList(); + } + + public static Entry getHighest(Map enchantmentMap) { + return sortByLevel(enchantmentMap).get(0); + } + + public static Entry getLowest(Map enchantmentMap) { + var sorted = sortByLevel(enchantmentMap); + return sorted.get(sorted.size() - 1); + } + + public static Entry getHighest(ListTag enchantmentsTag) { + return getHighest(EnchantmentHelper.deserializeEnchantments(enchantmentsTag)); + } + + public static Entry getLowest(ListTag enchantmentsTag) { + return getLowest(EnchantmentHelper.deserializeEnchantments(enchantmentsTag)); + } + + + public static boolean isOverLimit(Enchantment enchantment, int level) { + return level > enchantment.getMaxLevel(); + } + + public static boolean isOverLimit(Entry enchantmentEntry) { + return isOverLimit(enchantmentEntry.getKey(), enchantmentEntry.getValue()); + } + + public static boolean hasOverLimitEnchantment(Map enchantmentMap) { + for (var enchantmentEntry : enchantmentMap.entrySet()) { + if (isOverLimit(enchantmentEntry)) return true; + } + return false; + } + + public static boolean hasOverLimitEnchantment(ListTag enchantmentsTag) { + return hasOverLimitEnchantment(EnchantmentHelper.deserializeEnchantments(enchantmentsTag)); + } + + public static LinkedHashMap getOverLimitEnchantments(Map enchantmentMap) { + var map = new LinkedHashMap(); + for (var enchantmentEntry : enchantmentMap.entrySet()) { + if (isOverLimit(enchantmentEntry)) { + map.put(enchantmentEntry.getKey(), enchantmentEntry.getValue()); + } + } + return map; + } + + public static LinkedHashMap getOverLimitEnchantments(ListTag enchantmentsTag) { + return getOverLimitEnchantments(EnchantmentHelper.deserializeEnchantments(enchantmentsTag)); + } + +}