@EventHandler(ignoreCancelled = true)
public void onInventoryClick(final InventoryClickEvent event) {
final Inventory inventory = event.getInventory();
if (inventory.getType() != InventoryType.ANVIL) return;
if (event.getSlotType() != InventoryType.SlotType.RESULT) return;
final ItemStack currentItem = event.getCurrentItem();
if (currentItem == null) return;
if (currentItem.getType() == Material.NAME_TAG) return;
final ItemStack oldItem = inventory.getItem(0);
if (oldItem == null) return;
final ItemMeta oldItemMeta = oldItem.getItemMeta();
final ItemMeta currentItemMeta = currentItem.getItemMeta();
if (oldItemMeta == null || currentItemMeta == null) return;
if (!oldItemMeta.hasDisplayName() && !currentItemMeta.hasDisplayName()) return;
if (oldItemMeta.getDisplayName().equals(currentItemMeta.getDisplayName())) return;
final Player player = (Player) event.getWhoClicked();
event.setCancelled(!player.hasPermission("anvil.bypass"));
}