PrefabPropAsset class

Пакет: com.hypixel.hytale.builtin.hytalegenerator.assets.props.prefabprop

Файл: com/hypixel/hytale/builtin/hytalegenerator/assets/props/prefabprop/PrefabPropAsset.java

extends: PropAsset

Поля (29)

МодификаторыТипИмя
public static final AssetBuilderCodec<String, PrefabPropAsset.WeightedPathAsset> CODEC
private AssetExtraInfo.Data data
private String id
private String path
BlockMask var10
String var10
var10
var10
Scanner var11
Directionality var12
MoldingDirection var13
PrefabMoldingConfiguration var14
var14
var14
WeightedMap var2
List var2
Set var3
List var4
Path var5
Path var6
List var7
Path var7
var7
var7
Scanner var8
Path var8
Pattern var9
List var9
private double weight

Методы (12)

МодификаторыВозвратСигнатура
private record LoadedPrefabEntryrecord LoadedPrefabEntry(String path, IPrefabBuffer prefab)
abstract return new PrefabPropreturn new PrefabProp(var2, var11, var12, var1.materialCache, var10, var14, this::loadPrefabBuffersFrom, var1.parentSeed, this.loadEntities)
public WeightedPathAssetpublic WeightedPathAsset()
for for(PrefabPropAsset.WeightedPathAsset var6 : this.weightedPrefabPathAssets)
abstract for for(int var15 = 0; var15 < var9.size()
public String getIdpublic String getId()
if if(this.scannerAsset != null && this.directionalityAsset != null)
if if(var13 != MoldingDirection.DOWN && var13 != MoldingDirection.UP)
if if(this.legacyPath)
if if(var8 != null)
if if(this.directionalityAsset != null)
if if(this.scannerAsset != null)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.assets.props.prefabprop;

class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.assetstore.codec.AssetBuilderCodec;
class="kw">import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.BlockMask;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.LoggerUtil;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.WeightedMap;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.blockmask.BlockMaskAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.patterns.ConstantPatternAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.patterns.PatternAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.props.PropAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.props.prefabprop.directionality.DirectionalityAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.scanners.DirectScannerAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.assets.scanners.ScannerAsset;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.ConstantPattern;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.Pattern;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.EmptyProp;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.Prop;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.deprecated.directionality.Directionality;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.deprecated.prefab.MoldingDirection;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.deprecated.prefab.PrefabMoldingConfiguration;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.deprecated.prefab.PrefabProp;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.scanners.EmptyScanner;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.scanners.Scanner;
class="kw">import com.hypixel.hytale.codec.Codec;
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.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.common.util.ExceptionUtil;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.server.core.asset.AssetModule;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.impl.IPrefabBuffer;
class="kw">import java.nio.file.Path;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Comparator;
class="kw">import java.util.HashSet;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class PrefabPropAsset class="kw">extends PropAsset {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<PrefabPropAsset> CODEC = BuilderCodec.builder(PrefabPropAsset.class, PrefabPropAsset::new, PropAsset.ABSTRACT_CODEC)
      .append(
         new KeyedCodec<>("WeightedPrefabPaths", new ArrayCodec<>(PrefabPropAsset.WeightedPathAsset.CODEC, PrefabPropAsset.WeightedPathAsset[]::new), true),
         (var0, var1) -> var0.weightedPrefabPathAssets = var1,
         var0 -> var0.weightedPrefabPathAssets
      )
      .add()
      .append(new KeyedCodec<>("LegacyPath", Codec.BOOLEAN, false), (var0, var1) -> var0.legacyPath = var1, var0 -> var0.legacyPath)
      .add()
      .append(
         new KeyedCodec<>("Directionality", DirectionalityAsset.CODEC, true), (var0, var1) -> var0.directionalityAsset = var1, var0 -> var0.directionalityAsset
      )
      .add()
      .append(new KeyedCodec<>("Scanner", ScannerAsset.CODEC, true), (var0, var1) -> var0.scannerAsset = var1, var0 -> var0.scannerAsset)
      .add()
      .append(new KeyedCodec<>("BlockMask", BlockMaskAsset.CODEC, false), (var0, var1) -> var0.blockMaskAsset = var1, var0 -> var0.blockMaskAsset)
      .add()
      .append(
         new KeyedCodec<>("MoldingDirection", MoldingDirection.CODEC, false),
         (var0, var1) -> var0.moldingDirectionName = var1,
         var0 -> var0.moldingDirectionName
      )
      .add()
      .append(new KeyedCodec<>("MoldingPattern", PatternAsset.CODEC, false), (var0, var1) -> var0.moldingPatternAsset = var1, var0 -> var0.moldingPatternAsset)
      .add()
      .append(new KeyedCodec<>("MoldingScanner", ScannerAsset.CODEC, false), (var0, var1) -> var0.moldingScannerAsset = var1, var0 -> var0.moldingScannerAsset)
      .add()
      .append(new KeyedCodec<>("MoldingChildren", Codec.BOOLEAN, false), (var0, var1) -> var0.moldChildren = var1, var0 -> var0.moldChildren)
      .add()
      .append(new KeyedCodec<>("LoadEntities", Codec.BOOLEAN, false), (var0, var1) -> var0.loadEntities = var1, var0 -> var0.loadEntities)
      .add()
      .build();
   class="kw">private PrefabPropAsset.WeightedPathAsset[] weightedPrefabPathAssets = new PrefabPropAsset.WeightedPathAsset[0];
   class="kw">private DirectionalityAsset directionalityAsset = null;
   class="kw">private ScannerAsset scannerAsset = null;
   class="kw">private boolean legacyPath = false;
   class="kw">private boolean loadEntities = true;
   class="kw">private BlockMaskAsset blockMaskAsset = new BlockMaskAsset();
   class="kw">private MoldingDirection moldingDirectionName = MoldingDirection.NONE;
   class="kw">private ScannerAsset moldingScannerAsset = new DirectScannerAsset();
   class="kw">private PatternAsset moldingPatternAsset = new ConstantPatternAsset();
   class="kw">private boolean moldChildren = false;

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

   @Nonnull
   @Override
   class="kw">public Prop build(@Nonnull PropAsset.Argument var1) {
      if (!super.skip() && this.weightedPrefabPathAssets.length != 0) {
         WeightedMap var2 = new WeightedMap<>();

         for (PrefabPropAsset.WeightedPathAsset var6 : this.weightedPrefabPathAssets) {
            List var7 = this.loadPrefabBuffersFrom(var6.path);
            if (var7 != null && !var7.isEmpty()) {
               var2.add(var7, var6.weight);
            }
         }

         if (var2.size() == 0) {
            class="kw">return EmptyProp.INSTANCE;
         }

         if (this.scannerAsset != null && this.directionalityAsset != null) {
            BlockMask var10 = this.blockMaskAsset.build(var1.materialCache);
            Scanner var11 = this.scannerAsset.build(ScannerAsset.argumentFrom(var1));
            Directionality var12 = this.directionalityAsset.build(DirectionalityAsset.argumentFrom(var1));
            MoldingDirection var13 = this.moldingDirectionName;
            PrefabMoldingConfiguration var14 = null;
            if (var13 != MoldingDirection.DOWN && var13 != MoldingDirection.UP) {
               var14 = PrefabMoldingConfiguration.none();
            } else {
               Scanner var8 = this.moldingScannerAsset == null ? EmptyScanner.INSTANCE : this.moldingScannerAsset.build(ScannerAsset.argumentFrom(var1));
               Pattern var9 = this.moldingPatternAsset == null
                  ? ConstantPattern.INSTANCE_FALSE
                  : this.moldingPatternAsset.build(PatternAsset.argumentFrom(var1));
               var14 = new PrefabMoldingConfiguration(var8, var9, var13, this.moldChildren);
            }

            class="kw">return new PrefabProp(var2, var11, var12, var1.materialCache, var10, var14, this::loadPrefabBuffersFrom, var1.parentSeed, this.loadEntities);
         } else {
            class="kw">return new com.hypixel.hytale.builtin.hytalegenerator.props.PrefabProp(var2, var1.materialCache, var1.parentSeed, this::loadPrefabBuffersFrom);
         }
      } else {
         class="kw">return EmptyProp.INSTANCE;
      }
   }

   @Nullable
   class="kw">private List<IPrefabBuffer> loadPrefabBuffersFrom(@Nonnull String var1) {
      List var2 = new ArrayList<>();
      Set var3 = new HashSet<>();
      List var4 = AssetModule.get().getAssetPacks();

      for (int var5 = var4.size() - 1; var5 >= 0; var5--) {
         Path var6 = var4.get(var5).getRoot();
         Path var7 = var6.resolve("Server");
         if (this.legacyPath) {
            var7 = var7.resolve("World").resolve("Default").resolve("Prefabs");
         } else {
            var7 = var7.resolve("Prefabs");
         }

         Path var8 = PathUtil.resolvePathWithinDir(var7, var1);
         if (var8 != null) {
            try {
               List var9 = new ArrayList<>();
               PrefabLoader.traverseAllPrefabBuffersUnder(var8, (var3x, var4x) -> {
                  Path var5 = var3x.subpath(var6.getNameCount(), var3x.getNameCount());
                  if (!var3.contains(var5)) {
                     var3.add(var5);
                     var9.add(new PrefabPropAsset.LoadedPrefabEntry(var5.toString(), var4x));
                  }
               });
               var9.sort(Comparator.comparing(var0 -> var0.path.replace('\\', '/'), String.CASE_INSENSITIVE_ORDER));

               for (int var15 = 0; var15 < var9.size(); var15++) {
                  var2.add(var9.get(var15).prefab);
               }
            } catch (Exception var11) {
               String var10 = "Couldn't load prefab with path: " + var1;
               var10 = var10 + "\n";
               var10 = var10 + ExceptionUtil.toStringWithStack(var11);
               LoggerUtil.getLogger().severe(var10);
               class="kw">return null;
            }
         }
      }

      class="kw">return var2;
   }

   @Override
   class="kw">public void cleanUp() {
      if (this.directionalityAsset != null) {
         this.directionalityAsset.cleanUp();
      }

      if (this.scannerAsset != null) {
         this.scannerAsset.cleanUp();
      }

      this.blockMaskAsset.cleanUp();
      this.moldingScannerAsset.cleanUp();
      this.moldingPatternAsset.cleanUp();
   }

   class="kw">private record LoadedPrefabEntry(String path, IPrefabBuffer prefab) {
      class="kw">private LoadedPrefabEntry {
      }
   }

   class="kw">public class="kw">static class WeightedPathAsset class="kw">implements JsonAssetWithMap<String, DefaultAssetMap<String, PrefabPropAsset.WeightedPathAsset>> {
      @Nonnull
      class="kw">public class="kw">static class="kw">final AssetBuilderCodec<String, PrefabPropAsset.WeightedPathAsset> CODEC = AssetBuilderCodec.builder(
            PrefabPropAsset.WeightedPathAsset.class,
            PrefabPropAsset.WeightedPathAsset::new,
            Codec.STRING,
            (var0, var1) -> var0.id = var1,
            var0 -> var0.id,
            (var0, var1) -> var0.data = var1,
            var0 -> var0.data
         )
         .append(new KeyedCodec<>("Weight", Codec.DOUBLE, true), (var0, var1) -> var0.weight = var1, var0 -> var0.weight)
         .addValidator(Validators.greaterThanOrEqual(0.0))
         .add()
         .append(new KeyedCodec<>("Path", Codec.STRING, true), (var0, var1) -> var0.path = var1, var0 -> var0.path)
         .add()
         .build();
      class="kw">private String id;
      class="kw">private AssetExtraInfo.Data data;
      class="kw">private double weight = 1.0;
      class="kw">private String path = "";

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

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