From ee4412ffa26ff2bfc7b649c9e0554367cf2cdb2e Mon Sep 17 00:00:00 2001
From: SHsuperCM <shsupercm@gmail.com>
Date: Thu, 17 Feb 2022 15:53:59 +0200
Subject: Updated api usage of items condition

---
 .../defaults/cit/conditions/ConditionItems.java    | 50 ++++++++++++++--------
 1 file changed, 33 insertions(+), 17 deletions(-)

(limited to 'defaults/src/main/java/shcm/shsupercm/fabric/citresewn')

diff --git a/defaults/src/main/java/shcm/shsupercm/fabric/citresewn/defaults/cit/conditions/ConditionItems.java b/defaults/src/main/java/shcm/shsupercm/fabric/citresewn/defaults/cit/conditions/ConditionItems.java
index ddd6220..73b79e0 100644
--- a/defaults/src/main/java/shcm/shsupercm/fabric/citresewn/defaults/cit/conditions/ConditionItems.java
+++ b/defaults/src/main/java/shcm/shsupercm/fabric/citresewn/defaults/cit/conditions/ConditionItems.java
@@ -3,42 +3,37 @@ package shcm.shsupercm.fabric.citresewn.defaults.cit.conditions;
 import io.shcm.shsupercm.fabric.fletchingtable.api.Entrypoint;
 import net.minecraft.item.Item;
 import net.minecraft.util.Identifier;
-import net.minecraft.util.InvalidIdentifierException;
 import net.minecraft.util.registry.Registry;
 import shcm.shsupercm.fabric.citresewn.api.CITConditionContainer;
-import shcm.shsupercm.fabric.citresewn.ex.CITParsingException;
-import shcm.shsupercm.fabric.citresewn.cit.CITCondition;
 import shcm.shsupercm.fabric.citresewn.cit.CITContext;
+import shcm.shsupercm.fabric.citresewn.cit.builtin.conditions.IdentifierCondition;
+import shcm.shsupercm.fabric.citresewn.cit.builtin.conditions.ListCondition;
+import shcm.shsupercm.fabric.citresewn.ex.CITParsingException;
 import shcm.shsupercm.fabric.citresewn.pack.format.PropertyGroup;
 import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
 
 import java.util.LinkedHashSet;
 import java.util.Set;
 
-public class ConditionItems extends CITCondition {
+public class ConditionItems extends ListCondition<ConditionItems.ItemCondition> {
     @Entrypoint(CITConditionContainer.ENTRYPOINT)
     public static final CITConditionContainer<ConditionItems> CONTAINER = new CITConditionContainer<>(ConditionItems.class, ConditionItems::new,
             "items", "matchItems");
 
     public Item[] items = new Item[0];
 
+    public ConditionItems() {
+        super(ItemCondition.class, ItemCondition::new);
+    }
+
     @Override
     public void load(PropertyValue value, PropertyGroup properties) throws CITParsingException {
+        super.load(value, properties);
+
         Set<Item> items = new LinkedHashSet<>();
 
-        for (String entry : value.value().split(" "))
-            if (!entry.isEmpty())
-                try {
-                    Identifier identifier = new Identifier(entry);
-                    if (Registry.ITEM.containsId(identifier))
-                        items.add(Registry.ITEM.get(identifier));
-                    else {
-                        items.add(null);
-                        warn(identifier + " is not in the item registry", value, properties);
-                    }
-                } catch (InvalidIdentifierException e) {
-                    throw new CITParsingException("Invalid item identifier \"" + entry + "\"", properties, value.position());
-                }
+        for (ItemCondition itemCondition : this.conditions)
+            items.add(itemCondition.item);
 
         this.items = items.toArray(new Item[0]);
     }
@@ -51,4 +46,25 @@ public class ConditionItems extends CITCondition {
 
         return false;
     }
+
+    protected static class ItemCondition extends IdentifierCondition {
+        public Item item = null;
+
+        @Override
+        public void load(PropertyValue value, PropertyGroup properties) throws CITParsingException {
+            super.load(value, properties);
+
+            if (Registry.ITEM.containsId(this.value))
+                this.item = Registry.ITEM.get(this.value);
+            else {
+                this.item = null;
+                warn(this.value + " is not in the item registry", value, properties);
+            }
+        }
+
+        @Override
+        protected Identifier getValue(CITContext context) {
+            return this.value;
+        }
+    }
 }
-- 
cgit