Constants interface
Пакет: com.hypixel.hytale.server.worldgen.loader.biome
Файл: com/hypixel/hytale/server/worldgen/loader/biome/BiomeMaskJsonLoader.java
Поля (6)
| Модификаторы | Тип | Имя |
|---|---|---|
|
String |
BIOME_TYPE_ANY_DISPLAY_NAME |
|
String |
ERROR_PARSE_RULE |
|
int |
NULL_BIOME_ID |
|
char |
TYPE_MARKER |
|
String |
WILDCARD_BIOME_NAME |
|
char |
ZONE_MARKER |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.worldgen.loader.biome;
class="kw">import com.google.gson.JsonArray;
class="kw">import com.google.gson.JsonElement;
class="kw">import com.hypixel.hytale.procedurallib.condition.ConstantIntCondition;
class="kw">import com.hypixel.hytale.procedurallib.condition.IIntCondition;
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.worldgen.SeedStringResource;
class="kw">import com.hypixel.hytale.server.worldgen.loader.context.BiomeFileContext;
class="kw">import com.hypixel.hytale.server.worldgen.loader.context.FileContext;
class="kw">import com.hypixel.hytale.server.worldgen.loader.context.ZoneFileContext;
class="kw">import com.hypixel.hytale.server.worldgen.loader.util.FileMaskCache;
class="kw">import com.hypixel.hytale.server.worldgen.util.condition.IntConditionBuilder;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class BiomeMaskJsonLoader class="kw">extends JsonLoader<SeedStringResource, IIntCondition> {
class="kw">private class="kw">final ZoneFileContext zoneContext;
@Nullable
class="kw">private String fileName = null;
class="kw">public BiomeMaskJsonLoader(@Nonnull SeedString<SeedStringResource> var1, Path var2, JsonElement var3, String var4, ZoneFileContext var5) {
super(var1.append(".BiomeMask-" + var4), var2, var3);
this.zoneContext = var5;
}
@Nullable
class="kw">public IIntCondition load() {
FileMaskCache var1 = this.seed.get().getBiomeMaskRegistry();
if (this.fileName != null) {
IIntCondition var2 = var1.getIfPresentFileMask(this.fileName);
if (var2 != null) {
class="kw">return var2;
}
}
IIntCondition var3 = this.loadMask();
if (this.fileName != null) {
var1.putFileMask(this.fileName, var3);
}
class="kw">return var3;
}
class="kw">protected IIntCondition loadMask() {
IIntCondition var1 = ConstantIntCondition.DEFAULT_TRUE;
if (this.json.isJsonArray()) {
IntConditionBuilder var2 = new IntConditionBuilder(IntOpenHashSet::new, -1);
JsonArray var3 = this.json.getAsJsonArray();
for (int var4 = 0; var4 < var3.size(); var4++) {
JsonElement var5 = var3.get(var4);
String var6 = var5.getAsString();
this.parseRule(var6, var2);
}
var1 = var2.buildOrDefault(ConstantIntCondition.DEFAULT_TRUE);
}
class="kw">return var1;
}
class="kw">protected void parseRule(@Nonnull String var1, @Nonnull IntConditionBuilder var2) {
int var3 = var1.indexOf(46);
int var4 = var1.indexOf(35);
ZoneFileContext var5 = parseZone(var1, var3, this.zoneContext);
String var6 = parseBiomeName(var1, var3, var4);
BiomeFileContext.Type var7 = parseBiomeType(var1, var4 + 1);
boolean var9;
if (var7 == null) {
var9 = collectBiomes(var5.getTileBiomes(), var6, var2);
var9 |= collectBiomes(var5.getCustomBiomes(), var6, var2);
} else {
var9 = collectBiomes(var5.getBiomes(var7), var6, var2);
}
if (!var9) {
throw new Error(
String.format("Failed to parse BiomeMask rule '%s'. Unable to find a %s called %s in %s", var1, getDisplayName(var7), var6, var5.getName())
);
}
}
@Override
class="kw">protected JsonElement loadFileConstructor(String var1) {
this.fileName = var1;
class="kw">return this.seed.get().getBiomeMaskRegistry().cachedFile(var1, var1x -> super.loadFileConstructor(var1x));
}
class="kw">private class="kw">static boolean collectBiomes(@Nonnull FileContext.Registry<BiomeFileContext> var0, @Nonnull String var1, @Nonnull IntConditionBuilder var2) {
if (!var1.equals("*")) {
if (var0.contains(var1)) {
BiomeFileContext var5 = var0.get(var1);
var2.add(var5.getId());
class="kw">return true;
} else {
class="kw">return false;
}
} else {
for (Entry var4 : var0) {
var2.add(var4.getValue().getId());
}
class="kw">return true;
}
}
@Nonnull
class="kw">private class="kw">static ZoneFileContext parseZone(@Nonnull String var0, int var1, @Nonnull ZoneFileContext var2) {
if (var1 <= 0) {
class="kw">return var2;
}
String var3 = var0.substring(0, var1);
class="kw">return var2.getParentContext().getZones().get(var3);
}
@Nullable
class="kw">private class="kw">static BiomeFileContext.Type parseBiomeType(@Nonnull String var0, int var1) {
if (var1 <= 0) {
class="kw">return null;
}
String var2 = var0.substring(var1);
class="kw">return BiomeFileContext.Type.valueOf(var2);
}
@Nonnull
class="kw">private class="kw">static String parseBiomeName(@Nonnull String var0, int var1, int var2) {
int var3 = var1 + 1;
int var4 = var2 > var1 ? var2 : var0.length();
class="kw">return var3 == var4 ? "*" : var0.substring(var3, var4);
}
@Nonnull
class="kw">private class="kw">static String getDisplayName(@Nullable BiomeFileContext.Type var0) {
class="kw">return var0 == null ? "Biome" : var0.getDisplayName();
}
class="kw">public class="kw">interface Constants {
char ZONE_MARKER = '.';
char TYPE_MARKER = '#';
int NULL_BIOME_ID = -1;
String WILDCARD_BIOME_NAME = "*";
String BIOME_TYPE_ANY_DISPLAY_NAME = "Biome";
String ERROR_PARSE_RULE = "Failed to parse BiomeMask rule '%s'. Unable to find a %s called %s in %s";
}
}