BuilderBase class

Пакет: com.hypixel.hytale.server.npc.asset.builder

Файл: com/hypixel/hytale/server/npc/asset/builder/BuilderBase.java

implements: Builder<T>

Поля (267)

МодификаторыТипИмя
final Pattern PATTERN
return
boolean var1
int var1
String[] var1
boolean var10
JsonElement var10
Schema var10
ArraySchema var10
ArraySchema var10
boolean var10
JsonElement var10
JsonElement var10
ArraySchema var10
ArraySchema var10
ArraySchema var10
ArraySchema var10
boolean var10
JsonElement var10
boolean var10
Schema var10
boolean var10
ArraySchema var10
ArraySchema var10
JsonElement var10
ArraySchema var10
Schema var10
Schema var10
Schema var10
boolean var10
Schema var10
JsonElement var10
ArraySchema var10
StringSchema var10
String var10
var10
String[][] var10
ValueStoreValidator var10
Schema var11
Schema var11
String[] var11
var11
var11
Schema var11
Schema var11
JsonElement var11
JsonObject var11
boolean var11
Schema var11
Schema var11
JsonElement var11
Schema var11
JsonElement var11
Schema var11
JsonElement var11
Schema var11
JsonElement var11
Schema var11
Schema var11
Schema var11
StringSchema var11
EnumSet var11
StringSchema var11
Schema var11
String[] var11
var11
var11
JsonElement var11
Schema var11
ArraySchema var11
boolean var11
var11
String[] var11
Schema var12
boolean var12
ArraySchema var12
Schema var12
Schema var12
boolean var12
Schema var12
boolean var12
Schema var12
Schema var12
Schema var12
Schema var12
StringSchema var12
StringSchema var12
ArraySchema var12
StringSchema var12
ArraySchema var12
StringSchema var12
StringSchema var12
boolean var12
ArraySchema var12
Schema var12
Int2ObjectOpenHashMap var12
Schema var13
StringSchema var13
Schema var13
Schema var13
StringSchema var13
ArraySchema var14
ArraySchema var14
ArraySchema var14
ArraySchema var14
ArraySchema var14
ArraySchema var14
ArraySchema var14
StringSchema var14
Schema var15
Schema var15
Schema var15
ArraySchema var15
StringSchema var15
Schema var16
String var17
ArraySchema var19
var2
StringBuilder var2
Iterator var2
var2
BuilderFactory var2
Schema var2
String var2
Feature[] var2
JsonElement var2
Schema var20
String var3
String[] var3
Schema var3
NoDuplicatesValidator var3
boolean var3
boolean var3
InstructionContextValidator var3
JsonElement var3
JsonElement var3
JsonArray var3
String var4
JsonElement var4
JsonElement var4
var4
var4
var4
var4
var4
var4
var4
var4
EnumSet var4
Enum[] var4
ObjectSchema var4
var4
HashSet var4
boolean var4
boolean var4
boolean var4
JsonElement var4
String[] var4
String var5
JsonArray var5
JsonArray var5
JsonArray var5
JsonElement var5
JsonArray var5
BuilderParameters var5
var5
Enum[] var5
Enum[] var5
Map var5
String var5
String var5
String[] var5
String[] var5
boolean var5
boolean var5
boolean var5
boolean var5
String[] var5
String[] var5
boolean var5
boolean var5
int var6
int var6
int var6
String[] var6
Schema var6
double var6
double var6
int var6
int var6
String var6
String var6
String[] var6
String[] var6
boolean var6
boolean var6
String var6
int[] var7
double[] var7
Schema var7
Schema var7
Schema var7
JsonElement var7
Schema var7
double var7
double var7
double var7
double var7
Enum var7
String var7
Enum var7
String var7
Schema var8
Schema var8
JsonElement var8
String var8
Schema var8
Schema var8
JsonElement var8
Schema var8
Schema var8
Schema var8
Schema var8
JsonElement var8
JsonElement var8
JsonElement var8
StringSchema var8
StringSchema var8
StringSchema var8
ObjectSchema var8
JsonElement var8
Schema var8
Schema var8
StringSchema var8
StringSchema var8
BooleanImplicationValidator var8
StateStringValidator var8
StateStringValidator var8
String[] var8
JsonElement var9
boolean var9
JsonElement var9
JsonElement var9
JsonElement var9
boolean var9
JsonElement var9
JsonElement var9
boolean var9
JsonElement var9
boolean var9
JsonElement var9
JsonElement var9
StringSchema var9
EnumSet var9
ArraySchema var9
JsonElement var9
JsonElement var9
ArraySchema var9
Schema var9
JsonElement var9
Schema var9
JsonElement var9
JsonElement var9
String var9
var9
JsonElement var9
boolean var9

Методы (320)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("An embeddable array can be only used once!")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("'" + var1 + "' missing in JSON object")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("'" + var1 + "' must be a string")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("'" + var1 + "' must be a boolean value")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Expected a JSON object")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("'" + var1 + "' must be an object: " + var0)
abstract throw new IllegalStateExceptionthrow new IllegalStateException(var1 + " must be an array: " + var0)
abstract return new Vector3dreturn new Vector3d(var0[0], var0[1], var0[2])
protected void addErrorvoid addError(String var1)
protected void addErrorvoid addError(@Nonnull Exception var1)
private void addQueryKeyvoid addQueryKey(String var1)
protected void checkForUnexpectedComputeObjectvoid checkForUnexpectedComputeObject(@Nonnull JsonElement var1, String var2)
public void cleanupParametersvoid cleanupParameters()
protected BuilderDescriptor createDescriptorBuilderDescriptor createDescriptor(@Nonnull Builder<?> var1, String var2, String var3, BuilderManager var4, BuilderDescriptorState var5, String var6, String var7, Set<String> var8)
static Vector3d createVector3dVector3d createVector3d(@Nullable double[] var0, @Nonnull Supplier<Vector3d> var1)
protected void decreaseDepthvoid decreaseDepth()
private String defaultArrayToStringString defaultArrayToString(@Nullable String[] var1)
protected boolean expectBooleanboolean expectBoolean(@Nonnull JsonElement var1, String var2)
static boolean expectBooleanElementboolean expectBooleanElement(@Nonnull JsonElement var0, String var1)
protected double expectDoubledouble expectDouble(@Nonnull JsonElement var1, String var2)
protected double[] expectDoubleArraydouble[] expectDoubleArray(@Nonnull JsonElement var1, String var2, int var3, int var4)
protected double[] expectDoubleArraydouble[] expectDoubleArray(@Nonnull JsonElement var1, String var2, int var3)
protected int[] expectIntArrayint[] expectIntArray(@Nonnull JsonElement var1, String var2, int var3, int var4)
protected int[] expectIntArrayint[] expectIntArray(@Nonnull JsonElement var1, String var2, int var3)
protected int expectIntegerint expectInteger(@Nonnull JsonElement var1, String var2)
protected JsonArray expectJsonArrayJsonArray expectJsonArray(@Nonnull JsonElement var1, String var2)
protected JsonObject expectJsonObjectJsonObject expectJsonObject(@Nonnull JsonElement var1, String var2)
static JsonObject expectObjectJsonObject expectObject(@Nonnull JsonElement var0)
static JsonObject expectObjectJsonObject expectObject(@Nonnull JsonElement var0, String var1)
static String expectStringElementString expectStringElement(@Nonnull JsonElement var0, String var1)
for for(int var8 = 0; var8 < var6; var8++)
for for(int var8 = 0; var8 < var6; var8++)
for for(Enum var7 : var1)
for for(int var4 = 0; var4 < var1; var4++)
for for(String var8 : var0)
for for(int var5 = 0; var5 < var0.length; var5++)
for for(JsonElement var7 : var4)
for for(String var7 : var0)
for for(String var8 : var1)
for for(int var3 = 0; var3 < var2.length; var3++)
for for(String var16 : var11)
for for(ValueHolder var8 : this.dynamicHolders)
for for(ValueStoreValidator.ValueUsage var9 : this.valueStoreUsages)
abstract for for(int var7 = 0; var7 < var5.size()
abstract for for(int var5 = 0; var5 < var3.size()
public boolean getArrayboolean getArray(@Nonnull JsonElement var1, String var2, @Nonnull BuilderObjectArrayHelper<?, ?> var3, ArrayValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7, @Nonnull BuilderValidationHelper var8)
public boolean getAssetboolean getAsset(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<String> var3, String var4, @Nonnull AssetValidator var5, BuilderDescriptorState var6, String var7, @Nullable String var8)
public boolean getAssetboolean getAsset(@Nonnull JsonElement var1, String var2, @Nonnull AssetHolder var3, String var4, @Nonnull AssetValidator var5, BuilderDescriptorState var6, String var7, @Nullable String var8)
public boolean getAssetArrayboolean getAssetArray(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<String[]> var3, Function<String, String> var4, String[] var5, @Nonnull AssetValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public boolean getAssetArrayboolean getAssetArray(@Nonnull JsonElement var1, String var2, @Nonnull AssetArrayHolder var3, String[] var4, int var5, int var6, @Nonnull AssetValidator var7, BuilderDescriptorState var8, String var9, @Nullable String var10)
public boolean getBooleanboolean getBoolean(@Nonnull JsonElement var1, String var2, @Nonnull BooleanHolder var3, boolean var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public boolean getBooleanboolean getBoolean(@Nonnull JsonElement var1, String var2, @Nonnull BooleanConsumer var3, boolean var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public BuilderManager getBuilderManagerBuilderManager getBuilderManager()
public boolean getCodecObjectboolean getCodecObject(@Nonnull JsonElement var1, String var2, @Nonnull BuilderCodecObjectHelper<?> var3, BuilderDescriptorState var4, String var5, @Nullable String var6)
protected boolean getDefaultSubStateboolean getDefaultSubState(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<String> var3, StringValidator var4, BuilderDescriptorState var5, String var6, String var7)
public boolean getDictionaryboolean getDictionary(@Nonnull JsonElement var1, String var2, String var3, @Nonnull BiConsumer<String, JsonElement> var4, BuilderDescriptorState var5, String var6, String var7)
public boolean getDoubleboolean getDouble(@Nonnull JsonElement var1, String var2, @Nonnull DoubleConsumer var3, double var4, DoubleValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public boolean getDoubleboolean getDouble(@Nonnull JsonElement var1, String var2, @Nonnull DoubleHolder var3, double var4, DoubleValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public boolean getDoubleArrayboolean getDoubleArray(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<double[]> var3, double[] var4, int var5, int var6, DoubleArrayValidator var7, BuilderDescriptorState var8, String var9, @Nullable String var10)
public boolean getDoubleArrayboolean getDoubleArray(@Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, double[] var4, int var5, int var6, DoubleArrayValidator var7, BuilderDescriptorState var8, String var9, @Nullable String var10)
public boolean getDoubleRangeboolean getDoubleRange(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<double[]> var3, double[] var4, DoubleArrayValidator var5, BuilderDescriptorState var6, String var7, String var8)
public boolean getDoubleRangeboolean getDoubleRange(@Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, double[] var4, DoubleArrayValidator var5, BuilderDescriptorState var6, String var7, String var8)
protected boolean getExistentStateSetboolean getExistentStateSet(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<Int2ObjectMap<IntSet>> var3, @Nonnull StateMappingHelper var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public boolean getFloatboolean getFloat(@Nonnull JsonElement var1, String var2, @Nonnull FloatConsumer var3, float var4, DoubleValidator var5, BuilderDescriptorState var6, String var7, @Nullable String var8)
public boolean getFloatboolean getFloat(@Nonnull JsonElement var1, String var2, @Nonnull FloatHolder var3, double var4, DoubleValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public boolean getIntboolean getInt(@Nonnull JsonElement var1, String var2, @Nonnull IntConsumer var3, int var4, IntValidator var5, BuilderDescriptorState var6, String var7, @Nullable String var8)
public boolean getIntboolean getInt(@Nonnull JsonElement var1, String var2, @Nonnull IntHolder var3, int var4, IntValidator var5, BuilderDescriptorState var6, String var7, @Nullable String var8)
public boolean getIntArrayboolean getIntArray(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<int[]> var3, int[] var4, int var5, int var6, IntArrayValidator var7, BuilderDescriptorState var8, String var9, @Nullable String var10)
public boolean getIntArrayboolean getIntArray(@Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, int[] var4, int var5, int var6, IntArrayValidator var7, BuilderDescriptorState var8, String var9, @Nullable String var10)
public boolean getIntRangeboolean getIntRange(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<int[]> var3, int[] var4, IntArrayValidator var5, BuilderDescriptorState var6, String var7, String var8)
public boolean getIntRangeboolean getIntRange(@Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, int[] var4, IntArrayValidator var5, BuilderDescriptorState var6, String var7, String var8)
public boolean getObjectboolean getObject(@Nonnull JsonElement var1, String var2, @Nonnull BuilderObjectReferenceHelper<?> var3, BuilderDescriptorState var4, String var5, @Nullable String var6, @Nonnull BuilderValidationHelper var7)
public boolean getOverrideboolean getOverride(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<FeatureOverride> var3, BuilderDescriptorState var4, String var5, @Nullable String var6)
public boolean getOverrideboolean getOverride(@Nonnull JsonElement var1, String var2, @Nonnull EnumHolder<FeatureOverride> var3, BuilderDescriptorState var4, String var5, @Nullable String var6)
public void getParameterBlockvoid getParameterBlock(@Nonnull JsonElement var1, BuilderDescriptorState var2, String var3, String var4)
public boolean getStringboolean getString(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<String> var3, String var4, StringValidator var5, BuilderDescriptorState var6, String var7, @Nullable String var8)
public boolean getStringboolean getString(@Nonnull JsonElement var1, String var2, @Nonnull StringHolder var3, String var4, StringValidator var5, BuilderDescriptorState var6, String var7, @Nullable String var8)
public boolean getStringArrayboolean getStringArray(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<String[]> var3, Function<String, String> var4, String[] var5, StringArrayValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public boolean getStringArrayboolean getStringArray(@Nonnull JsonElement var1, String var2, @Nonnull StringArrayHolder var3, String[] var4, int var5, int var6, StringArrayValidator var7, BuilderDescriptorState var8, String var9, @Nullable String var10)
public boolean getVector3dboolean getVector3d(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<double[]> var3, double[] var4, DoubleArrayValidator var5, BuilderDescriptorState var6, String var7, String var8)
public boolean getVector3dboolean getVector3d(@Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, double[] var4, DoubleArrayValidator var5, BuilderDescriptorState var6, String var7, String var8)
private boolean hasOverriddenParameterboolean hasOverriddenParameter(String var1, ParameterType var2, @Nonnull FeatureEvaluatorHelper var3)
if if(this.evaluatorHelper != null)
if if(var4 != null)
if if(var6 >= var3 && var6 <= var4)
if if(var3)
if if(var4 == null)
if if(var4)
if if(var5 != null)
if if(!this.useDefaultsOnly)
if if(var3)
if if(var10)
if if(var2 == null)
if if(var4)
if if(var12)
if if(var4 != 0)
if if(var5 != Integer.MAX_VALUE)
if if(var4 != 0)
if if(var5 != Integer.MAX_VALUE)
if if(var5 != 0)
if if(var6 != Integer.MAX_VALUE)
if if(var10)
if if(var11)
if if(var4 != 0)
if if(var5 != Integer.MAX_VALUE)
if if(var5 != 0)
if if(var6 != Integer.MAX_VALUE)
if if(var12)
if if(var4 != 0)
if if(var5 != Integer.MAX_VALUE)
if if(var5 != 0)
if if(var6 != Integer.MAX_VALUE)
if if(var4 != 0)
if if(var5 != Integer.MAX_VALUE)
if if(var5 != 0)
if if(var6 != Integer.MAX_VALUE)
if if(var12)
if if(var4 != 0)
if if(var5 != Integer.MAX_VALUE)
if if(var5 != 0)
if if(var6 != Integer.MAX_VALUE)
if if(var10)
if if(var10)
if if(var9)
if if(var10)
if if(var1 == 0)
if if(var0 == null)
if if(var0 != null && var0.length != 0)
if if(var10 != null)
if if(var8 != null)
if if(var7 != null)
if if(this.useDefaultsOnly)
if if(var9 != null)
if if(var10)
if if(var2 != null)
if if(var0 == null)
if if(var0 == null)
if if(var12)
if if(var5 != 0)
if if(var6 != Integer.MAX_VALUE)
if if(var4 != 0)
if if(var5 != Integer.MAX_VALUE)
if if(var2 != null)
if if(var1 == null)
if if(var7 == var4)
if if(var6 == var4)
if if(var7 == var4)
if if(var6 == var4)
if if(!var4)
if if(!var3)
if if(!var4x && !var5)
if if(!var5 && !var4x)
if if(!var4)
if if(var4)
if if(var3)
if if(var4x && var5)
if if(var5 && var4x)
if if(var4)
if if(this.valueStoreUsages == null)
if if(this.valueStoreUsages == null)
if if(this.valueStoreUsages == null)
if if(!var3)
if if(var9 != null)
if if(var9 == null)
if if(var10 == null)
if if(var9 == null)
if if(var9 == null)
if if(!var5 || !var6)
if if(!var4 || !var5)
if if(this.dynamicHolders != null)
if if(this.valueStoreUsages != null)
if if(this.providedPrecedingClass != null)
if if(this.dynamicHolders == null)
if if(var2 == null)
protected void increaseDepthvoid increaseDepth()
protected boolean isComponentboolean isComponent()
protected boolean isCreatingDescriptorboolean isCreatingDescriptor()
protected boolean isCreatingSchemaboolean isCreatingSchema()
protected void overrideParametersvoid overrideParameters(@Nonnull String[] var1, @Nonnull ParameterType... var2)
private void postReadConfigvoid postReadConfig(@Nonnull JsonElement var1)
private void preReadConfigvoid preReadConfig(BuilderContext var1, BuilderManager var2, BuilderParameters var3, @Nullable BuilderValidationHelper var4)
protected void preventParameterOverridevoid preventParameterOverride()
protected void provideFeaturevoid provideFeature(@Nonnull Feature var1)
protected void provideFeaturevoid provideFeature(@Nonnull EnumSet<Feature> var1)
private void provideFeatureOrParametersvoid provideFeatureOrParameters(ProviderEvaluator var1)
protected void providePrecedingvoid providePreceding(@Nonnull Class<?> var1)
static boolean readBooleanboolean readBoolean(@Nonnull JsonObject var0, String var1, boolean var2)
public Builder<T> readCommonConfigBuilder<T> readCommonConfig(JsonElement var1)
public Builder<T> readConfigBuilder<T> readConfig(JsonElement var1)
static String readStringString readString(@Nonnull JsonObject var0, String var1)
static String readStringString readString(@Nonnull JsonObject var0, String var1, String var2)
static String[] readStringArrayString[] readStringArray(@Nonnull JsonObject var0, String var1, @Nonnull StringValidator var2, String[] var3)
protected void registerStateRequirervoid registerStateRequirer(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3)
protected void registerStateSensorvoid registerStateSensor(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3)
protected void registerStateSettervoid registerStateSetter(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3)
public void registerTagsvoid registerTags(@Nonnull Set<String> var1)
public void requireArrayvoid requireArray(@Nonnull JsonElement var1, String var2, @Nonnull BuilderObjectArrayHelper<?, ?> var3, ArrayValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7, @Nonnull BuilderValidationHelper var8)
public void requireArrayvoid requireArray(@Nonnull JsonElement var1, @Nonnull BuilderObjectArrayHelper<?, ?> var2, ArrayValidator var3, BuilderDescriptorState var4, String var5, @Nullable String var6, @Nonnull BuilderValidationHelper var7)
private void requireArray0void requireArray0(@Nonnull JsonElement var1, String var2, @Nonnull BuilderObjectArrayHelper<?, ?> var3, @Nullable ArrayValidator var4, @Nonnull BuilderValidationHelper var5)
public void requireAssetvoid requireAsset(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<String> var3, @Nonnull AssetValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireAssetvoid requireAsset(@Nonnull JsonElement var1, String var2, @Nonnull AssetHolder var3, @Nonnull AssetValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireAssetArrayvoid requireAssetArray(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<String[]> var3, Function<String, String> var4, @Nonnull AssetValidator var5, BuilderDescriptorState var6, String var7, @Nullable String var8)
public void requireAssetArrayvoid requireAssetArray(@Nonnull JsonElement var1, String var2, @Nonnull AssetArrayHolder var3, int var4, int var5, @Nonnull AssetValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public void requireBooleanvoid requireBoolean(@Nonnull JsonElement var1, String var2, @Nonnull BooleanHolder var3, BuilderDescriptorState var4, String var5, @Nullable String var6)
public void requireBooleanvoid requireBoolean(@Nonnull JsonElement var1, String var2, @Nonnull BooleanConsumer var3, BuilderDescriptorState var4, String var5, @Nullable String var6)
public void requireCodecObjectvoid requireCodecObject(@Nonnull JsonElement var1, String var2, @Nonnull BuilderCodecObjectHelper<?> var3, BuilderDescriptorState var4, String var5, @Nullable String var6)
protected void requireContextvoid requireContext(@Nonnull EnumSet<InstructionType> var1, EnumSet<ComponentContext> var2)
public void requireDictionaryvoid requireDictionary(@Nonnull JsonElement var1, String var2, String var3, @Nonnull BiConsumer<String, JsonElement> var4, BuilderDescriptorState var5, String var6, String var7)
public void requireDoublevoid requireDouble(@Nonnull JsonElement var1, String var2, @Nonnull DoubleConsumer var3, DoubleValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireDoublevoid requireDouble(@Nonnull JsonElement var1, String var2, @Nonnull DoubleHolder var3, DoubleValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireDoubleArrayvoid requireDoubleArray(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<double[]> var3, int var4, int var5, DoubleArrayValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public void requireDoubleArrayvoid requireDoubleArray(@Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, int var4, int var5, DoubleArrayValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public boolean requireDoubleIfNotOverriddenboolean requireDoubleIfNotOverridden(@Nonnull JsonElement var1, String var2, @Nonnull DoubleHolder var3, DoubleValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireDoubleRangevoid requireDoubleRange(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<double[]> var3, DoubleArrayValidator var4, BuilderDescriptorState var5, String var6, String var7)
public void requireDoubleRangevoid requireDoubleRange(@Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, DoubleArrayValidator var4, BuilderDescriptorState var5, String var6, String var7)
public void requireEmbeddableArrayvoid requireEmbeddableArray(@Nonnull JsonElement var1, String var2, @Nonnull BuilderObjectArrayHelper<?, ?> var3, @Nonnull ArrayValidator var4, BuilderDescriptorState var5, String var6, String var7, @Nonnull BuilderValidationHelper var8)
protected void requireFeaturevoid requireFeature(@Nonnull EnumSet<Feature> var1)
private void requireFeaturevoid requireFeature(@Nonnull RequiredFeatureValidator var1)
protected void requireFeatureIfvoid requireFeatureIf(String var1, boolean var2, boolean var3, @Nonnull EnumSet<Feature> var4)
protected void requireFeatureIfvoid requireFeatureIf(@Nonnull BooleanHolder var1, boolean var2, @Nonnull EnumSet<Feature> var3)
public void requireFloatvoid requireFloat(@Nonnull JsonElement var1, String var2, @Nonnull FloatConsumer var3, DoubleValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireFloatvoid requireFloat(@Nonnull JsonElement var1, String var2, @Nonnull FloatHolder var3, DoubleValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
protected void requireInstructionTypevoid requireInstructionType(@Nonnull EnumSet<InstructionType> var1)
public void requireIntvoid requireInt(@Nonnull JsonElement var1, String var2, @Nonnull IntConsumer var3, IntValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireIntvoid requireInt(@Nonnull JsonElement var1, String var2, @Nonnull IntHolder var3, IntValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireIntArrayvoid requireIntArray(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<int[]> var3, int var4, int var5, IntArrayValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public void requireIntArrayvoid requireIntArray(@Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, int var4, int var5, IntArrayValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public boolean requireIntIfNotOverriddenboolean requireIntIfNotOverridden(@Nonnull JsonElement var1, String var2, @Nonnull IntHolder var3, IntValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireIntRangevoid requireIntRange(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<int[]> var3, IntArrayValidator var4, BuilderDescriptorState var5, String var6, String var7)
public void requireIntRangevoid requireIntRange(@Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, IntArrayValidator var4, BuilderDescriptorState var5, String var6, String var7)
protected void requireIsolatedForEachvoid requireIsolatedForEach()
protected void requireIsolatedForEachIfvoid requireIsolatedForEachIf(@Nonnull String var1, boolean var2, boolean var3)
protected void requireNotInForEachvoid requireNotInForEach()
protected void requireNotInForEachIfvoid requireNotInForEachIf(@Nonnull String var1, boolean var2, boolean var3)
public void requireObjectvoid requireObject(@Nonnull JsonElement var1, String var2, @Nonnull BuilderObjectReferenceHelper<?> var3, BuilderDescriptorState var4, String var5, @Nullable String var6, @Nonnull BuilderValidationHelper var7)
private boolean requireOrGetDictionaryboolean requireOrGetDictionary(@Nonnull JsonElement var1, String var2, String var3, @Nonnull BiConsumer<String, JsonElement> var4, boolean var5, BuilderDescriptorState var6, String var7, String var8)
protected void requirePrecedingvoid requirePreceding(@Nonnull Class<?> var1, @Nonnull BuilderDescriptorState var2, @Nonnull String var3, @Nullable String var4)
protected void requireStateStringvoid requireStateString(@Nonnull JsonElement var1, String var2, boolean var3, @Nonnull TriConsumer<String, String, Boolean> var4, BuilderDescriptorState var5, String var6, String var7)
public void requireStringvoid requireString(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<String> var3, StringValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireStringvoid requireString(@Nonnull JsonElement var1, String var2, @Nonnull StringHolder var3, StringValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireStringArrayvoid requireStringArray(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<String[]> var3, Function<String, String> var4, StringArrayValidator var5, BuilderDescriptorState var6, String var7, @Nullable String var8)
public void requireStringArrayvoid requireStringArray(@Nonnull JsonElement var1, String var2, @Nonnull StringArrayHolder var3, int var4, int var5, StringArrayValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public boolean requireStringIfNotOverriddenboolean requireStringIfNotOverridden(@Nonnull JsonElement var1, String var2, @Nonnull StringHolder var3, StringValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7)
public void requireTemporalArrayvoid requireTemporalArray(@Nonnull JsonElement var1, String var2, @Nonnull TemporalArrayHolder var3, int var4, int var5, TemporalArrayValidator var6, BuilderDescriptorState var7, String var8, @Nullable String var9)
public void requireTemporalRangevoid requireTemporalRange(@Nonnull JsonElement var1, String var2, @Nonnull TemporalArrayHolder var3, TemporalArrayValidator var4, BuilderDescriptorState var5, String var6, String var7)
public void requireVector3dvoid requireVector3d(@Nonnull JsonElement var1, String var2, @Nonnull Consumer<double[]> var3, DoubleArrayValidator var4, BuilderDescriptorState var5, String var6, String var7)
public void requireVector3dvoid requireVector3d(@Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, DoubleArrayValidator var4, BuilderDescriptorState var5, String var6, String var7)
private void resolveFeatureProviderReverencesvoid resolveFeatureProviderReverences(BuilderManager var1)
private boolean runLoadTimeValidationHelperboolean runLoadTimeValidationHelper(String var1, NPCLoadTimeValidationHelper var2, ExecutionContext var3, @Nonnull List<String> var4)
protected void runLoadTimeValidationHelper0void runLoadTimeValidationHelper0(String var1, NPCLoadTimeValidationHelper var2, ExecutionContext var3, List<String> var4)
protected void setNotComponentvoid setNotComponent()
abstract return stringToEnumreturn stringToEnum(var1, var2, var3)
protected <E extends Enum<E>> void toSet<E extends Enum<E>> void toSet(String var1, @Nonnull Class<E> var2, @Nonnull EnumSet<E> var3, @Nonnull String var4)
protected <E extends Enum<E>> void toSet<E extends Enum<E>> void toSet(String var1, @Nonnull Class<E> var2, @Nonnull EnumSet<E> var3, @Nonnull JsonArray var4)
protected <E extends Enum<E>> void toSet<E extends Enum<E>> void toSet(String var1, @Nonnull Class<E> var2, @Nonnull EnumSet<E> var3, @Nonnull JsonElement var4)
private void trackDynamicHoldervoid trackDynamicHolder(@Nonnull ValueHolder var1)
private void validateAndSetvoid validateAndSet(String var1, @Nullable StringValidator var2, @Nonnull Consumer<String> var3, String var4)
private void validateAndSetvoid validateAndSet(String[] var1, @Nullable StringArrayValidator var2, @Nonnull Consumer<String[]> var3, String var4)
private void validateAndSetvoid validateAndSet(double var1, @Nullable DoubleValidator var3, @Nonnull DoubleConsumer var4, String var5)
private void validateAndSetvoid validateAndSet(int[] var1, @Nullable IntArrayValidator var2, @Nonnull Consumer<int[]> var3, String var4)
private void validateAndSetvoid validateAndSet(double[] var1, @Nullable DoubleArrayValidator var2, @Nonnull Consumer<double[]> var3, String var4)
private void validateAndSetvoid validateAndSet(float var1, @Nullable DoubleValidator var2, @Nonnull FloatConsumer var3, String var4)
private void validateAndSetvoid validateAndSet(int var1, @Nullable IntValidator var2, @Nonnull IntConsumer var3, String var4)
private void validateAndSetvoid validateAndSet(String var1, @Nullable AssetValidator var2, @Nonnull Consumer<String> var3, String var4)
private void validateAndSetvoid validateAndSet(@Nullable String[] var1, @Nullable AssetValidator var2, @Nonnull Consumer<String[]> var3, String var4)
protected void validateAnyvoid validateAny(String var1, boolean var2, String var3, boolean var4)
protected void validateAnyvoid validateAny(@Nonnull BooleanHolder var1, @Nonnull BooleanHolder var2)
protected void validateAnyvoid validateAny(@Nonnull BooleanHolder var1, String var2, boolean var3)
protected void validateAnyvoid validateAny(String var1, boolean var2, String var3, boolean var4, String var5, boolean var6)
protected void validateAnyvoid validateAny(@Nonnull String[] var1, @Nonnull boolean[] var2)
protected void validateAnyPresentvoid validateAnyPresent(String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4)
protected void validateAnyPresentvoid validateAnyPresent(String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4, String var5, @Nonnull BuilderObjectHelper<?> var6)
protected void validateAnyPresentvoid validateAnyPresent(@Nonnull String[] var1, @Nonnull BuilderObjectHelper<?>[] var2)
static boolean validateAssetboolean validateAsset(@Nullable String var0, @Nonnull AssetValidator var1, String var2, boolean var3)
abstract validateAsset validateAsset(var7, var1, var2, var3)
static boolean validateAssetListboolean validateAssetList(@Nullable String[] var0, @Nonnull AssetValidator var1, String var2, boolean var3)
protected void validateAtMostOnevoid validateAtMostOne(@Nonnull BooleanHolder var1, @Nonnull BooleanHolder var2)
protected void validateAtMostOnevoid validateAtMostOne(@Nonnull BooleanHolder var1, String var2, boolean var3)
protected void validateAtMostOneStringvoid validateAtMostOneString(String var1, String var2, String var3, String var4)
private void validateBooleanImplicationvoid validateBooleanImplication(String[] var1, @Nonnull boolean[] var2, boolean var3, String[] var4, @Nonnull boolean[] var5, boolean var6, boolean var7)
protected void validateBooleanImplicationAllAntecedentsvoid validateBooleanImplicationAllAntecedents(String[] var1, @Nonnull boolean[] var2, boolean var3, String[] var4, @Nonnull boolean[] var5, boolean var6)
protected void validateBooleanImplicationAnyAntecedentvoid validateBooleanImplicationAnyAntecedent(String[] var1, @Nonnull boolean[] var2, boolean var3, String[] var4, @Nonnull boolean[] var5, boolean var6)
protected void validateDoubleRelationvoid validateDoubleRelation(String var1, double var2, @Nonnull RelationalOperator var4, String var5, double var6)
protected void validateDoubleRelationvoid validateDoubleRelation(@Nonnull DoubleHolder var1, @Nonnull RelationalOperator var2, String var3, double var4)
protected void validateDoubleRelationvoid validateDoubleRelation(String var1, double var2, @Nonnull RelationalOperator var4, @Nonnull DoubleHolder var5)
protected void validateDoubleRelationvoid validateDoubleRelation(@Nonnull DoubleHolder var1, @Nonnull RelationalOperator var2, @Nonnull DoubleHolder var3)
private boolean validateDynamicHolderboolean validateDynamicHolder(String var1, @Nonnull ValueHolder var2, ExecutionContext var3, @Nonnull List<String> var4)
protected void validateExactlyOneZerovoid validateExactlyOneZero(String var1, double var2, String var4, double var5)
protected void validateExactlyOneZerovoid validateExactlyOneZero(@Nonnull DoubleHolder var1, String var2, double var3)
protected void validateExactlyOneZerovoid validateExactlyOneZero(String var1, double var2, @Nonnull DoubleHolder var4)
protected void validateExactlyOneZerovoid validateExactlyOneZero(@Nonnull DoubleHolder var1, @Nonnull DoubleHolder var2)
protected void validateExistsIfParameterSetvoid validateExistsIfParameterSet(String var1, boolean var2, String var3, @Nonnull BuilderObjectHelper<?> var4)
protected void validateFloatRelationvoid validateFloatRelation(String var1, float var2, @Nonnull RelationalOperator var3, String var4, float var5)
protected void validateFloatRelationvoid validateFloatRelation(@Nonnull FloatHolder var1, @Nonnull RelationalOperator var2, String var3, float var4)
protected void validateFloatRelationvoid validateFloatRelation(String var1, float var2, @Nonnull RelationalOperator var3, @Nonnull FloatHolder var4)
protected void validateFloatRelationvoid validateFloatRelation(@Nonnull FloatHolder var1, @Nonnull RelationalOperator var2, @Nonnull FloatHolder var3)
protected void validateIntRelationvoid validateIntRelation(String var1, int var2, @Nonnull RelationalOperator var3, String var4, int var5)
protected void validateIntRelationvoid validateIntRelation(@Nonnull IntHolder var1, @Nonnull RelationalOperator var2, String var3, int var4)
protected void validateIntRelationvoid validateIntRelation(String var1, int var2, @Nonnull RelationalOperator var3, @Nonnull IntHolder var4)
protected void validateIntRelationvoid validateIntRelation(@Nonnull IntHolder var1, @Nonnull RelationalOperator var2, @Nonnull IntHolder var3)
protected void validateIntRelationIfBooleanIsvoid validateIntRelationIfBooleanIs(boolean var1, boolean var2, @Nonnull IntHolder var3, @Nonnull RelationalOperator var4, @Nonnull IntHolder var5)
protected void validateIsComponentvoid validateIsComponent()
protected <K> void validateNoDuplicates<K> void validateNoDuplicates(Iterable<K> var1, String var2)
protected void validateNotAllStringsEmptyvoid validateNotAllStringsEmpty(String var1, String var2, String var3, String var4)
protected void validateOneOrNonePresentvoid validateOneOrNonePresent(String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4)
protected void validateOneOrNonePresentvoid validateOneOrNonePresent(String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4, String var5, @Nonnull BuilderObjectHelper<?> var6)
protected void validateOneOrNonePresentvoid validateOneOrNonePresent(@Nonnull String[] var1, @Nonnull BuilderObjectHelper<?>[] var2)
protected void validateOneOrNonePresentvoid validateOneOrNonePresent(@Nonnull String[] var1, @Nonnull boolean[] var2)
protected void validateOnePresentvoid validateOnePresent(String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4)
protected void validateOnePresentvoid validateOnePresent(String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4, String var5, @Nonnull BuilderObjectHelper<?> var6)
protected void validateOnePresentvoid validateOnePresent(@Nonnull String[] var1, @Nonnull BuilderObjectHelper<?>[] var2)
protected void validateOnePresentvoid validateOnePresent(@Nonnull String[] var1, @Nonnull boolean[] var2)
protected void validateOneSetAssetvoid validateOneSetAsset(@Nonnull AssetHolder var1, String var2, String var3)
protected void validateOneSetAssetvoid validateOneSetAsset(@Nonnull AssetHolder var1, @Nonnull AssetHolder var2)
protected void validateOneSetAssetArrayvoid validateOneSetAssetArray(@Nonnull AssetArrayHolder var1, String var2, String[] var3)
protected void validateOneSetAssetArrayvoid validateOneSetAssetArray(@Nonnull AssetArrayHolder var1, @Nonnull AssetArrayHolder var2)
protected void validateOneSetStringvoid validateOneSetString(String var1, String var2, String var3, String var4)
private void validateOverriddenParametervoid validateOverriddenParameter(String var1, @Nonnull ParameterType var2, @Nonnull FeatureEvaluatorHelper var3)
private void validateRequiresFeatureIfvoid validateRequiresFeatureIf(String var1, boolean var2, boolean var3, @Nonnull EnumSet<Feature> var4, @Nonnull FeatureEvaluatorHelper var5)
private void validateSingleAssetvoid validateSingleAsset(String var1, @Nonnull AssetValidator var2, String var3)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.asset.builder;

class="kw">import com.google.gson.JsonArray;
class="kw">import com.google.gson.JsonElement;
class="kw">import com.google.gson.JsonObject;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.schema.SchemaContext;
class="kw">import com.hypixel.hytale.codec.schema.config.ArraySchema;
class="kw">import com.hypixel.hytale.codec.schema.config.BooleanSchema;
class="kw">import com.hypixel.hytale.codec.schema.config.IntegerSchema;
class="kw">import com.hypixel.hytale.codec.schema.config.NumberSchema;
class="kw">import com.hypixel.hytale.codec.schema.config.ObjectSchema;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import com.hypixel.hytale.codec.schema.config.StringSchema;
class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import com.hypixel.hytale.common.util.StringUtil;
class="kw">import com.hypixel.hytale.function.consumer.BooleanConsumer;
class="kw">import com.hypixel.hytale.function.consumer.FloatConsumer;
class="kw">import com.hypixel.hytale.function.consumer.TriConsumer;
class="kw">import com.hypixel.hytale.logger.sentry.SkipSentryException;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.expression.BuilderExpressionDynamic;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.AssetArrayHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.AssetHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.BooleanHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.DoubleHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.EnumArrayHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.EnumHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.EnumSetHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.FloatHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.IntHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.NumberArrayHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.StringArrayHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.StringHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.TemporalArrayHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.holder.ValueHolder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.providerevaluators.ParameterProviderEvaluator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.providerevaluators.ParameterType;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.providerevaluators.PrecedingProviderEvaluator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.providerevaluators.ProviderEvaluator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.providerevaluators.UnconditionalFeatureProviderEvaluator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.providerevaluators.UnconditionalParameterProviderEvaluator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.util.StringListHelpers;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.AnyBooleanValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.AnyPresentValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.ArrayValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.ArraysOneSetValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.AssetValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.AtMostOneBooleanValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.AttributeRelationValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.BooleanImplicationValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.ComponentOnlyValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleArrayValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.EnumArrayValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.ExactlyOneZeroValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.ExistsIfParameterSetValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.ForEachContextValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.InstructionContextValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.IntArrayValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.IntValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.NoDuplicatesValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.OneOrNonePresentValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.OnePresentValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.RelationalOperator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.RequiredFeatureValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.RequiresFeatureIfEnumValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.RequiresFeatureIfValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.RequiresOneOfFeaturesValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.RequiresPrecedingValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.StateStringValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.StringArrayNoEmptyStringsValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.StringArrayValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.StringValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.StringsAtMostOneValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.StringsNotEmptyValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.StringsOneSetValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.TemporalArrayValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.ValidateAssetIfEnumIsValidator;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.ValidateIfEnumIsValidator;
class="kw">import com.hypixel.hytale.server.npc.decisionmaker.core.Evaluator;
class="kw">import com.hypixel.hytale.server.npc.role.RoleDebugFlags;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
class="kw">import com.hypixel.hytale.server.npc.util.expression.Scope;
class="kw">import com.hypixel.hytale.server.npc.validators.NPCLoadTimeValidationHelper;
class="kw">import com.hypixel.hytale.server.npc.valuestore.ValueStore;
class="kw">import com.hypixel.hytale.server.npc.valuestore.ValueStoreValidator;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.lang.reflect.Array;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Arrays;
class="kw">import java.util.EnumSet;
class="kw">import java.util.HashSet;
class="kw">import java.util.Iterator;
class="kw">import java.util.LinkedHashMap;
class="kw">import java.util.List;
class="kw">import java.util.Locale;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.function.BiConsumer;
class="kw">import java.util.function.Consumer;
class="kw">import java.util.function.DoubleConsumer;
class="kw">import java.util.function.Function;
class="kw">import java.util.function.IntConsumer;
class="kw">import java.util.function.Supplier;
class="kw">import java.util.function.ToIntFunction;
class="kw">import java.util.logging.Level;
class="kw">import java.util.regex.Pattern;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class="kw">abstract class BuilderBase<T> class="kw">implements Builder<T> {
   class="kw">private class="kw">static class="kw">final Pattern PATTERN = Pattern.compile("\\s*,\\s*");
   class="kw">protected String fileName;
   @Nullable
   class="kw">protected Set<String> queriedKeys = new HashSet<>();
   class="kw">protected boolean useDefaultsOnly;
   class="kw">protected String label;
   class="kw">protected String typeName;
   class="kw">protected FeatureEvaluatorHelper evaluatorHelper;
   class="kw">protected InternalReferenceResolver internalReferenceResolver;
   class="kw">protected StateMappingHelper stateHelper;
   class="kw">protected InstructionContextHelper instructionContextHelper;
   class="kw">protected ExtraInfo extraInfo;
   class="kw">protected List<Evaluator<?>> evaluators;
   class="kw">protected BuilderValidationHelper validationHelper;
   @Nullable
   class="kw">protected BuilderDescriptor builderDescriptor;
   class="kw">protected BuilderParameters builderParameters;
   class="kw">protected BuilderManager builderManager;
   class="kw">protected BuilderContext owner;
   @Nullable
   class="kw">private Class<?> requiredPrecedingClass;
   @Nullable
   class="kw">private Class<?> providedPrecedingClass;
   @Nullable
   class="kw">protected List<String> readErrors;
   class="kw">private List<ValueHolder> dynamicHolders;
   class="kw">private List<ValueStoreValidator.ValueUsage> valueStoreUsages;
   @Nullable
   class="kw">protected ObjectSchema builderSchema;
   class="kw">protected Schema builderSchemaRaw;
   @Nullable
   class="kw">protected SchemaContext builderSchemaContext;

   class="kw">public BuilderBase() {
   }

   @Override
   class="kw">public void setTypeName(String var1) {
      this.typeName = var1;
   }

   @Override
   class="kw">public String getTypeName() {
      class="kw">return this.typeName;
   }

   @Override
   class="kw">public String getLabel() {
      class="kw">return this.label;
   }

   @Override
   class="kw">public void setLabel(String var1) {
      this.label = var1;
   }

   @Override
   class="kw">public FeatureEvaluatorHelper getEvaluatorHelper() {
      class="kw">return this.evaluatorHelper;
   }

   @Override
   class="kw">public StateMappingHelper getStateMappingHelper() {
      class="kw">return this.stateHelper;
   }

   @Override
   class="kw">public InstructionContextHelper getInstructionContextHelper() {
      class="kw">return this.instructionContextHelper;
   }

   @Override
   class="kw">public void validateReferencedProvidedFeatures(BuilderManager var1, ExecutionContext var2) {
      if (this.evaluatorHelper != null) {
         this.evaluatorHelper.validateProviderReferences(var1, var2);
      }
   }

   @Override
   class="kw">public boolean canRequireFeature() {
      class="kw">return false;
   }

   @Override
   class="kw">public boolean excludeFromRegularBuilding() {
      class="kw">return false;
   }

   @Override
   class="kw">public class="kw">final void readConfig(BuilderContext var1, @Nonnull JsonElement var2, BuilderManager var3, BuilderParameters var4, BuilderValidationHelper var5) {
      this.preReadConfig(var1, var3, var4, var5);
      this.readCommonConfig(var2);
      this.readConfig(var2);
      this.postReadConfig(var2);
   }

   class="kw">private void preReadConfig(BuilderContext var1, BuilderManager var2, BuilderParameters var3, @Nullable BuilderValidationHelper var4) {
      this.owner = var1;
      this.useDefaultsOnly = false;
      this.builderParameters = var3;
      this.builderManager = var2;
      this.queriedKeys.add("Comment");
      this.queriedKeys.add("$Title");
      this.queriedKeys.add("$Comment");
      this.queriedKeys.add("$Author");
      this.queriedKeys.add("$TODO");
      this.queriedKeys.add("$Position");
      this.queriedKeys.add("$FloatingFunctionNodes");
      this.queriedKeys.add("$Groups");
      this.queriedKeys.add("$WorkspaceID");
      this.queriedKeys.add("$NodeEditorMetadata");
      this.queriedKeys.add("$NodeId");
      if (var4 != null) {
         this.validationHelper = var4;
         this.fileName = var4.getName();
         this.evaluatorHelper = var4.getFeatureEvaluatorHelper();
         this.internalReferenceResolver = var4.getInternalReferenceResolver();
         this.stateHelper = var4.getStateMappingHelper();
         this.instructionContextHelper = var4.getInstructionContextHelper();
         this.extraInfo = var4.getExtraInfo();
         this.evaluators = var4.getEvaluators();
         this.readErrors = var4.getReadErrors();
      }
   }

   class="kw">private void addQueryKey(String var1) {
      if (!this.queriedKeys.add(var1)) {
         throw new IllegalArgumentException(String.valueOf(var1));
      }
   }

   @Override
   class="kw">public BuilderContext getOwner() {
      class="kw">return this.owner;
   }

   @Override
   class="kw">public void ignoreAttribute(String var1) {
      this.queriedKeys.add(var1);
   }

   class="kw">private void postReadConfig(@Nonnull JsonElement var1) {
      if (this.builderDescriptor == null && var1.isJsonObject()) {
         this.queriedKeys.add("Type");

         for (Entry var3 : var1.getAsJsonObject().entrySet()) {
            String var4 = var3.getKey();
            if (!this.queriedKeys.contains(var4)) {
               String var5 = var1.toString();
               NPCPlugin.get()
                  .getLogger()
                  .at(Level.WARNING)
                  .log(
                     "Unknown JSON attribute '%s' found in %s: %s (JSON: %s)",
                     var4,
                     this.getBreadCrumbs(),
                     this.builderParameters.getFileName(),
                     var5.length() > 60 ? var5.substring(60) + "..." : var5
                  );
            }
         }
      }

      this.queriedKeys = null;
      this.readErrors = null;
   }

   class="kw">public Builder<T> readCommonConfig(JsonElement var1) {
      class="kw">return this;
   }

   class="kw">public Builder<T> readConfig(JsonElement var1) {
      class="kw">return this;
   }

   class="kw">public BuilderManager getBuilderManager() {
      class="kw">return this.builderManager;
   }

   @Override
   class="kw">public BuilderParameters getBuilderParameters() {
      class="kw">return this.builderParameters;
   }

   class="kw">protected JsonObject expectJsonObject(@Nonnull JsonElement var1, String var2) {
      if (var1.isJsonObject()) {
         class="kw">return var1.getAsJsonObject();
      }

      this.checkForUnexpectedComputeObject(var1, var2);
      throw new IllegalStateException(
         "Expected object when looking for parameter \"" + var2 + "\" but found '" + var1 + "' in context " + this.getBreadCrumbs()
      );
   }

   class="kw">protected JsonArray expectJsonArray(@Nonnull JsonElement var1, String var2) {
      if (var1.isJsonArray()) {
         class="kw">return var1.getAsJsonArray();
      }

      this.checkForUnexpectedComputeObject(var1, var2);
      throw new IllegalStateException("Expected array when looking for parameter \"" + var2 + "\" but found '" + var1 + "' in context " + this.getBreadCrumbs());
   }

   @Nullable
   class="kw">protected String expectString(@Nonnull JsonElement var1, String var2) {
      if (var1.isJsonPrimitive() && var1.getAsJsonPrimitive().isString()) {
         class="kw">return var1.getAsJsonPrimitive().getAsString();
      }

      if (var1.isJsonNull()) {
         class="kw">return null;
      }

      this.checkForUnexpectedComputeObject(var1, var2);
      throw new IllegalStateException(
         "Expected string when looking for parameter \"" + var2 + "\" but found '" + var1 + "' in context " + this.getBreadCrumbs()
      );
   }

   class="kw">protected double expectDouble(@Nonnull JsonElement var1, String var2) {
      if (var1.isJsonPrimitive() && var1.getAsJsonPrimitive().isNumber()) {
         try {
            class="kw">return var1.getAsJsonPrimitive().getAsDouble();
         } catch (NumberFormatException var4) {
            throw new IllegalStateException(
               "Invalid number when looking for parameter \"" + var2 + "\", found '" + var1 + "' in context " + this.getBreadCrumbs(), var4
            );
         }
      } else {
         this.checkForUnexpectedComputeObject(var1, var2);
         throw new IllegalStateException(
            "Expected number when looking for parameter \"" + var2 + "\" but found '" + var1 + "' in context " + this.getBreadCrumbs()
         );
      }
   }

   class="kw">protected int expectInteger(@Nonnull JsonElement var1, String var2) {
      if (var1.isJsonPrimitive() && var1.getAsJsonPrimitive().isNumber()) {
         try {
            class="kw">return var1.getAsJsonPrimitive().getAsInt();
         } catch (NumberFormatException var4) {
            throw new IllegalStateException(
               "Invalid integer number when looking for parameter \"" + var2 + "\", found '" + var1 + "' in context " + this.getBreadCrumbs(), var4
            );
         }
      } else {
         this.checkForUnexpectedComputeObject(var1, var2);
         throw new IllegalStateException(
            "Expected integer number when looking for parameter \"" + var2 + "\" but found '" + var1 + "' in context " + this.getBreadCrumbs()
         );
      }
   }

   class="kw">protected boolean expectBoolean(@Nonnull JsonElement var1, String var2) {
      if (var1.isJsonPrimitive() && var1.getAsJsonPrimitive().isBoolean()) {
         class="kw">return var1.getAsJsonPrimitive().getAsBoolean();
      }

      this.checkForUnexpectedComputeObject(var1, var2);
      throw new IllegalStateException(
         "Expected boolean value when looking for parameter \"" + var2 + "\" but found '" + var1 + "' in context " + this.getBreadCrumbs()
      );
   }

   class="kw">protected int[] expectIntArray(@Nonnull JsonElement var1, String var2, int var3, int var4) {
      JsonArray var5 = this.expectJsonArray(var1, var2, var3, var4);
      int var6 = var5.size();
      int[] var7 = new int[var6];

      for (int var8 = 0; var8 < var6; var8++) {
         var7[var8] = this.expectInteger(var5.get(var8), var2);
      }

      class="kw">return var7;
   }

   class="kw">protected int[] expectIntArray(@Nonnull JsonElement var1, String var2, int var3) {
      class="kw">return this.expectIntArray(var1, var2, var3, var3);
   }

   class="kw">protected double[] expectDoubleArray(@Nonnull JsonElement var1, String var2, int var3, int var4) {
      JsonArray var5 = this.expectJsonArray(var1, var2, var3, var4);
      int var6 = var5.size();
      double[] var7 = new double[var6];

      for (int var8 = 0; var8 < var6; var8++) {
         var7[var8] = this.expectDouble(var5.get(var8), var2);
      }

      class="kw">return var7;
   }

   class="kw">protected double[] expectDoubleArray(@Nonnull JsonElement var1, String var2, int var3) {
      class="kw">return this.expectDoubleArray(var1, var2, var3, var3);
   }

   @Nonnull
   class="kw">protected JsonArray expectJsonArray(@Nonnull JsonElement var1, String var2, int var3, int var4) {
      JsonArray var5 = this.expectJsonArray(var1, var2);
      int var6 = var5.size();
      if (var6 >= var3 && var6 <= var4) {
         class="kw">return var5;
      } else if (var4 == var3) {
         throw new IllegalStateException(
            "Expected array with "
               + var4
               + " elements when looking for parameter \""
               + var2
               + "\" but found "
               + var6
               + " elements in context "
               + this.getBreadCrumbs()
         );
      } else {
         throw new IllegalStateException(
            "Expected array with "
               + var3
               + " to "
               + var4
               + " elements when looking for parameter \""
               + var2
               + "\" but found "
               + var6
               + " elements in context "
               + this.getBreadCrumbs()
         );
      }
   }

   class="kw">protected void checkForUnexpectedComputeObject(@Nonnull JsonElement var1, String var2) {
      if (var1.isJsonObject() && var1.getAsJsonObject().has("Compute")) {
         throw new IllegalStateException(
            "Parameter \""
               + var2
               + "\" of "
               + this.category().getSimpleName()
               + " "
               + this.getTypeName()
               + " is not computable (yet) in context "
               + this.getBreadCrumbs()
         );
      }
   }

   @Nonnull
   class="kw">protected JsonElement getRequiredJsonElement(@Nonnull JsonElement var1, String var2, boolean var3) {
      if (var3) {
         this.addQueryKey(var2);
      }

      JsonElement var4 = this.expectJsonObject(var1, var2).get(var2);
      if (var4 == null) {
         throw new IllegalStateException("Parameter \"" + var2 + "\" is missing in context " + this.getBreadCrumbs());
      } else {
         class="kw">return var4;
      }
   }

   @Nonnull
   class="kw">protected JsonElement getRequiredJsonElement(@Nonnull JsonElement var1, String var2) {
      class="kw">return this.getRequiredJsonElement(var1, var2, true);
   }

   @Nullable
   class="kw">protected JsonElement getRequiredJsonElementIfNotOverridden(@Nonnull JsonElement var1, String var2, @Nonnull ParameterType var3, boolean var4) {
      if (var4) {
         this.addQueryKey(var2);
      }

      JsonElement var5 = this.expectJsonObject(var1, var2).get(var2);
      if (var5 != null) {
         class="kw">return var5;
      } else if (this.evaluatorHelper.belongsToFeatureRequiringComponent()) {
         this.evaluatorHelper.addComponentRequirementValidator((var3x, var4x) -> this.validateOverriddenParameter(var2, var3, var3x));
         class="kw">return null;
      } else if (this.hasOverriddenParameter(var2, var3, this.evaluatorHelper)) {
         class="kw">return null;
      } else if (this.evaluatorHelper.requiresProviderReferenceEvaluation()) {
         this.evaluatorHelper.addProviderReferenceValidator((var3x, var4x) -> {
            this.resolveFeatureProviderReverences(var3x);
            this.validateOverriddenParameter(var2, var3, this.evaluatorHelper);
         });
         class="kw">return null;
      } else {
         throw new IllegalStateException(
            String.format(
               "Parameter %s is missing and either not provided by a sensor, or provided with the wrong parameter type (expected %s) in context %s",
               var2,
               var3.get(),
               this.getBreadCrumbs()
            )
         );
      }
   }

   @Nullable
   class="kw">protected JsonElement getRequiredJsonElementIfNotOverridden(@Nonnull JsonElement var1, String var2, @Nonnull ParameterType var3) {
      class="kw">return this.getRequiredJsonElementIfNotOverridden(var1, var2, var3, true);
   }

   @Nullable
   class="kw">protected JsonElement getOptionalJsonElement(@Nonnull JsonElement var1, String var2, boolean var3) {
      JsonElement var4 = null;
      if (!this.useDefaultsOnly) {
         if (var3) {
            this.addQueryKey(var2);
         }

         var4 = this.expectJsonObject(var1, var2).get(var2);
      }

      class="kw">return var4;
   }

   @Nullable
   class="kw">protected JsonElement getOptionalJsonElement(@Nonnull JsonElement var1, String var2) {
      class="kw">return this.getOptionalJsonElement(var1, var2, true);
   }

   class="kw">public void requireString(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<String> var3,
      StringValidator var4,
      BuilderDescriptorState var5,
      String var6,
      @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var8 = BuilderExpressionDynamic.computableSchema(new StringSchema());
         var8.setTitle(var2);
         var8.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var8);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, String.class.getSimpleName(), var5, var6, var7).required().validator(var4);
      } else {
         try {
            this.validateAndSet(this.expectString(this.getRequiredJsonElement(var1, var2), var2), var4, var3, var2);
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public boolean getString(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<String> var3,
      String var4,
      StringValidator var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         Schema var12 = BuilderExpressionDynamic.computableSchema(new StringSchema());
         var12.setTitle(var2);
         var12.setDescription(var8 == null ? var7 : var8);
         this.builderSchema.getProperties().put(var2, var12);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, String.class.getSimpleName(), var6, var7, var8).optional(var4).validator(var5);
         class="kw">return false;
      }

      try {
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         boolean var10 = var9 != null;
         if (var10) {
            var4 = this.expectString(var9, var2);
         }

         this.validateAndSet(var4, var5, var3, var2);
         class="kw">return var10;
      } catch (Exception var11) {
         this.addError(var11);
         class="kw">return false;
      }
   }

   class="kw">public void requireString(
      @Nonnull JsonElement var1, String var2, @Nonnull StringHolder var3, StringValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var8 = BuilderExpressionDynamic.computableSchema(new StringSchema());
         var8.setTitle(var2);
         var8.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var8);
      } else if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, String.class.getSimpleName(), var5, var6, var7).required().computable().validator(var4);
      } else {
         Objects.requireNonNull(var3, "stringHolder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public boolean requireStringIfNotOverridden(
      @Nonnull JsonElement var1, String var2, @Nonnull StringHolder var3, StringValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var11 = BuilderExpressionDynamic.computableSchema(new StringSchema());
         var11.setTitle(var2);
         var11.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var11);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, String.class.getSimpleName(), var5, var6, var7).requiredIfNotOverridden().computable().validator(var4);
         class="kw">return false;
      }

      Objects.requireNonNull(var3, "stringHolder is null");

      try {
         JsonElement var8 = this.getRequiredJsonElementIfNotOverridden(var1, var2, ParameterType.STRING);
         boolean var9 = var8 != null;
         var3.readJSON(var8, null, !var9 ? null : var4, var2, this.builderParameters);
         this.trackDynamicHolder(var3);
         class="kw">return var9;
      } catch (Exception var10) {
         this.addError(var10);
         class="kw">return false;
      }
   }

   class="kw">public boolean getString(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull StringHolder var3,
      String var4,
      StringValidator var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         Schema var11 = BuilderExpressionDynamic.computableSchema(new StringSchema());
         var11.setTitle(var2);
         var11.setDescription(var8 == null ? var7 : var8);
         this.builderSchema.getProperties().put(var2, var11);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, String.class.getSimpleName(), var6, var7, var8).optional(var4).computable().validator(var5);
         class="kw">return false;
      }

      Objects.requireNonNull(var3, "stringHolder is null");

      try {
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         var3.readJSON(var9, var4, var5, var2, this.builderParameters);
         this.trackDynamicHolder(var3);
         class="kw">return var9 != null;
      } catch (Exception var10) {
         this.addError(var10);
         class="kw">return false;
      }
   }

   class="kw">private void validateAndSet(String var1, @Nullable StringValidator var2, @Nonnull Consumer<String> var3, String var4) {
      if (var2 != null && !var2.test(var1)) {
         throw new IllegalStateException(var2.errorMessage(var1, var4) + " in " + this.getBreadCrumbs());
      }

      var3.accept(var1);
   }

   @Nonnull
   class="kw">protected String[] nonNull(@Nullable String[] var1) {
      class="kw">return var1 == null ? ArrayUtil.EMPTY_STRING_ARRAY : var1;
   }

   @Nonnull
   class="kw">public String[] expectStringArray(@Nonnull JsonElement var1, @Nullable Function<String, String> var2, String var3, boolean var4) {
      if (var2 == null) {
         var2 = Function.identity();
      }

      if (var1.isJsonPrimitive() && var1.getAsJsonPrimitive().isString()) {
         if (var4) {
            NPCPlugin.get()
               .getLogger()
               .at(Level.WARNING)
               .log(
                  "Use of strings for lists is deprecated for JSON attribute '%s' (use []) in %s: %s",
                  var3,
                  this.getBreadCrumbs(),
                  this.builderParameters.getFileName()
               );
         }

         class="kw">return StringListHelpers.splitToStringList(var1.getAsJsonPrimitive().getAsString(), var2).toArray(String[]::new);
      } else {
         if (!var1.isJsonArray()) {
            throw new IllegalStateException(
               "Expected string or array when looking for parameter \"" + var3 + "\" but found '" + var1 + "' in context " + this.getBreadCrumbs()
            );
         }

         JsonArray var5 = var1.getAsJsonArray();
         String[] var6 = new String[var5.size()];

         for (int var7 = 0; var7 < var5.size(); var7++) {
            String var8 = var2.apply(this.expectString(var5.get(var7), var3).trim());
            if (var8 != null && !var8.isEmpty()) {
               var6[var7] = var8;
            }
         }

         class="kw">return var6;
      }
   }

   @Nonnull
   class="kw">public String[] expectStringArray(@Nonnull JsonElement var1, Function<String, String> var2, String var3) {
      class="kw">return this.expectStringArray(var1, var2, var3, true);
   }

   class="kw">public boolean getStringArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<String[]> var3,
      Function<String, String> var4,
      String[] var5,
      StringArrayValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var14 = new ArraySchema();
         var14.setItem(new StringSchema());
         Schema var15 = BuilderExpressionDynamic.computableSchema(var14);
         var15.setTitle(var2);
         var15.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var15);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "StringList", var7, var8, var9).optional(this.defaultArrayToString(var5)).validator(var6);
         class="kw">return false;
      }

      try {
         JsonElement var10 = this.getOptionalJsonElement(var1, var2);
         boolean var12 = var10 != null;
         String[] var11;
         if (var12) {
            var11 = this.expectStringArray(var10, var4, var2);
         } else {
            var11 = var5;
         }

         this.validateAndSet(var11, var6, var3, var2);
         class="kw">return var12;
      } catch (Exception var13) {
         this.addError(var13);
         class="kw">return false;
      }
   }

   class="kw">public void requireStringArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<String[]> var3,
      Function<String, String> var4,
      StringArrayValidator var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var12 = new ArraySchema();
         var12.setItem(new StringSchema());
         Schema var10 = BuilderExpressionDynamic.computableSchema(var12);
         var10.setTitle(var2);
         var10.setDescription(var8 == null ? var7 : var8);
         this.builderSchema.getProperties().put(var2, var10);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "StringList", var6, var7, var8).required().validator(var5);
      } else {
         try {
            JsonElement var9 = this.getRequiredJsonElement(var1, var2);
            this.validateAndSet(this.expectStringArray(var9, var4, var2), var5, var3, var2);
         } catch (Exception var11) {
            this.addError(var11);
         }
      }
   }

   class="kw">public void requireStringArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull StringArrayHolder var3,
      int var4,
      int var5,
      StringArrayValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var10 = new ArraySchema();
         var10.setItem(new StringSchema());
         if (var4 != 0) {
            var10.setMinItems(var4);
         }

         if (var5 != Integer.MAX_VALUE) {
            var10.setMaxItems(var5);
         }

         Schema var11 = BuilderExpressionDynamic.computableSchema(var10);
         var11.setTitle(var2);
         var11.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var11);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "Array", var7, var8, var9).domain("String").length(var4, var5).validator(var6).computable().required();
      } else {
         Objects.requireNonNull(var3, "string array holder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var5, var6, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var12) {
            this.addError(var12);
         }
      }
   }

   class="kw">public void requireTemporalArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull TemporalArrayHolder var3,
      int var4,
      int var5,
      TemporalArrayValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var10 = new ArraySchema();
         var10.setItem(new StringSchema());
         if (var4 != 0) {
            var10.setMinItems(var4);
         }

         if (var5 != Integer.MAX_VALUE) {
            var10.setMaxItems(var5);
         }

         Schema var11 = BuilderExpressionDynamic.computableSchema(var10);
         var11.setTitle(var2);
         var11.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var11);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor
            .addAttribute(var2, "Array", var7, var8, var9)
            .domain("TemporalAmount")
            .length(var4, var5)
            .validator(var6)
            .computable()
            .required();
      } else {
         Objects.requireNonNull(var3, "temporal array holder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var5, var6, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var12) {
            this.addError(var12);
         }
      }
   }

   class="kw">public void requireTemporalRange(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull TemporalArrayHolder var3,
      TemporalArrayValidator var4,
      BuilderDescriptorState var5,
      String var6,
      String var7
   ) {
      this.requireTemporalArray(var1, var2, var3, 2, 2, var4, var5, var6, var7);
   }

   class="kw">public boolean getStringArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull StringArrayHolder var3,
      String[] var4,
      int var5,
      int var6,
      StringArrayValidator var7,
      BuilderDescriptorState var8,
      String var9,
      @Nullable String var10
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var14 = new ArraySchema();
         var14.setItem(new StringSchema());
         if (var5 != 0) {
            var14.setMinItems(var5);
         }

         if (var6 != Integer.MAX_VALUE) {
            var14.setMaxItems(var6);
         }

         Schema var12 = BuilderExpressionDynamic.computableSchema(var14);
         var12.setTitle(var2);
         var12.setDescription(var10 == null ? var9 : var10);
         this.builderSchema.getProperties().put(var2, var12);
         class="kw">return false;
      } else {
         if (this.isCreatingDescriptor()) {
            this.builderDescriptor
               .addAttribute(var2, "Array", var8, var9, var10)
               .domain("String")
               .length(var5, var6)
               .validator(var7)
               .computable()
               .optional(var4);
            class="kw">return false;
         }

         Objects.requireNonNull(var3, "string array holder is null");

         try {
            JsonElement var11 = this.getOptionalJsonElement(var1, var2);
            var3.readJSON(var11, var5, var6, var4, var7, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
            class="kw">return var11 != null;
         } catch (Exception var13) {
            this.addError(var13);
            class="kw">return false;
         }
      }
   }

   class="kw">private void validateAndSet(String[] var1, @Nullable StringArrayValidator var2, @Nonnull Consumer<String[]> var3, String var4) {
      if (var2 != null && !var2.test(var1)) {
         throw new IllegalStateException(var2.errorMessage(var4, var1) + " in " + this.getBreadCrumbs());
      }

      var3.accept(var1);
   }

   class="kw">private String defaultArrayToString(@Nullable String[] var1) {
      class="kw">return var1 == null ? null : Arrays.toString(var1);
   }

   class="kw">private boolean requireOrGetDictionary(
      @Nonnull JsonElement var1,
      String var2,
      String var3,
      @Nonnull BiConsumer<String, JsonElement> var4,
      boolean var5,
      BuilderDescriptorState var6,
      String var7,
      String var8
   ) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "Dictionary", var6, var7, var8).required().domain(var3);
         class="kw">return false;
      }

      try {
         JsonElement var9 = var5 ? this.getRequiredJsonElement(var1, var2) : this.getOptionalJsonElement(var1, var2);
         boolean var10 = var9 != null;
         if (var10) {
            JsonObject var11 = this.expectJsonObject(var9, var2);
            var11.entrySet().forEach(var1x -> var4.accept((T)((String)var1x.getKey()), (JsonElement)var1x.getValue()));
         }

         class="kw">return var10;
      } catch (Exception var12) {
         this.addError(var12);
         class="kw">return false;
      }
   }

   class="kw">public void requireDictionary(
      @Nonnull JsonElement var1, String var2, String var3, @Nonnull BiConsumer<String, JsonElement> var4, BuilderDescriptorState var5, String var6, String var7
   ) {
      this.requireOrGetDictionary(var1, var2, var3, var4, true, var5, var6, var7);
   }

   class="kw">public boolean getDictionary(
      @Nonnull JsonElement var1, String var2, String var3, @Nonnull BiConsumer<String, JsonElement> var4, BuilderDescriptorState var5, String var6, String var7
   ) {
      class="kw">return this.requireOrGetDictionary(var1, var2, var3, var4, false, var5, var6, var7);
   }

   class="kw">public void requireDouble(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull DoubleConsumer var3,
      DoubleValidator var4,
      BuilderDescriptorState var5,
      String var6,
      @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var8 = BuilderExpressionDynamic.computableSchema(new NumberSchema());
         var8.setTitle(var2);
         var8.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var8);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, Double.class.getSimpleName(), var5, var6, var7).required().validator(var4);
      } else {
         try {
            this.validateAndSet(this.expectDouble(this.getRequiredJsonElement(var1, var2), var2), var4, var3, var2);
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public boolean getDouble(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull DoubleConsumer var3,
      double var4,
      DoubleValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         Schema var13 = BuilderExpressionDynamic.computableSchema(new NumberSchema());
         var13.setTitle(var2);
         var13.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var13);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, Double.class.getSimpleName(), var7, var8, var9).optional(Double.toString(var4)).validator(var6);
         class="kw">return false;
      }

      try {
         JsonElement var10 = this.getOptionalJsonElement(var1, var2);
         boolean var11 = var10 != null;
         if (var11) {
            var4 = this.expectDouble(var10, var2);
         }

         this.validateAndSet(var4, var6, var3, var2);
         class="kw">return var11;
      } catch (Exception var12) {
         this.addError(var12);
         class="kw">return false;
      }
   }

   class="kw">public void requireDouble(
      @Nonnull JsonElement var1, String var2, @Nonnull DoubleHolder var3, DoubleValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var8 = BuilderExpressionDynamic.computableSchema(new NumberSchema());
         var8.setTitle(var2);
         var8.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var8);
      } else if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, Double.class.getSimpleName(), var5, var6, var7).required().computable().validator(var4);
      } else {
         Objects.requireNonNull(var3, "doubleHolder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public boolean requireDoubleIfNotOverridden(
      @Nonnull JsonElement var1, String var2, @Nonnull DoubleHolder var3, DoubleValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var11 = BuilderExpressionDynamic.computableSchema(new NumberSchema());
         var11.setTitle(var2);
         var11.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var11);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, Double.class.getSimpleName(), var5, var6, var7).requiredIfNotOverridden().computable().validator(var4);
         class="kw">return false;
      }

      Objects.requireNonNull(var3, "doubleHolder is null");

      try {
         JsonElement var8 = this.getRequiredJsonElementIfNotOverridden(var1, var2, ParameterType.DOUBLE);
         boolean var9 = var8 != null;
         var3.readJSON(var8, -Double.MAX_VALUE, !var9 ? null : var4, var2, this.builderParameters);
         this.trackDynamicHolder(var3);
         class="kw">return var9;
      } catch (Exception var10) {
         this.addError(var10);
         class="kw">return false;
      }
   }

   class="kw">public boolean getDouble(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull DoubleHolder var3,
      double var4,
      DoubleValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         Schema var12 = BuilderExpressionDynamic.computableSchema(new NumberSchema());
         var12.setTitle(var2);
         var12.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var12);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, Double.class.getSimpleName(), var7, var8, var9).optional(Double.toString(var4)).computable().validator(var6);
         class="kw">return false;
      }

      Objects.requireNonNull(var3, "doubleHolder is null");

      try {
         JsonElement var10 = this.getOptionalJsonElement(var1, var2);
         var3.readJSON(var10, var4, var6, var2, this.builderParameters);
         this.trackDynamicHolder(var3);
         class="kw">return var10 != null;
      } catch (Exception var11) {
         this.addError(var11);
         class="kw">return false;
      }
   }

   class="kw">private void validateAndSet(double var1, @Nullable DoubleValidator var3, @Nonnull DoubleConsumer var4, String var5) {
      if (var3 != null && !var3.test(var1)) {
         throw new IllegalStateException(var3.errorMessage(var1, var5) + " in " + this.getBreadCrumbs());
      }

      var4.accept(var1);
   }

   class="kw">public void requireIntArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<int[]> var3,
      int var4,
      int var5,
      IntArrayValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var10 = new ArraySchema(new IntegerSchema());
         if (var4 != 0) {
            var10.setMinItems(var4);
         }

         if (var5 != Integer.MAX_VALUE) {
            var10.setMaxItems(var5);
         }

         Schema var11 = BuilderExpressionDynamic.computableSchema(var10);
         var11.setTitle(var2);
         var11.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var11);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "Array", var7, var8, var9).domain("integer").length(var4, var5).validator(var6).required();
      } else {
         try {
            this.validateAndSet(this.expectIntArray(this.getRequiredJsonElement(var1, var2), var2, var4, var5), var6, var3, var2);
         } catch (Exception var12) {
            this.addError(var12);
         }
      }
   }

   class="kw">public boolean getIntArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<int[]> var3,
      int[] var4,
      int var5,
      int var6,
      IntArrayValidator var7,
      BuilderDescriptorState var8,
      String var9,
      @Nullable String var10
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var14 = new ArraySchema(new IntegerSchema());
         if (var5 != 0) {
            var14.setMinItems(var5);
         }

         if (var6 != Integer.MAX_VALUE) {
            var14.setMaxItems(var6);
         }

         Schema var15 = BuilderExpressionDynamic.computableSchema(var14);
         var15.setTitle(var2);
         var15.setDescription(var10 == null ? var9 : var10);
         this.builderSchema.getProperties().put(var2, var15);
         class="kw">return false;
      } else {
         if (this.isCreatingDescriptor()) {
            this.builderDescriptor.addAttribute(var2, "Array", var8, var9, var10).domain("integer").length(var5, var6).validator(var7).optional(var4);
            class="kw">return false;
         }

         try {
            JsonElement var11 = this.getOptionalJsonElement(var1, var2);
            boolean var12 = var11 != null;
            if (var12) {
               var4 = this.expectIntArray(var11, var2, var5, var6);
            }

            this.validateAndSet(var4, var7, var3, var2);
            class="kw">return var12;
         } catch (Exception var13) {
            this.addError(var13);
            class="kw">return false;
         }
      }
   }

   class="kw">public void requireIntArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull NumberArrayHolder var3,
      int var4,
      int var5,
      IntArrayValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var10 = new ArraySchema(new IntegerSchema());
         if (var4 != 0) {
            var10.setMinItems(var4);
         }

         if (var5 != Integer.MAX_VALUE) {
            var10.setMaxItems(var5);
         }

         Schema var11 = BuilderExpressionDynamic.computableSchema(var10);
         var11.setTitle(var2);
         var11.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var11);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "Array", var7, var8, var9).domain("integer").length(var4, var5).validator(var6).computable().required();
      } else {
         Objects.requireNonNull(var3, "int array holder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var5, var6, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var12) {
            this.addError(var12);
         }
      }
   }

   class="kw">public boolean getIntArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull NumberArrayHolder var3,
      int[] var4,
      int var5,
      int var6,
      IntArrayValidator var7,
      BuilderDescriptorState var8,
      String var9,
      @Nullable String var10
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var14 = new ArraySchema(new IntegerSchema());
         if (var5 != 0) {
            var14.setMinItems(var5);
         }

         if (var6 != Integer.MAX_VALUE) {
            var14.setMaxItems(var6);
         }

         Schema var12 = BuilderExpressionDynamic.computableSchema(var14);
         var12.setTitle(var2);
         var12.setDescription(var10 == null ? var9 : var10);
         this.builderSchema.getProperties().put(var2, var12);
         class="kw">return false;
      } else {
         if (this.isCreatingDescriptor()) {
            this.builderDescriptor
               .addAttribute(var2, "Array", var8, var9, var10)
               .domain("integer")
               .length(var5, var6)
               .validator(var7)
               .computable()
               .optional(var4);
            class="kw">return false;
         }

         Objects.requireNonNull(var3, "int array holder is null");

         try {
            JsonElement var11 = this.getOptionalJsonElement(var1, var2);
            var3.readJSON(var11, var5, var6, var4, var7, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
            class="kw">return var11 != null;
         } catch (Exception var13) {
            this.addError(var13);
            class="kw">return false;
         }
      }
   }

   class="kw">public void requireIntRange(
      @Nonnull JsonElement var1, String var2, @Nonnull Consumer<int[]> var3, IntArrayValidator var4, BuilderDescriptorState var5, String var6, String var7
   ) {
      this.requireIntArray(var1, var2, var3, 2, 2, var4, var5, var6, var7);
   }

   class="kw">public boolean getIntRange(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<int[]> var3,
      int[] var4,
      IntArrayValidator var5,
      BuilderDescriptorState var6,
      String var7,
      String var8
   ) {
      class="kw">return this.getIntArray(var1, var2, var3, var4, 2, 2, var5, var6, var7, var8);
   }

   class="kw">public void requireIntRange(
      @Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, IntArrayValidator var4, BuilderDescriptorState var5, String var6, String var7
   ) {
      this.requireIntArray(var1, var2, var3, 2, 2, var4, var5, var6, var7);
   }

   class="kw">public boolean getIntRange(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull NumberArrayHolder var3,
      int[] var4,
      IntArrayValidator var5,
      BuilderDescriptorState var6,
      String var7,
      String var8
   ) {
      class="kw">return this.getIntArray(var1, var2, var3, var4, 2, 2, var5, var6, var7, var8);
   }

   class="kw">private void validateAndSet(int[] var1, @Nullable IntArrayValidator var2, @Nonnull Consumer<int[]> var3, String var4) {
      if (var2 != null && !var2.test(var1)) {
         throw new IllegalStateException(var2.errorMessage(var1, var4) + " in " + this.getBreadCrumbs());
      }

      var3.accept(var1);
   }

   class="kw">public void requireDoubleArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<double[]> var3,
      int var4,
      int var5,
      DoubleArrayValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var10 = new ArraySchema(new NumberSchema());
         if (var4 != 0) {
            var10.setMinItems(var4);
         }

         if (var5 != Integer.MAX_VALUE) {
            var10.setMaxItems(var5);
         }

         Schema var11 = BuilderExpressionDynamic.computableSchema(var10);
         var11.setTitle(var2);
         var11.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var11);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "Array", var7, var8, var9).domain("Double").length(var4, var5).validator(var6).required();
      } else {
         try {
            this.validateAndSet(this.expectDoubleArray(this.getRequiredJsonElement(var1, var2), var2, var4, var5), var6, var3, var2);
         } catch (Exception var12) {
            this.addError(var12);
         }
      }
   }

   class="kw">public boolean getDoubleArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<double[]> var3,
      double[] var4,
      int var5,
      int var6,
      DoubleArrayValidator var7,
      BuilderDescriptorState var8,
      String var9,
      @Nullable String var10
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var14 = new ArraySchema(new NumberSchema());
         if (var5 != 0) {
            var14.setMinItems(var5);
         }

         if (var6 != Integer.MAX_VALUE) {
            var14.setMaxItems(var6);
         }

         Schema var15 = BuilderExpressionDynamic.computableSchema(var14);
         var15.setTitle(var2);
         var15.setDescription(var10 == null ? var9 : var10);
         this.builderSchema.getProperties().put(var2, var15);
         class="kw">return false;
      } else {
         if (this.isCreatingDescriptor()) {
            this.builderDescriptor.addAttribute(var2, "Array", var8, var9, var10).domain("Double").length(var5, var6).validator(var7).optional(var4);
            class="kw">return false;
         }

         try {
            JsonElement var11 = this.getOptionalJsonElement(var1, var2);
            boolean var12 = var11 != null;
            if (var12) {
               var4 = this.expectDoubleArray(var11, var2, var5, var6);
            }

            this.validateAndSet(var4, var7, var3, var2);
            class="kw">return var12;
         } catch (Exception var13) {
            this.addError(var13);
            class="kw">return false;
         }
      }
   }

   class="kw">public void requireDoubleArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull NumberArrayHolder var3,
      int var4,
      int var5,
      DoubleArrayValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var10 = new ArraySchema(new NumberSchema());
         if (var4 != 0) {
            var10.setMinItems(var4);
         }

         if (var5 != Integer.MAX_VALUE) {
            var10.setMaxItems(var5);
         }

         Schema var11 = BuilderExpressionDynamic.computableSchema(var10);
         var11.setTitle(var2);
         var11.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var11);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "Array", var7, var8, var9).domain("Double").length(var4, var5).validator(var6).computable().required();
      } else {
         Objects.requireNonNull(var3, "double array holder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var5, var6, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var12) {
            this.addError(var12);
         }
      }
   }

   class="kw">public boolean getDoubleArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull NumberArrayHolder var3,
      double[] var4,
      int var5,
      int var6,
      DoubleArrayValidator var7,
      BuilderDescriptorState var8,
      String var9,
      @Nullable String var10
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var14 = new ArraySchema(new NumberSchema());
         if (var5 != 0) {
            var14.setMinItems(var5);
         }

         if (var6 != Integer.MAX_VALUE) {
            var14.setMaxItems(var6);
         }

         Schema var12 = BuilderExpressionDynamic.computableSchema(var14);
         var12.setTitle(var2);
         var12.setDescription(var10 == null ? var9 : var10);
         this.builderSchema.getProperties().put(var2, var12);
         class="kw">return false;
      } else {
         if (this.isCreatingDescriptor()) {
            this.builderDescriptor
               .addAttribute(var2, "Array", var8, var9, var10)
               .domain("Double")
               .length(var5, var6)
               .validator(var7)
               .computable()
               .optional(var4);
            class="kw">return false;
         }

         Objects.requireNonNull(var3, "double array holder is null");

         try {
            JsonElement var11 = this.getOptionalJsonElement(var1, var2);
            var3.readJSON(var11, var5, var6, var4, var7, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
            class="kw">return var11 != null;
         } catch (Exception var13) {
            this.addError(var13);
            class="kw">return false;
         }
      }
   }

   class="kw">public void requireDoubleRange(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<double[]> var3,
      DoubleArrayValidator var4,
      BuilderDescriptorState var5,
      String var6,
      String var7
   ) {
      this.requireDoubleArray(var1, var2, var3, 2, 2, var4, var5, var6, var7);
   }

   class="kw">public boolean getDoubleRange(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<double[]> var3,
      double[] var4,
      DoubleArrayValidator var5,
      BuilderDescriptorState var6,
      String var7,
      String var8
   ) {
      class="kw">return this.getDoubleArray(var1, var2, var3, var4, 2, 2, var5, var6, var7, var8);
   }

   class="kw">public void requireVector3d(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<double[]> var3,
      DoubleArrayValidator var4,
      BuilderDescriptorState var5,
      String var6,
      String var7
   ) {
      this.requireDoubleArray(var1, var2, var3, 3, 3, var4, var5, var6, var7);
   }

   class="kw">public boolean getVector3d(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<double[]> var3,
      double[] var4,
      DoubleArrayValidator var5,
      BuilderDescriptorState var6,
      String var7,
      String var8
   ) {
      class="kw">return this.getDoubleArray(var1, var2, var3, var4, 3, 3, var5, var6, var7, var8);
   }

   class="kw">public void requireDoubleRange(
      @Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, DoubleArrayValidator var4, BuilderDescriptorState var5, String var6, String var7
   ) {
      this.requireDoubleArray(var1, var2, var3, 2, 2, var4, var5, var6, var7);
   }

   class="kw">public boolean getDoubleRange(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull NumberArrayHolder var3,
      double[] var4,
      DoubleArrayValidator var5,
      BuilderDescriptorState var6,
      String var7,
      String var8
   ) {
      class="kw">return this.getDoubleArray(var1, var2, var3, var4, 2, 2, var5, var6, var7, var8);
   }

   class="kw">public void requireVector3d(
      @Nonnull JsonElement var1, String var2, @Nonnull NumberArrayHolder var3, DoubleArrayValidator var4, BuilderDescriptorState var5, String var6, String var7
   ) {
      this.requireDoubleArray(var1, var2, var3, 3, 3, var4, var5, var6, var7);
   }

   class="kw">public boolean getVector3d(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull NumberArrayHolder var3,
      double[] var4,
      DoubleArrayValidator var5,
      BuilderDescriptorState var6,
      String var7,
      String var8
   ) {
      class="kw">return this.getDoubleArray(var1, var2, var3, var4, 3, 3, var5, var6, var7, var8);
   }

   class="kw">private void validateAndSet(double[] var1, @Nullable DoubleArrayValidator var2, @Nonnull Consumer<double[]> var3, String var4) {
      if (var2 != null && !var2.test(var1)) {
         throw new IllegalStateException(var2.errorMessage(var1, var4) + " in " + this.getBreadCrumbs());
      }

      var3.accept(var1);
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d createVector3d(@Nonnull double[] var0) {
      class="kw">return new Vector3d(var0[0], var0[1], var0[2]);
   }

   class="kw">public class="kw">static Vector3d createVector3d(@Nullable double[] var0, @Nonnull Supplier<Vector3d> var1) {
      class="kw">return var0 != null ? createVector3d(var0) : var1.get();
   }

   class="kw">public void requireFloat(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull FloatConsumer var3,
      DoubleValidator var4,
      BuilderDescriptorState var5,
      String var6,
      @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var8 = BuilderExpressionDynamic.computableSchema(new NumberSchema());
         var8.setTitle(var2);
         var8.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var8);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, Double.class.getSimpleName(), var5, var6, var7).required().validator(var4);
      } else {
         try {
            this.validateAndSet((float)this.expectDouble(this.getRequiredJsonElement(var1, var2), var2), var4, var3, var2);
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public boolean getFloat(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull FloatConsumer var3,
      float var4,
      DoubleValidator var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         Schema var12 = BuilderExpressionDynamic.computableSchema(new NumberSchema());
         var12.setTitle(var2);
         var12.setDescription(var8 == null ? var7 : var8);
         this.builderSchema.getProperties().put(var2, var12);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, Double.class.getSimpleName(), var6, var7, var8).optional(Double.toString(var4)).validator(var5);
         class="kw">return false;
      }

      try {
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         boolean var10 = var9 != null;
         if (var10) {
            var4 = (float)this.expectDouble(var9, var2);
         }

         this.validateAndSet(var4, var5, var3, var2);
         class="kw">return var10;
      } catch (Exception var11) {
         this.addError(var11);
         class="kw">return false;
      }
   }

   class="kw">public void requireFloat(
      @Nonnull JsonElement var1, String var2, @Nonnull FloatHolder var3, DoubleValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var8 = BuilderExpressionDynamic.computableSchema(new NumberSchema());
         var8.setTitle(var2);
         var8.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var8);
      } else if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, Double.class.getSimpleName(), var5, var6, var7).required().computable().validator(var4);
      } else {
         Objects.requireNonNull(var3, "floatHolder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public boolean getFloat(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull FloatHolder var3,
      double var4,
      DoubleValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         Schema var12 = BuilderExpressionDynamic.computableSchema(new NumberSchema());
         var12.setTitle(var2);
         var12.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var12);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, Double.class.getSimpleName(), var7, var8, var9).optional(Double.toString(var4)).computable().validator(var6);
         class="kw">return false;
      }

      Objects.requireNonNull(var3, "floatHolder is null");

      try {
         JsonElement var10 = this.getOptionalJsonElement(var1, var2);
         var3.readJSON(var10, var4, var6, var2, this.builderParameters);
         this.trackDynamicHolder(var3);
         class="kw">return var10 != null;
      } catch (Exception var11) {
         this.addError(var11);
         class="kw">return false;
      }
   }

   class="kw">private void validateAndSet(float var1, @Nullable DoubleValidator var2, @Nonnull FloatConsumer var3, String var4) {
      if (var2 != null && !var2.test(var1)) {
         throw new IllegalStateException(var2.errorMessage(var1, var4) + " in " + this.getBreadCrumbs());
      }

      var3.accept(var1);
   }

   class="kw">public void requireInt(
      @Nonnull JsonElement var1, String var2, @Nonnull IntConsumer var3, IntValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var8 = BuilderExpressionDynamic.computableSchema(new IntegerSchema());
         var8.setTitle(var2);
         var8.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var8);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, Integer.class.getSimpleName(), var5, var6, var7).required().validator(var4);
      } else {
         try {
            this.validateAndSet(this.expectInteger(this.getRequiredJsonElement(var1, var2), var2), var4, var3, var2);
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public boolean getInt(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull IntConsumer var3,
      int var4,
      IntValidator var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         Schema var12 = BuilderExpressionDynamic.computableSchema(new IntegerSchema());
         var12.setTitle(var2);
         var12.setDescription(var8 == null ? var7 : var8);
         this.builderSchema.getProperties().put(var2, var12);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, Integer.class.getSimpleName(), var6, var7, var8).optional(Integer.toString(var4)).validator(var5);
         class="kw">return false;
      }

      try {
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         boolean var10 = var9 != null;
         if (var10) {
            var4 = this.expectInteger(var9, var2);
         }

         this.validateAndSet(var4, var5, var3, var2);
         class="kw">return var10;
      } catch (Exception var11) {
         this.addError(var11);
         class="kw">return false;
      }
   }

   class="kw">public void requireInt(
      @Nonnull JsonElement var1, String var2, @Nonnull IntHolder var3, IntValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var8 = BuilderExpressionDynamic.computableSchema(new IntegerSchema());
         var8.setTitle(var2);
         var8.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var8);
      } else if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, Integer.class.getSimpleName(), var5, var6, var7).required().computable().validator(var4);
      } else {
         Objects.requireNonNull(var3, "intHolder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public boolean requireIntIfNotOverridden(
      @Nonnull JsonElement var1, String var2, @Nonnull IntHolder var3, IntValidator var4, BuilderDescriptorState var5, String var6, @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var11 = BuilderExpressionDynamic.computableSchema(new IntegerSchema());
         var11.setTitle(var2);
         var11.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var11);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, Integer.class.getSimpleName(), var5, var6, var7).requiredIfNotOverridden().computable().validator(var4);
         class="kw">return false;
      }

      Objects.requireNonNull(var3, "intHolder is null");

      try {
         JsonElement var8 = this.getRequiredJsonElementIfNotOverridden(var1, var2, ParameterType.INTEGER);
         boolean var9 = var8 != null;
         var3.readJSON(var8, Integer.MIN_VALUE, !var9 ? null : var4, var2, this.builderParameters);
         this.trackDynamicHolder(var3);
         class="kw">return var9;
      } catch (Exception var10) {
         this.addError(var10);
         class="kw">return false;
      }
   }

   class="kw">public boolean getInt(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull IntHolder var3,
      int var4,
      IntValidator var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         Schema var11 = BuilderExpressionDynamic.computableSchema(new IntegerSchema());
         var11.setTitle(var2);
         var11.setDescription(var8 == null ? var7 : var8);
         this.builderSchema.getProperties().put(var2, var11);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor
            .addAttribute(var2, Integer.class.getSimpleName(), var6, var7, var8)
            .optional(Double.toString(var4))
            .computable()
            .validator(var5);
         class="kw">return false;
      }

      try {
         Objects.requireNonNull(var3, "intHolder is null");
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         var3.readJSON(var9, var4, var5, var2, this.builderParameters);
         this.trackDynamicHolder(var3);
         class="kw">return var9 != null;
      } catch (Exception var10) {
         this.addError(var10);
         class="kw">return false;
      }
   }

   class="kw">private void validateAndSet(int var1, @Nullable IntValidator var2, @Nonnull IntConsumer var3, String var4) {
      if (var2 != null && !var2.test(var1)) {
         throw new IllegalStateException(var2.errorMessage(var1, var4) + " in " + this.getBreadCrumbs());
      }

      var3.accept(var1);
   }

   class="kw">public void requireBoolean(
      @Nonnull JsonElement var1, String var2, @Nonnull BooleanHolder var3, BuilderDescriptorState var4, String var5, @Nullable String var6
   ) {
      if (this.isCreatingSchema()) {
         Schema var7 = BuilderExpressionDynamic.computableSchema(new BooleanSchema());
         var7.setTitle(var2);
         var7.setDescription(var6 == null ? var5 : var6);
         this.builderSchema.getProperties().put(var2, var7);
      } else if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, Boolean.class.getSimpleName(), var4, var5, var6).required().computable();
      } else {
         Objects.requireNonNull(var3, "booleanHolder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var8) {
            this.addError(var8);
         }
      }
   }

   class="kw">public boolean getBoolean(
      @Nonnull JsonElement var1, String var2, @Nonnull BooleanHolder var3, boolean var4, BuilderDescriptorState var5, String var6, @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var10 = BuilderExpressionDynamic.computableSchema(new BooleanSchema());
         var10.setTitle(var2);
         var10.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var10);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, Boolean.class.getSimpleName(), var5, var6, var7).optional(Boolean.toString(var4)).computable();
         class="kw">return false;
      }

      Objects.requireNonNull(var3, "booleanHolder is null");

      try {
         JsonElement var8 = this.getOptionalJsonElement(var1, var2);
         var3.readJSON(var8, var4, var2, this.builderParameters);
         this.trackDynamicHolder(var3);
         class="kw">return var8 != null;
      } catch (Exception var9) {
         this.addError(var9);
         class="kw">return false;
      }
   }

   class="kw">public void requireBoolean(
      @Nonnull JsonElement var1, String var2, @Nonnull BooleanConsumer var3, BuilderDescriptorState var4, String var5, @Nullable String var6
   ) {
      if (this.isCreatingSchema()) {
         Schema var7 = BuilderExpressionDynamic.computableSchema(new BooleanSchema());
         var7.setTitle(var2);
         var7.setDescription(var6 == null ? var5 : var6);
         this.builderSchema.getProperties().put(var2, var7);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, Boolean.class.getSimpleName(), var4, var5, var6).required();
      } else {
         try {
            var3.accept(this.expectBoolean(this.getRequiredJsonElement(var1, var2), var2));
         } catch (Exception var8) {
            this.addError(var8);
         }
      }
   }

   class="kw">public boolean getBoolean(
      @Nonnull JsonElement var1, String var2, @Nonnull BooleanConsumer var3, boolean var4, BuilderDescriptorState var5, String var6, @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var11 = BuilderExpressionDynamic.computableSchema(new BooleanSchema());
         var11.setTitle(var2);
         var11.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var11);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, Boolean.class.getSimpleName(), var5, var6, var7).optional(Boolean.toString(var4));
         class="kw">return false;
      }

      try {
         JsonElement var8 = this.getOptionalJsonElement(var1, var2);
         boolean var9 = var8 != null;
         if (var9) {
            var4 = this.expectBoolean(var8, var2);
         }

         var3.accept(var4);
         class="kw">return var9;
      } catch (Exception var10) {
         this.addError(var10);
         class="kw">return false;
      }
   }

   class="kw">public void getParameterBlock(@Nonnull JsonElement var1, BuilderDescriptorState var2, String var3, String var4) {
      if (this.isCreatingSchema()) {
         this.builderSchema.getProperties().put("Parameters", new ObjectSchema());
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute("Parameters", "Parameters", var2, var3, var4).optional("");
      } else {
         if (!var1.isJsonObject()) {
            throw new IllegalStateException(String.format("Looking for parameter block in a JsonElement that isn't an object at %s", this.getBreadCrumbs()));
         }

         BuilderParameters var5 = new BuilderParameters(this.builderParameters);
         var5.readJSON(var1.getAsJsonObject(), this.stateHelper);
         var5.validateNoDuplicateParameters(this.builderParameters);
         var5.addParametersToScope();
         this.builderParameters = var5;
         this.addQueryKey("Parameters");
      }
   }

   class="kw">public void cleanupParameters() {
      if (!this.isCreatingDescriptor()) {
         this.builderParameters.disposeCompileContext();
      }
   }

   @Nonnull
   class="kw">protected <E class="kw">extends Enum<E>> E resolveValue(String var1, E[] var2, String var3) {
      try {
         class="kw">return stringToEnum(var1, var2, var3);
      } catch (IllegalArgumentException var5) {
         throw new IllegalArgumentException(var5.getMessage() + " in " + this.getBreadCrumbs(), var5);
      }
   }

   @Nonnull
   class="kw">public class="kw">static <E class="kw">extends Enum<E>> E stringToEnum(@Nullable String var0, E[] var1, String var2) {
      if (var0 != null && !var0.isBlank()) {
         String var3 = var0.trim();

         for (Enum var7 : var1) {
            if (var7.name().equalsIgnoreCase(var3)) {
               class="kw">return var7;
            }
         }
      }

      throw new IllegalArgumentException(String.format("Enum value '%s' is '%s', must be one of %s", var2, var0, getDomain(var1)));
   }

   @Nonnull
   class="kw">public class="kw">static <E class="kw">extends Enum<E>> String getDomain(E[] var0) {
      class="kw">return Arrays.toString(var0);
   }

   @Nonnull
   class="kw">private class="kw">static String formatEnumCamelCase(@Nonnull String var0) {
      boolean var1 = Character.isLowerCase(var0.charAt(0));
      if (var0.chars().anyMatch(var1x -> Character.isLowerCase(var1x) != var1)) {
         class="kw">return var0;
      }

      StringBuilder var2 = new StringBuilder();

      for (String var6 : var0.split("_", 0)) {
         var2.append(Character.toUpperCase(var6.charAt(0))).append(var6.substring(1).toLowerCase(Locale.ROOT)).append('_');
      }

      var2.deleteCharAt(var2.length() - 1);
      class="kw">return var2.toString();
   }

   @Nonnull
   class="kw">private class="kw">static <E class="kw">extends Enum<E>> String[] getEnumValues(@Nonnull Class<E> var0) {
      class="kw">return Arrays.stream(var0.getEnumConstants()).map(Enum::name).map(BuilderBase::formatEnumCamelCase).toArray(String[]::new);
   }

   class="kw">public <E class="kw">extends Enum<E> & Supplier<String>> void requireEnum(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<E> var3,
      @Nonnull Class<E> var4,
      BuilderDescriptorState var5,
      String var6,
      @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var8 = new StringSchema();
         var8.setEnum(getEnumValues(var4));
         var8.setTitle(var2);
         var8.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, BuilderExpressionDynamic.computableSchema(var8));
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "Flag", var5, var6, var7).required().setEnum(var4);
      } else {
         try {
            var3.accept(this.resolveValue(this.expectString(this.getRequiredJsonElement(var1, var2), var2), var4.getEnumConstants(), var2));
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public <E class="kw">extends Enum<E> & Supplier<String>> boolean getEnum(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<E> var3,
      @Nonnull Class<E> var4,
      @Nullable E var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var12 = new StringSchema();
         var12.setEnum(getEnumValues(var4));
         var12.setTitle(var2);
         var12.setDescription(var8 == null ? var7 : var8);
         this.builderSchema.getProperties().put(var2, BuilderExpressionDynamic.computableSchema(var12));
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "Flag", var6, var7, var8).optional(var5 != null ? var5.toString() : "<context>").setEnum(var4);
         class="kw">return false;
      }

      try {
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         boolean var10 = var9 != null;
         if (var10) {
            var5 = this.resolveValue(this.expectString(var9, var2), var4.getEnumConstants(), var2);
         }

         var3.accept(var5);
         class="kw">return var10;
      } catch (Exception var11) {
         this.addError(var11);
         class="kw">return false;
      }
   }

   class="kw">public <E class="kw">extends Enum<E> & Supplier<String>> void requireEnum(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull EnumHolder<E> var3,
      @Nonnull Class<E> var4,
      BuilderDescriptorState var5,
      String var6,
      @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var8 = new StringSchema();
         var8.setEnum(getEnumValues(var4));
         var8.setTitle(var2);
         var8.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, BuilderExpressionDynamic.computableSchema(var8));
      } else if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, "Flag", var5, var6, var7).required().computable().setEnum(var4);
      } else {
         Objects.requireNonNull(var3, "enumHolder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public <E class="kw">extends Enum<E> & Supplier<String>> boolean getEnum(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull EnumHolder<E> var3,
      @Nonnull Class<E> var4,
      @Nonnull E var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var11 = new StringSchema();
         var11.setEnum(getEnumValues(var4));
         var11.setTitle(var2);
         var11.setDescription(var8 == null ? var7 : var8);
         this.builderSchema.getProperties().put(var2, BuilderExpressionDynamic.computableSchema(var11));
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, "Flag", var6, var7, var8).optional(var5.toString()).computable().setEnum(var4);
         class="kw">return false;
      }

      Objects.requireNonNull(var3, "enumHolder is null");

      try {
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         var3.readJSON(var9, var4, var5, var2, this.builderParameters);
         this.trackDynamicHolder(var3);
         class="kw">return var9 != null;
      } catch (Exception var10) {
         this.addError(var10);
         class="kw">return false;
      }
   }

   @Nonnull
   class="kw">public class="kw">static <E class="kw">extends Enum<E>> String[] enumSetToStrings(@Nonnull EnumSet<E> var0) {
      int var1 = 0;
      Iterator var2 = var0.iterator();

      while (var2.hasNext()) {
         var1++;
         var2.next();
      }

      if (var1 == 0) {
         class="kw">return ArrayUtil.EMPTY_STRING_ARRAY;
      }

      String[] var3 = new String[var1];
      var2 = var0.iterator();

      for (int var4 = 0; var4 < var1; var4++) {
         var3[var4] = var2.next().toString();
      }

      class="kw">return var3;
   }

   @Nonnull
   class="kw">public class="kw">static <E class="kw">extends Enum<E>> EnumSet<E> stringsToEnumSet(@Nullable String[] var0, @Nonnull Class<E> var1, E[] var2, String var3) {
      EnumSet var4 = EnumSet.noneOf(var1);
      if (var0 == null) {
         class="kw">return var4;
      }

      for (String var8 : var0) {
         var4.add(stringToEnum(var8, var2, var3));
      }

      class="kw">return var4;
   }

   @Nonnull
   class="kw">public class="kw">static <E class="kw">extends Enum<E>> E[] stringsToEnumArray(@Nullable String[] var0, @Nonnull Class<E> var1, E[] var2, String var3) {
      if (var0 != null && var0.length != 0) {
         Enum[] var4 = (E[])Array.newInstance(var1, var0.length);

         for (int var5 = 0; var5 < var0.length; var5++) {
            var4[var5] = stringToEnum(var0[var5], var2, var3);
         }

         class="kw">return var4;
      } else {
         class="kw">return (E[])((Enum[])Array.newInstance(var1, 0));
      }
   }

   class="kw">protected <E class="kw">extends Enum<E>> void toSet(String var1, @Nonnull Class<E> var2, @Nonnull EnumSet<E> var3, @Nonnull String var4) {
      Enum[] var5 = (E[])var2.getEnumConstants();

      for (String var9 : var4.split(",", 0)) {
         var3.add(this.resolveValue(var9.trim(), var5, var1));
      }
   }

   @Nonnull
   class="kw">protected EnumSet<RoleDebugFlags> toDebugFlagSet(String var1, @Nonnull String var2) {
      try {
         class="kw">return RoleDebugFlags.getFlags(PATTERN.split(var2.trim(), 0));
      } catch (IllegalArgumentException var4) {
         throw new IllegalArgumentException(var4.getMessage() + " in parameter " + var1 + " at " + this.getBreadCrumbs(), var4);
      }
   }

   class="kw">protected <E class="kw">extends Enum<E>> void toSet(String var1, @Nonnull Class<E> var2, @Nonnull EnumSet<E> var3, @Nonnull JsonArray var4) {
      Enum[] var5 = (E[])var2.getEnumConstants();

      for (JsonElement var7 : var4) {
         var3.add(this.resolveValue(this.expectString(var7, var1), var5, var1));
      }
   }

   class="kw">protected <E class="kw">extends Enum<E>> void toSet(String var1, @Nonnull Class<E> var2, @Nonnull EnumSet<E> var3, @Nonnull JsonElement var4) {
      if (var4.isJsonArray()) {
         this.toSet(var1, var2, var3, this.expectJsonArray(var4, var1));
         NPCPlugin.get()
            .getLogger()
            .at(Level.WARNING)
            .log(
               "Use of strings for enum sets is deprecated for JSON attribute '%s' (use []) in %s: %s",
               var1,
               this.getBreadCrumbs(),
               this.builderParameters.getFileName()
            );
      } else {
         this.toSet(var1, var2, var3, this.expectString(var4, var1));
      }
   }

   class="kw">public <E class="kw">extends Enum<E> & Supplier<String>> void requireEnumArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull EnumArrayHolder<E> var3,
      @Nonnull Class<E> var4,
      EnumArrayValidator var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var9 = new StringSchema();
         var9.setEnum(getEnumValues(var4));
         var9.setTitle(var2);
         var9.setDescription(var8 == null ? var7 : var8);
         ArraySchema var10 = new ArraySchema();
         var10.setItem(var9);
         this.builderSchema.getProperties().put(var2, BuilderExpressionDynamic.computableSchema(var10));
      } else if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, "FlagArray", var6, var7, var8).required().computable().validator(var5).setEnum(var4);
      } else {
         Objects.requireNonNull(var3, "enumArrayHolder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var5, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var11) {
            this.addError(var11);
         }
      }
   }

   class="kw">public <E class="kw">extends Enum<E> & Supplier<String>> void requireEnumSet(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<? super EnumSet<E>> var3,
      @Nonnull Class<E> var4,
      @Nonnull Supplier<? class="kw">extends EnumSet<E>> var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var12 = new StringSchema();
         var12.setEnum(getEnumValues(var4));
         var12.setTitle(var2);
         var12.setDescription(var8 == null ? var7 : var8);
         ArraySchema var10 = new ArraySchema();
         var10.setItem(var12);
         var10.setUniqueItems(true);
         this.builderSchema.getProperties().put(var2, BuilderExpressionDynamic.computableSchema(var10));
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "FlagSet", var6, var7, var8).required().setEnum(var4);
      } else {
         try {
            EnumSet var9 = (EnumSet<E>)var5.get();
            this.toSet(var2, var4, var9, this.getRequiredJsonElement(var1, var2));
            var3.accept(var9);
         } catch (Exception var11) {
            this.addError(var11);
         }
      }
   }

   class="kw">public <E class="kw">extends Enum<E> & Supplier<String>> boolean getEnumSet(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<? super EnumSet<E>> var3,
      @Nonnull Class<E> var4,
      @Nonnull Supplier<? class="kw">extends EnumSet<E>> var5,
      @Nonnull EnumSet<E> var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var13 = new StringSchema();
         var13.setEnum(getEnumValues(var4));
         var13.setTitle(var2);
         var13.setDescription(var9 == null ? var8 : var9);
         ArraySchema var14 = new ArraySchema();
         var14.setItem(var13);
         var14.setUniqueItems(true);
         this.builderSchema.getProperties().put(var2, BuilderExpressionDynamic.computableSchema(var14));
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "FlagSet", var7, var8, var9).optional(var6.toString()).setEnum(var4);
         class="kw">return false;
      }

      try {
         JsonElement var10 = this.getOptionalJsonElement(var1, var2);
         if (var10 != null) {
            EnumSet var11 = (EnumSet<E>)var5.get();
            this.toSet(var2, var4, var11, var10);
            var3.accept(var11);
            class="kw">return true;
         }

         var3.accept(var6);
      } catch (Exception var12) {
         this.addError(var12);
      }

      class="kw">return false;
   }

   class="kw">public <E class="kw">extends Enum<E> & Supplier<String>> void requireEnumSet(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull EnumSetHolder<E> var3,
      @Nonnull Class<E> var4,
      BuilderDescriptorState var5,
      String var6,
      @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var11 = new StringSchema();
         var11.setEnum(getEnumValues(var4));
         var11.setTitle(var2);
         var11.setDescription(var7 == null ? var6 : var7);
         ArraySchema var12 = new ArraySchema();
         var12.setItem(var11);
         var12.setUniqueItems(true);
         this.builderSchema.getProperties().put(var2, BuilderExpressionDynamic.computableSchema(var12));
      } else if (this.isCreatingSchema()) {
         StringSchema var8 = new StringSchema();
         var8.setEnum(getEnumValues(var4));
         var8.setTitle(var2);
         var8.setDescription(var7 == null ? var6 : var7);
         ArraySchema var9 = new ArraySchema();
         var9.setItem(var8);
         var9.setUniqueItems(true);
         this.builderSchema.getProperties().put(var2, var9);
      } else if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, "FlagSet", var5, var6, var7).required().computable().setEnum(var4);
      } else {
         Objects.requireNonNull(var3, "enumSetHolder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var2, this.builderParameters);
            this.trackDynamicHolder(var3);
         } catch (Exception var10) {
            this.addError(var10);
         }
      }
   }

   class="kw">public <E class="kw">extends Enum<E> & Supplier<String>> boolean getEnumSet(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull EnumSetHolder<E> var3,
      @Nonnull Class<E> var4,
      @Nonnull EnumSet<E> var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var12 = new StringSchema();
         var12.setEnum(getEnumValues(var4));
         var12.setTitle(var2);
         var12.setDescription(var8 == null ? var7 : var8);
         ArraySchema var10 = new ArraySchema();
         var10.setItem(var12);
         var10.setUniqueItems(true);
         this.builderSchema.getProperties().put(var2, BuilderExpressionDynamic.computableSchema(var10));
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, "FlagSet", var6, var7, var8).optional(var5.toString()).computable().setEnum(var4);
         class="kw">return false;
      }

      Objects.requireNonNull(var3, "enumSetHolder is null");

      try {
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         var3.readJSON(var9, var5, var4, var2, this.builderParameters);
         this.trackDynamicHolder(var3);
         class="kw">return var9 != null;
      } catch (Exception var11) {
         this.addError(var11);
         class="kw">return false;
      }
   }

   @Nonnull
   class="kw">private Schema getObjectSchema(@Nonnull Class<?> var1) {
      BuilderFactory var2 = this.builderManager.getFactory(var1);
      Schema var3 = this.builderSchemaContext.refDefinition(var2);
      ObjectSchema var4 = new ObjectSchema();
      var4.setProperties(new LinkedHashMap<>());
      Map var5 = var4.getProperties();
      var5.put("Reference", BuilderExpressionDynamic.computableSchema(new StringSchema()));
      var5.put("Local", BuilderExpressionDynamic.computableSchema(new BooleanSchema()));
      var5.put("$Label", BuilderExpressionDynamic.computableSchema(new StringSchema()));
      var5.put("Nullable", BuilderExpressionDynamic.computableSchema(new BooleanSchema()));
      var5.put("Interfaces", BuilderExpressionDynamic.computableSchema(new ArraySchema(new StringSchema())));
      var5.put("AcceptsForward", new BooleanSchema());
      var5.put("Modify", BuilderModifier.toSchema(this.builderSchemaContext));
      Schema var6 = new Schema();
      var6.setDoNotSuggest(true);
      var5.put("Comment", var6);
      var5.put("$Title", var6);
      var5.put("$Comment", var6);
      var5.put("$TODO", var6);
      var5.put("$Author", var6);
      var5.put("$Position", var6);
      var5.put("$FloatingFunctionNodes", var6);
      var5.put("$Groups", var6);
      var5.put("$WorkspaceID", var6);
      var5.put("$NodeEditorMetadata", var6);
      var5.put("$NodeId", var6);
      var4.setTitle("Object reference");
      var4.setRequired("Reference");
      var4.setAdditionalProperties(false);
      Schema var7 = new Schema();
      ObjectSchema var8 = new ObjectSchema();
      var8.setProperties(Map.of("Reference", BuilderExpressionDynamic.computableSchema(new StringSchema())));
      var8.setRequired("Reference");
      var7.setIf(var8);
      var7.setThen(var4);
      var7.setElse(var3);
      class="kw">return BuilderExpressionDynamic.computableSchema(var7);
   }

   class="kw">public boolean getObject(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull BuilderObjectReferenceHelper<?> var3,
      BuilderDescriptorState var4,
      String var5,
      @Nullable String var6,
      @Nonnull BuilderValidationHelper var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var10 = this.getObjectSchema(var3.getClassType());
         var10.setTitle(var2);
         var10.setDescription(var6 == null ? var5 : var6);
         this.builderSchema.getProperties().put(var2, var10);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor
            .addAttribute(var2, "ObjectRef", var4, var5, var6)
            .domain(this.builderManager.getCategoryName(var3.getClassType()))
            .optional((String)null);
         class="kw">return false;
      }

      this.addQueryKey(var2);

      try {
         JsonElement var8 = this.expectJsonObject(var1, var2).get(var2);
         if (var8 != null) {
            var3.setLabel(var2);
            this.extraInfo.pushKey(var2);
            var3.readConfig(var8, this.builderManager, this.builderParameters, var7);
            this.extraInfo.popKey();
            class="kw">return true;
         }
      } catch (Exception var9) {
         this.addError(var9);
      }

      class="kw">return false;
   }

   class="kw">public void requireObject(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull BuilderObjectReferenceHelper<?> var3,
      BuilderDescriptorState var4,
      String var5,
      @Nullable String var6,
      @Nonnull BuilderValidationHelper var7
   ) {
      if (this.isCreatingSchema()) {
         Schema var8 = this.getObjectSchema(var3.getClassType());
         var8.setTitle(var2);
         var8.setDescription(var6 == null ? var5 : var6);
         this.builderSchema.getProperties().put(var2, var8);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "ObjectRef", var4, var5, var6).domain(this.builderManager.getCategoryName(var3.getClassType())).required();
      } else {
         try {
            var3.setLabel(var2);
            this.extraInfo.pushKey(var2);
            var3.readConfig(this.getRequiredJsonElement(var1, var2), this.builderManager, this.builderParameters, var7);
            this.extraInfo.popKey();
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public boolean getCodecObject(
      @Nonnull JsonElement var1, String var2, @Nonnull BuilderCodecObjectHelper<?> var3, BuilderDescriptorState var4, String var5, @Nullable String var6
   ) {
      if (this.isCreatingSchema()) {
         Schema var11 = this.builderSchemaContext.refDefinition(var3.codec);
         var11.setDescription(var6 == null ? var5 : var6);
         this.builderSchema.getProperties().put(var2, var11);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "CodecObject", var4, var5, var6).domain(var3.getClassType().getSimpleName()).optional((String)null);
         class="kw">return false;
      }

      this.addQueryKey(var2);

      try {
         JsonElement var7 = this.expectJsonObject(var1, var2).get(var2);
         if (var7 != null) {
            this.extraInfo.pushKey(var2);

            try {
               var3.readConfig(var7, this.extraInfo);
            } catch (Exception var9) {
               this.addError(var9);
            }

            this.extraInfo.popKey();
            class="kw">return true;
         }
      } catch (Exception var10) {
         this.addError(var10);
      }

      class="kw">return false;
   }

   class="kw">public void requireCodecObject(
      @Nonnull JsonElement var1, String var2, @Nonnull BuilderCodecObjectHelper<?> var3, BuilderDescriptorState var4, String var5, @Nullable String var6
   ) {
      if (this.isCreatingSchema()) {
         Schema var7 = this.builderSchemaContext.refDefinition(var3.codec);
         var7.setTitle(var2);
         var7.setDescription(var6 == null ? var5 : var6);
         this.builderSchema.getProperties().put(var2, var7);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "CodecObject", var4, var5, var6).domain(var3.getClassType().getSimpleName()).required();
      } else {
         this.extraInfo.pushKey(var2);

         try {
            var3.readConfig(this.getRequiredJsonElement(var1, var2), this.extraInfo);
         } catch (Exception var8) {
            this.addError(var8);
         }

         this.extraInfo.popKey();
      }
   }

   class="kw">public void requireEmbeddableArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull BuilderObjectArrayHelper<?, ?> var3,
      @Nonnull ArrayValidator var4,
      BuilderDescriptorState var5,
      String var6,
      String var7,
      @Nonnull BuilderValidationHelper var8
   ) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor
            .addAttribute(var2, "EmbeddableArray", var5, var6, var7)
            .domain(this.builderManager.getCategoryName(var3.getClassType()))
            .validator(var4)
            .required();
      } else {
         if (this.useDefaultsOnly) {
            throw new IllegalArgumentException("An embeddable array can be only used once!");
         }

         try {
            if (var1.isJsonArray()) {
               var3.readConfig(var1, this.builderManager, this.builderParameters, var8);
               if (!var4.test(var3)) {
                  throw new IllegalStateException(var4.errorMessage(var3) + " at " + this.getBreadCrumbs());
               }

               this.useDefaultsOnly = true;
            } else {
               this.requireArray0(var1, var2, var3, var4, var8);
            }
         } catch (Exception var10) {
            this.addError(var10);
         }
      }
   }

   class="kw">public boolean getArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull BuilderObjectArrayHelper<?, ?> var3,
      ArrayValidator var4,
      BuilderDescriptorState var5,
      String var6,
      @Nullable String var7,
      @Nonnull BuilderValidationHelper var8
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var12 = new ArraySchema();
         Schema var10 = this.getObjectSchema(var3.getClassType());
         var12.setDescription(var7 == null ? var6 : var7);
         var12.setItem(var10);
         this.builderSchema.getProperties().put(var2, var12);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor
            .addAttribute(var2, "Array", var5, var6, var7)
            .optional((String)null)
            .validator(var4)
            .domain(this.builderManager.getCategoryName(var3.getClassType()));
         class="kw">return false;
      }

      try {
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         if (var9 != null) {
            this.requireArray0(var9, var2, var3, var4, var8);
            class="kw">return true;
         }
      } catch (Exception var11) {
         this.addError(var11);
      }

      class="kw">return false;
   }

   class="kw">public void requireArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull BuilderObjectArrayHelper<?, ?> var3,
      ArrayValidator var4,
      BuilderDescriptorState var5,
      String var6,
      @Nullable String var7,
      @Nonnull BuilderValidationHelper var8
   ) {
      if (this.isCreatingSchema()) {
         ArraySchema var9 = new ArraySchema();
         Schema var10 = this.getObjectSchema(var3.getClassType());
         var9.setDescription(var7 == null ? var6 : var7);
         var9.setItem(var10);
         this.builderSchema.getProperties().put(var2, var9);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor
            .addAttribute(var2, "Array", var5, var6, var7)
            .required()
            .validator(var4)
            .domain(this.builderManager.getCategoryName(var3.getClassType()));
      } else {
         try {
            this.requireArray0(this.getRequiredJsonElement(var1, var2), var2, var3, var4, var8);
         } catch (Exception var11) {
            this.addError(var11);
         }
      }
   }

   class="kw">private void requireArray0(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull BuilderObjectArrayHelper<?, ?> var3,
      @Nullable ArrayValidator var4,
      @Nonnull BuilderValidationHelper var5
   ) {
      var3.setLabel(var2);
      this.extraInfo.pushKey(var2);
      var3.readConfig(var1, this.builderManager, this.builderParameters, var5);
      this.extraInfo.popKey();
      if (var4 != null && !var4.test(var3)) {
         throw new IllegalStateException(var4.errorMessage(var3) + " at " + this.getBreadCrumbs());
      }
   }

   class="kw">public void requireArray(
      @Nonnull JsonElement var1,
      @Nonnull BuilderObjectArrayHelper<?, ?> var2,
      ArrayValidator var3,
      BuilderDescriptorState var4,
      String var5,
      @Nullable String var6,
      @Nonnull BuilderValidationHelper var7
   ) {
      if (this.isCreatingSchema()) {
         this.builderSchemaRaw = new ArraySchema();
         Schema var8 = this.getObjectSchema(var2.getClassType());
         this.builderSchemaRaw.setDescription(var6 == null ? var5 : var6);
         ((ArraySchema)this.builderSchemaRaw).setItem(var8);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor
            .addAttribute(null, "Array", var4, var5, var6)
            .domain(this.builderManager.getCategoryName(var2.getClassType()))
            .validator(var3)
            .required();
      } else {
         try {
            var2.readConfig(var1, this.builderManager, this.builderParameters, var7);
         } catch (Exception var9) {
            this.addError(var9);
         }
      }
   }

   class="kw">public void requireAsset(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<String> var3,
      @Nonnull AssetValidator var4,
      BuilderDescriptorState var5,
      String var6,
      @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var8 = new StringSchema();
         var4.updateSchema(var8);
         Schema var9 = BuilderExpressionDynamic.computableSchema(var8);
         var9.setTitle(var2);
         var9.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var9);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "Asset", var5, var6, var7).required().domain(var4.getDomain());
      } else {
         try {
            this.validateAndSet(this.expectString(this.getRequiredJsonElement(var1, var2), var2), var4, var3, var2);
         } catch (Exception var10) {
            this.addError(var10);
         }
      }
   }

   class="kw">public boolean getAsset(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<String> var3,
      String var4,
      @Nonnull AssetValidator var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var12 = new StringSchema();
         var5.updateSchema(var12);
         Schema var13 = BuilderExpressionDynamic.computableSchema(var12);
         var13.setTitle(var2);
         var13.setDescription(var8 == null ? var7 : var8);
         this.builderSchema.getProperties().put(var2, var13);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "Asset", var6, var7, var8).optional(var4).domain(var5.getDomain());
         class="kw">return false;
      }

      try {
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         boolean var10 = var9 != null;
         if (var10) {
            var4 = this.expectString(var9, var2);
         }

         this.validateAndSet(var4, var5, var3, var2);
         class="kw">return var10;
      } catch (Exception var11) {
         this.addError(var11);
         class="kw">return false;
      }
   }

   class="kw">public void requireAsset(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull AssetHolder var3,
      @Nonnull AssetValidator var4,
      BuilderDescriptorState var5,
      String var6,
      @Nullable String var7
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var8 = new StringSchema();
         var4.updateSchema(var8);
         Schema var9 = BuilderExpressionDynamic.computableSchema(var8);
         var9.setTitle(var2);
         var9.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var9);
      } else if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, "Asset", var5, var6, var7).required().computable().domain(var4.getDomain());
      } else {
         Objects.requireNonNull(var3, "assetHolder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var2, this.builderParameters);
            var3.staticValidate();
            this.trackDynamicHolder(var3);
         } catch (Exception var10) {
            this.addError(var10);
         }
      }
   }

   class="kw">public boolean getAsset(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull AssetHolder var3,
      String var4,
      @Nonnull AssetValidator var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var12 = new StringSchema();
         var5.updateSchema(var12);
         Schema var10 = BuilderExpressionDynamic.computableSchema(var12);
         var10.setTitle(var2);
         var10.setDescription(var8 == null ? var7 : var8);
         this.builderSchema.getProperties().put(var2, var10);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, "Asset", var6, var7, var8).optional(var4).computable().domain(var5.getDomain());
         class="kw">return false;
      }

      Objects.requireNonNull(var3, "assetHolder is null");

      try {
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         var3.readJSON(var9, var4, var5, var2, this.builderParameters);
         var3.staticValidate();
         this.trackDynamicHolder(var3);
         class="kw">return var9 != null;
      } catch (Exception var11) {
         this.addError(var11);
         class="kw">return false;
      }
   }

   class="kw">private void validateAndSet(String var1, @Nullable AssetValidator var2, @Nonnull Consumer<String> var3, String var4) {
      if (var2 != null) {
         this.validateSingleAsset(var1, var2, var4);
      }

      var3.accept(var1);
   }

   class="kw">public class="kw">static boolean validateAssetList(@Nullable String[] var0, @Nonnull AssetValidator var1, String var2, boolean var3) {
      if (var0 == null) {
         if (!var1.canListBeEmpty()) {
            throw new IllegalStateException("Null is not an allowed list of " + var1.getDomain() + " value for attribute \"" + var2 + "\"");
         } else {
            class="kw">return true;
         }
      } else if (var0.length == 0) {
         if (!var1.canListBeEmpty()) {
            throw new IllegalStateException("List of " + var1.getDomain() + " value for attribute \"" + var2 + "\" must not be empty");
         } else {
            class="kw">return true;
         }
      } else {
         for (String var7 : var0) {
            validateAsset(var7, var1, var2, var3);
         }

         class="kw">return true;
      }
   }

   class="kw">public class="kw">static boolean validateAsset(@Nullable String var0, @Nonnull AssetValidator var1, String var2, boolean var3) {
      if (var0 == null) {
         if (!var1.isNullable()) {
            throw new SkipSentryException(new IllegalStateException("Null is not an allowed " + var1.getDomain() + " value for attribute \"" + var2 + "\""));
         } else {
            class="kw">return true;
         }
      } else if (var0.isEmpty()) {
         if (!var1.canBeEmpty()) {
            throw new SkipSentryException(
               new IllegalStateException("Empty string is not an allowed " + var1.getDomain() + " value for attribute \"" + var2 + "\"")
            );
         } else {
            class="kw">return true;
         }
      } else if (!var3) {
         class="kw">return true;
      } else if (var1.isMatcher() && StringUtil.isGlobPattern(var0)) {
         class="kw">return true;
      } else if (!var1.test(var0)) {
         throw new SkipSentryException(new IllegalStateException(var1.errorMessage(var0, var2)));
      } else {
         class="kw">return true;
      }
   }

   class="kw">private void validateSingleAsset(String var1, @Nonnull AssetValidator var2, String var3) {
      try {
         if (!validateAsset(var1, var2, var3, true)) {
            NPCPlugin.get()
               .getLogger()
               .at(Level.WARNING)
               .log("%s in %s: %s", var2.errorMessage(var1, var3), this.getBreadCrumbs(), this.builderParameters.getFileName());
         }
      } catch (IllegalStateException var5) {
         throw new IllegalStateException(var5.getMessage() + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">public boolean getAssetArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<String[]> var3,
      Function<String, String> var4,
      String[] var5,
      @Nonnull AssetValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var14 = new StringSchema();
         var6.updateSchema(var14);
         ArraySchema var15 = new ArraySchema(var14);
         Schema var16 = BuilderExpressionDynamic.computableSchema(var15);
         var16.setTitle(var2);
         var16.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var16);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "AssetArray", var7, var8, var9).optional(this.defaultArrayToString(var5)).domain(var6.getDomain());
         class="kw">return false;
      }

      try {
         JsonElement var10 = this.getOptionalJsonElement(var1, var2);
         boolean var12 = var10 != null;
         String[] var11;
         if (var12) {
            var11 = this.expectStringArray(var10, var4, var2);
         } else {
            var11 = var5;
         }

         this.validateAndSet(var11, var6, var3, var2);
         class="kw">return var12;
      } catch (Exception var13) {
         this.addError(var13);
         class="kw">return false;
      }
   }

   class="kw">public boolean getAssetArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull AssetArrayHolder var3,
      String[] var4,
      int var5,
      int var6,
      @Nonnull AssetValidator var7,
      BuilderDescriptorState var8,
      String var9,
      @Nullable String var10
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var15 = new StringSchema();
         var7.updateSchema(var15);
         ArraySchema var12 = new ArraySchema(var15);
         if (var5 != 0) {
            var12.setMinItems(var5);
         }

         if (var6 != Integer.MAX_VALUE) {
            var12.setMaxItems(var6);
         }

         Schema var13 = BuilderExpressionDynamic.computableSchema(var12);
         var13.setTitle(var2);
         var13.setDescription(var10 == null ? var9 : var10);
         this.builderSchema.getProperties().put(var2, var13);
         class="kw">return false;
      } else {
         if (this.isCreatingDescriptor()) {
            var3.setName(var2);
            this.builderDescriptor
               .addAttribute(var2, "AssetArray", var8, var9, var10)
               .optional(this.defaultArrayToString(var4))
               .computable()
               .domain(var7.getDomain());
            class="kw">return false;
         }

         Objects.requireNonNull(var3, "assetHolder is null");

         try {
            JsonElement var11 = this.getOptionalJsonElement(var1, var2);
            var3.readJSON(var11, var5, var6, var4, var7, var2, this.builderParameters);
            var3.staticValidate();
            this.trackDynamicHolder(var3);
            class="kw">return var11 != null;
         } catch (Exception var14) {
            this.addError(var14);
            class="kw">return false;
         }
      }
   }

   class="kw">public void requireAssetArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<String[]> var3,
      Function<String, String> var4,
      @Nonnull AssetValidator var5,
      BuilderDescriptorState var6,
      String var7,
      @Nullable String var8
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var13 = new StringSchema();
         var5.updateSchema(var13);
         ArraySchema var10 = new ArraySchema(var13);
         Schema var11 = BuilderExpressionDynamic.computableSchema(var10);
         var11.setTitle(var2);
         var11.setDescription(var8 == null ? var7 : var8);
         this.builderSchema.getProperties().put(var2, var11);
      } else if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "AssetArray", var6, var7, var8).required().domain(var5.getDomain());
      } else {
         try {
            JsonElement var9 = this.getRequiredJsonElement(var1, var2);
            this.validateAndSet(this.expectStringArray(var9, var4, var2), var5, var3, var2);
         } catch (Exception var12) {
            this.addError(var12);
         }
      }
   }

   class="kw">public void requireAssetArray(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull AssetArrayHolder var3,
      int var4,
      int var5,
      @Nonnull AssetValidator var6,
      BuilderDescriptorState var7,
      String var8,
      @Nullable String var9
   ) {
      if (this.isCreatingSchema()) {
         StringSchema var10 = new StringSchema();
         var6.updateSchema(var10);
         ArraySchema var11 = new ArraySchema(var10);
         if (var4 != 0) {
            var11.setMinItems(var4);
         }

         if (var5 != Integer.MAX_VALUE) {
            var11.setMaxItems(var5);
         }

         Schema var12 = BuilderExpressionDynamic.computableSchema(var11);
         var12.setTitle(var2);
         var12.setDescription(var9 == null ? var8 : var9);
         this.builderSchema.getProperties().put(var2, var12);
      } else if (this.isCreatingDescriptor()) {
         var3.setName(var2);
         this.builderDescriptor.addAttribute(var2, "AssetArray", var7, var8, var9).required().computable().domain(var6.getDomain());
      } else {
         Objects.requireNonNull(var3, "assetHolder is null");

         try {
            var3.readJSON(this.getRequiredJsonElement(var1, var2), var4, var5, var6, var2, this.builderParameters);
            var3.staticValidate();
            this.trackDynamicHolder(var3);
         } catch (Exception var13) {
            this.addError(var13);
         }
      }
   }

   class="kw">private void validateAndSet(@Nullable String[] var1, @Nullable AssetValidator var2, @Nonnull Consumer<String[]> var3, String var4) {
      if (var2 != null) {
         if (var1 == null) {
            if (!var2.canListBeEmpty()) {
               throw new IllegalStateException(
                  "Null is not an allowed list of " + var2.getDomain() + " value for attribute \"" + var4 + "\" in " + this.getBreadCrumbs()
               );
            }
         } else if (var1.length == 0) {
            if (!var2.canListBeEmpty()) {
               throw new IllegalStateException(
                  "List of " + var2.getDomain() + " value for attribute \"" + var4 + "\" must not be empty in " + this.getBreadCrumbs()
               );
            }
         } else {
            for (String var8 : var1) {
               this.validateSingleAsset(var8, var2, var4);
            }
         }
      }

      var3.accept(var1);
   }

   class="kw">public boolean getOverride(
      @Nonnull JsonElement var1, String var2, @Nonnull Consumer<FeatureOverride> var3, BuilderDescriptorState var4, String var5, @Nullable String var6
   ) {
      class="kw">return this.getEnum(var1, var2, var3, FeatureOverride.class, FeatureOverride.Default, var4, var5, var6);
   }

   class="kw">public boolean getOverride(
      @Nonnull JsonElement var1, String var2, @Nonnull EnumHolder<FeatureOverride> var3, BuilderDescriptorState var4, String var5, @Nullable String var6
   ) {
      class="kw">return this.getEnum(var1, var2, var3, FeatureOverride.class, FeatureOverride.Default, var4, var5, var6);
   }

   class="kw">protected BuilderDescriptor createDescriptor(
      @Nonnull Builder<?> var1, String var2, String var3, BuilderManager var4, BuilderDescriptorState var5, String var6, String var7, Set<String> var8
   ) {
      this.builderDescriptor = new BuilderDescriptor(var2, var3, var6, var7, var8, var5);

      try {
         var1.readConfig(null, null, var4, this.builderParameters, null);
         class="kw">return this.builderDescriptor;
      } class="kw">finally {
         this.builderDescriptor = null;
      }
   }

   class="kw">protected boolean isCreatingDescriptor() {
      class="kw">return this.builderDescriptor != null;
   }

   class="kw">protected boolean isCreatingSchema() {
      class="kw">return this.builderSchema != null;
   }

   @Nonnull
   @Override
   class="kw">public String getSchemaName() {
      class="kw">return this.typeName == null ? "NPC:Class:" + this.getClass().getSimpleName() : "NPC:" + this.typeName;
   }

   @Nonnull
   @Override
   class="kw">public Schema toSchema(@Nonnull SchemaContext var1) {
      try {
         this.builderSchemaContext = var1;
         this.builderSchemaRaw = this.builderSchema = new ObjectSchema();
         this.builderSchema.setProperties(new LinkedHashMap<>());
         this.builderSchema.setAdditionalProperties(false);
         this.builderDescriptor = new BuilderDescriptor(null, null, null, null, null, null);

         try {
            this.readConfig(null, null, BuilderManager.SCHEMA_BUILDER_MANAGER, this.builderParameters, null);
         } class="kw">finally {
            this.builderDescriptor = null;
         }

         Schema var2 = new Schema();
         var2.setDoNotSuggest(true);
         this.builderSchema.getProperties().put("Comment", var2);
         this.builderSchema.getProperties().put("$Title", var2);
         this.builderSchema.getProperties().put("$Comment", var2);
         this.builderSchema.getProperties().put("$TODO", var2);
         this.builderSchema.getProperties().put("$Author", var2);
         this.builderSchema.getProperties().put("$Position", var2);
         this.builderSchema.getProperties().put("$FloatingFunctionNodes", var2);
         this.builderSchema.getProperties().put("$Groups", var2);
         this.builderSchema.getProperties().put("$WorkspaceID", var2);
         this.builderSchema.getProperties().put("$NodeEditorMetadata", var2);
         this.builderSchema.getProperties().put("$NodeId", var2);
         this.builderSchemaRaw.setTitle(this.typeName);
         this.builderSchemaRaw.setDescription(this.getLongDescription());
         class="kw">return this.builderSchemaRaw;
      } class="kw">finally {
         this.builderSchema = null;
         this.builderSchemaContext = null;
      }
   }

   @Override
   class="kw">public class="kw">final BuilderDescriptor getDescriptor(String var1, String var2, BuilderManager var3) {
      HashSet var4 = new HashSet<>();
      this.registerTags(var4);
      class="kw">return this.createDescriptor(this, var1, var2, var3, this.getBuilderDescriptorState(), this.getShortDescription(), this.getLongDescription(), var4);
   }

   @Nullable
   class="kw">public class="kw">abstract String getShortDescription();

   @Nullable
   class="kw">public class="kw">abstract String getLongDescription();

   class="kw">public void registerTags(@Nonnull Set<String> var1) {
      String var2 = this.getClass().getPackageName().replaceFirst("\\.builders$", "");
      var1.add(var2.substring(var2.lastIndexOf(46) + 1));
   }

   @Nullable
   @Override
   class="kw">public class="kw">abstract BuilderDescriptorState getBuilderDescriptorState();

   class="kw">protected void validateNotAllStringsEmpty(String var1, String var2, String var3, String var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(StringsNotEmptyValidator.withAttributes(var1, var3));
      } else {
         if (!StringsNotEmptyValidator.test(var2, var4)) {
            this.addError(StringsNotEmptyValidator.errorMessage(var2, var1, var4, var3, this.getBreadCrumbs()));
         }
      }
   }

   class="kw">protected void validateAtMostOneString(String var1, String var2, String var3, String var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(StringsAtMostOneValidator.withAttributes(var1, var3));
      } else {
         if (StringsAtMostOneValidator.test(var2, var4)) {
            this.addError(StringsAtMostOneValidator.errorMessage(var2, var1, var4, var3, this.getBreadCrumbs()));
         }
      }
   }

   class="kw">protected void validateOneSetString(String var1, String var2, String var3, String var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(StringsOneSetValidator.withAttributes(var1, var3));
      } else {
         if (!StringsOneSetValidator.test(var2, var4)) {
            this.addError(StringsOneSetValidator.formatErrorMessage(var2, var1, var4, var3, this.getBreadCrumbs()));
         }
      }
   }

   class="kw">protected void validateOneSetAsset(@Nonnull AssetHolder var1, String var2, String var3) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(StringsOneSetValidator.withAttributes(var1.getName(), var3));
      } else if (var1.isStatic()) {
         this.validateOneSetString(var1.getName(), var1.get(null), var2, var3);
      } else {
         var1.addRelationValidator((var4, var5) -> {
            if (!StringsOneSetValidator.test(var5, var3)) {
               throw new IllegalStateException(StringsOneSetValidator.formatErrorMessage(var5, var1.getName(), var3, var2, this.getBreadCrumbs()));
            }
         });
      }
   }

   class="kw">protected void validateOneSetAsset(@Nonnull AssetHolder var1, @Nonnull AssetHolder var2) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(StringsOneSetValidator.withAttributes(var1.getName(), var2.getName()));
      } else if (var1.isStatic()) {
         this.validateOneSetAsset(var2, var1.getName(), var1.get(null));
      } else if (var2.isStatic()) {
         this.validateOneSetAsset(var1, var2.getName(), var2.get(null));
      } else {
         var1.addRelationValidator((var3, var4) -> {
            String var5 = var2.rawGet(var3);
            if (!StringsOneSetValidator.test(var4, var5)) {
               throw new IllegalStateException(StringsOneSetValidator.formatErrorMessage(var4, var1.getName(), var5, var2.getName(), this.getBreadCrumbs()));
            }
         });
         var2.addRelationValidator((var3, var4) -> {
            String var5 = var1.rawGet(var3);
            if (!StringsOneSetValidator.test(var5, var4)) {
               throw new IllegalStateException(StringsOneSetValidator.formatErrorMessage(var5, var1.getName(), var4, var2.getName(), this.getBreadCrumbs()));
            }
         });
      }
   }

   class="kw">protected void validateOneSetAssetArray(@Nonnull AssetArrayHolder var1, String var2, String[] var3) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ArraysOneSetValidator.withAttributes(var1.getName(), var2));
      } else if (var1.isStatic()) {
         if (!ArraysOneSetValidator.validate(var1.get(null), var3)) {
            this.addError(ArraysOneSetValidator.formatErrorMessage(var1.getName(), var2, this.getBreadCrumbs()));
         }
      } else {
         var1.addRelationValidator((var4, var5) -> {
            if (!ArraysOneSetValidator.validate(var5, var3)) {
               throw new IllegalStateException(ArraysOneSetValidator.formatErrorMessage(var1.getName(), var2, this.getBreadCrumbs()));
            }
         });
      }
   }

   class="kw">protected void validateOneSetAssetArray(@Nonnull AssetArrayHolder var1, @Nonnull AssetArrayHolder var2) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ArraysOneSetValidator.withAttributes(var1.getName(), var2.getName()));
      } else if (var1.isStatic()) {
         this.validateOneSetAssetArray(var2, var1.getName(), var1.get(null));
      } else if (var2.isStatic()) {
         this.validateOneSetAssetArray(var1, var2.getName(), var2.get(null));
      } else {
         var1.addRelationValidator((var3, var4) -> {
            String[] var5 = var2.rawGet(var3);
            if (!ArraysOneSetValidator.validate(var4, var5)) {
               throw new IllegalStateException(ArraysOneSetValidator.formatErrorMessage(var1.getName(), var2.getName(), this.getBreadCrumbs()));
            }
         });
         var2.addRelationValidator((var3, var4) -> {
            String[] var5 = var1.rawGet(var3);
            if (!ArraysOneSetValidator.validate(var5, var4)) {
               throw new IllegalStateException(ArraysOneSetValidator.formatErrorMessage(var1.getName(), var2.getName(), this.getBreadCrumbs()));
            }
         });
      }
   }

   class="kw">protected <K> void validateNoDuplicates(Iterable<K> var1, String var2) {
      NoDuplicatesValidator var3 = NoDuplicatesValidator.withAttributes(var1, var2);
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(var3);
      } else {
         if (!var3.test()) {
            this.addError(var3.errorMessage());
         }
      }
   }

   class="kw">protected void validateDoubleRelation(String var1, double var2, @Nonnull RelationalOperator var4, String var5, double var6) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1, var4, var5));
      } else {
         if (!DoubleValidator.compare(var2, var4, var6)) {
            this.addError(String.format("'%s'(=%s) should be %s '%s'(=%s) in %s", var1, var2, var4.asText(), var5, var6, this.getBreadCrumbs()));
         }
      }
   }

   class="kw">protected void validateDoubleRelation(@Nonnull DoubleHolder var1, @Nonnull RelationalOperator var2, String var3, double var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1.getName(), var2, var3));
      } else {
         if (var1.isStatic()) {
            this.validateDoubleRelation(var1.getName(), var1.get(null), var2, var3, var4);
         } else {
            var1.addRelationValidator(
               (var6, var7) -> {
                  if (!DoubleValidator.compare(var7, var2, var4)) {
                     throw new IllegalStateException(
                        String.format("'%s'(=%s) should be %s '%s'(=%s) in %s", var1.getName(), var7, var2.asText(), var3, var4, this.getBreadCrumbs())
                     );
                  }
               }
            );
         }
      }
   }

   class="kw">protected void validateDoubleRelation(String var1, double var2, @Nonnull RelationalOperator var4, @Nonnull DoubleHolder var5) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1, var4, var5.getName()));
      } else {
         if (var5.isStatic()) {
            this.validateDoubleRelation(var1, var2, var4, var5.getName(), var5.get(null));
         } else {
            var5.addRelationValidator(
               (var6, var7) -> {
                  if (!DoubleValidator.compare(var2, var4, var7)) {
                     throw new IllegalStateException(
                        String.format("'%s'(=%s) should be %s '%s'(=%s) in %s", var1, var2, var4.asText(), var5.getName(), var7, this.getBreadCrumbs())
                     );
                  }
               }
            );
         }
      }
   }

   class="kw">protected void validateDoubleRelation(@Nonnull DoubleHolder var1, @Nonnull RelationalOperator var2, @Nonnull DoubleHolder var3) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1.getName(), var2, var3.getName()));
      } else {
         if (var1.isStatic()) {
            this.validateDoubleRelation(var1.getName(), var1.get(null), var2, var3);
         } else if (var3.isStatic()) {
            this.validateDoubleRelation(var1, var2, var3.getName(), var3.get(null));
         } else {
            var1.addRelationValidator(
               (var4, var5) -> {
                  double var7 = var3.rawGet(var4);
                  if (!DoubleValidator.compare(var5, var2, var7)) {
                     throw new IllegalStateException(
                        String.format(
                           "'%s'(=%s) should be %s '%s'(=%s) in %s", var1.getName(), var5, var2.asText(), var3.getName(), var7, this.getBreadCrumbs()
                        )
                     );
                  }
               }
            );
            var3.addRelationValidator(
               (var4, var5) -> {
                  double var7 = var1.rawGet(var4);
                  if (!DoubleValidator.compare(var7, var2, var5)) {
                     throw new IllegalStateException(
                        String.format(
                           "'%s'(=%s) should be %s '%s'(=%s) in %s", var1.getName(), var7, var2.asText(), var3.getName(), var5, this.getBreadCrumbs()
                        )
                     );
                  }
               }
            );
         }
      }
   }

   class="kw">protected void validateExactlyOneZero(String var1, double var2, String var4, double var5) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ExactlyOneZeroValidator.withAttributes(var1, var4));
      } else {
         if (!ExactlyOneZeroValidator.test(var2, var5)) {
            this.addError(ExactlyOneZeroValidator.formatErrorMessage(var1, var2, var4, var5, this.getBreadCrumbs()));
         }
      }
   }

   class="kw">protected void validateExactlyOneZero(@Nonnull DoubleHolder var1, String var2, double var3) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ExactlyOneZeroValidator.withAttributes(var1.getName(), var2));
      } else {
         if (var1.isStatic()) {
            this.validateExactlyOneZero(var1.getName(), var1.get(null), var2, var3);
         } else {
            var1.addRelationValidator((var5, var6) -> {
               if (!ExactlyOneZeroValidator.test(var6, var3)) {
                  throw new IllegalStateException(ExactlyOneZeroValidator.formatErrorMessage(var1.getName(), var6, var2, var3, this.getBreadCrumbs()));
               }
            });
         }
      }
   }

   class="kw">protected void validateExactlyOneZero(String var1, double var2, @Nonnull DoubleHolder var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ExactlyOneZeroValidator.withAttributes(var1, var4.getName()));
      } else {
         if (var4.isStatic()) {
            this.validateExactlyOneZero(var1, var2, var4.getName(), var4.get(null));
         } else {
            var4.addRelationValidator((var5, var6) -> {
               if (!ExactlyOneZeroValidator.test(var2, var6)) {
                  throw new IllegalStateException(ExactlyOneZeroValidator.formatErrorMessage(var1, var2, var4.getName(), var6, this.getBreadCrumbs()));
               }
            });
         }
      }
   }

   class="kw">protected void validateExactlyOneZero(@Nonnull DoubleHolder var1, @Nonnull DoubleHolder var2) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ExactlyOneZeroValidator.withAttributes(var1.getName(), var2.getName()));
      } else {
         if (var1.isStatic()) {
            this.validateExactlyOneZero(var1.getName(), var1.get(null), var2);
         } else if (var2.isStatic()) {
            this.validateExactlyOneZero(var1, var2.getName(), var2.get(null));
         } else {
            var1.addRelationValidator(
               (var3, var4) -> {
                  double var6 = var2.rawGet(var3);
                  if (!ExactlyOneZeroValidator.test(var4, var6)) {
                     throw new IllegalStateException(
                        ExactlyOneZeroValidator.formatErrorMessage(var1.getName(), var4, var2.getName(), var6, this.getBreadCrumbs())
                     );
                  }
               }
            );
            var2.addRelationValidator(
               (var3, var4) -> {
                  double var6 = var1.rawGet(var3);
                  if (!ExactlyOneZeroValidator.test(var6, var4)) {
                     throw new IllegalStateException(
                        ExactlyOneZeroValidator.formatErrorMessage(var1.getName(), var6, var2.getName(), var4, this.getBreadCrumbs())
                     );
                  }
               }
            );
         }
      }
   }

   class="kw">protected void validateFloatRelation(String var1, float var2, @Nonnull RelationalOperator var3, String var4, float var5) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1, var3, var4));
      } else {
         if (!DoubleValidator.compare(var2, var3, var5)) {
            this.addError(String.format("'%s'(=%s) should be %s '%s'(=%s) in %s", var1, var2, var3.asText(), var4, var5, this.getBreadCrumbs()));
         }
      }
   }

   class="kw">protected void validateFloatRelation(@Nonnull FloatHolder var1, @Nonnull RelationalOperator var2, String var3, float var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1.getName(), var2, var3));
      } else {
         if (var1.isStatic()) {
            this.validateFloatRelation(var1.getName(), var1.get(null), var2, var3, var4);
         } else {
            var1.addRelationValidator(
               (var5, var6) -> {
                  if (!DoubleValidator.compare(var6, var2, var4)) {
                     throw new IllegalStateException(
                        String.format("'%s'(=%s) should be %s '%s'(=%s) in %s", var1.getName(), var6, var2.asText(), var3, var4, this.getBreadCrumbs())
                     );
                  }
               }
            );
         }
      }
   }

   class="kw">protected void validateFloatRelation(String var1, float var2, @Nonnull RelationalOperator var3, @Nonnull FloatHolder var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1, var3, var4.getName()));
      } else {
         if (var4.isStatic()) {
            this.validateFloatRelation(var1, var2, var3, var4.getName(), var4.get(null));
         } else {
            var4.addRelationValidator(
               (var5, var6) -> {
                  if (!DoubleValidator.compare(var2, var3, var6)) {
                     throw new IllegalStateException(
                        String.format("'%s'(=%s) should be %s '%s'(=%s) in %s", var1, var2, var3.asText(), var4.getName(), var6, this.getBreadCrumbs())
                     );
                  }
               }
            );
         }
      }
   }

   class="kw">protected void validateFloatRelation(@Nonnull FloatHolder var1, @Nonnull RelationalOperator var2, @Nonnull FloatHolder var3) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1.getName(), var2, var3.getName()));
      } else {
         if (var1.isStatic()) {
            this.validateFloatRelation(var1.getName(), var1.get(null), var2, var3);
         } else if (var3.isStatic()) {
            this.validateFloatRelation(var1, var2, var3.getName(), var3.get(null));
         } else {
            var1.addRelationValidator(
               (var4, var5) -> {
                  double var7 = var3.rawGet(var4);
                  if (!DoubleValidator.compare(var5, var2, var7)) {
                     throw new IllegalStateException(
                        String.format(
                           "'%s'(=%s) should be %s '%s'(=%s) in %s", var1.getName(), var5, var2.asText(), var3.getName(), var7, this.getBreadCrumbs()
                        )
                     );
                  }
               }
            );
            var3.addRelationValidator(
               (var4, var5) -> {
                  double var7 = var1.rawGet(var4);
                  if (!DoubleValidator.compare(var7, var2, var5)) {
                     throw new IllegalStateException(
                        String.format(
                           "'%s'(=%s) should be %s '%s'(=%s) in %s", var1.getName(), var7, var2.asText(), var3.getName(), var5, this.getBreadCrumbs()
                        )
                     );
                  }
               }
            );
         }
      }
   }

   class="kw">protected void validateIntRelation(String var1, int var2, @Nonnull RelationalOperator var3, String var4, int var5) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1, var3, var4));
      } else {
         if (!IntValidator.compare(var2, var3, var5)) {
            this.addError(String.format("'%s'(=%s) should be %s '%s'(=%s) in %s", var1, var2, var3.asText(), var4, var5, this.getBreadCrumbs()));
         }
      }
   }

   class="kw">protected void validateIntRelation(@Nonnull IntHolder var1, @Nonnull RelationalOperator var2, String var3, int var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1.getName(), var2, var3));
      } else {
         if (var1.isStatic()) {
            this.validateIntRelation(var1.getName(), var1.get(null), var2, var3, var4);
         } else {
            var1.addRelationValidator(
               (var5, var6) -> {
                  if (!IntValidator.compare(var6, var2, var4)) {
                     throw new IllegalStateException(
                        String.format("'%s'(=%s) should be %s '%s'(=%s) in %s", var1.getName(), var6, var2.asText(), var3, var4, this.getBreadCrumbs())
                     );
                  }
               }
            );
         }
      }
   }

   class="kw">protected void validateIntRelation(String var1, int var2, @Nonnull RelationalOperator var3, @Nonnull IntHolder var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1, var3, var4.getName()));
      } else {
         if (var4.isStatic()) {
            this.validateIntRelation(var1, var2, var3, var4.getName(), var4.get(null));
         } else {
            var4.addRelationValidator(
               (var5, var6) -> {
                  if (!IntValidator.compare(var2, var3, var6)) {
                     throw new IllegalStateException(
                        String.format("'%s'(=%s) should be %s '%s'(=%s) in %s", var1, var2, var3.asText(), var4.getName(), var6, this.getBreadCrumbs())
                     );
                  }
               }
            );
         }
      }
   }

   class="kw">protected void validateIntRelation(@Nonnull IntHolder var1, @Nonnull RelationalOperator var2, @Nonnull IntHolder var3) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var1.getName(), var2, var3.getName()));
      } else {
         if (var1.isStatic()) {
            this.validateIntRelation(var1.getName(), var1.get(null), var2, var3);
         } else if (var3.isStatic()) {
            this.validateIntRelation(var1, var2, var3.getName(), var3.get(null));
         } else {
            var1.addRelationValidator(
               (var4, var5) -> {
                  int var6 = var3.rawGet(var4);
                  if (!IntValidator.compare(var5, var2, var6)) {
                     throw new IllegalStateException(
                        String.format(
                           "'%s'(=%s) should be %s '%s'(=%s) in %s", var1.getName(), var5, var2.asText(), var3.getName(), var6, this.getBreadCrumbs()
                        )
                     );
                  }
               }
            );
            var3.addRelationValidator(
               (var4, var5) -> {
                  int var6 = var1.rawGet(var4);
                  if (!IntValidator.compare(var6, var2, var5)) {
                     throw new IllegalStateException(
                        String.format(
                           "'%s'(=%s) should be %s '%s'(=%s) in %s", var1.getName(), var6, var2.asText(), var3.getName(), var5, this.getBreadCrumbs()
                        )
                     );
                  }
               }
            );
         }
      }
   }

   class="kw">protected void validateIntRelationIfBooleanIs(boolean var1, boolean var2, @Nonnull IntHolder var3, @Nonnull RelationalOperator var4, @Nonnull IntHolder var5) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AttributeRelationValidator.withAttributes(var3.getName(), var4, var5.getName()));
      } else if (var2 == var1) {
         this.validateIntRelation(var3, var4, var5);
      }
   }

   class="kw">protected void validateAnyPresent(String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AnyPresentValidator.withAttributes(var1, var3));
      } else if (!var2.isPresent() && !var4.isPresent()) {
         this.addError(AnyPresentValidator.errorMessage(new String[]{var1, var3}) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateAnyPresent(
      String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4, String var5, @Nonnull BuilderObjectHelper<?> var6
   ) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AnyPresentValidator.withAttributes(new String[]{var1, var3, var5}));
      } else if (!var2.isPresent() && !var4.isPresent() && !var6.isPresent()) {
         this.addError(AnyPresentValidator.errorMessage(new String[]{var1, var3, var5}) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateAnyPresent(@Nonnull String[] var1, @Nonnull BuilderObjectHelper<?>[] var2) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AnyPresentValidator.withAttributes(var1));
      } else if (!AnyPresentValidator.test(var2)) {
         this.addError(AnyPresentValidator.errorMessage(var1) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateOnePresent(String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(OnePresentValidator.withAttributes(var1, var3));
      } else if (!OnePresentValidator.test(var2, var4)) {
         this.addError(OnePresentValidator.errorMessage(new String[]{var1, var3}, new BuilderObjectHelper[]{var2, var4}) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateOnePresent(
      String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4, String var5, @Nonnull BuilderObjectHelper<?> var6
   ) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(OnePresentValidator.withAttributes(var1, var3, var5));
      } else if (!OnePresentValidator.test(var2, var4, var6)) {
         this.addError(
            OnePresentValidator.errorMessage(new String[]{var1, var3, var5}, new BuilderObjectHelper[]{var2, var4, var6}) + " in " + this.getBreadCrumbs()
         );
      }
   }

   class="kw">protected void validateOnePresent(@Nonnull String[] var1, @Nonnull BuilderObjectHelper<?>[] var2) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(OnePresentValidator.withAttributes(var1));
      } else if (!OnePresentValidator.test(var2)) {
         this.addError(OnePresentValidator.errorMessage(var1, var2) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateOnePresent(@Nonnull String[] var1, @Nonnull boolean[] var2) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(OnePresentValidator.withAttributes(var1));
      } else if (!OnePresentValidator.test(var2)) {
         this.addError(OnePresentValidator.errorMessage(var1, var2) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateOneOrNonePresent(String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(OneOrNonePresentValidator.withAttributes(var1, var3));
      } else if (!OneOrNonePresentValidator.test(var2, var4)) {
         this.addError(OneOrNonePresentValidator.errorMessage(new String[]{var1, var3}, new BuilderObjectHelper[]{var2, var4}) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateOneOrNonePresent(
      String var1, @Nonnull BuilderObjectHelper<?> var2, String var3, @Nonnull BuilderObjectHelper<?> var4, String var5, @Nonnull BuilderObjectHelper<?> var6
   ) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(OneOrNonePresentValidator.withAttributes(var1, var3, var5));
      } else if (!OneOrNonePresentValidator.test(var2, var4, var6)) {
         this.addError(
            OneOrNonePresentValidator.errorMessage(new String[]{var1, var3, var5}, new BuilderObjectHelper[]{var2, var4, var6})
               + " in "
               + this.getBreadCrumbs()
         );
      }
   }

   class="kw">protected void validateOneOrNonePresent(@Nonnull String[] var1, @Nonnull BuilderObjectHelper<?>[] var2) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(OneOrNonePresentValidator.withAttributes(var1));
      } else if (!OneOrNonePresentValidator.test(var2)) {
         this.addError(OneOrNonePresentValidator.errorMessage(var1, var2) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateOneOrNonePresent(@Nonnull String[] var1, @Nonnull boolean[] var2) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(OneOrNonePresentValidator.withAttributes(var1));
      } else if (!OneOrNonePresentValidator.test(var2)) {
         this.addError(OneOrNonePresentValidator.errorMessage(var1, var2) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateExistsIfParameterSet(String var1, boolean var2, String var3, @Nonnull BuilderObjectHelper<?> var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ExistsIfParameterSetValidator.withAttributes(var1, var3));
      } else if (var2) {
         if (!var4.isPresent()) {
            this.addError(ExistsIfParameterSetValidator.errorMessage(var1, var3) + " in " + this.getBreadCrumbs());
         }
      }
   }

   class="kw">protected <E class="kw">extends Enum<E> & Supplier<String>> void validateStringIfEnumIs(
      @Nonnull StringHolder var1, @Nonnull StringValidator var2, @Nonnull EnumHolder<E> var3, E var4
   ) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ValidateIfEnumIsValidator.withAttributes(var1.getName(), var2, var3.getName(), var4));
      } else if (var3.isStatic()) {
         this.validateStringIfEnumIs(var1, var2, var3.getName(), var3.get(null), var4);
      } else {
         var1.addRelationValidator(
            (var5, var6) -> {
               Enum var7 = var3.rawGet(var5);
               if (var7 == var4) {
                  if (!var2.test(var6)) {
                     throw new IllegalStateException(
                        var2.errorMessage(var6, var1.getName()) + " if " + var3.getName() + " is " + var4 + " in " + this.getBreadCrumbs()
                     );
                  }
               }
            }
         );
         var3.addEnumRelationValidator(
            (var5, var6) -> {
               if (var6 == var4) {
                  String var7 = var1.rawGet(var5);
                  if (!var2.test(var7)) {
                     throw new IllegalStateException(
                        var2.errorMessage(var7, var1.getName()) + " if " + var3.getName() + " is " + var4 + " in " + this.getBreadCrumbs()
                     );
                  }
               }
            }
         );
      }
   }

   class="kw">protected <E class="kw">extends Enum<E> & Supplier<String>> void validateStringIfEnumIs(
      @Nonnull StringHolder var1, @Nonnull StringValidator var2, String var3, E var4, E var5
   ) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ValidateIfEnumIsValidator.withAttributes(var1.getName(), var2, var3, var4));
      } else if (var4 == var5) {
         if (var1.isStatic()) {
            String var6 = var1.get(null);
            if (!var2.test(var6)) {
               this.addError(var2.errorMessage(var6, var1.getName()) + " if " + var3 + " is " + var4 + " in " + this.getBreadCrumbs());
            }
         } else {
            var1.addRelationValidator((var5x, var6x) -> {
               if (!var2.test(var6x)) {
                  throw new IllegalStateException(var2.errorMessage(var6x, var1.getName()) + " if " + var3 + " is " + var4 + " in " + this.getBreadCrumbs());
               }
            });
         }
      }
   }

   class="kw">protected <E class="kw">extends Enum<E> & Supplier<String>> void validateAssetIfEnumIs(
      @Nonnull AssetHolder var1, @Nonnull AssetValidator var2, @Nonnull EnumHolder<E> var3, E var4
   ) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ValidateAssetIfEnumIsValidator.withAttributes(var1.getName(), var2, var3.getName(), var4));
      } else if (var3.isStatic()) {
         this.validateAssetIfEnumIs(var1, var2, var3.getName(), var3.get(null), var4);
      } else {
         var1.addRelationValidator(
            (var5, var6) -> {
               Enum var7 = var3.rawGet(var5);
               if (var7 == var4) {
                  if (!var2.test(var6)) {
                     throw new IllegalStateException(
                        var2.errorMessage(var6, var1.getName()) + " if " + var3.getName() + " is " + var4 + " in " + this.getBreadCrumbs()
                     );
                  }
               }
            }
         );
         var3.addEnumRelationValidator(
            (var5, var6) -> {
               if (var6 == var4) {
                  String var7 = var1.rawGet(var5);
                  if (!var2.test(var7)) {
                     throw new IllegalStateException(
                        var2.errorMessage(var7, var1.getName()) + " if " + var3.getName() + " is " + var4 + " in " + this.getBreadCrumbs()
                     );
                  }
               }
            }
         );
      }
   }

   class="kw">protected <E class="kw">extends Enum<E> & Supplier<String>> void validateAssetIfEnumIs(
      @Nonnull AssetHolder var1, @Nonnull AssetValidator var2, String var3, E var4, E var5
   ) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ValidateAssetIfEnumIsValidator.withAttributes(var1.getName(), var2, var3, var4));
      } else if (var4 == var5) {
         if (var1.isStatic()) {
            String var6 = var1.get(null);
            if (!var2.test(var6)) {
               throw new IllegalStateException(var2.errorMessage(var6, var1.getName()) + " if " + var3 + " is " + var4 + " in " + this.getBreadCrumbs());
            }
         } else {
            var1.addRelationValidator((var5x, var6x) -> {
               if (!var2.test(var6x)) {
                  throw new IllegalStateException(var2.errorMessage(var6x, var1.getName()) + " if " + var3 + " is " + var4 + " in " + this.getBreadCrumbs());
               }
            });
         }
      }
   }

   class="kw">protected void validateAny(String var1, boolean var2, String var3, boolean var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AnyBooleanValidator.withAttributes(var1, var3));
      } else if (!var2 && !var4) {
         this.addError(AnyBooleanValidator.errorMessage(new String[]{var1, var3}) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateAny(@Nonnull BooleanHolder var1, @Nonnull BooleanHolder var2) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AnyBooleanValidator.withAttributes(var1.getName(), var2.getName()));
      } else if (var1.isStatic()) {
         boolean var4 = var1.get(null);
         if (!var4) {
            this.validateAny(var2, var1.getName(), var4);
         }
      } else if (var2.isStatic()) {
         boolean var3 = var2.get(null);
         if (!var3) {
            this.validateAny(var1, var2.getName(), var3);
         }
      } else {
         var1.addRelationValidator((var3x, var4x) -> {
            boolean var5 = var2.rawGet(var3x);
            if (!var4x && !var5) {
               throw new IllegalStateException(AnyBooleanValidator.errorMessage(new String[]{var1.getName(), var2.getName()}) + " in " + this.getBreadCrumbs());
            }
         });
         var2.addRelationValidator((var3x, var4x) -> {
            boolean var5 = var1.rawGet(var3x);
            if (!var5 && !var4x) {
               throw new IllegalStateException(AnyBooleanValidator.errorMessage(new String[]{var1.getName(), var2.getName()}) + " in " + this.getBreadCrumbs());
            }
         });
      }
   }

   class="kw">protected void validateAny(@Nonnull BooleanHolder var1, String var2, boolean var3) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AnyBooleanValidator.withAttributes(var1.getName(), var2));
      } else if (!var3) {
         if (var1.isStatic()) {
            if (var1.get(null)) {
               class="kw">return;
            }

            this.addError(AnyBooleanValidator.errorMessage(new String[]{var1.getName(), var2}) + " in " + this.getBreadCrumbs());
         }

         var1.addRelationValidator((var3x, var4) -> {
            if (!var4) {
               throw new IllegalStateException(AnyBooleanValidator.errorMessage(new String[]{var1.getName(), var2}) + " in " + this.getBreadCrumbs());
            }
         });
      }
   }

   class="kw">protected void validateAny(String var1, boolean var2, String var3, boolean var4, String var5, boolean var6) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AnyBooleanValidator.withAttributes(new String[]{var1, var3, var5}));
      } else if (!var2 && !var4 && !var6) {
         this.addError(AnyBooleanValidator.errorMessage(new String[]{var1, var3, var5}) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateAny(@Nonnull String[] var1, @Nonnull boolean[] var2) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AnyBooleanValidator.withAttributes(var1));
      } else if (!AnyBooleanValidator.test(var2)) {
         this.addError(AnyBooleanValidator.errorMessage(var1) + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void validateAtMostOne(@Nonnull BooleanHolder var1, @Nonnull BooleanHolder var2) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AtMostOneBooleanValidator.withAttributes(var1.getName(), var2.getName()));
      } else if (var1.isStatic()) {
         boolean var4 = var1.get(null);
         if (var4) {
            this.validateAtMostOne(var2, var1.getName(), var4);
         }
      } else if (var2.isStatic()) {
         boolean var3 = var2.get(null);
         if (var3) {
            this.validateAtMostOne(var1, var2.getName(), var3);
         }
      } else {
         var1.addRelationValidator(
            (var3x, var4x) -> {
               boolean var5 = var2.rawGet(var3x);
               if (var4x && var5) {
                  throw new IllegalStateException(
                     AtMostOneBooleanValidator.errorMessage(new String[]{var1.getName(), var2.getName()}) + " in " + this.getBreadCrumbs()
                  );
               }
            }
         );
         var2.addRelationValidator(
            (var3x, var4x) -> {
               boolean var5 = var1.rawGet(var3x);
               if (var5 && var4x) {
                  throw new IllegalStateException(
                     AtMostOneBooleanValidator.errorMessage(new String[]{var1.getName(), var2.getName()}) + " in " + this.getBreadCrumbs()
                  );
               }
            }
         );
      }
   }

   class="kw">protected void validateAtMostOne(@Nonnull BooleanHolder var1, String var2, boolean var3) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(AtMostOneBooleanValidator.withAttributes(var1.getName(), var2));
      } else if (var3) {
         if (var1.isStatic() && var1.get(null)) {
            this.addError(AtMostOneBooleanValidator.errorMessage(new String[]{var1.getName(), var2}) + " in " + this.getBreadCrumbs());
         }

         var1.addRelationValidator((var3x, var4) -> {
            if (var4) {
               throw new IllegalStateException(AtMostOneBooleanValidator.errorMessage(new String[]{var1.getName(), var2}) + " in " + this.getBreadCrumbs());
            }
         });
      }
   }

   class="kw">protected void validateBooleanImplicationAnyAntecedent(
      String[] var1, @Nonnull boolean[] var2, boolean var3, String[] var4, @Nonnull boolean[] var5, boolean var6
   ) {
      this.validateBooleanImplication(var1, var2, var3, var4, var5, var6, true);
   }

   class="kw">protected void validateBooleanImplicationAllAntecedents(
      String[] var1, @Nonnull boolean[] var2, boolean var3, String[] var4, @Nonnull boolean[] var5, boolean var6
   ) {
      this.validateBooleanImplication(var1, var2, var3, var4, var5, var6, false);
   }

   @Nonnull
   class="kw">protected ToIntFunction<BuilderSupport> requireStringValueStoreParameter(String var1, ValueStoreValidator.UseType var2) {
      if (this.valueStoreUsages == null) {
         this.valueStoreUsages = new ObjectArrayList();
      }

      this.valueStoreUsages.add(new ValueStoreValidator.ValueUsage(var1, ValueStore.Type.String, var2, this));
      class="kw">return var1x -> var1x.getValueStoreStringSlot(var1);
   }

   @Nonnull
   class="kw">protected ToIntFunction<BuilderSupport> requireIntValueStoreParameter(String var1, ValueStoreValidator.UseType var2) {
      if (this.valueStoreUsages == null) {
         this.valueStoreUsages = new ObjectArrayList();
      }

      this.valueStoreUsages.add(new ValueStoreValidator.ValueUsage(var1, ValueStore.Type.Int, var2, this));
      class="kw">return var1x -> var1x.getValueStoreIntSlot(var1);
   }

   @Nonnull
   class="kw">protected ToIntFunction<BuilderSupport> requireDoubleValueStoreParameter(String var1, ValueStoreValidator.UseType var2) {
      if (this.valueStoreUsages == null) {
         this.valueStoreUsages = new ObjectArrayList();
      }

      this.valueStoreUsages.add(new ValueStoreValidator.ValueUsage(var1, ValueStore.Type.Double, var2, this));
      class="kw">return var1x -> var1x.getValueStoreDoubleSlot(var1);
   }

   class="kw">private void validateBooleanImplication(
      String[] var1, @Nonnull boolean[] var2, boolean var3, String[] var4, @Nonnull boolean[] var5, boolean var6, boolean var7
   ) {
      BooleanImplicationValidator var8 = BooleanImplicationValidator.withAttributes(var1, var3, var4, var6, var7);
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(var8);
      } else if (!var8.test(var2, var5)) {
         this.addError(var8.errorMessage() + " in " + this.getBreadCrumbs());
      }
   }

   class="kw">protected void requirePreceding(@Nonnull Class<?> var1, @Nonnull BuilderDescriptorState var2, @Nonnull String var3, @Nullable String var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(new RequiresPrecedingValidator(var1, var2, var3, var4));
      } else {
         this.requiredPrecedingClass = var1;
      }
   }

   class="kw">protected void providePreceding(@Nonnull Class<?> var1) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addProviderEvaluator(new PrecedingProviderEvaluator(var1));
      } else {
         this.providedPrecedingClass = var1;
      }
   }

   class="kw">protected void provideFeature(@Nonnull Feature var1) {
      this.provideFeatureOrParameters(new UnconditionalFeatureProviderEvaluator(var1));
   }

   class="kw">protected void overrideParameters(@Nonnull String[] var1, @Nonnull ParameterType... var2) {
      if (this.isCreatingDescriptor() || !this.evaluatorHelper.isDisallowParameterProviders()) {
         this.provideFeatureOrParameters(new UnconditionalParameterProviderEvaluator(var1, var2));
      }
   }

   class="kw">protected void preventParameterOverride() {
      if (!this.isCreatingDescriptor()) {
         this.evaluatorHelper.disallowParameterProviders();
      }
   }

   class="kw">private void provideFeatureOrParameters(ProviderEvaluator var1) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addProviderEvaluator(var1);
      } else {
         this.evaluatorHelper.add(var1);
      }
   }

   class="kw">protected void provideFeature(@Nonnull EnumSet<Feature> var1) {
      var1.forEach(this::provideFeature);
   }

   class="kw">protected void requireFeature(@Nonnull EnumSet<Feature> var1) {
      this.requireFeature(RequiresOneOfFeaturesValidator.withFeatures(var1));
   }

   class="kw">protected <E class="kw">extends Enum<E> & Supplier<String>> void requireFeatureIf(String var1, E var2, E var3, @Nonnull EnumSet<Feature> var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(RequiresFeatureIfEnumValidator.withAttributes(var1, var2, var4));
      } else if (var2 == var3) {
         if (this.evaluatorHelper.belongsToFeatureRequiringComponent()) {
            this.evaluatorHelper.addComponentRequirementValidator((var5x, var6) -> this.validateRequiresFeatureIf(var1, var2, var3, var4, var5x));
         } else if (!RequiresFeatureIfEnumValidator.staticValidate(this.evaluatorHelper, var4, var2, var3)) {
            if (this.evaluatorHelper.requiresProviderReferenceEvaluation()) {
               this.evaluatorHelper.addProviderReferenceValidator((var5x, var6) -> {
                  this.resolveFeatureProviderReverences(var5x);
                  this.validateRequiresFeatureIf(var1, var2, var3, var4, this.evaluatorHelper);
               });
            } else {
               String[] var5 = getDescriptionArray(var4);
               this.addError(String.format("If %s is %s, one of %s must be provided at %s", var1, var2, String.join(", ", var5), this.getBreadCrumbs()));
            }
         }
      }
   }

   class="kw">protected void requireFeatureIf(String var1, boolean var2, boolean var3, @Nonnull EnumSet<Feature> var4) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(RequiresFeatureIfValidator.withAttributes(var1, var2, var4));
      } else if (this.evaluatorHelper.belongsToFeatureRequiringComponent()) {
         this.evaluatorHelper.addComponentRequirementValidator((var5x, var6) -> this.validateRequiresFeatureIf(var1, var2, var3, var4, var5x));
      } else if (!RequiresFeatureIfValidator.staticValidate(this.evaluatorHelper, var4, var2, var3)) {
         if (this.evaluatorHelper.requiresProviderReferenceEvaluation()) {
            this.evaluatorHelper.addProviderReferenceValidator((var5x, var6) -> {
               this.resolveFeatureProviderReverences(var5x);
               this.validateRequiresFeatureIf(var1, var2, var3, var4, this.evaluatorHelper);
            });
         } else {
            String[] var5 = getDescriptionArray(var4);
            this.addError(
               String.format("If %s is %s, one of %s must be provided at %s", var1, var2 ? "set" : "not set", String.join(", ", var5), this.getBreadCrumbs())
            );
         }
      }
   }

   class="kw">protected void requireFeatureIf(@Nonnull BooleanHolder var1, boolean var2, @Nonnull EnumSet<Feature> var3) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(RequiresFeatureIfValidator.withAttributes(var1.getName(), var2, var3));
      } else if (this.evaluatorHelper.belongsToFeatureRequiringComponent()) {
         this.evaluatorHelper
            .addComponentRequirementValidator((var4, var5) -> this.validateRequiresFeatureIf(var1.getName(), var2, var1.get(var5), var3, var4));
      } else if (!var1.isStatic() || !RequiresFeatureIfValidator.staticValidate(this.evaluatorHelper, var3, var2, var1.get(null))) {
         if (this.evaluatorHelper.requiresProviderReferenceEvaluation()) {
            this.evaluatorHelper.addProviderReferenceValidator((var4, var5) -> {
               this.resolveFeatureProviderReverences(var4);
               this.validateRequiresFeatureIf(var1.getName(), var2, var1.rawGet(var5), var3, this.evaluatorHelper);
            });
         } else {
            var1.addRelationValidator((var4, var5) -> this.validateRequiresFeatureIf(var1.getName(), var2, var5, var3, this.evaluatorHelper));
         }
      }
   }

   class="kw">private boolean hasOverriddenParameter(String var1, ParameterType var2, @Nonnull FeatureEvaluatorHelper var3) {
      for (ProviderEvaluator var5 : var3.getProviders()) {
         if (var5 class="kw">instanceof ParameterProviderEvaluator && ((ParameterProviderEvaluator)var5).hasParameter(var1, var2)) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">private void validateOverriddenParameter(String var1, @Nonnull ParameterType var2, @Nonnull FeatureEvaluatorHelper var3) {
      if (!this.hasOverriddenParameter(var1, var2, var3)) {
         throw new IllegalStateException(
            String.format(
               "Parameter %s is missing and either not provided by a sensor, or provided with the wrong parameter type (expected %s) in context %s",
               var1,
               var2.get(),
               this.getBreadCrumbs()
            )
         );
      }
   }

   class="kw">private <E class="kw">extends Enum<E> & Supplier<String>> void validateRequiresFeatureIf(
      String var1, E var2, E var3, @Nonnull EnumSet<Feature> var4, @Nonnull FeatureEvaluatorHelper var5
   ) {
      if (!RequiresFeatureIfEnumValidator.staticValidate(var5, var4, var2, var3)) {
         String[] var6 = getDescriptionArray(var4);
         throw new IllegalStateException(
            String.format("If %s is %s, one of %s must be provided at %s", var1, var2, String.join(", ", var6), this.getBreadCrumbs())
         );
      }
   }

   class="kw">private void validateRequiresFeatureIf(String var1, boolean var2, boolean var3, @Nonnull EnumSet<Feature> var4, @Nonnull FeatureEvaluatorHelper var5) {
      if (!RequiresFeatureIfValidator.staticValidate(var5, var4, var2, var3)) {
         String[] var6 = getDescriptionArray(var4);
         throw new IllegalStateException(
            String.format("If %s is %s, one of %s must be provided at %s", var1, var2 ? "set" : "not set", String.join(", ", var6), this.getBreadCrumbs())
         );
      }
   }

   class="kw">private void requireFeature(@Nonnull RequiredFeatureValidator var1) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(var1);
      } else if (this.evaluatorHelper.belongsToFeatureRequiringComponent()) {
         this.evaluatorHelper.addComponentRequirementValidator((var2, var3) -> {
            if (!var1.validate(var2)) {
               throw new IllegalStateException(var1.getErrorMessage(this.getBreadCrumbs()));
            }
         });
      } else if (!var1.validate(this.evaluatorHelper)) {
         if (this.evaluatorHelper.requiresProviderReferenceEvaluation()) {
            this.evaluatorHelper.addProviderReferenceValidator((var2, var3) -> {
               this.resolveFeatureProviderReverences(var2);
               if (!var1.validate(this.evaluatorHelper)) {
                  throw new IllegalStateException(var1.getErrorMessage(this.getBreadCrumbs()));
               }
            });
         } else {
            this.addError(var1.getErrorMessage(this.getBreadCrumbs()));
         }
      }
   }

   @Nonnull
   class="kw">public class="kw">static String[] getDescriptionArray(@Nonnull EnumSet<Feature> var0) {
      String[] var1 = new String[var0.size()];
      Feature[] var2 = var0.toArray(Feature[]::new);

      for (int var3 = 0; var3 < var2.length; var3++) {
         var1[var3] = var2[var3].get();
      }

      class="kw">return var1;
   }

   class="kw">private void resolveFeatureProviderReverences(BuilderManager var1) {
      for (ProviderEvaluator var3 : this.evaluatorHelper.getProviders()) {
         var3.resolveReferences(var1);
      }
   }

   class="kw">protected void registerStateSensor(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3) {
      if (!this.isCreatingDescriptor()) {
         this.stateHelper.getAndPutSensorIndex(var1, var2, var3);
         this.getParent().setCurrentStateName(var1);
      }
   }

   class="kw">protected void registerStateSetter(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3) {
      if (!this.isCreatingDescriptor()) {
         this.stateHelper.getAndPutSetterIndex(var1, var2, var3);
      }
   }

   class="kw">protected void registerStateRequirer(String var1, String var2, @Nonnull BiConsumer<Integer, Integer> var3) {
      if (!this.isCreatingDescriptor()) {
         this.stateHelper.getAndPutStateRequirerIndex(var1, var2, var3);
      }
   }

   class="kw">protected void validateIsComponent() {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ComponentOnlyValidator.get());
      } else {
         if (!this.isComponent()) {
            this.addError(String.format("Element not valid outside of component at: %s", this.getBreadCrumbs()));
         }
      }
   }

   class="kw">protected void requireStateString(
      @Nonnull JsonElement var1,
      String var2,
      boolean var3,
      @Nonnull TriConsumer<String, String, Boolean> var4,
      BuilderDescriptorState var5,
      String var6,
      String var7
   ) {
      StateStringValidator var8 = StateStringValidator.get();
      this.requireString(var1, var2, var0 -> {}, var8, var5, var6, var7);
      if (!this.isCreatingDescriptor()) {
         String var9 = var8.hasMainState() ? var8.getMainState() : null;
         String var10 = var8.hasSubState() ? var8.getSubState() : null;
         if (this.stateHelper.isComponent()) {
            if (!var3) {
               this.addError(String.format("Components not supported for state setter %s at %s", var10, this.getBreadCrumbs()));
            }

            if (!this.stateHelper.hasDefaultLocalState()) {
               this.addError("Component with local states must define a 'DefaultState' at the top of the file");
            }

            if (var9 != null) {
               this.addError(String.format("Components must not contain references to main states (%s) at %s", var9, this.getBreadCrumbs()));
            }

            var4.accept(var10, null, false);
         } else {
            if (var9 == null) {
               var9 = this.stateHelper.getCurrentParentState();
            }

            boolean var11 = false;
            if (var10 == null) {
               var10 = this.stateHelper.getDefaultSubState();
               var11 = true;
            }

            if (var9 == null) {
               this.addError(String.format("Substate %s does not have a specified main state at %s", var10, this.getBreadCrumbs()));
            }

            var4.accept(var9, var10, var11);
         }
      }
   }

   class="kw">protected boolean getExistentStateSet(
      @Nonnull JsonElement var1,
      String var2,
      @Nonnull Consumer<Int2ObjectMap<IntSet>> var3,
      @Nonnull StateMappingHelper var4,
      BuilderDescriptorState var5,
      String var6,
      @Nullable String var7
   ) {
      StateStringValidator var8 = StateStringValidator.requireMainState();
      if (this.isCreatingSchema()) {
         ArraySchema var19 = new ArraySchema();
         var19.setItem(new StringSchema());
         Schema var20 = BuilderExpressionDynamic.computableSchema(var19);
         var20.setTitle(var2);
         var20.setDescription(var7 == null ? var6 : var7);
         this.builderSchema.getProperties().put(var2, var20);
         class="kw">return false;
      }

      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addAttribute(var2, "StringList", var5, var6, var7).required().validator(var8);
         class="kw">return false;
      }

      try {
         JsonElement var9 = this.getOptionalJsonElement(var1, var2);
         if (var9 == null) {
            var3.accept(null);
            class="kw">return false;
         }

         String[][] var10 = new String[1][1];
         this.validateAndSet(this.expectStringArray(var9, null, var2), StringArrayNoEmptyStringsValidator.get(), var1x -> var10[0] = var1x, var2);
         String[] var11 = var10[0];
         Int2ObjectOpenHashMap var12 = new Int2ObjectOpenHashMap();

         for (String var16 : var11) {
            if (!var8.test(var16)) {
               throw new IllegalStateException(var8.errorMessage(var16));
            }

            String var17 = var8.hasSubState() ? var8.getSubState() : var4.getDefaultSubState();
            var4.getAndPutStateRequirerIndex(
               var8.getMainState(), var17, (var1x, var2x) -> ((IntSet)var12.computeIfAbsent(var1x, var0x -> new IntOpenHashSet())).add(var2x)
            );
         }

         var12.trim();
         var3.accept(var12);
         class="kw">return true;
      } catch (Exception var18) {
         this.addError(var18);
         class="kw">return false;
      }
   }

   class="kw">protected boolean getDefaultSubState(
      @Nonnull JsonElement var1, String var2, @Nonnull Consumer<String> var3, StringValidator var4, BuilderDescriptorState var5, String var6, String var7
   ) {
      String[] var8 = new String[1];
      boolean var9 = this.getString(var1, var2, var1x -> var8[0] = var1x, "Default", var4, var5, var6, var7);
      if (!this.isCreatingDescriptor()) {
         this.stateHelper.setDefaultSubState(var8[0]);
      }

      var3.accept(var8[0]);
      class="kw">return var9;
   }

   class="kw">protected void increaseDepth() {
      if (!this.isCreatingDescriptor()) {
         this.stateHelper.increaseDepth();
      }
   }

   class="kw">protected void decreaseDepth() {
      if (!this.isCreatingDescriptor()) {
         this.stateHelper.decreaseDepth();
      }
   }

   class="kw">protected void setNotComponent() {
      if (!this.isCreatingDescriptor()) {
         this.stateHelper.setNotComponent();
      }
   }

   class="kw">protected boolean isComponent() {
      class="kw">return this.isCreatingDescriptor() ? false : this.stateHelper.isComponent();
   }

   class="kw">protected void requireInstructionType(@Nonnull EnumSet<InstructionType> var1) {
      this.requireContext(var1, null);
   }

   class="kw">protected void requireContext(@Nonnull EnumSet<InstructionType> var1, EnumSet<ComponentContext> var2) {
      InstructionContextValidator var3 = InstructionContextValidator.inInstructions(var1, var2);
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(var3);
      } else if (this.instructionContextHelper.isComponent()) {
         this.instructionContextHelper
            .addComponentContextEvaluator(
               (var3x, var4x) -> {
                  boolean var5 = InstructionContextHelper.isInCorrectInstruction(var1, var3x);
                  boolean var6 = InstructionContextHelper.extraContextMatches(var2, var4x);
                  if (!var5 || !var6) {
                     throw new IllegalStateException(
                        InstructionContextValidator.getErrorMessage(this.getTypeName(), var3x, var5, var4x, var6, this.getBreadCrumbs())
                     );
                  }
               }
            );
      } else {
         boolean var4 = this.instructionContextHelper.isInCorrectInstruction(var1);
         boolean var5 = this.instructionContextHelper.extraContextMatches(var2);
         if (!var4 || !var5) {
            this.addError(
               InstructionContextValidator.getErrorMessage(
                  this.getTypeName(),
                  this.instructionContextHelper.getInstructionContext(),
                  var4,
                  this.instructionContextHelper.getComponentContext(),
                  var5,
                  this.getBreadCrumbs()
               )
            );
         }
      }
   }

   class="kw">protected void requireNotInForEach() {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ForEachContextValidator.notInForEach());
      } else {
         if (this.instructionContextHelper != null && this.instructionContextHelper.isInForEach()) {
            this.addError(ForEachContextValidator.notInForEachError(this.getTypeName(), this.getBreadCrumbs()));
         }
      }
   }

   class="kw">protected void requireIsolatedForEach() {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ForEachContextValidator.requiresIsolatedForEach());
      } else {
         if (this.instructionContextHelper != null && this.instructionContextHelper.isInUnisolatedForEach()) {
            this.addError(ForEachContextValidator.requiresIsolatedError(this.getTypeName(), this.getBreadCrumbs()));
         }
      }
   }

   class="kw">protected void requireNotInForEachIf(@Nonnull String var1, boolean var2, boolean var3) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ForEachContextValidator.notInForEachIf(var1, var2));
      } else if (var2 == var3) {
         if (this.instructionContextHelper != null && this.instructionContextHelper.isInForEach()) {
            this.addError(ForEachContextValidator.notInForEachError(this.getTypeName(), this.getBreadCrumbs()));
         }
      }
   }

   class="kw">protected void requireIsolatedForEachIf(@Nonnull String var1, boolean var2, boolean var3) {
      if (this.isCreatingDescriptor()) {
         this.builderDescriptor.addValidator(ForEachContextValidator.requiresIsolatedForEachIf(var1, var2));
      } else if (var2 == var3) {
         if (this.instructionContextHelper != null && this.instructionContextHelper.isInUnisolatedForEach()) {
            this.addError(ForEachContextValidator.requiresIsolatedError(this.getTypeName(), this.getBreadCrumbs()));
         }
      }
   }

   @Override
   class="kw">public IntSet getDependencies() {
      class="kw">return this.builderParameters.getDependencies();
   }

   @Override
   class="kw">public boolean validate(String var1, @Nonnull NPCLoadTimeValidationHelper var2, ExecutionContext var3, Scope var4, @Nonnull List<String> var5) {
      boolean var6 = true;
      if (this.dynamicHolders != null) {
         for (ValueHolder var8 : this.dynamicHolders) {
            var6 &= this.validateDynamicHolder(var1, var8, var3, var5);
         }
      }

      ValueStoreValidator var10 = var2.getValueStoreValidator();
      if (this.valueStoreUsages != null) {
         for (ValueStoreValidator.ValueUsage var9 : this.valueStoreUsages) {
            var10.registerValueUsage(var9);
         }
      }

      class="kw">return var6 & this.runLoadTimeValidationHelper(var1, var2, var3, var5);
   }

   class="kw">protected void runLoadTimeValidationHelper0(String var1, NPCLoadTimeValidationHelper var2, ExecutionContext var3, List<String> var4) {
      if (this.requiredPrecedingClass != null && !var2.checkPrecedingProvided(this.requiredPrecedingClass)) {
         var4.add(String.format("%s: requires a preceding %s in the same instruction list scope", var1, this.requiredPrecedingClass.getSimpleName()));
      }

      if (this.providedPrecedingClass != null) {
         var2.registerPrecedingProvider(this.providedPrecedingClass);
      }
   }

   class="kw">private boolean runLoadTimeValidationHelper(String var1, NPCLoadTimeValidationHelper var2, ExecutionContext var3, @Nonnull List<String> var4) {
      try {
         this.runLoadTimeValidationHelper0(var1, var2, var3, var4);
         class="kw">return true;
      } catch (Exception var6) {
         var4.add(String.format("%s: %s", var1, var6.getMessage()));
         class="kw">return false;
      }
   }

   class="kw">private boolean validateDynamicHolder(String var1, @Nonnull ValueHolder var2, ExecutionContext var3, @Nonnull List<String> var4) {
      try {
         var2.validate(var3);
         class="kw">return true;
      } catch (Exception var6) {
         var4.add(String.format("%s: %s", var1, var6.getMessage()));
         class="kw">return false;
      }
   }

   class="kw">private void trackDynamicHolder(@Nonnull ValueHolder var1) {
      if (!var1.isStatic()) {
         if (this.dynamicHolders == null) {
            this.dynamicHolders = new ArrayList<>();
         }

         this.dynamicHolders.add(var1);
      }
   }

   class="kw">public class="kw">static String readString(@Nonnull JsonObject var0, String var1) {
      class="kw">return expectStringElement(expectKey(var0, var1), var1);
   }

   class="kw">public class="kw">static String readString(@Nonnull JsonObject var0, String var1, String var2) {
      JsonElement var3 = var0.get(var1);
      class="kw">return var3 == null ? var2 : expectStringElement(var3, var1);
   }

   class="kw">public class="kw">static boolean readBoolean(@Nonnull JsonObject var0, String var1, boolean var2) {
      JsonElement var3 = var0.get(var1);
      class="kw">return var3 == null ? var2 : expectBooleanElement(var3, var1);
   }

   @Nonnull
   class="kw">public class="kw">static JsonElement expectKey(@Nonnull JsonObject var0, String var1) {
      JsonElement var2 = var0.get(var1);
      if (var2 == null) {
         throw new IllegalStateException("'" + var1 + "' missing in JSON object");
      } else {
         class="kw">return var2;
      }
   }

   class="kw">public class="kw">static String expectStringElement(@Nonnull JsonElement var0, String var1) {
      if (var0.isJsonPrimitive() && var0.getAsJsonPrimitive().isString()) {
         class="kw">return var0.getAsJsonPrimitive().getAsString();
      } else {
         throw new IllegalStateException("'" + var1 + "' must be a string");
      }
   }

   class="kw">public class="kw">static boolean expectBooleanElement(@Nonnull JsonElement var0, String var1) {
      if (var0.isJsonPrimitive() && var0.getAsJsonPrimitive().isBoolean()) {
         class="kw">return var0.getAsJsonPrimitive().getAsBoolean();
      } else {
         throw new IllegalStateException("'" + var1 + "' must be a boolean value");
      }
   }

   class="kw">public class="kw">static JsonObject expectObject(@Nonnull JsonElement var0) {
      if (!var0.isJsonObject()) {
         throw new IllegalStateException("Expected a JSON object");
      } else {
         class="kw">return var0.getAsJsonObject();
      }
   }

   class="kw">public class="kw">static JsonObject expectObject(@Nonnull JsonElement var0, String var1) {
      if (!var0.isJsonObject()) {
         throw new IllegalStateException("'" + var1 + "' must be an object: " + var0);
      } else {
         class="kw">return var0.getAsJsonObject();
      }
   }

   class="kw">public class="kw">static String[] readStringArray(@Nonnull JsonObject var0, String var1, @Nonnull StringValidator var2, String[] var3) {
      JsonElement var4 = var0.get(var1);
      class="kw">return var4 == null ? var3 : readStringArray(var4, var1, var2);
   }

   @Nonnull
   class="kw">public class="kw">static String[] readStringArray(@Nonnull JsonElement var0, String var1, @Nonnull StringValidator var2) {
      if (!var0.isJsonArray()) {
         throw new IllegalStateException(var1 + " must be an array: " + var0);
      }

      JsonArray var3 = var0.getAsJsonArray();
      String[] var4 = new String[var3.size()];

      for (int var5 = 0; var5 < var3.size(); var5++) {
         String var6 = expectStringElement(var3.get(var5), String.format("%s element at position %s", var1, var5));
         if (!var2.test(var6)) {
            throw new IllegalStateException(var2.errorMessage(var6));
         }

         var4[var5] = var6;
      }

      class="kw">return var4;
   }

   class="kw">protected void addError(String var1) {
      this.readErrors.add(this.fileName + ": " + var1);
   }

   class="kw">protected void addError(@Nonnull Exception var1) {
      this.addError(var1.getMessage());
   }
}