From 336190f0711748e99feb03ffc1eded4254d5b624 Mon Sep 17 00:00:00 2001
From: TinyTank800 <tinytank800@gmail.com>
Date: Thu, 18 Jan 2024 21:31:23 -0800
Subject: [PATCH] enchant= and setcustomdata= added. Please edit error
 handling.

---
 .../commandtags/tags/standard/ItemTags.java   | 81 +++++++++++++++++++
 1 file changed, 81 insertions(+)

diff --git a/src/me/rockyhawk/commandpanels/commandtags/tags/standard/ItemTags.java b/src/me/rockyhawk/commandpanels/commandtags/tags/standard/ItemTags.java
index 32f4b65..bbb4c25 100644
--- a/src/me/rockyhawk/commandpanels/commandtags/tags/standard/ItemTags.java
+++ b/src/me/rockyhawk/commandpanels/commandtags/tags/standard/ItemTags.java
@@ -3,10 +3,15 @@ package me.rockyhawk.commandpanels.commandtags.tags.standard;
 import me.rockyhawk.commandpanels.CommandPanels;
 import me.rockyhawk.commandpanels.commandtags.CommandTagEvent;
 import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
+import org.bukkit.NamespacedKey;
+import org.bukkit.enchantments.Enchantment;
 import org.bukkit.event.EventHandler;
 import org.bukkit.event.Listener;
 import org.bukkit.inventory.ItemStack;
 
+import java.util.Objects;
+import java.util.Set;
+
 public class ItemTags implements Listener {
     CommandPanels plugin;
     public ItemTags(CommandPanels pl) {
@@ -34,6 +39,82 @@ public class ItemTags implements Listener {
             }else{
                 e.p.getInventory().setItem(Integer.parseInt(e.args[1]), s);
             }
+            return;
+        }
+        if(e.name.equalsIgnoreCase("enchant=")){
+            e.commandTagUsed();
+            //if player uses enchant= [slot] [position] [ADD/REMOVE/CLEAR] [enchant] <level> it will add/remove/clear the enchants of the selected slot
+            PanelPosition position = PanelPosition.valueOf(e.args[1]);
+            ItemStack EditItem;
+            if(position == PanelPosition.Top) {
+                EditItem = e.p.getOpenInventory().getTopInventory().getItem(Integer.parseInt(e.args[0]));
+            }else if(position == PanelPosition.Middle) {
+                EditItem = e.p.getInventory().getItem(Integer.parseInt(e.args[0])+9);
+            }else{
+                EditItem = e.p.getInventory().getItem(Integer.parseInt(e.args[0]));
+            }
+
+            assert EditItem != null;
+
+            if(e.args[2].equalsIgnoreCase("add")){
+                try{
+                    Enchantment enchant = Enchantment.getByKey(NamespacedKey.minecraft(e.args[3].toLowerCase()));
+                    assert enchant != null;
+                    EditItem.addEnchantment(enchant, Integer.parseInt(e.args[4]));
+                    return;
+                } catch (Exception err){
+                    //Some sort of message for player or console?
+                }
+            }
+
+            if(e.args[2].equalsIgnoreCase("remove")){
+                try{
+                    Enchantment enchant = Enchantment.getByKey(NamespacedKey.minecraft(e.args[3].toLowerCase()));
+                    assert enchant != null;
+                    EditItem.removeEnchantment(enchant);
+                    return;
+                } catch (Exception err){
+                    //Some sort of message for player or console?
+                }
+            }
+
+            if(e.args[2].equalsIgnoreCase("clear")){
+                try{
+                    Set<Enchantment> Enchants = EditItem.getEnchantments().keySet();
+                    for(Enchantment enchant : Enchants){
+                        EditItem.removeEnchantment(enchant);
+                    }
+                } catch (Exception err){
+                    //Some sort of message for player or console?
+                }
+            }
+
+            return;
+        }
+        if(e.name.equalsIgnoreCase("setcustomdata=")){
+            e.commandTagUsed();
+            //if player uses setcustomdata= [slot] [position] [data] it will change the custom model data of the item
+            PanelPosition position = PanelPosition.valueOf(e.args[1]);
+            ItemStack EditItem;
+            if(position == PanelPosition.Top) {
+                EditItem = e.p.getOpenInventory().getTopInventory().getItem(Integer.parseInt(e.args[0]));
+            }else if(position == PanelPosition.Middle) {
+                EditItem = e.p.getInventory().getItem(Integer.parseInt(e.args[0])+9);
+            }else{
+                EditItem = e.p.getInventory().getItem(Integer.parseInt(e.args[0]));
+            }
+
+            assert EditItem != null;
+
+            try{
+                if(EditItem.hasItemMeta()){
+                    Objects.requireNonNull(EditItem.getItemMeta()).setCustomModelData(Integer.valueOf(e.args[2]));
+                }
+            } catch (Exception err){
+                //Some sort of message for player or console?
+            }
+
+            return;
         }
     }
 }