Mode enum

Пакет: com.hypixel.hytale.assetstore.codec

Файл: com/hypixel/hytale/assetstore/codec/ContainedAssetCodec.java

Поля (1)

МодификаторыТипИмя
NONE, GENERATE_ID, INHERIT_ID, INHERIT_ID_AND_PARENT, INJECT_PARENT

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
class="kw">import com.hypixel.hytale.assetstore.AssetMap;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.AssetStore;
class="kw">import com.hypixel.hytale.assetstore.RawAsset;
class="kw">import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;
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.schema.SchemaContext;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import com.hypixel.hytale.codec.util.RawJsonReader;
class="kw">import com.hypixel.hytale.codec.validation.ValidatableCodec;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Set;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonValue;

class="kw">public class ContainedAssetCodec<K, T class="kw">extends JsonAssetWithMap<K, M>, M class="kw">extends AssetMap<K, T>> class="kw">implements Codec<K>, ValidatableCodec<K> {
   class="kw">private class="kw">static class="kw">final boolean DISABLE_DIRECT_LOADING = true;
   class="kw">private class="kw">final Class<T> assetClass;
   class="kw">private class="kw">final AssetCodec<K, T> codec;
   @Nonnull
   class="kw">private class="kw">final ContainedAssetCodec.Mode mode;
   class="kw">private class="kw">final Function<AssetExtraInfo<K>, K> keyGenerator;

   class="kw">public ContainedAssetCodec(Class<T> var1, AssetCodec<K, T> var2) {
      this(var1, var2, ContainedAssetCodec.Mode.GENERATE_ID);
   }

   class="kw">public ContainedAssetCodec(Class<T> var1, AssetCodec<K, T> var2, @Nonnull ContainedAssetCodec.Mode var3) {
      this(var1, var2, var3, var1x -> AssetRegistry.<K, T, M>getAssetStore(var1).transformKey(var1x.generateKey()));
   }

   class="kw">public ContainedAssetCodec(Class<T> var1, AssetCodec<K, T> var2, @Nonnull ContainedAssetCodec.Mode var3, Function<AssetExtraInfo<K>, K> var4) {
      if (var3 == ContainedAssetCodec.Mode.NONE) {
         throw new UnsupportedOperationException("Contained asset mode can't be NONE!");
      }

      this.assetClass = var1;
      this.codec = var2;
      this.mode = var3;
      this.keyGenerator = var4;
   }

   class="kw">public Class<T> getAssetClass() {
      class="kw">return this.assetClass;
   }

   @Nullable
   @Override
   class="kw">public K decode(@Nonnull BsonValue var1, ExtraInfo var2) {
      if (!(var2 class="kw">instanceof AssetExtraInfo var3)) {
         throw new UnsupportedOperationException("Unable to decode asset from codec used outside of an AssetStore");
      } else {
         if (var1.isString()) {
            class="kw">return this.codec.getKeyCodec().getChildCodec().decode(var1, var2);
         }

         KeyedCodec var4 = this.codec.getParentCodec();
         Object var5 = var4 != null ? var4.getOrNull(var1.asDocument(), var2) : null;
         AssetStore var6 = AssetRegistry.getAssetStore(this.assetClass);
         Object var7;
         class="kw">switch (this.mode) {
            case GENERATE_ID: {
               var7 = this.keyGenerator.apply(var3);
               boolean var14 = false;
               break;
            }
            case INHERIT_ID: {
               var7 = var6.transformKey(var3.getKey());
               boolean var13 = true;
               break;
            }
            case INHERIT_ID_AND_PARENT: {
               var7 = var6.transformKey(var3.getKey());
               if (var5 == null) {
                  Object var9 = var3.getData().getParentKey();
                  if (var9 != null) {
                     var5 = var6.transformKey(var9);
                  }
               }

               boolean var12 = true;
               break;
            }
            case INJECT_PARENT: {
               var7 = this.keyGenerator.apply(var3);
               if (var5 == null && !var3.getKey().equals(var7)) {
                  var5 = var3.getKey();
               }

               boolean var8 = true;
               break;
            }
            class="kw">default:
               throw new UnsupportedOperationException("Contained asset mode can't be NONE!");
         }

         JsonAssetWithMap var15 = var5 != null ? var6.getAssetMap().getAsset(var5) : null;
         if (var5 != null && var15 != null) {
         }

         char[] var10 = var1.asDocument().toJson().toCharArray();
         Path var11 = var3.getAssetPath();
         var3.getData().addContainedAsset(this.assetClass, new RawAsset<>(var11, var7, var5, 0, var10, var3.getData(), this.mode));
         class="kw">return var7;
      }
   }

   @Override
   class="kw">public BsonValue encode(@Nonnull K var1, ExtraInfo var2) {
      if (var1.toString().startsWith("*")) {
         JsonAssetWithMap var3 = (T)AssetRegistry.<K, T, M>getAssetStore(this.assetClass).getAssetMap().getAsset(var1);
         if (var3 != null) {
            class="kw">return this.codec.encode(var3, var2);
         }
      }

      class="kw">return this.codec.getKeyCodec().getChildCodec().encode(var1, var2);
   }

   @Nullable
   @Override
   class="kw">public K decodeJson(@Nonnull RawJsonReader var1, ExtraInfo var2) class="kw">throws IOException {
      if (!(var2 class="kw">instanceof AssetExtraInfo var3)) {
         throw new UnsupportedOperationException("Unable to decode asset from codec used outside of an AssetStore");
      } else {
         int var4 = var1.getLine() - 1;
         if (var1.peekFor('"')) {
            class="kw">return this.codec.getKeyCodec().getChildCodec().decodeJson(var1, var2);
         }

         var1.mark();
         Object var5 = null;
         boolean var6 = false;
         KeyedCodec var7 = this.codec.getParentCodec();
         if (var7 != null && RawJsonReader.seekToKey(var1, var7.getKey())) {
            var5 = var7.getChildCodec().decodeJson(var1, var2);
            var6 = true;
         }

         AssetStore var8 = AssetRegistry.getAssetStore(this.assetClass);
         Object var9;
         class="kw">switch (this.mode) {
            case GENERATE_ID: {
               var9 = this.keyGenerator.apply(var3);
               boolean var16 = false;
               break;
            }
            case INHERIT_ID: {
               var9 = var8.transformKey(var3.getKey());
               boolean var15 = true;
               break;
            }
            case INHERIT_ID_AND_PARENT: {
               var9 = var8.transformKey(var3.getKey());
               if (var5 == null) {
                  Object var11 = var3.getData().getParentKey();
                  if (var11 != null) {
                     var5 = var8.transformKey(var11);
                  }
               }

               boolean var14 = true;
               break;
            }
            case INJECT_PARENT: {
               var9 = this.keyGenerator.apply(var3);
               if (var5 == null && !var3.getKey().equals(var9)) {
                  var5 = var3.getKey();
               }

               boolean var10 = true;
               break;
            }
            class="kw">default:
               throw new UnsupportedOperationException("Contained asset mode can't be NONE!");
         }

         JsonAssetWithMap var17 = var5 != null ? var8.getAssetMap().getAsset(var5) : null;
         if (var5 != null && var17 != null) {
         }

         if (var6) {
            var1.skipObjectContinued();
         }

         char[] var12 = var1.cloneMark();
         var1.unmark();
         Path var13 = var3.getAssetPath();
         var3.getData().addContainedAsset(this.assetClass, new RawAsset<>(var13, var9, var5, var4, var12, var3.getData(), this.mode));
         class="kw">return var9;
      }
   }

   @Nonnull
   @Override
   class="kw">public Schema toSchema(@Nonnull SchemaContext var1) {
      Schema var2 = var1.refDefinition(this.codec.getKeyCodec().getChildCodec());
      var2.setTitle("Reference to " + this.assetClass.getSimpleName());
      Schema var3 = var1.refDefinition(this.codec);
      Schema var4 = Schema.anyOf(var2, var3);
      var4.setHytaleAssetRef(this.assetClass.getSimpleName());
      class="kw">return var4;
   }

   @Override
   class="kw">public void validate(K var1, @Nonnull ExtraInfo var2) {
      AssetRegistry.<K, T, M>getAssetStore(this.assetClass).validate(var1, var2.getValidationResults(), var2);
   }

   @Override
   class="kw">public void validateDefaults(ExtraInfo var1, @Nonnull Set<Codec<?>> var2) {
      if (var2.add(this)) {
         ;
      }
   }

   class="kw">public enum Mode {
      NONE,
      GENERATE_ID,
      INHERIT_ID,
      INHERIT_ID_AND_PARENT,
      INJECT_PARENT;

      Mode() {
      }
   }
}