Skip to content

Commit

Permalink
feat(game.enchantment): enchantment utils
Browse files Browse the repository at this point in the history
  • Loading branch information
WakelessSloth56 committed Oct 11, 2022
1 parent 38742c1 commit 79ed261
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 26 deletions.
@@ -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);
}

}
@@ -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;
}

}
@@ -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));
}

}

0 comments on commit 79ed261

Please sign in to comment.