Environment class

Пакет: com.hypixel.hytale.server.core.asset.type.environment.config

Файл: com/hypixel/hytale/server/core/asset/type/environment/config/Environment.java

implements: JsonAssetWithMap<String, IndexedLookupTableAssetMap<String, Environment>>, NetworkSerializable<WorldEnvironment>

Поля (16)

МодификаторыТипИмя
ASSET_STORE
CODEC
DEFAULT_WEATHER_FORECAST
final int HOURS_PER_DAY
UNKNOWN
VALIDATOR_CACHE
WeightedMap.Builder var0
WorldEnvironment var1
WorldEnvironment var2
Environment var2
Map var3
int var3
var3
int var4
int var6
IntSet var7

Методы (23)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("hour must be in range of 0 to " + MAX_KEY_HOUR)
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Unknown key! " + var0)
for for(int var1 = 0; var1 < HOURS_PER_DAY; var1++)
static IndexedLookupTableAssetMap<String, Environment> getAssetMapIndexedLookupTableAssetMap<String, Environment> getAssetMap()
static AssetStore<String, Environment, IndexedLookupTableAssetMap<String, Environment>> getAssetStoreAssetStore<String, Environment, IndexedLookupTableAssetMap<String, Environment>> getAssetStore()
public Map<String, FluidParticle> getFluidParticlesMap<String, FluidParticle> getFluidParticles()
public String getIdString getId()
static int getIndexOrUnknownint getIndexOrUnknown(String var0, String var1, Object... var2)
public double getSpawnDensitydouble getSpawnDensity()
public Color getWaterTintColor getWaterTint()
public IWeightedMap<WeatherForecast> getWeatherForecastIWeightedMap<WeatherForecast> getWeatherForecast(int var1)
public Int2ObjectMap<IWeightedMap<WeatherForecast>> getWeatherForecastsInt2ObjectMap<IWeightedMap<WeatherForecast>> getWeatherForecasts()
public String getWeatherSeedKeyString getWeatherSeedKey()
if if(ASSET_STORE == null)
if if(var1 < 0 || var1 > MAX_KEY_HOUR)
if if(var1 != null)
if if(this.waterTint != null)
if if(var6 != Integer.MIN_VALUE)
if if(this.data != null)
if if(this == var1)
if if(var3 == Integer.MIN_VALUE)
if if(var4 == Integer.MIN_VALUE)
public boolean isBlockModificationAllowedboolean isBlockModificationAllowed()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.asset.type.environment.config;

class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
class="kw">import com.hypixel.hytale.assetstore.AssetKeyValidator;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.AssetStore;
class="kw">import com.hypixel.hytale.assetstore.codec.AssetBuilderCodec;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.codecs.map.Int2ObjectMapCodec;
class="kw">import com.hypixel.hytale.codec.codecs.map.MapCodec;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIDefaultCollapsedState;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIEditor;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIEditorFeatures;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIEditorSectionStart;
class="kw">import com.hypixel.hytale.codec.validation.ValidatorCache;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.codec.validation.validator.MapKeyValidator;
class="kw">import com.hypixel.hytale.common.map.IWeightedMap;
class="kw">import com.hypixel.hytale.common.map.WeightedMap;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.Color;
class="kw">import com.hypixel.hytale.protocol.WorldEnvironment;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluidfx.config.FluidFX;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluidfx.config.FluidParticle;
class="kw">import com.hypixel.hytale.server.core.asset.type.weather.config.Weather;
class="kw">import com.hypixel.hytale.server.core.codec.ProtocolCodecs;
class="kw">import com.hypixel.hytale.server.core.codec.WeightedMapCodec;
class="kw">import com.hypixel.hytale.server.core.io.NetworkSerializable;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import java.lang.ref.SoftReference;
class="kw">import java.time.temporal.ChronoUnit;
class="kw">import java.util.Collections;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class Environment class="kw">implements JsonAssetWithMap<String, IndexedLookupTableAssetMap<String, Environment>>, NetworkSerializable<WorldEnvironment> {
   class="kw">public class="kw">static class="kw">final int HOURS_PER_DAY = (int)ChronoUnit.DAYS.getDuration().toHours();
   class="kw">public class="kw">static class="kw">final int MAX_KEY_HOUR = HOURS_PER_DAY - 1;
   class="kw">public class="kw">static class="kw">final Integer[] HOURS = new Integer[HOURS_PER_DAY];
   @Nonnull
   class="kw">private class="kw">static class="kw">final IWeightedMap<WeatherForecast> DEFAULT_WEATHER_FORECAST;
   class="kw">public class="kw">static class="kw">final AssetBuilderCodec<String, Environment> CODEC;
   class="kw">public class="kw">static class="kw">final ValidatorCache<String> VALIDATOR_CACHE;
   class="kw">private class="kw">static AssetStore<String, Environment, IndexedLookupTableAssetMap<String, Environment>> ASSET_STORE;
   class="kw">public class="kw">static class="kw">final int UNKNOWN_ID = 0;
   class="kw">public class="kw">static class="kw">final Environment UNKNOWN;
   class="kw">protected AssetExtraInfo.Data data;
   class="kw">protected String id;
   class="kw">protected Color waterTint;
   class="kw">protected Map<String, FluidParticle> fluidParticles = Collections.emptyMap();
   class="kw">protected Int2ObjectMap<IWeightedMap<WeatherForecast>> weatherForecasts;
   class="kw">protected double spawnDensity;
   class="kw">protected boolean blockModificationAllowed = true;
   class="kw">private String weatherSeedKey;
   class="kw">private SoftReference<WorldEnvironment> cachedPacket;

   class="kw">public class="kw">static AssetStore<String, Environment, IndexedLookupTableAssetMap<String, Environment>> getAssetStore() {
      if (ASSET_STORE == null) {
         ASSET_STORE = AssetRegistry.getAssetStore(Environment.class);
      }

      class="kw">return ASSET_STORE;
   }

   class="kw">public class="kw">static IndexedLookupTableAssetMap<String, Environment> getAssetMap() {
      class="kw">return (IndexedLookupTableAssetMap<String, Environment>)getAssetStore().getAssetMap();
   }

   class="kw">public Environment(String var1, Color var2, Map<String, FluidParticle> var3, Int2ObjectMap<IWeightedMap<WeatherForecast>> var4, double var5) {
      this.id = var1;
      this.weatherSeedKey = var1;
      this.waterTint = var2;
      this.fluidParticles = var3;
      this.weatherForecasts = var4;
      this.spawnDensity = var5;
   }

   class="kw">protected Environment() {
   }

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

   class="kw">public Color getWaterTint() {
      class="kw">return this.waterTint;
   }

   class="kw">public Map<String, FluidParticle> getFluidParticles() {
      class="kw">return this.fluidParticles;
   }

   class="kw">public Int2ObjectMap<IWeightedMap<WeatherForecast>> getWeatherForecasts() {
      class="kw">return this.weatherForecasts;
   }

   class="kw">public IWeightedMap<WeatherForecast> getWeatherForecast(int var1) {
      if (var1 < 0 || var1 > MAX_KEY_HOUR) {
         throw new IllegalArgumentException("hour must be in range of 0 to " + MAX_KEY_HOUR);
      } else {
         class="kw">return this.weatherForecasts == null ? DEFAULT_WEATHER_FORECAST : (IWeightedMap)this.weatherForecasts.getOrDefault(var1, DEFAULT_WEATHER_FORECAST);
      }
   }

   class="kw">public String getWeatherSeedKey() {
      class="kw">return this.weatherSeedKey != null ? this.weatherSeedKey : this.id;
   }

   class="kw">public double getSpawnDensity() {
      class="kw">return this.spawnDensity;
   }

   class="kw">public boolean isBlockModificationAllowed() {
      class="kw">return this.blockModificationAllowed;
   }

   @Nonnull
   class="kw">public WorldEnvironment toPacket() {
      WorldEnvironment var1 = this.cachedPacket == null ? null : this.cachedPacket.get();
      if (var1 != null) {
         class="kw">return var1;
      }

      WorldEnvironment var2 = new WorldEnvironment();
      var2.id = this.id;
      if (this.waterTint != null) {
         var2.waterTint = this.waterTint;
      }

      if (!this.fluidParticles.isEmpty()) {
         Map var3 = new Int2ObjectOpenHashMap(this.fluidParticles.size());

         for (Entry var5 : this.fluidParticles.entrySet()) {
            int var6 = FluidFX.getAssetMap().getIndex(var5.getKey());
            if (var6 != Integer.MIN_VALUE) {
               var3.put(var6, var5.getValue().toPacket());
            }
         }

         var2.fluidParticles = var3;
      }

      if (this.data != null) {
         IntSet var7 = this.data.getExpandedTagIndexes();
         var2.tagIndexes = var7.toIntArray();
      }

      this.cachedPacket = new SoftReference<>(var2);
      class="kw">return var2;
   }

   @Override
   class="kw">public boolean equals(@Nullable Object var1) {
      if (this == var1) {
         class="kw">return true;
      } else if (var1 != null && this.getClass() == var1.getClass()) {
         Environment var2 = (Environment)var1;
         class="kw">return this.id.equals(var2.id);
      } else {
         class="kw">return false;
      }
   }

   @Override
   class="kw">public int hashCode() {
      class="kw">return this.id.hashCode();
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "Environment{id='"
         + this.id
         + "', waterTint="
         + this.waterTint
         + ", fluidParticles="
         + this.fluidParticles
         + ", weatherForecasts="
         + this.weatherForecasts
         + ", spawnDensity="
         + this.spawnDensity
         + ", packet="
         + this.cachedPacket
         + "}";
   }

   @Nonnull
   class="kw">public class="kw">static Environment getUnknownFor(class="kw">final String var0) {
      class="kw">return new Environment() {
         {
            this.id = var0;
            this.waterTint = new Color((byte)10, (byte)51, (byte)85);
            this.spawnDensity = 0.175;
         }
      };
   }

   class="kw">public class="kw">static int getIndexOrUnknown(String var0, String var1, Object... var2) {
      int var3 = getAssetMap().getIndex(var0);
      if (var3 == Integer.MIN_VALUE) {
         HytaleLogger.getLogger().at(Level.WARNING).logVarargs(var1, var2);
         getAssetStore().loadAssets("Hytale:Hytale", Collections.singletonList(getUnknownFor(var0)));
         int var4 = getAssetMap().getIndex(var0);
         if (var4 == Integer.MIN_VALUE) {
            throw new IllegalArgumentException("Unknown key! " + var0);
         }

         var3 = var4;
      }

      class="kw">return var3;
   }

   class="kw">static {
      WeightedMap.Builder var0 = WeightedMap.builder(WeatherForecast.EMPTY_ARRAY);
      var0.put(new WeatherForecast(Weather.UNKNOWN.getId(), 1.0), 1.0);
      DEFAULT_WEATHER_FORECAST = var0.build();

      for (int var1 = 0; var1 < HOURS_PER_DAY; var1++) {
         HOURS[var1] = var1;
      }

      CODEC = AssetBuilderCodec.<String, Environment>builder(
            Environment.class,
            Environment::new,
            Codec.STRING,
            (var0x, var1x) -> var0x.id = var1x,
            var0x -> var0x.id,
            (var0x, var1x) -> var0x.data = var1x,
            var0x -> var0x.data
         )
         .metadata(new UIEditorFeatures(UIEditorFeatures.EditorFeature.WEATHER_DAYTIME_BAR))
         .appendInherited(
            new KeyedCodec<>("WaterTint", ProtocolCodecs.COLOR),
            (var0x, var1x) -> var0x.waterTint = var1x,
            var0x -> var0x.waterTint,
            (var0x, var1x) -> var0x.waterTint = var1x.waterTint
         )
         .add()
         .<Map>appendInherited(
            new KeyedCodec<>("FluidParticles", new MapCodec<>(FluidParticle.CODEC, HashMap::new)),
            (var0x, var1x) -> var0x.fluidParticles = var1x,
            var0x -> var0x.fluidParticles,
            (var0x, var1x) -> var0x.fluidParticles = var1x.fluidParticles
         )
         .addValidator(FluidFX.VALIDATOR_CACHE.getMapKeyValidator())
         .add()
         .appendInherited(
            new KeyedCodec<>("SpawnDensity", Codec.DOUBLE),
            (var0x, var1x) -> var0x.spawnDensity = var1x,
            var0x -> var0x.spawnDensity,
            (var0x, var1x) -> var0x.spawnDensity = var1x.spawnDensity
         )
         .add()
         .appendInherited(
            new KeyedCodec<>("BlockModificationAllowed", Codec.BOOLEAN),
            (var0x, var1x) -> var0x.blockModificationAllowed = var1x,
            var0x -> var0x.blockModificationAllowed,
            (var0x, var1x) -> var0x.blockModificationAllowed = var1x.blockModificationAllowed
         )
         .add()
         .<Int2ObjectMap<IWeightedMap<WeatherForecast>>>appendInherited(
            new KeyedCodec<>(
               "WeatherForecasts",
               new Int2ObjectMapCodec<>(new WeightedMapCodec<>(WeatherForecast.CODEC, WeatherForecast.EMPTY_ARRAY), Int2ObjectOpenHashMap::new),
               true
            ),
            (var0x, var1x) -> var0x.weatherForecasts = var1x,
            var0x -> var0x.weatherForecasts,
            (var0x, var1x) -> var0x.weatherForecasts = var1x.weatherForecasts
         )
         .addValidator(Validators.nonNull())
         .addValidator(new MapKeyValidator<>(Validators.range(0, MAX_KEY_HOUR)))
         .addValidator(Validators.requiredMapKeysValidator(HOURS))
         .metadata(new UIEditor(UIEditor.WEIGHTED_TIMELINE))
         .metadata(new UIEditorSectionStart("Weather"))
         .metadata(UIDefaultCollapsedState.UNCOLLAPSED)
         .add()
         .appendInherited(
            new KeyedCodec<>("WeatherForecastSeed", Codec.STRING, true),
            (var0x, var1x) -> var0x.weatherSeedKey = var1x,
            var0x -> var0x.weatherSeedKey,
            (var0x, var1x) -> var0x.weatherSeedKey = var1x.getWeatherSeedKey()
         )
         .add()
         .build();
      VALIDATOR_CACHE = new ValidatorCache<>(new AssetKeyValidator<>(Environment::getAssetStore));
      UNKNOWN = getUnknownFor("Unknown");
   }
}