aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/api/CITConditionContainer.java24
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/api/CITDisposable.java10
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/api/CITGlobalProperties.java15
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/api/CITTypeContainer.java47
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/ActiveCITs.java55
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/BooleanCondition.java13
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/ConstantCondition.java6
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/DoubleCondition.java27
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/EnumCondition.java27
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/FloatCondition.java27
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/IdentifierCondition.java13
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/IntegerCondition.java27
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/ListCondition.java39
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/LongCondition.java27
-rw-r--r--src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/WeightCondition.java5
15 files changed, 340 insertions, 22 deletions
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITConditionContainer.java b/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITConditionContainer.java
index 56ac01f..886185c 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITConditionContainer.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITConditionContainer.java
@@ -1,13 +1,37 @@
package shcm.shsupercm.fabric.citresewn.api;
import shcm.shsupercm.fabric.citresewn.cit.CITCondition;
+import shcm.shsupercm.fabric.citresewn.cit.CITRegistry;
import java.util.function.Supplier;
+/**
+ * Wrapper to facilitate metadata, registry and creation of condition class types.
+ * @see #ENTRYPOINT
+ * @see CITRegistry
+ */
public class CITConditionContainer<T extends CITCondition> {
+ /**
+ * Entrypoint for container singletons, usually kept as a static final field in the condition type's class.
+ */
public static final String ENTRYPOINT = "citresewn:condition";
+
+ /**
+ * Associated condition's class.
+ */
public final Class<T> condition;
+
+ /**
+ * Method reference to the condition's constructor or any other supplier of new condition instances.
+ */
public final Supplier<T> createCondition;
+
+ /**
+ * Possible names in property groups for the associated condition type.<br>
+ * Condition names are declared in groups with a mod id prefix to avoid conflicts with other 3rd party
+ * properties(formatted as "modid:alias").<br>
+ * If a modid is not declared, defaults to "citresewn" which is handled by CIT Resewn: Defaults.
+ */
public final String[] aliases;
public CITConditionContainer(Class<T> condition, Supplier<T> createCondition, String... aliases) {
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITDisposable.java b/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITDisposable.java
index 240f197..dec7098 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITDisposable.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITDisposable.java
@@ -1,8 +1,18 @@
package shcm.shsupercm.fabric.citresewn.api;
+/**
+ * @see #dispose()
+ */
@FunctionalInterface
public interface CITDisposable {
+ /**
+ * Entrypoint for any disposing method that is not covered by CIT Resewn automatically.
+ * @see #dispose()
+ */
String ENTRYPOINT = "citresewn:dispose";
+ /**
+ * Invoked just before reloading CITs. Use to clean up and changes CIT loading made.
+ */
void dispose();
}
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITGlobalProperties.java b/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITGlobalProperties.java
index ada5147..a3d78ae 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITGlobalProperties.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITGlobalProperties.java
@@ -2,9 +2,24 @@ package shcm.shsupercm.fabric.citresewn.api;
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
+/**
+ * @see #globalProperty(String, PropertyValue)
+ */
@FunctionalInterface
public interface CITGlobalProperties {
+ /**
+ * Entrypoint for handlers of global properties.
+ * @see #globalProperty(String, PropertyValue)
+ */
String ENTRYPOINT = "citresewn:global_property";
+ /**
+ * Invoked before CIT parsing for any global property name associated with the handler's modid.<br>
+ * May be called multiple times for a key to overwrite its global property with higher-priority resourcepacks.<br>
+ * Handlers should take care to reset back any changes global properties make by listening to CIT disposal.
+ * @see CITDisposable#dispose()
+ * @param key name of the property key stripped of its modid
+ * @param value the value it's been set to
+ */
void globalProperty(String key, PropertyValue value) throws Exception;
}
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITTypeContainer.java b/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITTypeContainer.java
index 5aa727d..b49b4a6 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITTypeContainer.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/api/CITTypeContainer.java
@@ -3,17 +3,43 @@ package shcm.shsupercm.fabric.citresewn.api;
import shcm.shsupercm.fabric.citresewn.cit.ActiveCITs;
import shcm.shsupercm.fabric.citresewn.cit.CIT;
import shcm.shsupercm.fabric.citresewn.cit.CITType;
+import shcm.shsupercm.fabric.citresewn.cit.CITRegistry;
import shcm.shsupercm.fabric.citresewn.config.CITResewnConfig;
import java.util.List;
import java.util.function.Supplier;
+/**
+ * Wrapper to facilitate metadata, registry and creation of CIT types.
+ * @see #ENTRYPOINT
+ * @see CITRegistry
+ */
public abstract class CITTypeContainer<T extends CITType> implements CITDisposable {
- public static final String ENTRYPOINT = "citresewn:type";
+ /**
+ * Entrypoint for container singletons, usually kept as a static final field in the type's class.
+ */
+ public static final String ENTRYPOINT = "citresewn:type";
+
+ /**
+ * Associated type's class.
+ */
public final Class<T> type;
+
+ /**
+ * Method reference to the type's constructor or any other supplier of new CIT type instances.
+ */
public final Supplier<T> createType;
+
+ /**
+ * Identifier for this type to be used in the "type=" property.<br>
+ * When used in property groups the type's modid must be added to avoid conflicts with other
+ * 3rd party types(formatted as "modid:id").
+ */
public final String id;
+ /**
+ * True when the container should not have any CITs loaded.
+ */
protected boolean empty = true;
public CITTypeContainer(Class<T> type, Supplier<T> createType, String id) {
@@ -22,8 +48,16 @@ public abstract class CITTypeContainer<T extends CITType> implements CITDisposab
this.id = id;
}
+ /**
+ * Loads and keeps a copy of loaded CITs of this container's type.
+ * @param parsedCITs all loaded CITs of this container's type ordered by weight>path
+ */
protected abstract void load(List<CIT<T>> parsedCITs);
+ /**
+ * Loads and keeps a copy of loaded CITs of this container's type.
+ * @param parsedCITs all loaded CITs of this container's type ordered by weight>path
+ */
@SuppressWarnings("unchecked")
public final void loadUntyped(List<?> parsedCITs) {
if (!parsedCITs.isEmpty())
@@ -31,11 +65,22 @@ public abstract class CITTypeContainer<T extends CITType> implements CITDisposab
load((List<CIT<T>>) parsedCITs);
}
+ /**
+ * Unloads CITs from this container.<br>
+ * Override dispose() to add more logic.
+ * @see CITDisposable#dispose()
+ */
public final void unload() {
dispose();
empty = true;
}
+ /**
+ * @see #empty
+ * @see CITResewnConfig#enabled
+ * @see ActiveCITs#isActive()
+ * @return whether this container's associated type should work or not
+ */
public boolean active() {
return !empty && CITResewnConfig.INSTANCE.enabled && ActiveCITs.isActive();
}
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/ActiveCITs.java b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/ActiveCITs.java
index 57d34c3..5270d20 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/ActiveCITs.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/ActiveCITs.java
@@ -8,34 +8,69 @@ import shcm.shsupercm.fabric.citresewn.api.CITTypeContainer;
import shcm.shsupercm.fabric.citresewn.config.CITResewnConfig;
import shcm.shsupercm.fabric.citresewn.pack.GlobalProperties;
import shcm.shsupercm.fabric.citresewn.pack.PackParser;
+import shcm.shsupercm.fabric.citresewn.mixin.ModelLoaderMixin;
import java.util.*;
-public class ActiveCITs implements CITDisposable { private ActiveCITs() {}
+/**
+ * Holds and manages the currently loaded CITs.
+ * @see #getActive()
+ * @see ModelLoaderMixin
+ */
+public class ActiveCITs { private ActiveCITs() {}
+ /**
+ * @see #load(ResourceManager, Profiler)
+ * @see #getActive()
+ * @see #isActive()
+ */
private static ActiveCITs active = null;
+ /**
+ * @see #isActive()
+ * @return the current active CITs manager or null if none are loaded
+ */
public static ActiveCITs getActive() {
return active;
}
-
+
+ /**
+ * @see #getActive()
+ * @return whether there are active; loaded CITs
+ */
public static boolean isActive() {
return active != null;
}
+ /**
+ * Currently effective global properties merged from all loaded packs.
+ */
public final GlobalProperties globalProperties = new GlobalProperties();
+ /**
+ * All loaded CITs ordered by their type's class and their weight.
+ */
public final Map<Class<? extends CITType>, List<CIT<?>>> cits = new IdentityHashMap<>();
- public static ActiveCITs load(ResourceManager resourceManager, Profiler profiler) {
+ /**
+ * Attempts to load/activate CITs from packs in the given resource manager, disposing of any previously loaded CITs if present.
+ * @see ModelLoaderMixin
+ * @see PackParser#loadGlobalProperties(ResourceManager, GlobalProperties)
+ * @see GlobalProperties#callHandlers()
+ * @see PackParser#parseCITs(ResourceManager)
+ * @param resourceManager manager containing resourcepacks with possible CITs
+ * @param profiler loading profiler that was pushed once into "citresewn:reloading_cits" and would pop after
+ */
+ public static void load(ResourceManager resourceManager, Profiler profiler) {
profiler.push("citresewn:disposing");
+ disposeAll();
if (active != null) {
- active.dispose();
+ //todo send reset calls to global properties with null value
active = null;
}
if (!CITResewnConfig.INSTANCE.enabled) {
profiler.pop();
- return null;
+ return;
}
ActiveCITs active = new ActiveCITs();
@@ -60,12 +95,14 @@ public class ActiveCITs implements CITDisposable { private ActiveCITs() {}
if (!cits.isEmpty())
ActiveCITs.active = active;
-
- return ActiveCITs.active;
}
- @Override
- public void dispose() {
+ /**
+ * Cleans up any registered disposable element.
+ * @see CITDisposable
+ * @see CITTypeContainer
+ */
+ public static void disposeAll() {
for (CITDisposable disposable : FabricLoader.getInstance().getEntrypoints(CITDisposable.ENTRYPOINT, CITDisposable.class))
disposable.dispose();
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
index 62f1da1..989318f 100644
--- 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
@@ -6,11 +6,22 @@ import shcm.shsupercm.fabric.citresewn.ex.CITParsingException;
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyGroup;
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
+/**
+ * Common condition parser for booleans.
+ */
public abstract class BooleanCondition extends CITCondition {
+ /**
+ * Parsed boolean.
+ */
protected boolean value;
+ /**
+ * Converts the given context to a boolean to compare the parsed value to.
+ * @param context context to retrieve the compared value from
+ * @return the boolean value associated with the given context
+ */
protected boolean getValue(CITContext context) {
- throw new AssertionError();
+ throw new AssertionError("Not implemented by this condition");
}
@Override
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/ConstantCondition.java b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/ConstantCondition.java
index 081c2d8..5bc9354 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/ConstantCondition.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/ConstantCondition.java
@@ -6,7 +6,13 @@ import shcm.shsupercm.fabric.citresewn.ex.CITParsingException;
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyGroup;
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
+/**
+ * Common condition type with no parsing for constant true/false testing output.
+ */
public class ConstantCondition extends CITCondition {
+ /**
+ * What testing contexts will always result in.
+ */
public final boolean value;
public ConstantCondition(boolean value) {
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/DoubleCondition.java b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/DoubleCondition.java
index 0f392d4..44bb906 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/DoubleCondition.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/DoubleCondition.java
@@ -8,10 +8,23 @@ import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
import static java.lang.Double.*;
+/**
+ * Common condition parser for doubles with optional support for ranges, negatives and percentages.
+ */
public abstract class DoubleCondition extends CITCondition {
+ /**
+ * Whether this condition should accept given ranges/negatives/percentages.
+ */
protected final boolean supportsRanges, supportsNegatives, supportsPercentages;
+ /**
+ * If ranges are accepted, parsed minimum/maximum double. If not, minimum is the parsed value.
+ */
protected double min, max;
+
+ /**
+ * Whether the parsed value is a range/percentage.
+ */
protected boolean range = false, percentage = false;
protected DoubleCondition(boolean supportsRanges, boolean supportsNegatives, boolean supportsPercentages) {
@@ -20,12 +33,22 @@ public abstract class DoubleCondition extends CITCondition {
this.supportsPercentages = supportsPercentages;
}
+ /**
+ * Converts the given context to a double to compare the parsed value to.
+ * @param context context to retrieve the compared value from
+ * @return the double value associated with the given context
+ */
protected double getValue(CITContext context) {
- throw new AssertionError();
+ throw new AssertionError("Not implemented by this condition");
}
+ /**
+ * Converts the given context to a max double to be used when percentages are enabled.
+ * @param context context to retrieve the max value from
+ * @return the max double value associated with the given context
+ */
protected double getPercentageTotalValue(CITContext context) {
- throw new AssertionError();
+ throw new AssertionError("Not implemented by this condition");
}
@Override
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
index 56f5fb7..ed69fed 100644
--- 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
@@ -8,14 +8,33 @@ import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
import java.util.function.Supplier;
+/**
+ * Common condition parser for enum values.
+ * @see EnumCondition.Aliased
+ */
public abstract class EnumCondition<T extends Enum<? extends EnumCondition.Aliased>> extends CITCondition {
+ /**
+ * Fetches the all of the enum's parsable values.
+ */
protected final Supplier<T[]> values;
+
+ /**
+ * Should letter casing be ignored when parsing the enum value. (default true)
+ */
protected final boolean ignoreCase;
+ /**
+ * Parsed enum value.
+ */
protected T value;
+ /**
+ * Converts the given context to an enum value to compare the parsed value to.
+ * @param context context to retrieve the compared value from
+ * @return the enum value associated with the given context
+ */
protected T getValue(CITContext context) {
- throw new AssertionError();
+ throw new AssertionError("Not implemented by this condition");
}
protected EnumCondition(Supplier<T[]> values, boolean ignoreCase) {
@@ -44,7 +63,13 @@ public abstract class EnumCondition<T extends Enum<? extends EnumCondition.Alias
return getValue(context) == this.value;
}
+ /**
+ * Gives implementing enums the ability to have multiple aliased names for parsing.
+ */
public interface Aliased {
+ /**
+ * @return all possible names for this enum value
+ */
default String[] getAliases() {
return new String[] { ((Enum<?>) this).name() };
}
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/FloatCondition.java b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/FloatCondition.java
index afc3954..aadaa76 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/FloatCondition.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/FloatCondition.java
@@ -8,10 +8,23 @@ import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
import static java.lang.Float.*;
+/**
+ * Common condition parser for floats with optional support for ranges, negatives and percentages.
+ */
public abstract class FloatCondition extends CITCondition {
+ /**
+ * Whether this condition should accept given ranges/negatives/percentages.
+ */
protected final boolean supportsRanges, supportsNegatives, supportsPercentages;
+ /**
+ * If ranges are accepted, parsed minimum/maximum float. If not, minimum is the parsed value.
+ */
protected float min, max;
+
+ /**
+ * Whether the parsed value is a range/percentage.
+ */
protected boolean range = false, percentage = false;
protected FloatCondition(boolean supportsRanges, boolean supportsNegatives, boolean supportsPercentages) {
@@ -20,12 +33,22 @@ public abstract class FloatCondition extends CITCondition {
this.supportsPercentages = supportsPercentages;
}
+ /**
+ * Converts the given context to a float to compare the parsed value to.
+ * @param context context to retrieve the compared value from
+ * @return the float value associated with the given context
+ */
protected float getValue(CITContext context) {
- throw new AssertionError();
+ throw new AssertionError("Not implemented by this condition");
}
+ /**
+ * Converts the given context to a max float to be used when percentages are enabled.
+ * @param context context to retrieve the max value from
+ * @return the max float value associated with the given context
+ */
protected float getPercentageTotalValue(CITContext context) {
- throw new AssertionError();
+ throw new AssertionError("Not implemented by this condition");
}
@Override
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
index 0df5330..4d04b76 100644
--- 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
@@ -8,11 +8,22 @@ import shcm.shsupercm.fabric.citresewn.ex.CITParsingException;
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyGroup;
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
+/**
+ * Common condition parser for identifiers.
+ */
public abstract class IdentifierCondition extends CITCondition {
+ /**
+ * Parsed identifier.
+ */
protected Identifier value;
+ /**
+ * Converts the given context to an identifier to compare the parsed value to.
+ * @param context context to retrieve the compared value from
+ * @return the identifier value associated with the given context
+ */
protected Identifier getValue(CITContext context) {
- throw new AssertionError();
+ throw new AssertionError("Not implemented by this condition");
}
@Override
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/IntegerCondition.java b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/IntegerCondition.java
index 13c87c6..80937f5 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/IntegerCondition.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/IntegerCondition.java
@@ -8,10 +8,23 @@ import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
import static java.lang.Integer.*;
+/**
+ * Common condition parser for integers with optional support for ranges, negatives and percentages.
+ */
public abstract class IntegerCondition extends CITCondition {
+ /**
+ * Whether this condition should accept given ranges/negatives/percentages.
+ */
protected final boolean supportsRanges, supportsNegatives, supportsPercentages;
+ /**
+ * If ranges are accepted, parsed minimum/maximum integers. If not, minimum is the parsed value.
+ */
protected int min, max;
+
+ /**
+ * Whether the parsed value is a range/percentage.
+ */
protected boolean range = false, percentage = false;
protected IntegerCondition(boolean supportsRanges, boolean supportsNegatives, boolean supportsPercentages) {
@@ -20,12 +33,22 @@ public abstract class IntegerCondition extends CITCondition {
this.supportsPercentages = supportsPercentages;
}
+ /**
+ * Converts the given context to an integer to compare the parsed value to.
+ * @param context context to retrieve the compared value from
+ * @return the integer value associated with the given context
+ */
protected int getValue(CITContext context) {
- throw new AssertionError();
+ throw new AssertionError("Not implemented by this condition");
}
+ /**
+ * Converts the given context to a max integer to be used when percentages are enabled.
+ * @param context context to retrieve the max value from
+ * @return the max integer value associated with the given context
+ */
protected int getPercentageTotalValue(CITContext context) {
- throw new AssertionError();
+ throw new AssertionError("Not implemented by this condition");
}
@Override
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/ListCondition.java b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/ListCondition.java
index 3b9a264..e264b27 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/ListCondition.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/ListCondition.java
@@ -12,14 +12,39 @@ import java.util.List;
import java.util.function.Supplier;
import java.util.regex.Pattern;
+/**
+ * Common condition parser for multiple values separated by any regex expression.
+ */
public abstract class ListCondition<T extends CITCondition> extends CITCondition {
- private static final Pattern PATTERN_WHITESPACE = Pattern.compile("\\p{Zs}+");
+ /**
+ * Regex pattern for any amount of whitespace.
+ */
+ public static final Pattern PATTERN_WHITESPACE = Pattern.compile("\\p{Zs}+");
+ /**
+ * Enum class type associated with this condition.
+ */
private final Class<T> conditionType;
+
+ /**
+ * Determines how testing the conditions should work(either in OR checks or AND checks).
+ * @see ListCondition.Type
+ */
protected final Type listType;
+
+ /**
+ * Regex pattern to use to separate given input into conditions.
+ */
protected final Pattern delimiter;
+
+ /**
+ * Constructor for new parsed conditions.
+ */
protected final Supplier<T> conditionSupplier;
+ /**
+ * Parsed conditions.
+ */
protected T[] conditions;
protected ListCondition(Class<T> conditionType, Type listType, Pattern delimiter, Supplier<T> conditionSupplier) {
@@ -52,7 +77,13 @@ public abstract class ListCondition<T extends CITCondition> extends CITCondition
return listType.test(conditions, context);
}
+ /**
+ * Provides OR and AND gates for all of the list's conditions.
+ */
public enum Type {
+ /**
+ * Testing passes if any of the conditions pass and fails otherwise.
+ */
OR {
@Override
public boolean test(CITCondition[] conditions, CITContext context) {
@@ -63,6 +94,9 @@ public abstract class ListCondition<T extends CITCondition> extends CITCondition
return false;
}
},
+ /**
+ * Testing passes if all of the conditions pass and fails otherwise.
+ */
AND {
@Override
public boolean test(CITCondition[] conditions, CITContext context) {
@@ -74,6 +108,9 @@ public abstract class ListCondition<T extends CITCondition> extends CITCondition
}
};
+ /**
+ * Tests the given context against all of the conditions.
+ */
public abstract boolean test(CITCondition[] conditions, CITContext context);
}
}
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/LongCondition.java b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/LongCondition.java
index 97f58b5..da68bd8 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/LongCondition.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/LongCondition.java
@@ -8,10 +8,23 @@ import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
import static java.lang.Long.*;
+/**
+ * Common condition parser for longs with optional support for ranges, negatives and percentages.
+ */
public abstract class LongCondition extends CITCondition {
+ /**
+ * Whether this condition should accept given ranges/negatives/percentages.
+ */
protected final boolean supportsRanges, supportsNegatives, supportsPercentages;
+ /**
+ * If ranges are accepted, parsed minimum/maximum longs. If not, minimum is the parsed value.
+ */
protected long min, max;
+
+ /**
+ * Whether the parsed value is a range/percentage.
+ */
protected boolean range = false, percentage = false;
protected LongCondition(boolean supportsRanges, boolean supportsNegatives, boolean supportsPercentages) {
@@ -20,12 +33,22 @@ public abstract class LongCondition extends CITCondition {
this.supportsPercentages = supportsPercentages;
}
+ /**
+ * Converts the given context to a long to compare the parsed value to.
+ * @param context context to retrieve the compared value from
+ * @return the long value associated with the given context
+ */
protected long getValue(CITContext context) {
- throw new AssertionError();
+ throw new AssertionError("Not implemented by this condition");
}
+ /**
+ * Converts the given context to a max long to be used when percentages are enabled.
+ * @param context context to retrieve the max value from
+ * @return the max llong value associated with the given context
+ */
protected long getPercentageTotalValue(CITContext context) {
- throw new AssertionError();
+ throw new AssertionError("Not implemented by this condition");
}
@Override
diff --git a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/WeightCondition.java b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/WeightCondition.java
index 2e887d6..a53e019 100644
--- a/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/WeightCondition.java
+++ b/src/main/java/shcm/shsupercm/fabric/citresewn/cit/builtin/conditions/WeightCondition.java
@@ -8,6 +8,11 @@ import shcm.shsupercm.fabric.citresewn.cit.CITContext;
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyGroup;
import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue;
+/**
+ * Internal condition used to determine the priority CITs get tested in.<br>
+ * Weights default to 0 and higher weights get chosen over lower weights.<br>
+ * When two conflicting CITs have the same weight, their path in the resourcepack is used as a tie breaker.
+ */
public class WeightCondition extends IntegerCondition {
@Entrypoint(CITConditionContainer.ENTRYPOINT)
public static final CITConditionContainer<WeightCondition> CONTAINER = new CITConditionContainer<>(WeightCondition.class, WeightCondition::new,