Fix a few other things

This commit is contained in:
MrJeremyFisher
2026-01-05 14:53:24 -05:00
parent 3179eec595
commit 9c71a08203

View File

@@ -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!"?
}