diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/commands/CommandEcoskip.java b/Plugin/src/main/java/com/willfp/ecoenchants/commands/CommandEcoskip.java index a6eee923..9102ce8c 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/commands/CommandEcoskip.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/commands/CommandEcoskip.java @@ -29,11 +29,11 @@ public class CommandEcoskip implements CommandExecutor { if(meta == null) { return true; } - if(meta.getPersistentDataContainer().has(EnchantDisplay.keySkip, PersistentDataType.INTEGER)) { - meta.getPersistentDataContainer().remove(EnchantDisplay.keySkip); + if(meta.getPersistentDataContainer().has(EnchantDisplay.KEY_SKIP, PersistentDataType.INTEGER)) { + meta.getPersistentDataContainer().remove(EnchantDisplay.KEY_SKIP); player.sendMessage(ConfigManager.getLang().getMessage("skip-removed")); } else { - meta.getPersistentDataContainer().set(EnchantDisplay.keySkip, PersistentDataType.INTEGER, 1); + meta.getPersistentDataContainer().set(EnchantDisplay.KEY_SKIP, PersistentDataType.INTEGER, 1); player.sendMessage(ConfigManager.getLang().getMessage("skip-added")); } item.setItemMeta(meta); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/display/EnchantDisplay.java b/Plugin/src/main/java/com/willfp/ecoenchants/display/EnchantDisplay.java index 2dadea96..cf02775c 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/display/EnchantDisplay.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/display/EnchantDisplay.java @@ -33,12 +33,12 @@ public class EnchantDisplay { * @deprecated This is no longer used due to a change in the lore storage mechanism */ @Deprecated - private static final NamespacedKey key = new NamespacedKey(EcoEnchantsPlugin.getInstance(), "ecoenchantlore-len"); + private static final NamespacedKey KEY = new NamespacedKey(EcoEnchantsPlugin.getInstance(), "ecoenchantlore-len"); /** * The meta key to hide enchantments in lore */ - public static final NamespacedKey keySkip = new NamespacedKey(EcoEnchantsPlugin.getInstance(), "ecoenchantlore-skip"); + public static final NamespacedKey KEY_SKIP = new NamespacedKey(EcoEnchantsPlugin.getInstance(), "ecoenchantlore-skip"); private static final String prefix = "§w"; @@ -101,15 +101,15 @@ public class EnchantDisplay { if(itemLore == null) itemLore = new ArrayList<>(); try { - if (meta.getPersistentDataContainer().has(key, PersistentDataType.INTEGER)) { - int enchantLoreLength = meta.getPersistentDataContainer().get(key, PersistentDataType.INTEGER); + if (meta.getPersistentDataContainer().has(KEY, PersistentDataType.INTEGER)) { + int enchantLoreLength = meta.getPersistentDataContainer().get(KEY, PersistentDataType.INTEGER); if(itemLore.size() >= enchantLoreLength) { itemLore.subList(0, enchantLoreLength).clear(); } } } catch (NullPointerException ignored) {} - meta.getPersistentDataContainer().remove(key); + meta.getPersistentDataContainer().remove(KEY); itemLore.removeIf((s) -> s.startsWith(prefix)); if (meta instanceof EnchantmentStorageMeta) { @@ -147,7 +147,7 @@ public class EnchantDisplay { if(meta == null) return oldItem; - if(meta.getPersistentDataContainer().has(keySkip, PersistentDataType.INTEGER)) + if(meta.getPersistentDataContainer().has(KEY_SKIP, PersistentDataType.INTEGER)) return oldItem; if(meta.hasLore()) diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/util/NumberUtils.java b/Plugin/src/main/java/com/willfp/ecoenchants/util/NumberUtils.java index 3010b3df..bf8beb0b 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/util/NumberUtils.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/util/NumberUtils.java @@ -2,8 +2,30 @@ package com.willfp.ecoenchants.util; import java.util.LinkedHashMap; import java.util.Map; +import java.util.TreeMap; public class NumberUtils { + + private final static TreeMap NUMERALS = new TreeMap<>(); + + static { + + NUMERALS.put(1000, "M"); + NUMERALS.put(900, "CM"); + NUMERALS.put(500, "D"); + NUMERALS.put(400, "CD"); + NUMERALS.put(100, "C"); + NUMERALS.put(90, "XC"); + NUMERALS.put(50, "L"); + NUMERALS.put(40, "XL"); + NUMERALS.put(10, "X"); + NUMERALS.put(9, "IX"); + NUMERALS.put(5, "V"); + NUMERALS.put(4, "IV"); + NUMERALS.put(1, "I"); + + } + /** * Bias the input value according to a curve * @param input The input value @@ -48,39 +70,13 @@ public class NumberUtils { * @return The number, converted to a roman numeral */ public static String toNumeral(int number) { - - LinkedHashMap roman_numerals = new LinkedHashMap(); - roman_numerals.put("M", 1000); - roman_numerals.put("CM", 900); - roman_numerals.put("D", 500); - roman_numerals.put("CD", 400); - roman_numerals.put("C", 100); - roman_numerals.put("XC", 90); - roman_numerals.put("L", 50); - roman_numerals.put("XL", 40); - roman_numerals.put("X", 10); - roman_numerals.put("IX", 9); - roman_numerals.put("V", 5); - roman_numerals.put("IV", 4); - roman_numerals.put("I", 1); - StringBuilder res = new StringBuilder(); - for (Map.Entry entry : roman_numerals.entrySet()) { - int matches = number / entry.getValue(); - res.append(repeat(entry.getKey(), matches)); - number = number % entry.getValue(); - } - return res.toString(); - } - - private static String repeat(String s, int n) { - if (s == null) { - return null; - } - final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < n; i++) { - sb.append(s); - } - return sb.toString(); + if (number >= 1 && number <= 4096) { + int l = NUMERALS.floorKey(number); + if (number == l) { + return NUMERALS.get(number); + } + return NUMERALS.get(l) + toNumeral(number - l); + } else return String.valueOf(number); } /**