Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(game.enchantment): enchantment utils
- Loading branch information
1 parent
38742c1
commit 79ed261
Showing
3 changed files
with
122 additions
and
26 deletions.
There are no files selected for viewing
34 changes: 8 additions & 26 deletions
34
src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchUtils.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} | ||
|
||
} |
44 changes: 44 additions & 0 deletions
44
src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchantmentTagUtils.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} | ||
|
||
} |
70 changes: 70 additions & 0 deletions
70
src/main/java/org/auioc/mcmod/arnicalib/game/enchantment/EnchantmentUtils.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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<Entry<Enchantment, Integer>> sortByLevel(Map<Enchantment, Integer> enchantmentMap) { | ||
Validate.notEmpty(enchantmentMap); | ||
return enchantmentMap.entrySet().stream().sorted(Entry.comparingByValue()).toList(); | ||
} | ||
|
||
public static Entry<Enchantment, Integer> getHighest(Map<Enchantment, Integer> enchantmentMap) { | ||
return sortByLevel(enchantmentMap).get(0); | ||
} | ||
|
||
public static Entry<Enchantment, Integer> getLowest(Map<Enchantment, Integer> enchantmentMap) { | ||
var sorted = sortByLevel(enchantmentMap); | ||
return sorted.get(sorted.size() - 1); | ||
} | ||
|
||
public static Entry<Enchantment, Integer> getHighest(ListTag enchantmentsTag) { | ||
return getHighest(EnchantmentHelper.deserializeEnchantments(enchantmentsTag)); | ||
} | ||
|
||
public static Entry<Enchantment, Integer> 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<Enchantment, Integer> enchantmentEntry) { | ||
return isOverLimit(enchantmentEntry.getKey(), enchantmentEntry.getValue()); | ||
} | ||
|
||
public static boolean hasOverLimitEnchantment(Map<Enchantment, Integer> 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<Enchantment, Integer> getOverLimitEnchantments(Map<Enchantment, Integer> enchantmentMap) { | ||
var map = new LinkedHashMap<Enchantment, Integer>(); | ||
for (var enchantmentEntry : enchantmentMap.entrySet()) { | ||
if (isOverLimit(enchantmentEntry)) { | ||
map.put(enchantmentEntry.getKey(), enchantmentEntry.getValue()); | ||
} | ||
} | ||
return map; | ||
} | ||
|
||
public static LinkedHashMap<Enchantment, Integer> getOverLimitEnchantments(ListTag enchantmentsTag) { | ||
return getOverLimitEnchantments(EnchantmentHelper.deserializeEnchantments(enchantmentsTag)); | ||
} | ||
|
||
} |