StringOrBlank class

Пакет: com.hypixel.hytale.codec.schema.config

Файл: com/hypixel/hytale/codec/schema/config/Schema.java

implements: Codec<String>

Поля (2)

МодификаторыТипИмя
BsonArray var3
BsonValue var5

Методы (4)

МодификаторыВозвратСигнатура
public String decodepublic String decode(@Nonnull BsonValue var1, ExtraInfo var2)
public BsonValue encodepublic BsonValue encode(@Nonnull String var1, ExtraInfo var2)
abstract for for(int var4 = 0; var4 < var3.size()
public Schema toSchemapublic Schema toSchema(@Nonnull SchemaContext var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.codec.schema.config;

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.codecs.map.MapCodec;
class="kw">import com.hypixel.hytale.codec.lookup.ObjectCodecMapCodec;
class="kw">import com.hypixel.hytale.codec.lookup.Priority;
class="kw">import com.hypixel.hytale.codec.schema.SchemaContext;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIButton;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIDisplayMode;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIEditor;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIEditorFeatures;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIEditorPreview;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIRebuildCaches;
class="kw">import com.hypixel.hytale.codec.util.Documentation;
class="kw">import java.util.Arrays;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonArray;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonNull;
class="kw">import org.bson.BsonValue;

class="kw">public class Schema {
   class="kw">public class="kw">static class="kw">final ObjectCodecMapCodec<String, Schema> CODEC = new ObjectCodecMapCodec<>("type", new Schema.StringOrBlank(), true, false);
   class="kw">public class="kw">static class="kw">final ArrayCodec<Schema> ARRAY_CODEC = new ArrayCodec<>(CODEC, Schema[]::new);
   class="kw">public class="kw">static class="kw">final BuilderCodec<Schema> BASE_CODEC = BuilderCodec.builder(Schema.class, Schema::new)
      .append(new KeyedCodec<>("$id", Codec.STRING, false, true), (var0, var1) -> var0.id = var1, var0 -> var0.id)
      .add()
      .append(new KeyedCodec<>("type", new Schema.ArrayOrNull(), false, true), (var0, var1) -> var0.types = var1, var0 -> var0.types)
      .add()
      .append(new KeyedCodec<>("title", Codec.STRING, false, true), (var0, var1) -> var0.title = var1, var0 -> var0.title)
      .add()
      .append(
         new KeyedCodec<>("description", Codec.STRING, false, true),
         (var0, var1) -> var0.description = var1,
         var0 -> var0.description == null && var0.markdownDescription != null ? Documentation.stripMarkdown(var0.markdownDescription) : var0.description
      )
      .add()
      .append(
         new KeyedCodec<>("markdownDescription", Codec.STRING, false, true), (var0, var1) -> var0.markdownDescription = var1, var0 -> var0.markdownDescription
      )
      .add()
      .append(new KeyedCodec<>("enumDescriptions", Codec.STRING_ARRAY, false, true), (var0, var1) -> var0.enumDescriptions = var1, var0 -> {
         if (var0.enumDescriptions == null && var0.markdownEnumDescriptions != null) {
            String[] var1 = new String[var0.markdownEnumDescriptions.length];

            for (int var2 = 0; var2 < var1.length; var2++) {
               var1[var2] = Documentation.stripMarkdown(var0.markdownEnumDescriptions[var2]);
            }

            class="kw">return var1;
         } else {
            class="kw">return var0.enumDescriptions;
         }
      })
      .add()
      .append(
         new KeyedCodec<>("markdownEnumDescriptions", Codec.STRING_ARRAY, false, true),
         (var0, var1) -> var0.markdownEnumDescriptions = var1,
         var0 -> var0.markdownEnumDescriptions
      )
      .add()
      .append(new KeyedCodec<>("anyOf", ARRAY_CODEC, false, true), (var0, var1) -> var0.anyOf = var1, var0 -> var0.anyOf)
      .add()
      .append(new KeyedCodec<>("oneOf", ARRAY_CODEC, false, true), (var0, var1) -> var0.oneOf = var1, var0 -> var0.oneOf)
      .add()
      .append(new KeyedCodec<>("allOf", ARRAY_CODEC, false, true), (var0, var1) -> var0.allOf = var1, var0 -> var0.allOf)
      .add()
      .append(new KeyedCodec<>("not", CODEC, false, true), (var0, var1) -> var0.not = var1, var0 -> var0.not)
      .add()
      .append(new KeyedCodec<>("if", CODEC, false, true), (var0, var1) -> var0.if_ = var1, var0 -> var0.if_)
      .add()
      .append(new KeyedCodec<>("then", CODEC, false, true), (var0, var1) -> var0.then = var1, var0 -> var0.then)
      .add()
      .append(new KeyedCodec<>("else", new Schema.BooleanOrSchema(), false, true), (var0, var1) -> var0.else_ = var1, var0 -> var0.else_)
      .add()
      .append(new KeyedCodec<>("required", Codec.STRING_ARRAY, false, true), (var0, var1) -> var0.required = var1, var0 -> var0.required)
      .add()
      .append(new KeyedCodec<>("class="kw">default", Codec.BSON_DOCUMENT, false, true), (var0, var1) -> var0.default_ = var1, var0 -> var0.default_)
      .add()
      .append(
         new KeyedCodec<>("definitions", new MapCodec<>(CODEC, HashMap::new), false, true), (var0, var1) -> var0.definitions = var1, var0 -> var0.definitions
      )
      .add()
      .append(new KeyedCodec<>("$ref", Codec.STRING, false, true), (var0, var1) -> var0.ref = var1, var0 -> var0.ref)
      .add()
      .append(new KeyedCodec<>("$data", Codec.STRING, false, true), (var0, var1) -> var0.data = var1, var0 -> var0.data)
      .add()
      .append(new KeyedCodec<>("doNotSuggest", Codec.BOOLEAN, false, true), (var0, var1) -> var0.doNotSuggest = var1, var0 -> var0.doNotSuggest)
      .add()
      .append(new KeyedCodec<>("hytaleAssetRef", Codec.STRING, false, true), (var0, var1) -> var0.hytaleAssetRef = var1, var0 -> var0.hytaleAssetRef)
      .add()
      .append(
         new KeyedCodec<>("hytaleCustomAssetRef", Codec.STRING, false, true),
         (var0, var1) -> var0.hytaleCustomAssetRef = var1,
         var0 -> var0.hytaleCustomAssetRef
      )
      .add()
      .append(new KeyedCodec<>("hytaleParent", Schema.InheritSettings.CODEC, false, true), (var0, var1) -> var0.hytaleParent = var1, var0 -> var0.hytaleParent)
      .add()
      .append(
         new KeyedCodec<>("hytaleSchemaTypeField", Schema.SchemaTypeField.CODEC, false, true),
         (var0, var1) -> var0.hytaleSchemaTypeField = var1,
         var0 -> var0.hytaleSchemaTypeField
      )
      .add()
      .append(new KeyedCodec<>("hytale", Schema.HytaleMetadata.CODEC, false, true), (var0, var1) -> {
         if (var1.type == null) {
            var1.type = CODEC.getIdFor((Class<? class="kw">extends Schema>)var0.getClass());
         }

         var0.hytale = var1;
      }, var0 -> var0.hytale)
      .add()
      .build();
   class="kw">private String id;
   class="kw">private String[] types;
   class="kw">private String title;
   class="kw">private String description;
   class="kw">private String markdownDescription;
   class="kw">private Schema[] anyOf;
   class="kw">private Schema[] oneOf;
   class="kw">private Schema[] allOf;
   class="kw">private Schema not;
   class="kw">private String[] required;
   class="kw">private String[] enumDescriptions;
   class="kw">private String[] markdownEnumDescriptions;
   class="kw">private Map<String, Schema> definitions;
   class="kw">private String ref;
   class="kw">private String data;
   class="kw">private BsonDocument default_;
   class="kw">private Schema if_;
   class="kw">private Schema then;
   class="kw">private Object else_;
   class="kw">private Schema.HytaleMetadata hytale;
   class="kw">private Schema.InheritSettings hytaleParent;
   class="kw">private Schema.SchemaTypeField hytaleSchemaTypeField;
   class="kw">private String hytaleAssetRef;
   class="kw">private String hytaleCustomAssetRef;
   class="kw">private Boolean doNotSuggest;

   class="kw">public Schema() {
      String var1 = CODEC.getIdFor((Class<? class="kw">extends Schema>)this.getClass());
      if (var1 != null && !var1.isBlank()) {
         this.hytale = new Schema.HytaleMetadata(var1);
      }
   }

   class="kw">public String getId() {
      class="kw">return this.id;
   }

   class="kw">public void setId(String var1) {
      this.id = var1;
   }

   class="kw">public String[] getTypes() {
      class="kw">return this.types;
   }

   class="kw">public void setTypes(String[] var1) {
      this.types = var1;
   }

   class="kw">public String getTitle() {
      class="kw">return this.title;
   }

   class="kw">public void setTitle(String var1) {
      this.title = var1;
   }

   class="kw">public String getDescription() {
      class="kw">return this.description;
   }

   class="kw">public void setDescription(String var1) {
      this.description = var1;
   }

   class="kw">public String getMarkdownDescription() {
      class="kw">return this.markdownDescription;
   }

   class="kw">public void setMarkdownDescription(String var1) {
      this.markdownDescription = var1;
   }

   class="kw">public String[] getEnumDescriptions() {
      class="kw">return this.enumDescriptions;
   }

   class="kw">public void setEnumDescriptions(String[] var1) {
      this.enumDescriptions = var1;
   }

   class="kw">public String[] getMarkdownEnumDescriptions() {
      class="kw">return this.markdownEnumDescriptions;
   }

   class="kw">public void setMarkdownEnumDescriptions(String[] var1) {
      this.markdownEnumDescriptions = var1;
   }

   class="kw">public Schema[] getAnyOf() {
      class="kw">return this.anyOf;
   }

   class="kw">public void setAnyOf(Schema... var1) {
      this.anyOf = var1;
   }

   class="kw">public Schema[] getOneOf() {
      class="kw">return this.oneOf;
   }

   class="kw">public void setOneOf(Schema... var1) {
      this.oneOf = var1;
   }

   class="kw">public Schema[] getAllOf() {
      class="kw">return this.allOf;
   }

   class="kw">public void setAllOf(Schema... var1) {
      this.allOf = var1;
   }

   class="kw">public String[] getRequired() {
      class="kw">return this.required;
   }

   class="kw">public void setRequired(String... var1) {
      this.required = var1;
   }

   class="kw">public BsonDocument getDefaultRaw() {
      class="kw">return this.default_;
   }

   class="kw">public void setDefaultRaw(BsonDocument var1) {
      this.default_ = var1;
   }

   class="kw">public Map<String, Schema> getDefinitions() {
      class="kw">return this.definitions;
   }

   class="kw">public void setDefinitions(Map<String, Schema> var1) {
      this.definitions = var1;
   }

   class="kw">public String getRef() {
      class="kw">return this.ref;
   }

   class="kw">public void setRef(String var1) {
      this.ref = var1;
   }

   class="kw">public String getData() {
      class="kw">return this.data;
   }

   class="kw">public void setData(String var1) {
      this.data = var1;
   }

   class="kw">public Schema getIf() {
      class="kw">return this.if_;
   }

   class="kw">public void setIf(Schema var1) {
      this.if_ = var1;
   }

   class="kw">public Schema getThen() {
      class="kw">return this.then;
   }

   class="kw">public void setThen(Schema var1) {
      this.then = var1;
   }

   class="kw">public Schema getElse() {
      class="kw">return (Schema)this.else_;
   }

   class="kw">public void setElse(Schema var1) {
      this.else_ = var1;
   }

   class="kw">public void setElse(boolean var1) {
      this.else_ = var1;
   }

   class="kw">public Boolean isDoNotSuggest() {
      class="kw">return this.doNotSuggest;
   }

   class="kw">public void setDoNotSuggest(boolean var1) {
      this.doNotSuggest = var1;
   }

   @Nullable
   class="kw">public Schema.HytaleMetadata getHytale() {
      class="kw">return this.getHytale(true);
   }

   @Nullable
   class="kw">public Schema.HytaleMetadata getHytale(boolean var1) {
      if (var1 && this.hytale == null) {
         this.hytale = new Schema.HytaleMetadata();
         this.hytale.type = CODEC.getIdFor((Class<? class="kw">extends Schema>)this.getClass());
      }

      class="kw">return this.hytale;
   }

   class="kw">public String getHytaleAssetRef() {
      class="kw">return this.hytaleAssetRef;
   }

   class="kw">public void setHytaleAssetRef(String var1) {
      this.hytaleAssetRef = var1;
   }

   class="kw">public Schema.InheritSettings getHytaleParent() {
      class="kw">return this.hytaleParent;
   }

   class="kw">public void setHytaleParent(Schema.InheritSettings var1) {
      this.hytaleParent = var1;
   }

   class="kw">public Schema.SchemaTypeField getHytaleSchemaTypeField() {
      class="kw">return this.hytaleSchemaTypeField;
   }

   class="kw">public void setHytaleSchemaTypeField(Schema.SchemaTypeField var1) {
      this.hytaleSchemaTypeField = var1;
   }

   class="kw">public String getHytaleCustomAssetRef() {
      class="kw">return this.hytaleCustomAssetRef;
   }

   class="kw">public void setHytaleCustomAssetRef(String var1) {
      this.hytaleCustomAssetRef = var1;
   }

   @Nonnull
   class="kw">public class="kw">static Schema ref(String var0) {
      Schema var1 = new Schema();
      var1.setRef(var0);
      class="kw">return var1;
   }

   @Nonnull
   class="kw">public class="kw">static Schema data(String var0) {
      Schema var1 = new Schema();
      var1.setData(var0);
      class="kw">return var1;
   }

   @Nonnull
   class="kw">public class="kw">static Schema anyOf(Schema... var0) {
      Schema var1 = new Schema();
      var1.anyOf = var0;
      class="kw">return var1;
   }

   @Nonnull
   class="kw">public class="kw">static Schema not(Schema var0) {
      Schema var1 = new Schema();
      var1.not = var0;
      class="kw">return var1;
   }

   @Override
   class="kw">public boolean equals(@Nullable Object var1) {
      if (this == var1) {
         class="kw">return true;
      }

      if (var1 != null && this.getClass() == var1.getClass()) {
         Schema var2 = (Schema)var1;
         if (this.id != null ? this.id.equals(var2.id) : var2.id == null) {
            if (!Arrays.equals(this.types, var2.types)) {
               class="kw">return false;
            }

            if (this.title != null ? this.title.equals(var2.title) : var2.title == null) {
               if (this.description != null ? this.description.equals(var2.description) : var2.description == null) {
                  if (this.markdownDescription != null ? this.markdownDescription.equals(var2.markdownDescription) : var2.markdownDescription == null) {
                     if (!Arrays.equals(this.anyOf, var2.anyOf)) {
                        class="kw">return false;
                     }

                     if (!Arrays.equals(this.oneOf, var2.oneOf)) {
                        class="kw">return false;
                     }

                     if (!Arrays.equals(this.allOf, var2.allOf)) {
                        class="kw">return false;
                     }

                     if (this.not != null ? this.not.equals(var2.not) : var2.not == null) {
                        if (!Arrays.equals(this.required, var2.required)) {
                           class="kw">return false;
                        }

                        if (!Arrays.equals(this.enumDescriptions, var2.enumDescriptions)) {
                           class="kw">return false;
                        }

                        if (!Arrays.equals(this.markdownEnumDescriptions, var2.markdownEnumDescriptions)) {
                           class="kw">return false;
                        }

                        if (this.definitions != null ? this.definitions.equals(var2.definitions) : var2.definitions == null) {
                           if (this.ref != null ? this.ref.equals(var2.ref) : var2.ref == null) {
                              if (this.data != null ? this.data.equals(var2.data) : var2.data == null) {
                                 if (this.default_ != null ? this.default_.equals(var2.default_) : var2.default_ == null) {
                                    if (this.hytale != null ? this.hytale.equals(var2.hytale) : var2.hytale == null) {
                                       if (this.hytaleParent != null ? this.hytaleParent.equals(var2.hytaleParent) : var2.hytaleParent == null) {
                                          if (this.hytaleSchemaTypeField != null
                                             ? this.hytaleSchemaTypeField.equals(var2.hytaleSchemaTypeField)
                                             : var2.hytaleSchemaTypeField == null) {
                                             if (this.hytaleAssetRef != null ? this.hytaleAssetRef.equals(var2.hytaleAssetRef) : var2.hytaleAssetRef == null) {
                                                if (this.if_ != null ? this.if_.equals(var2.if_) : var2.if_ == null) {
                                                   if (this.then != null ? this.then.equals(var2.then) : var2.then == null) {
                                                      if (this.else_ != null ? this.else_.equals(var2.else_) : var2.else_ == null) {
                                                         if (this.doNotSuggest != null
                                                            ? this.doNotSuggest.equals(var2.doNotSuggest)
                                                            : var2.doNotSuggest == null) {
                                                            class="kw">return this.hytaleCustomAssetRef != null
                                                               ? this.hytaleCustomAssetRef.equals(var2.hytaleCustomAssetRef)
                                                               : var2.hytaleCustomAssetRef == null;
                                                         } else {
                                                            class="kw">return false;
                                                         }
                                                      } else {
                                                         class="kw">return false;
                                                      }
                                                   } else {
                                                      class="kw">return false;
                                                   }
                                                } else {
                                                   class="kw">return false;
                                                }
                                             } else {
                                                class="kw">return false;
                                             }
                                          } else {
                                             class="kw">return false;
                                          }
                                       } else {
                                          class="kw">return false;
                                       }
                                    } else {
                                       class="kw">return false;
                                    }
                                 } else {
                                    class="kw">return false;
                                 }
                              } else {
                                 class="kw">return false;
                              }
                           } else {
                              class="kw">return false;
                           }
                        } else {
                           class="kw">return false;
                        }
                     } else {
                        class="kw">return false;
                     }
                  } else {
                     class="kw">return false;
                  }
               } else {
                  class="kw">return false;
               }
            } else {
               class="kw">return false;
            }
         } else {
            class="kw">return false;
         }
      } else {
         class="kw">return false;
      }
   }

   @Override
   class="kw">public int hashCode() {
      int var1 = this.id != null ? this.id.hashCode() : 0;
      var1 = 31 * var1 + Arrays.hashCode(this.types);
      var1 = 31 * var1 + (this.title != null ? this.title.hashCode() : 0);
      var1 = 31 * var1 + (this.description != null ? this.description.hashCode() : 0);
      var1 = 31 * var1 + (this.markdownDescription != null ? this.markdownDescription.hashCode() : 0);
      var1 = 31 * var1 + Arrays.hashCode(this.anyOf);
      var1 = 31 * var1 + Arrays.hashCode(this.oneOf);
      var1 = 31 * var1 + Arrays.hashCode(this.allOf);
      var1 = 31 * var1 + (this.not != null ? this.not.hashCode() : 0);
      var1 = 31 * var1 + Arrays.hashCode(this.required);
      var1 = 31 * var1 + Arrays.hashCode(this.enumDescriptions);
      var1 = 31 * var1 + Arrays.hashCode(this.markdownEnumDescriptions);
      var1 = 31 * var1 + (this.definitions != null ? this.definitions.hashCode() : 0);
      var1 = 31 * var1 + (this.ref != null ? this.ref.hashCode() : 0);
      var1 = 31 * var1 + (this.data != null ? this.data.hashCode() : 0);
      var1 = 31 * var1 + (this.default_ != null ? this.default_.hashCode() : 0);
      var1 = 31 * var1 + (this.hytale != null ? this.hytale.hashCode() : 0);
      var1 = 31 * var1 + (this.hytaleParent != null ? this.hytaleParent.hashCode() : 0);
      var1 = 31 * var1 + (this.hytaleSchemaTypeField != null ? this.hytaleSchemaTypeField.hashCode() : 0);
      var1 = 31 * var1 + (this.hytaleAssetRef != null ? this.hytaleAssetRef.hashCode() : 0);
      var1 = 31 * var1 + (this.hytaleCustomAssetRef != null ? this.hytaleCustomAssetRef.hashCode() : 0);
      var1 = 31 * var1 + (this.if_ != null ? this.if_.hashCode() : 0);
      var1 = 31 * var1 + (this.then != null ? this.then.hashCode() : 0);
      var1 = 31 * var1 + (this.else_ != null ? this.else_.hashCode() : 0);
      class="kw">return 31 * var1 + (this.doNotSuggest != null ? this.doNotSuggest.hashCode() : 0);
   }

   class="kw">public class="kw">static void init() {
      CODEC.register(Priority.DEFAULT, "", Schema.class, BASE_CODEC);
      CODEC.register("null", NullSchema.class, NullSchema.CODEC);
      CODEC.register("string", StringSchema.class, StringSchema.CODEC);
      CODEC.register("number", NumberSchema.class, NumberSchema.CODEC);
      CODEC.register("integer", IntegerSchema.class, IntegerSchema.CODEC);
      CODEC.register("array", ArraySchema.class, ArraySchema.CODEC);
      CODEC.register("boolean", BooleanSchema.class, BooleanSchema.CODEC);
      CODEC.register("object", ObjectSchema.class, ObjectSchema.CODEC);
      UIEditor.init();
   }

   @Deprecated
   class="kw">private class="kw">static class ArrayOrNull class="kw">implements Codec<String[]> {
      class="kw">private ArrayOrNull() {
      }

      @Nullable
      class="kw">public String[] decode(@Nonnull BsonValue var1, @Nonnull ExtraInfo var2) {
         class="kw">return var1.isArray() ? Codec.STRING_ARRAY.decode(var1, var2) : null;
      }

      @Nonnull
      class="kw">public BsonValue encode(@Nullable String[] var1, ExtraInfo var2) {
         class="kw">return (BsonValue)(var1 != null ? Codec.STRING_ARRAY.encode(var1, var2) : new BsonNull());
      }

      @Nonnull
      @Override
      class="kw">public Schema toSchema(@Nonnull SchemaContext var1) {
         class="kw">return Schema.anyOf(new ArraySchema(), new NullSchema());
      }
   }

   @Deprecated
   class="kw">protected class="kw">static class BooleanOrSchema class="kw">implements Codec<Object> {
      class="kw">protected BooleanOrSchema() {
      }

      @Override
      class="kw">public Object decode(@Nonnull BsonValue var1, ExtraInfo var2) {
         class="kw">return var1.isBoolean() ? Codec.BOOLEAN.decode(var1, var2) : Schema.CODEC.decode(var1, var2);
      }

      @Override
      class="kw">public BsonValue encode(Object var1, ExtraInfo var2) {
         class="kw">return var1 class="kw">instanceof Boolean ? Codec.BOOLEAN.encode((Boolean)var1, var2) : Schema.CODEC.encode((Schema)var1, var2);
      }

      @Nonnull
      @Override
      class="kw">public Schema toSchema(@Nonnull SchemaContext var1) {
         class="kw">return Schema.anyOf(new BooleanSchema(), Schema.CODEC.toSchema(var1));
      }
   }

   class="kw">public class="kw">static class HytaleMetadata {
      class="kw">public class="kw">static class="kw">final BuilderCodec<Schema.HytaleMetadata> CODEC = BuilderCodec.builder(Schema.HytaleMetadata.class, Schema.HytaleMetadata::new)
         .append(
            new KeyedCodec<>("type", Codec.STRING, false, true),
            (var0, var1) -> var0.type = var1,
            var0 -> var0.type != null && var0.type.isEmpty() ? null : var0.type
         )
         .add()
         .append(new KeyedCodec<>("internalKeys", Codec.STRING_ARRAY, false, true), (var0, var1) -> var0.internalKeys = var1, var0 -> var0.internalKeys)
         .add()
         .append(new KeyedCodec<>("path", Codec.STRING, false, true), (var0, var1) -> var0.path = var1, var0 -> var0.path)
         .add()
         .append(new KeyedCodec<>("virtualPath", Codec.STRING, false, true), (var0, var1) -> var0.virtualPath = var1, var0 -> var0.virtualPath)
         .add()
         .append(new KeyedCodec<>("extension", Codec.STRING, false, true), (var0, var1) -> var0.extension = var1, var0 -> var0.extension)
         .add()
         .append(new KeyedCodec<>("idProvider", Codec.STRING, false, true), (var0, var1) -> var0.idProvider = var1, var0 -> var0.idProvider)
         .add()
         .append(new KeyedCodec<>("inheritsProperty", Codec.BOOLEAN, false, true), (var0, var1) -> var0.inheritsProperty = var1, var0 -> var0.inheritsProperty)
         .add()
         .append(new KeyedCodec<>("mergesProperties", Codec.BOOLEAN, false, true), (var0, var1) -> var0.mergesProperties = var1, var0 -> var0.mergesProperties)
         .add()
         .append(
            new KeyedCodec<>("uiDisplayMode", new EnumCodec<>(UIDisplayMode.DisplayMode.class), false, true),
            (var0, var1) -> var0.uiDisplayMode = var1,
            var0 -> var0.uiDisplayMode
         )
         .add()
         .append(
            new KeyedCodec<>("uiEditorComponent", UIEditor.CODEC, false, true), (var0, var1) -> var0.uiEditorComponent = var1, var0 -> var0.uiEditorComponent
         )
         .add()
         .append(new KeyedCodec<>("allowEmptyObject", Codec.BOOLEAN, false, true), (var0, var1) -> var0.allowEmptyObject = var1, var0 -> var0.allowEmptyObject)
         .add()
         .append(new KeyedCodec<>("uiEditorIgnore", Codec.BOOLEAN, false, true), (var0, var1) -> var0.uiEditorIgnore = var1, var0 -> var0.uiEditorIgnore)
         .add()
         .append(
            new KeyedCodec<>(
               "uiEditorFeatures", new ArrayCodec<>(new EnumCodec<>(UIEditorFeatures.EditorFeature.class), UIEditorFeatures.EditorFeature[]::new), false, true
            ),
            (var0, var1) -> var0.uiEditorFeatures = var1,
            var0 -> var0.uiEditorFeatures
         )
         .add()
         .append(
            new KeyedCodec<>("uiEditorPreview", new EnumCodec<>(UIEditorPreview.PreviewType.class), false, true),
            (var0, var1) -> var0.uiEditorPreview = var1,
            var0 -> var0.uiEditorPreview
         )
         .add()
         .append(new KeyedCodec<>("uiTypeIcon", Codec.STRING, false, true), (var0, var1) -> var0.uiTypeIcon = var1, var0 -> var0.uiTypeIcon)
         .add()
         .append(new KeyedCodec<>("uiPropertyTitle", Codec.STRING, false, true), (var0, var1) -> var0.uiPropertyTitle = var1, var0 -> var0.uiPropertyTitle)
         .add()
         .append(new KeyedCodec<>("uiSectionStart", Codec.STRING, false, true), (var0, var1) -> var0.uiSectionStart = var1, var0 -> var0.uiSectionStart)
         .add()
         .append(
            new KeyedCodec<>(
               "uiRebuildCaches", new ArrayCodec<>(new EnumCodec<>(UIRebuildCaches.ClientCache.class), UIRebuildCaches.ClientCache[]::new), false, true
            ),
            (var0, var1) -> var0.uiRebuildCaches = var1,
            var0 -> var0.uiRebuildCaches
         )
         .add()
         .append(
            new KeyedCodec<>("uiSidebarButtons", new ArrayCodec<>(UIButton.CODEC, UIButton[]::new), false, true),
            (var0, var1) -> var0.uiSidebarButtons = var1,
            var0 -> var0.uiSidebarButtons
         )
         .add()
         .append(
            new KeyedCodec<>("uiRebuildCachesForChildProperties", Codec.BOOLEAN, false, true),
            (var0, var1) -> var0.uiRebuildCachesForChildProperties = var1,
            var0 -> var0.uiRebuildCachesForChildProperties
         )
         .add()
         .append(
            new KeyedCodec<>("uiCollapsedByDefault", Codec.BOOLEAN, false, true),
            (var0, var1) -> var0.uiCollapsedByDefault = var1,
            var0 -> var0.uiCollapsedByDefault
         )
         .add()
         .append(
            new KeyedCodec<>("uiCreateButtons", new ArrayCodec<>(UIButton.CODEC, UIButton[]::new), false, true),
            (var0, var1) -> var0.uiCreateButtons = var1,
            var0 -> var0.uiCreateButtons
         )
         .add()
         .build();
      class="kw">private String type;
      class="kw">private String path;
      class="kw">private String virtualPath;
      class="kw">private String extension;
      class="kw">private String idProvider;
      class="kw">private String[] internalKeys;
      class="kw">private Boolean inheritsProperty;
      class="kw">private Boolean mergesProperties;
      class="kw">private UIEditorFeatures.EditorFeature[] uiEditorFeatures;
      class="kw">private UIEditorPreview.PreviewType uiEditorPreview;
      class="kw">private String uiTypeIcon;
      class="kw">private Boolean uiEditorIgnore;
      class="kw">private Boolean allowEmptyObject;
      class="kw">private UIDisplayMode.DisplayMode uiDisplayMode;
      class="kw">private UIEditor.EditorComponent uiEditorComponent;
      class="kw">private String uiPropertyTitle;
      class="kw">private String uiSectionStart;
      class="kw">private UIRebuildCaches.ClientCache[] uiRebuildCaches;
      class="kw">private Boolean uiRebuildCachesForChildProperties;
      class="kw">private UIButton[] uiSidebarButtons;
      class="kw">private Boolean uiCollapsedByDefault;
      class="kw">private UIButton[] uiCreateButtons;

      class="kw">public HytaleMetadata(String var1) {
         this.type = var1;
      }

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

      class="kw">public String getType() {
         class="kw">return this.type;
      }

      class="kw">public void setType(String var1) {
         this.type = var1;
      }

      class="kw">public String getPath() {
         class="kw">return this.path;
      }

      class="kw">public void setPath(String var1) {
         this.path = var1;
      }

      class="kw">public String getVirtualPath() {
         class="kw">return this.virtualPath;
      }

      class="kw">public void setVirtualPath(String var1) {
         this.virtualPath = var1;
      }

      class="kw">public String getExtension() {
         class="kw">return this.extension;
      }

      class="kw">public void setExtension(String var1) {
         this.extension = var1;
      }

      class="kw">public String getIdProvider() {
         class="kw">return this.idProvider;
      }

      class="kw">public void setIdProvider(String var1) {
         this.idProvider = var1;
      }

      class="kw">public String[] getInternalKeys() {
         class="kw">return this.internalKeys;
      }

      class="kw">public void setInternalKeys(String[] var1) {
         this.internalKeys = var1;
      }

      class="kw">public UIDisplayMode.DisplayMode getUiDisplayMode() {
         class="kw">return this.uiDisplayMode;
      }

      class="kw">public void setUiDisplayMode(UIDisplayMode.DisplayMode var1) {
         this.uiDisplayMode = var1;
      }

      class="kw">public UIEditor.EditorComponent getUiEditorComponent() {
         class="kw">return this.uiEditorComponent;
      }

      class="kw">public void setUiEditorComponent(UIEditor.EditorComponent var1) {
         this.uiEditorComponent = var1;
      }

      class="kw">public UIEditorFeatures.EditorFeature[] getUiEditorFeatures() {
         class="kw">return this.uiEditorFeatures;
      }

      class="kw">public void setUiEditorFeatures(UIEditorFeatures.EditorFeature[] var1) {
         this.uiEditorFeatures = var1;
      }

      class="kw">public UIEditorPreview.PreviewType getUiEditorPreview() {
         class="kw">return this.uiEditorPreview;
      }

      class="kw">public void setUiEditorPreview(UIEditorPreview.PreviewType var1) {
         this.uiEditorPreview = var1;
      }

      class="kw">public String getUiTypeIcon() {
         class="kw">return this.uiTypeIcon;
      }

      class="kw">public void setUiTypeIcon(String var1) {
         this.uiTypeIcon = var1;
      }

      class="kw">public Boolean getUiEditorIgnore() {
         class="kw">return this.uiEditorIgnore;
      }

      class="kw">public void setUiEditorIgnore(Boolean var1) {
         this.uiEditorIgnore = var1;
      }

      class="kw">public Boolean getAllowEmptyObject() {
         class="kw">return this.allowEmptyObject;
      }

      class="kw">public void setAllowEmptyObject(Boolean var1) {
         this.allowEmptyObject = var1;
      }

      class="kw">public String getUiPropertyTitle() {
         class="kw">return this.uiPropertyTitle;
      }

      class="kw">public void setUiPropertyTitle(String var1) {
         this.uiPropertyTitle = var1;
      }

      class="kw">public String getUiSectionStart() {
         class="kw">return this.uiSectionStart;
      }

      class="kw">public void setUiSectionStart(String var1) {
         this.uiSectionStart = var1;
      }

      class="kw">public boolean isInheritsProperty() {
         class="kw">return this.inheritsProperty;
      }

      class="kw">public void setInheritsProperty(boolean var1) {
         this.inheritsProperty = var1;
      }

      class="kw">public boolean getMergesProperties() {
         class="kw">return this.mergesProperties;
      }

      class="kw">public void setMergesProperties(boolean var1) {
         this.mergesProperties = var1;
      }

      class="kw">public UIRebuildCaches.ClientCache[] getUiRebuildCaches() {
         class="kw">return this.uiRebuildCaches;
      }

      class="kw">public void setUiRebuildCaches(UIRebuildCaches.ClientCache[] var1) {
         this.uiRebuildCaches = var1;
      }

      class="kw">public Boolean getUiRebuildCachesForChildProperties() {
         class="kw">return this.uiRebuildCachesForChildProperties;
      }

      class="kw">public void setUiRebuildCachesForChildProperties(Boolean var1) {
         this.uiRebuildCachesForChildProperties = var1;
      }

      class="kw">public UIButton[] getUiSidebarButtons() {
         class="kw">return this.uiSidebarButtons;
      }

      class="kw">public void setUiSidebarButtons(UIButton[] var1) {
         this.uiSidebarButtons = var1;
      }

      class="kw">public Boolean getUiCollapsedByDefault() {
         class="kw">return this.uiCollapsedByDefault;
      }

      class="kw">public void setUiCollapsedByDefault(Boolean var1) {
         this.uiCollapsedByDefault = var1;
      }

      class="kw">public UIButton[] getUiCreateButtons() {
         class="kw">return this.uiCreateButtons;
      }

      class="kw">public void setUiCreateButtons(UIButton[] var1) {
         this.uiCreateButtons = var1;
      }

      @Override
      class="kw">public boolean equals(@Nullable Object var1) {
         if (this == var1) {
            class="kw">return true;
         }

         if (var1 != null && this.getClass() == var1.getClass()) {
            Schema.HytaleMetadata var2 = (Schema.HytaleMetadata)var1;
            if (this.type != null ? this.type.equals(var2.type) : var2.type == null) {
               if (this.path != null ? this.path.equals(var2.path) : var2.path == null) {
                  if (this.virtualPath != null ? this.virtualPath.equals(var2.virtualPath) : var2.virtualPath == null) {
                     if (this.extension != null ? this.extension.equals(var2.extension) : var2.extension == null) {
                        if (this.idProvider != null ? this.idProvider.equals(var2.idProvider) : var2.idProvider == null) {
                           if (!Arrays.equals(this.internalKeys, var2.internalKeys)) {
                              class="kw">return false;
                           }

                           if (this.inheritsProperty != null ? this.inheritsProperty.equals(var2.inheritsProperty) : var2.inheritsProperty == null) {
                              if (this.mergesProperties != null ? this.mergesProperties.equals(var2.mergesProperties) : var2.mergesProperties == null) {
                                 if (!Arrays.equals(this.uiEditorFeatures, var2.uiEditorFeatures)) {
                                    class="kw">return false;
                                 }

                                 if (this.uiEditorPreview != var2.uiEditorPreview) {
                                    class="kw">return false;
                                 }

                                 if (this.uiTypeIcon != null ? this.uiTypeIcon.equals(var2.uiTypeIcon) : var2.uiTypeIcon == null) {
                                    if (this.uiEditorIgnore != null ? this.uiEditorIgnore.equals(var2.uiEditorIgnore) : var2.uiEditorIgnore == null) {
                                       if (this.allowEmptyObject != null ? this.allowEmptyObject.equals(var2.allowEmptyObject) : var2.allowEmptyObject == null) {
                                          if (this.uiDisplayMode != var2.uiDisplayMode) {
                                             class="kw">return false;
                                          }

                                          if (this.uiEditorComponent != null
                                             ? this.uiEditorComponent.equals(var2.uiEditorComponent)
                                             : var2.uiEditorComponent == null) {
                                             if (this.uiPropertyTitle != null
                                                ? this.uiPropertyTitle.equals(var2.uiPropertyTitle)
                                                : var2.uiPropertyTitle == null) {
                                                if (this.uiSectionStart != null ? this.uiSectionStart.equals(var2.uiSectionStart) : var2.uiSectionStart == null
                                                   )
                                                 {
                                                   if (!Arrays.equals(this.uiRebuildCaches, var2.uiRebuildCaches)) {
                                                      class="kw">return false;
                                                   }

                                                   if (this.uiRebuildCachesForChildProperties != null
                                                      ? this.uiRebuildCachesForChildProperties.equals(var2.uiRebuildCachesForChildProperties)
                                                      : var2.uiRebuildCachesForChildProperties == null) {
                                                      if (!Arrays.equals(this.uiSidebarButtons, var2.uiSidebarButtons)) {
                                                         class="kw">return false;
                                                      } else {
                                                         class="kw">return (
                                                               this.uiCollapsedByDefault != null
                                                                  ? this.uiCollapsedByDefault.equals(var2.uiCollapsedByDefault)
                                                                  : var2.uiCollapsedByDefault == null
                                                            )
                                                            ? Arrays.equals(this.uiCreateButtons, var2.uiCreateButtons)
                                                            : false;
                                                      }
                                                   } else {
                                                      class="kw">return false;
                                                   }
                                                } else {
                                                   class="kw">return false;
                                                }
                                             } else {
                                                class="kw">return false;
                                             }
                                          } else {
                                             class="kw">return false;
                                          }
                                       } else {
                                          class="kw">return false;
                                       }
                                    } else {
                                       class="kw">return false;
                                    }
                                 } else {
                                    class="kw">return false;
                                 }
                              } else {
                                 class="kw">return false;
                              }
                           } else {
                              class="kw">return false;
                           }
                        } else {
                           class="kw">return false;
                        }
                     } else {
                        class="kw">return false;
                     }
                  } else {
                     class="kw">return false;
                  }
               } else {
                  class="kw">return false;
               }
            } else {
               class="kw">return false;
            }
         } else {
            class="kw">return false;
         }
      }

      @Override
      class="kw">public int hashCode() {
         int var1 = this.type != null ? this.type.hashCode() : 0;
         var1 = 31 * var1 + (this.path != null ? this.path.hashCode() : 0);
         var1 = 31 * var1 + (this.virtualPath != null ? this.virtualPath.hashCode() : 0);
         var1 = 31 * var1 + (this.extension != null ? this.extension.hashCode() : 0);
         var1 = 31 * var1 + (this.idProvider != null ? this.idProvider.hashCode() : 0);
         var1 = 31 * var1 + Arrays.hashCode(this.internalKeys);
         var1 = 31 * var1 + (this.inheritsProperty != null ? this.inheritsProperty.hashCode() : 0);
         var1 = 31 * var1 + (this.mergesProperties != null ? this.mergesProperties.hashCode() : 0);
         var1 = 31 * var1 + Arrays.hashCode(this.uiEditorFeatures);
         var1 = 31 * var1 + (this.uiEditorPreview != null ? this.uiEditorPreview.hashCode() : 0);
         var1 = 31 * var1 + (this.uiTypeIcon != null ? this.uiTypeIcon.hashCode() : 0);
         var1 = 31 * var1 + (this.uiEditorIgnore != null ? this.uiEditorIgnore.hashCode() : 0);
         var1 = 31 * var1 + (this.allowEmptyObject != null ? this.allowEmptyObject.hashCode() : 0);
         var1 = 31 * var1 + (this.uiDisplayMode != null ? this.uiDisplayMode.hashCode() : 0);
         var1 = 31 * var1 + (this.uiEditorComponent != null ? this.uiEditorComponent.hashCode() : 0);
         var1 = 31 * var1 + (this.uiPropertyTitle != null ? this.uiPropertyTitle.hashCode() : 0);
         var1 = 31 * var1 + (this.uiSectionStart != null ? this.uiSectionStart.hashCode() : 0);
         var1 = 31 * var1 + Arrays.hashCode(this.uiRebuildCaches);
         var1 = 31 * var1 + (this.uiRebuildCachesForChildProperties != null ? this.uiRebuildCachesForChildProperties.hashCode() : 0);
         var1 = 31 * var1 + Arrays.hashCode(this.uiSidebarButtons);
         var1 = 31 * var1 + (this.uiCollapsedByDefault != null ? this.uiCollapsedByDefault.hashCode() : 0);
         class="kw">return 31 * var1 + Arrays.hashCode(this.uiCreateButtons);
      }
   }

   class="kw">public class="kw">static class InheritSettings {
      class="kw">public class="kw">static class="kw">final BuilderCodec<Schema.InheritSettings> CODEC = BuilderCodec.builder(Schema.InheritSettings.class, Schema.InheritSettings::new)
         .append(new KeyedCodec<>("type", Codec.STRING, false, true), (var0, var1) -> var0.type = var1, var0 -> var0.type)
         .add()
         .append(new KeyedCodec<>("mapKey", Codec.STRING, false, true), (var0, var1) -> var0.mapKey = var1, var0 -> var0.mapKey)
         .add()
         .append(new KeyedCodec<>("mapKeyValue", Codec.STRING, false, true), (var0, var1) -> var0.mapKeyValue = var1, var0 -> var0.mapKeyValue)
         .add()
         .build();
      class="kw">private String type;
      class="kw">private String mapKey;
      class="kw">private String mapKeyValue;

      class="kw">public InheritSettings(String var1) {
         this.type = var1;
      }

      class="kw">protected InheritSettings() {
      }

      class="kw">public String getType() {
         class="kw">return this.type;
      }

      class="kw">public void setType(String var1) {
         this.type = var1;
      }

      class="kw">public String getMapKey() {
         class="kw">return this.mapKey;
      }

      class="kw">public void setMapKey(String var1) {
         this.mapKey = var1;
      }

      class="kw">public String getMapKeyValue() {
         class="kw">return this.mapKeyValue;
      }

      class="kw">public void setMapKeyValue(String var1) {
         this.mapKeyValue = var1;
      }

      @Override
      class="kw">public boolean equals(@Nullable Object var1) {
         if (this == var1) {
            class="kw">return true;
         }

         if (var1 != null && this.getClass() == var1.getClass()) {
            Schema.InheritSettings var2 = (Schema.InheritSettings)var1;
            if (this.type != null ? this.type.equals(var2.type) : var2.type == null) {
               if (this.mapKey != null ? this.mapKey.equals(var2.mapKey) : var2.mapKey == null) {
                  class="kw">return this.mapKeyValue != null ? this.mapKeyValue.equals(var2.mapKeyValue) : var2.mapKeyValue == null;
               } else {
                  class="kw">return false;
               }
            } else {
               class="kw">return false;
            }
         } else {
            class="kw">return false;
         }
      }

      @Override
      class="kw">public int hashCode() {
         int var1 = this.type != null ? this.type.hashCode() : 0;
         var1 = 31 * var1 + (this.mapKey != null ? this.mapKey.hashCode() : 0);
         class="kw">return 31 * var1 + (this.mapKeyValue != null ? this.mapKeyValue.hashCode() : 0);
      }
   }

   class="kw">public class="kw">static class SchemaTypeField {
      class="kw">public class="kw">static class="kw">final BuilderCodec<Schema.SchemaTypeField> CODEC = BuilderCodec.builder(Schema.SchemaTypeField.class, Schema.SchemaTypeField::new)
         .append(new KeyedCodec<>("property", Codec.STRING, false, true), (var0, var1) -> var0.property = var1, var0 -> var0.property)
         .add()
         .append(new KeyedCodec<>("defaultValue", Codec.STRING, false, true), (var0, var1) -> var0.defaultValue = var1, var0 -> var0.defaultValue)
         .add()
         .append(new KeyedCodec<>("values", Codec.STRING_ARRAY, false, true), (var0, var1) -> var0.values = var1, var0 -> var0.values)
         .add()
         .append(
            new KeyedCodec<>("parentPropertyKey", Codec.STRING, false, true), (var0, var1) -> var0.parentPropertyKey = var1, var0 -> var0.parentPropertyKey
         )
         .add()
         .build();
      class="kw">private String property;
      class="kw">private String defaultValue;
      class="kw">private String[] values;
      class="kw">private String parentPropertyKey;

      class="kw">public SchemaTypeField(String var1, String var2, String... var3) {
         this.property = var1;
         this.defaultValue = var2;
         this.values = var3;
      }

      class="kw">protected SchemaTypeField() {
      }

      class="kw">public String getProperty() {
         class="kw">return this.property;
      }

      class="kw">public String getDefaultValue() {
         class="kw">return this.defaultValue;
      }

      class="kw">public String[] getValues() {
         class="kw">return this.values;
      }

      class="kw">public String getParentPropertyKey() {
         class="kw">return this.parentPropertyKey;
      }

      class="kw">public void setParentPropertyKey(String var1) {
         this.parentPropertyKey = var1;
      }

      @Override
      class="kw">public boolean equals(Object var1) {
         if (var1 != null && this.getClass() == var1.getClass()) {
            Schema.SchemaTypeField var2 = (Schema.SchemaTypeField)var1;
            class="kw">return Objects.equals(this.property, var2.property)
               && Objects.equals(this.defaultValue, var2.defaultValue)
               && Arrays.deepEquals(this.values, var2.values)
               && Objects.equals(this.parentPropertyKey, var2.parentPropertyKey);
         } else {
            class="kw">return false;
         }
      }

      @Override
      class="kw">public int hashCode() {
         int var1 = Objects.hashCode(this.property);
         var1 = 31 * var1 + Objects.hashCode(this.defaultValue);
         var1 = 31 * var1 + Arrays.hashCode(this.values);
         class="kw">return 31 * var1 + Objects.hashCode(this.parentPropertyKey);
      }
   }

   @Deprecated
   class="kw">private class="kw">static class StringOrBlank class="kw">implements Codec<String> {
      class="kw">private StringOrBlank() {
      }

      class="kw">public String decode(@Nonnull BsonValue var1, ExtraInfo var2) {
         if (var1.isString()) {
            class="kw">return Codec.STRING.decode(var1, var2);
         }

         if (var1.isArray()) {
            BsonArray var3 = var1.asArray();

            for (int var4 = 0; var4 < var3.size(); var4++) {
               BsonValue var5 = var3.get(var4);
               if (!var5.asString().getValue().equals("null")) {
                  class="kw">return Codec.STRING.decode(var5, var2);
               }
            }

            throw new IllegalArgumentException("Unknown type (in array)");
         } else {
            class="kw">return "";
         }
      }

      @Nonnull
      class="kw">public BsonValue encode(@Nonnull String var1, ExtraInfo var2) {
         class="kw">return Codec.STRING.encode(var1, var2);
      }

      @Nonnull
      @Override
      class="kw">public Schema toSchema(@Nonnull SchemaContext var1) {
         class="kw">return Schema.anyOf(new ArraySchema(), new StringSchema());
      }
   }
}