WeightedPathAsset class
Пакет: com.hypixel.hytale.builtin.hytalegenerator.assets.props.prefabprop
Файл: com/hypixel/hytale/builtin/hytalegenerator/assets/props/prefabprop/PrefabPropAsset.java
implements: JsonAssetWithMap<String, DefaultAssetMap<String, PrefabPropAsset.WeightedPathAsset>>
Поля (5)
| Модификаторы | Тип | Имя |
|---|---|---|
|
public static final AssetBuilderCodec<String, PrefabPropAsset.WeightedPathAsset> |
CODEC |
|
private AssetExtraInfo.Data |
data |
|
private String |
id |
|
private String |
path |
|
private double |
weight |
Методы (1)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public String |
getIdpublic String getId() |
Исходный код
Показать/скрыть
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;
}
}
}