package shcm.shsupercm.fabric.citresewn.cit; import shcm.shsupercm.fabric.citresewn.CITResewn; import shcm.shsupercm.fabric.citresewn.api.CITConditionContainer; import shcm.shsupercm.fabric.citresewn.config.CITResewnConfig; import shcm.shsupercm.fabric.citresewn.pack.format.PropertyGroup; import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue; import java.util.Collections; import java.util.Set; /** * Instanced parent for CIT Types that are applied to items when conditions pass.
* Common condition types are available under {@link shcm.shsupercm.fabric.citresewn.cit.builtin.conditions}. * @see CITConditionContainer * @see CIT */ public abstract class CITCondition { /** * Parses the given property value into the condition. * @param value value to read * @param properties the group containing value * @throws CITParsingException if errored while parsing the condition */ public abstract void load(PropertyValue value, PropertyGroup properties) throws CITParsingException; /** * @return a set of classes of conditions that have integration with this condition */ public Set> siblingConditions() { return Collections.emptySet(); } /** * Modifies the given sibling if present in the CIT and declared in {@link #siblingConditions()}. * @param sibling sibling to modify or be modified by * @return the sibling or null to remove it from the CIT. */ public T modifySibling(T sibling) { return sibling; } /** * Tests the given context against this condition. * @param context context to check * @return true if the given context passes */ public abstract boolean test(CITContext context); /** * Logs a warning with the given value's descriptor if enabled in config. * * @see CITResewn#logWarnLoading(String) * @see CITResewnConfig#mute_warns * @param message warning message * @param value value associated with the warning * @param properties property group associated with the warning */ protected void warn(String message, PropertyValue value, PropertyGroup properties) { CITResewn.logWarnLoading("Warning: " + properties.messageWithDescriptorOf(message, value.position())); } }