diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/silenceNametag/NametagAnvilListener.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/silenceNametag/NametagAnvilListener.java index 43ce4c5..01da3bb 100644 --- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/silenceNametag/NametagAnvilListener.java +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/silenceNametag/NametagAnvilListener.java @@ -23,25 +23,9 @@ public class NametagAnvilListener extends ApplianceListener { if(inputItem == null || inputItem.getType() != Material.NAME_TAG) return; - if(!"@verstummen".equals(anvilView.getRenameText()) - && !"@entstummen".equals(anvilView.getRenameText())) return; + if(!SilenceNametag.muteString.equals(anvilView.getRenameText()) + && !SilenceNametag.unmuteString.equals(anvilView.getRenameText())) return; - resultItem.editMeta(meta -> { - System.out.println("editing meta for " + anvilView.getRenameText()); - List lore = meta.hasLore() ? new ArrayList<>(meta.lore()) : new ArrayList<>(); - if("@verstummen".equals(anvilView.getRenameText())) { - System.out.println("Adding lore for @verstummen"); - lore.add(Component.text("Dieses Namensschild verstummt Mobs.")); - } else if("@entstummen".equals(anvilView.getRenameText())) { - System.out.println("Adding lore for @entstummen"); - lore.add(Component.text("Dieses Namensschild entstummt Mobs.")); - } - if(meta.hasItemName()){ - meta.customName(meta.itemName()); - } - meta.lore(lore); - }); - - event.setResult(resultItem); + event.setResult(this.getAppliance().createSilenceNametag(resultItem, anvilView.getRenameText())); } } diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/silenceNametag/SilenceNametag.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/silenceNametag/SilenceNametag.java index 24c52c6..c1cc9e4 100644 --- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/silenceNametag/SilenceNametag.java +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/silenceNametag/SilenceNametag.java @@ -1,15 +1,67 @@ package eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.silenceNametag; import eu.mhsl.craftattack.spawn.core.appliance.Appliance; +import net.kyori.adventure.text.Component; import org.bukkit.NamespacedKey; import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; +import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; import java.util.Objects; public class SilenceNametag extends Appliance { - public static final @NotNull NamespacedKey silenceNametag = Objects.requireNonNull(NamespacedKey.fromString("silence_nametag")); + public static final String pluginName = "silence-nametag"; + public static final String muteString = "@verstummen"; + public static final String unmuteString = "@entstummen"; + + public enum NametagActions { + SILENCE, + UNSILENCE + } + + NamespacedKey nametagActionKey = + new NamespacedKey(pluginName, "nametag-action"); + + ItemStack setNametagAction(ItemStack item, NametagActions action) { + Objects.requireNonNull(item, "item must not be null"); + item.editPersistentDataContainer(pdc -> { + pdc.set( + nametagActionKey, + PersistentDataType.INTEGER, + action.ordinal() + ); + }); + item.editMeta(meta -> { + List lore = meta.hasLore() ? new ArrayList<>(meta.lore()) : new ArrayList<>(); + if(action == NametagActions.SILENCE) { + lore.add(Component.text("Dieses Namensschild verstummt Mobs.")); + } else if (action == NametagActions.UNSILENCE){ + lore.add(Component.text("Dieses Namensschild entstummt Mobs.")); + } + meta.customName(null); + meta.lore(lore); + }); + return item; + } + + NametagActions getNametagAction(ItemStack item) { + Objects.requireNonNull(item, "item must not be null"); + return item.getPersistentDataContainer().get(nametagActionKey, PersistentDataType.INTEGER) == null + ? null + : NametagActions.values()[item.getPersistentDataContainer().get(nametagActionKey, PersistentDataType.INTEGER)]; + } + + public ItemStack createSilenceNametag(ItemStack oldResultItem, String renameText){ + if(renameText.equals(muteString)) { + return this.setNametagAction(oldResultItem, NametagActions.SILENCE); + } else if(renameText.equals(unmuteString)) { + return this.setNametagAction(oldResultItem, NametagActions.UNSILENCE); + } + return oldResultItem; + } @Override protected @NotNull List listeners() {