From 9c71a0820363dd7d77f94caef068a36b3f9f42ba Mon Sep 17 00:00:00 2001 From: MrJeremyFisher Date: Mon, 5 Jan 2026 14:53:24 -0500 Subject: [PATCH] Fix a few other things --- .../hacks/basic/NameLocker.java | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/NameLocker.java b/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/NameLocker.java index d83c00c1d..56d6842ca 100644 --- a/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/NameLocker.java +++ b/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/NameLocker.java @@ -6,9 +6,14 @@ import com.programmerdan.minecraft.simpleadminhacks.framework.BasicHackConfig; import java.util.List; import java.util.Objects; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.minecraft.world.inventory.AnvilMenu; import org.bukkit.Material; import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -52,7 +57,7 @@ public class NameLocker extends BasicHack { PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); if (pdc.has(lockedKey) && Boolean.TRUE.equals(pdc.get(lockedKey, PersistentDataType.BOOLEAN))) { // Item is locked - event.getView().setRepairCost(Integer.MAX_VALUE); // Cheap trick to get the X because it's nice. + event.getView().setRepairCost(AnvilMenu.DEFAULT_DENIED_COST); // Cheap trick to get the X because it's nice. event.setResult(ItemStack.empty()); } else if (!pdc.has(lockedKey)) { // We can't put honeycomb on anything so we have to manually do the result setup. @@ -67,17 +72,48 @@ public class NameLocker extends BasicHack { } } + @EventHandler + public void onExecuteLock(InventoryClickEvent event) { + if (event.getInventory().getType() != InventoryType.ANVIL || event.getRawSlot() != 2) return; + ItemStack honeyComb = event.getInventory().getItem(1); + if (honeyComb == null || !honeyComb.getType().equals(Material.HONEYCOMB)) + return; + + if (honeyComb.getAmount() > 1) { + honeyComb.setAmount(honeyComb.getAmount() - 1); + ((Player) event.getWhoClicked()).give(honeyComb); // Items in the second slot of an anvil are deleted AFTER InventoryClickEvent so we can't decrement the stack size + } + } + @EventHandler public void onTryRename(PrepareAnvilEvent event) { ItemStack itemToBeRenamed = event.getInventory().getFirstItem(); - if (itemToBeRenamed == null || Objects.equals(event.getView().getRenameText(), itemToBeRenamed.displayName().toString())) - return; // Not renaming + ItemStack resultItem = event.getInventory().getResult(); + if (itemToBeRenamed == null + || resultItem == null) + return; ItemMeta itemMeta = itemToBeRenamed.getItemMeta(); PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); + checkItem(event, itemToBeRenamed, resultItem, pdc); + // Now check the other way. This only applies for tools where you can combine them + itemToBeRenamed = event.getInventory().getSecondItem(); + if (itemToBeRenamed == null) + return; + + itemMeta = itemToBeRenamed.getItemMeta(); + pdc = itemMeta.getPersistentDataContainer(); + checkItem(event, itemToBeRenamed, resultItem, pdc); + } + + private void checkItem(PrepareAnvilEvent event, ItemStack itemToBeRenamed, ItemStack resultItem, PersistentDataContainer pdc) { if (pdc.has(lockedKey) && Boolean.TRUE.equals(pdc.get(lockedKey, PersistentDataType.BOOLEAN))) { // Item is locked - event.getView().setRepairCost(Integer.MAX_VALUE); + if (Objects.equals(itemToBeRenamed.effectiveName().compact(), resultItem.effectiveName().compact())) + return; // No name change, no enchant change (text colour white->aqua) + if (Objects.equals(itemToBeRenamed.effectiveName().compact().color(NamedTextColor.AQUA).compact(), resultItem.effectiveName().compact())) + return; // No name change, but we are adding an enchantment so the text colour changes + event.getView().setRepairCost(AnvilMenu.DEFAULT_DENIED_COST); event.setResult(ItemStack.empty()); // Can we change the text? Like "Too Expensive!" - > "Can't Rename!"? }