From 92ed16473e1868413adda4e0861e1b5d7590654c Mon Sep 17 00:00:00 2001 From: ProfElements Date: Thu, 18 Feb 2021 20:26:41 -0600 Subject: [PATCH] Fix #2805, make sure the book binder doesnt kill overleveled enchantments --- .../items/electric/machines/BookBinder.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/BookBinder.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/BookBinder.java index 82bb001ca..a36478f00 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/BookBinder.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/BookBinder.java @@ -63,8 +63,12 @@ public class BookBinder extends AContainer { enchantMeta.addStoredEnchant(entry.getKey(), entry.getValue(), bypassVanillaMaxLevel.getValue()); } + if (enchantMeta.getStoredEnchants().isEmpty()) { + return null; + } + book.setItemMeta(enchantMeta); - + MachineRecipe recipe = new MachineRecipe(25 * (enchantments.size() / this.getSpeed()), new ItemStack[] {target, item}, new ItemStack[] {book}); if (!InvUtils.fitAll(menu.toInventory(), recipe.getOutput(), getOutputSlots())) { @@ -110,13 +114,23 @@ public class BookBinder extends AContainer { for (Map.Entry entry : ech2.entrySet()) { for (Map.Entry conflictsWith : enchantments.entrySet()) { if (entry.getKey().conflictsWith(conflictsWith.getKey())) { - conflicts = true; + if (entry.getKey() == conflictsWith.getKey()) { + + } else { + conflicts = true; + } + } } if (!conflicts) { enchantments.merge(entry.getKey(), entry.getValue(), (a, b) -> { + int enchantMaxLevel = entry.getKey().getMaxLevel(); + if (a == b) { + if (enchantMaxLevel <= a) { + return enchantMaxLevel; + } if (hasCustomMaxLevel.getValue()) { return a + 1 > customMaxLevel.getValue() ? customMaxLevel.getValue() : a + 1; } else { @@ -126,6 +140,10 @@ public class BookBinder extends AContainer { } else { int highestLevel = Math.max(a, b); + if (enchantMaxLevel <= highestLevel) { + return enchantMaxLevel; + } + if (hasCustomMaxLevel.getValue()) { return highestLevel > customMaxLevel.getValue() ? customMaxLevel.getValue() : highestLevel; } else {