package com.hypixel.hytale.server.worldgen.loader.climate; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.hypixel.hytale.procedurallib.json.JsonLoader; import com.hypixel.hytale.procedurallib.json.SeedResource; import com.hypixel.hytale.procedurallib.json.SeedString; import com.hypixel.hytale.server.worldgen.climate.ClimateGraph; import com.hypixel.hytale.server.worldgen.climate.ClimateType; import java.nio.file.Path; import javax.annotation.Nonnull; public class ClimateGraphJsonLoader extends JsonLoader { public ClimateGraphJsonLoader(SeedString seed, Path dataFolder, JsonElement json) { super(seed, dataFolder, json); } @Nonnull public ClimateGraph load() { ClimateType[] climates = this.loadClimates(); ClimateGraph.FadeMode fadeMode = this.loadFadeMode(); double fadeRadius = this.loadFadeRadius(); double fadeDistance = this.loadFadeDistance(); return new ClimateGraph(512, climates, fadeMode, fadeRadius, fadeDistance); } protected ClimateGraph.FadeMode loadFadeMode() { String fadeMode = this.mustGetString("FadeMode", ClimateGraphJsonLoader.Constants.DEFAULT_FADE_MODE); return ClimateGraph.FadeMode.valueOf(fadeMode); } protected double loadFadeRadius() { return this.mustGetNumber("FadeRadius", ClimateGraphJsonLoader.Constants.DEFAULT_FADE_RADIUS).doubleValue(); } protected double loadFadeDistance() { return this.mustGetNumber("FadeDistance", ClimateGraphJsonLoader.Constants.DEFAULT_FADE_DISTANCE).doubleValue(); } @Nonnull protected ClimateType[] loadClimates() { JsonArray climatesArr = this.mustGetArray("Climates", ClimateGraphJsonLoader.Constants.DEFAULT_CLIMATES); ClimateType[] climates = new ClimateType[climatesArr.size()]; for (int i = 0; i < climatesArr.size(); i++) { JsonElement climateJson = climatesArr.get(i); climates[i] = new ClimateTypeJsonLoader<>(this.seed, this.dataFolder, climateJson, null).load(); } return climates; } public interface Constants { String KEY_CLIMATE = "Climate"; String KEY_FADE_MODE = "FadeMode"; String KEY_FADE_RADIUS = "FadeRadius"; String KEY_FADE_DISTANCE = "FadeDistance"; String KEY_CLIMATES = "Climates"; JsonArray DEFAULT_CLIMATES = new JsonArray(); Double DEFAULT_FADE_RADIUS = 50.0; Double DEFAULT_FADE_DISTANCE = 100.0; String DEFAULT_FADE_MODE = ClimateGraph.FadeMode.CHILDREN.name(); } }