aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--defaults/src/main/java/shcm/shsupercm/fabric/citresewn/defaults/cit/conditions/ConditionDamageMask.java8
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/BooleanCondition.java28
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/EnumCondition.java50
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/IdentifierCondition.java29
4 files changed, 115 insertions, 0 deletions
diff --git a/defaults/src/main/java/shcm/shsupercm/fabric/citresewn/defaults/cit/conditions/ConditionDamageMask.java b/defaults/src/main/java/shcm/shsupercm/fabric/citresewn/defaults/cit/conditions/ConditionDamageMask.java
index 6c8e9e0..01d33fe 100644
--- a/defaults/src/main/java/shcm/shsupercm/fabric/citresewn/defaults/cit/conditions/ConditionDamageMask.java
+++ b/defaults/src/main/java/shcm/shsupercm/fabric/citresewn/defaults/cit/conditions/ConditionDamageMask.java
@@ -2,9 +2,12 @@ package shcm.shsupercm.fabric.citresewn.defaults.cit.conditions;
import io.shcm.shsupercm.fabric.fletchingtable.api.Entrypoint;
import shcm.shsupercm.fabric.citresewn.api.CITConditionContainer;
+import shcm.shsupercm.fabric.citresewn.cit.CITCondition;
import shcm.shsupercm.fabric.citresewn.cit.CITContext;
import shcm.shsupercm.fabric.citresewn.cit.builtin.conditions.IntegerCondition;
+import java.util.Set;
+
public class ConditionDamageMask extends IntegerCondition {
@Entrypoint(CITConditionContainer.ENTRYPOINT)
public static final CITConditionContainer<ConditionDamageMask> CONTAINER = new CITConditionContainer<>(ConditionDamageMask.class, ConditionDamageMask::new,
@@ -27,4 +30,9 @@ public class ConditionDamageMask extends IntegerCondition {
public int getMask() {
return this.min;
}
+
+ @Override
+ public Set<Class<? extends CITCondition>> siblingConditions() {
+ return Set.of(ConditionDamage.class);
+ }
}
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/BooleanCondition.java b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/BooleanCondition.java
new file mode 100644
index 0000000..fcf976c
--- /dev/null
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/BooleanCondition.java
@@ -0,0 +1,28 @@
+package shcm.shsupercm.fabric.citresewn.cit.builtin.conditions;
+
+import shcm.shsupercm.fabric.citresewn.cit.CITCondition;
+import shcm.shsupercm.fabric.citresewn.cit.CITContext;
+import shcm.shsupercm.fabric.citresewn.ex.CITParsingException;
+import shcm.shsupercm.fabric.citresewn.pack.format.PropertyGroup;
+import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
+
+public abstract class BooleanCondition extends CITCondition {
+ protected boolean value;
+
+ protected abstract boolean getValue(CITContext context);
+
+ @Override
+ public void load(PropertyValue value, PropertyGroup properties) throws CITParsingException {
+ if (value.value().equalsIgnoreCase("true"))
+ this.value = true;
+ else if (value.value().equalsIgnoreCase("false"))
+ this.value = false;
+ else
+ throw new CITParsingException("Not a boolean", properties, value.position());
+ }
+
+ @Override
+ public boolean test(CITContext context) {
+ return getValue(context) == this.value;
+ }
+}
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/EnumCondition.java b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/EnumCondition.java
new file mode 100644
index 0000000..cdfd65d
--- /dev/null
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/EnumCondition.java
@@ -0,0 +1,50 @@
+package shcm.shsupercm.fabric.citresewn.cit.builtin.conditions;
+
+import shcm.shsupercm.fabric.citresewn.cit.CITCondition;
+import shcm.shsupercm.fabric.citresewn.cit.CITContext;
+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.function.Supplier;
+
+public abstract class EnumCondition<T extends Enum<? extends EnumCondition.Aliased>> extends CITCondition {
+ protected final Supplier<T[]> values;
+ protected final boolean ignoreCase;
+
+ protected T value;
+
+ protected abstract T getValue(CITContext context);
+
+ protected EnumCondition(Supplier<T[]> values, boolean ignoreCase) {
+ this.values = values;
+ this.ignoreCase = ignoreCase;
+ }
+
+ protected EnumCondition(Supplier<T[]> values) {
+ this(values, true);
+ }
+
+ @Override
+ public void load(PropertyValue value, PropertyGroup properties) throws CITParsingException {
+ for (T enumConstant : values.get())
+ for (String alias : ((Aliased) enumConstant).getAliases())
+ if (ignoreCase ? alias.equalsIgnoreCase(value.value()) : alias.equals(value.value())) {
+ this.value = enumConstant;
+ return;
+ }
+
+ throw new CITParsingException("Unrecognized value", properties, value.position());
+ }
+
+ @Override
+ public boolean test(CITContext context) {
+ return getValue(context) == this.value;
+ }
+
+ public interface Aliased {
+ default String[] getAliases() {
+ return new String[] { ((Enum<?>) this).name() };
+ }
+ }
+}
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/IdentifierCondition.java b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/IdentifierCondition.java
new file mode 100644
index 0000000..2f45f2f
--- /dev/null
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/IdentifierCondition.java
@@ -0,0 +1,29 @@
+package shcm.shsupercm.fabric.citresewn.cit.builtin.conditions;
+
+import net.minecraft.util.Identifier;
+import net.minecraft.util.InvalidIdentifierException;
+import shcm.shsupercm.fabric.citresewn.cit.CITCondition;
+import shcm.shsupercm.fabric.citresewn.cit.CITContext;
+import shcm.shsupercm.fabric.citresewn.ex.CITParsingException;
+import shcm.shsupercm.fabric.citresewn.pack.format.PropertyGroup;
+import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
+
+public abstract class IdentifierCondition extends CITCondition {
+ protected Identifier value;
+
+ protected abstract Identifier getValue(CITContext context);
+
+ @Override
+ public void load(PropertyValue value, PropertyGroup properties) throws CITParsingException {
+ try {
+ this.value = new Identifier(value.value());
+ } catch (InvalidIdentifierException e) {
+ throw new CITParsingException(e.getMessage(), properties, value.position());
+ }
+ }
+
+ @Override
+ public boolean test(CITContext context) {
+ return this.value.equals(getValue(context));
+ }
+}