Constants interface
Пакет: com.hypixel.hytale.server.worldgen.loader.prefab
Файл: com/hypixel/hytale/server/worldgen/loader/prefab/BlockPlacementMaskJsonLoader.java
Поля (6)
| Модификаторы | Тип | Имя |
|---|---|---|
|
String |
ERROR_BLOCK_INVALID |
|
String |
ERROR_FAIL_SPECIFIC |
|
String |
KEY_BLOCK |
|
String |
KEY_DEFAULT |
|
String |
KEY_RULE |
|
String |
KEY_SPECIFIC |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.worldgen.loader.prefab;
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.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.procedurallib.json.JsonLoader;
class="kw">import com.hypixel.hytale.procedurallib.json.SeedString;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.worldgen.SeedStringResource;
class="kw">import com.hypixel.hytale.server.worldgen.loader.util.ResolvedBlockArrayJsonLoader;
class="kw">import com.hypixel.hytale.server.worldgen.loader.util.ResolvedVariantsBlockArrayLoader;
class="kw">import com.hypixel.hytale.server.worldgen.util.BlockFluidEntry;
class="kw">import com.hypixel.hytale.server.worldgen.util.ResolvedBlockArray;
class="kw">import com.hypixel.hytale.server.worldgen.util.condition.BlockMaskCondition;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectMaps;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.nio.file.Path;
class="kw">import javax.annotation.Nonnull;
class="kw">public class BlockPlacementMaskJsonLoader class="kw">extends JsonLoader<SeedStringResource, BlockMaskCondition> {
class="kw">private String fileName;
class="kw">public BlockPlacementMaskJsonLoader(@Nonnull SeedString<SeedStringResource> var1, Path var2, JsonElement var3) {
super(var1.append(".BlockMaskCondition"), var2, var3);
}
class="kw">public BlockMaskCondition load() {
BlockPlacementMaskRegistry var1 = this.seed.get().getBlockMaskRegistry();
if (this.fileName != null) {
BlockMaskCondition var2 = var1.getIfPresentFileMask(this.fileName);
if (var2 != null) {
class="kw">return var2;
}
}
Long2ObjectMap var3 = Long2ObjectMaps.emptyMap();
BlockMaskCondition.Mask var20;
if (this.json != null && !this.json.isJsonNull()) {
if (this.has("Default")) {
var20 = new BlockMaskCondition.Mask(this.loadEntries(this.get("Default").getAsJsonArray()));
} else {
var20 = BlockMaskCondition.DEFAULT_MASK;
}
if (this.has("Specific")) {
BlockTypeAssetMap var4 = BlockType.getAssetMap();
var3 = new Long2ObjectOpenHashMap();
JsonArray var5 = this.get("Specific").getAsJsonArray();
for (int var6 = 0; var6 < var5.size(); var6++) {
try {
JsonObject var7 = var5.get(var6).getAsJsonObject();
JsonElement var8 = var7.get("Block");
ResolvedBlockArray var9 = new ResolvedBlockArrayJsonLoader(this.seed, this.dataFolder, var8).load();
for (BlockFluidEntry var13 : var9.getEntries()) {
String var14 = var4.getAsset(var13.blockId()).getId();
ObjectIterator var15 = var4.getSubKeys(var14).iterator();
while (var15.hasNext()) {
String var16 = (String)var15.next();
int var17 = var4.getIndex(var16);
if (var17 == Integer.MIN_VALUE) {
throw new IllegalArgumentException("Unknown key! " + var16);
}
JsonArray var18 = var7.getAsJsonArray("Rule");
var3.put(MathUtil.packLong(var17, var13.fluidId()), new BlockMaskCondition.Mask(this.loadEntries(var18)));
}
}
} catch (Throwable var19) {
throw new Error(String.format("Error while reading specific block mask #%s!", var6), var19);
}
}
}
} else {
var20 = BlockMaskCondition.DEFAULT_MASK;
}
BlockMaskCondition var21 = var1.retainOrAllocateMask(var20, var3);
if (this.fileName != null) {
var1.putFileMask(this.fileName, var21);
}
class="kw">return var21;
}
@Nonnull
class="kw">protected BlockMaskCondition.MaskEntry[] loadEntries(@Nonnull JsonArray var1) {
BlockMaskCondition.MaskEntry[] var2 = new BlockMaskCondition.MaskEntry[var1.size()];
int var3 = 0;
int var4 = var2.length;
for (JsonElement var6 : var1) {
if (var6.isJsonObject()) {
JsonObject var12 = var6.getAsJsonObject();
boolean var13 = true;
if (var12.has("Replace")) {
var13 = var12.get("Replace").getAsBoolean();
}
ResolvedBlockArray var14 = ResolvedVariantsBlockArrayLoader.loadSingleBlock(var12);
var2[var3++] = this.seed.get().getBlockMaskRegistry().retainOrAllocateEntry(var14, var13);
} else {
String var7 = var6.getAsString();
boolean var8 = true;
int var9 = 0;
if (var7.charAt(0) == '!') {
var8 = false;
var9 = 1;
}
if (var7.length() == var9 + 1 && var7.charAt(var9) == '*') {
if (var4 < var2.length) {
System.arraycopy(var2, var4, var2, var4 - 1, var2.length - var4);
}
var2[var2.length - 1] = var8 ? BlockMaskCondition.MaskEntry.WILDCARD_TRUE : BlockMaskCondition.MaskEntry.WILDCARD_FALSE;
var4--;
} else {
var7 = var7.substring(var9);
ResolvedBlockArray var10 = ResolvedVariantsBlockArrayLoader.loadSingleBlock(var7);
var2[var3++] = this.seed.get().getBlockMaskRegistry().retainOrAllocateEntry(var10, var8);
}
}
}
class="kw">return var2;
}
@Override
class="kw">protected JsonElement loadFileConstructor(String var1) {
this.fileName = var1;
class="kw">return this.seed.get().getBlockMaskRegistry().cachedFile(var1, var1x -> super.loadFileConstructor(var1x));
}
class="kw">public class="kw">interface Constants {
String KEY_DEFAULT = "Default";
String KEY_SPECIFIC = "Specific";
String KEY_BLOCK = "Block";
String KEY_RULE = "Rule";
String ERROR_FAIL_SPECIFIC = "Error while reading specific block mask #%s!";
String ERROR_BLOCK_INVALID = "Failed to resolve block \"%s\"";
}
}