mirror of
https://github.com/CivMC/Civ.git
synced 2026-07-18 00:20:44 +00:00
Fix a few other things
This commit is contained in:
@@ -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!"?
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user