From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Encode42 Date: Wed, 24 Mar 2021 17:59:54 -0400 Subject: [PATCH] Config to allow for unsafe enchants diff --git a/src/main/java/net/minecraft/server/commands/CommandEnchant.java b/src/main/java/net/minecraft/server/commands/CommandEnchant.java index 96991d77cfef2ef0fdada1a831619293ffe37e70..bd035a0f3554fd44f135c23fc92f3411ccf74e0d 100644 --- a/src/main/java/net/minecraft/server/commands/CommandEnchant.java +++ b/src/main/java/net/minecraft/server/commands/CommandEnchant.java @@ -48,7 +48,7 @@ public class CommandEnchant { } private static int a(CommandListenerWrapper commandlistenerwrapper, Collection collection, Enchantment enchantment, int i) throws CommandSyntaxException { - if (i > enchantment.getMaxLevel()) { + if (!net.pl3x.purpur.PurpurConfig.allowUnsafeEnchants && i > enchantment.getMaxLevel()) { // Purpur throw CommandEnchant.d.create(i, enchantment.getMaxLevel()); } else { int j = 0; @@ -62,7 +62,7 @@ public class CommandEnchant { ItemStack itemstack = entityliving.getItemInMainHand(); if (!itemstack.isEmpty()) { - if (enchantment.canEnchant(itemstack) && EnchantmentManager.a((Collection) EnchantmentManager.a(itemstack).keySet(), enchantment)) { + if ((enchantment.canEnchant(itemstack) && EnchantmentManager.a((Collection) EnchantmentManager.a(itemstack).keySet(), enchantment)) || (net.pl3x.purpur.PurpurConfig.allowUnsafeEnchants && !itemstack.hasEnchantment(enchantment))) { // Purpur itemstack.addEnchantment(enchantment, i); ++j; } else if (collection.size() == 1) { diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java index 2e4bc664412feb8657c7b9995d281203a14d48fd..677f866dfaab653b05c693663adaeb2465117a55 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -860,6 +860,12 @@ public final class ItemStack { return this.tag != null && this.tag.hasKeyOfType("Enchantments", 9) ? !this.tag.getList("Enchantments", 10).isEmpty() : false; } + // Purpur start + public boolean hasEnchantment(Enchantment enchantment) { + return hasEnchantments() && EnchantmentManager.getEnchantmentMap(getEnchantments()).containsKey(enchantment); + } + // Purpur end + public void getOrCreateTagAndSet(String s, NBTBase nbtbase) { a(s, nbtbase);} // Paper - OBFHELPER public void a(String s, NBTBase nbtbase) { this.getOrCreateTag().set(s, nbtbase); diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentManager.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentManager.java index b2d28c2bf0a9e93d38583e2d734c12fed4f63d5d..63a6f63a2d3e03e74c314cdebf7cb61b66fd5108 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentManager.java +++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentManager.java @@ -59,6 +59,7 @@ public class EnchantmentManager { return a(nbttaglist); } + public static Map getEnchantmentMap(NBTTagList nbttaglist) { return a(nbttaglist); } // Purpur - OBFHELPER public static Map a(NBTTagList nbttaglist) { Map map = Maps.newLinkedHashMap(); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java index 226e6491589dc68a7cd7cba7969a2b38b92271fd..4947df56f3f7372dead7d5674d1327570dba00b0 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -232,6 +232,7 @@ public class PurpurConfig { public static boolean allowInfinityMending = false; public static boolean allowCrossbowInfinity = false; + public static boolean allowUnsafeEnchants = false; private static void enchantmentSettings() { if (version < 5) { boolean oldValue = getBoolean("settings.enchantment.allow-infinite-and-mending-together", false); @@ -240,6 +241,7 @@ public class PurpurConfig { } allowInfinityMending = getBoolean("settings.enchantment.allow-infinity-and-mending-together", allowInfinityMending); allowCrossbowInfinity = getBoolean("settings.enchantment.allow-infinity-on-crossbow", allowCrossbowInfinity); + allowUnsafeEnchants = getBoolean("settings.enchantment.allow-unsafe-enchants", allowUnsafeEnchants); } public static boolean endermanShortHeight = false;