MultiMixDensityAsset class

Пакет: com.hypixel.hytale.builtin.hytalegenerator.assets.density

Файл: com/hypixel/hytale/builtin/hytalegenerator/assets/density/MultiMixDensityAsset.java

extends: DensityAsset

Поля (17)

МодификаторыТипИмя
public static final AssetBuilderCodec<String, MultiMixDensityAsset.KeyAsset> CODEC
public static final int NO_DENSITY_INDEX
break
private AssetExtraInfo.Data data
private int densityIndex
private String id
private double value
Density var13
MultiMixDensity.Key var14
MultiMixDensity.Key var15
List var2
MultiMixDensityAsset.KeyAsset var3
ArrayList var3
MultiMixDensityAsset.KeyAsset var5
Density var8
int var9
var9

Методы (10)

МодификаторыВозвратСигнатура
abstract return new ConstantValueDensityreturn new ConstantValueDensity(0.0)
public KeyAssetpublic KeyAsset()
abstract return new MultiMixDensityreturn new MultiMixDensity(var3, var13)
for for(int var2 = 1; var2 < var0.keyAssets.length; var2++)
for for(int var4 = 0; var4 < var2; var4++)
for for(MultiMixDensityAsset.KeyAsset var7 : this.keyAssets)
public String getIdpublic String getId()
if if(var3 != null)
if if(var5 != null && var5.value == var3.value)
if if(var7.densityIndex < 0)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.assets.density;

class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
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.LoggerUtil;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.density.ConstantValueDensity;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.density.Density;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.density.MultiMixDensity;
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 java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;

class="kw">public class MultiMixDensityAsset class="kw">extends DensityAsset {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<MultiMixDensityAsset> CODEC = BuilderCodec.builder(
         MultiMixDensityAsset.class, MultiMixDensityAsset::new, DensityAsset.ABSTRACT_CODEC
      )
      .append(
         new KeyedCodec<>("Keys", new ArrayCodec<>(MultiMixDensityAsset.KeyAsset.CODEC, MultiMixDensityAsset.KeyAsset[]::new), true),
         (var0, var1) -> var0.keyAssets = var1,
         var0 -> var0.keyAssets
      )
      .add()
      .validator((var0, var1) -> {
         for (int var2 = 1; var2 < var0.keyAssets.length; var2++) {
            MultiMixDensityAsset.KeyAsset var3 = var0.keyAssets[var2];
            if (var3 != null) {
               for (int var4 = 0; var4 < var2; var4++) {
                  MultiMixDensityAsset.KeyAsset var5 = var0.keyAssets[var4];
                  if (var5 != null && var5.value == var3.value) {
                     var1.fail("Keys must have unique Value entries. Keys[" + var4 + "] and Keys[" + var2 + "] both use " + var3.value);
                     break;
                  }
               }
            }
         }
      })
      .build();
   class="kw">private MultiMixDensityAsset.KeyAsset[] keyAssets = new MultiMixDensityAsset.KeyAsset[0];

   class="kw">public MultiMixDensityAsset() {
   }

   @Nonnull
   @Override
   class="kw">public Density build(@Nonnull DensityAsset.Argument var1) {
      if (this.isSkipped()) {
         class="kw">return new ConstantValueDensity(0.0);
      }

      List var2 = this.buildInputs(var1, true);
      if (var2.isEmpty()) {
         class="kw">return new ConstantValueDensity(0.0);
      }

      ArrayList var3 = new ArrayList<>(this.keyAssets.length);

      for (MultiMixDensityAsset.KeyAsset var7 : this.keyAssets) {
         if (var7.densityIndex < 0) {
            var3.add(new MultiMixDensity.Key(var7.value, null));
         } else if (var7.densityIndex >= var2.size() - 1) {
            LoggerUtil.getLogger()
               .warning("Density Index out of bounds in MultiMix node " + var7.densityIndex + ", valid range is [0, " + (var2.size() - 1) + "]");
            var3.add(new MultiMixDensity.Key(var7.value, null));
         } else {
            Density var8 = var2.get(var7.densityIndex);
            var3.add(new MultiMixDensity.Key(var7.value, var8));
         }
      }

      int var9 = 1;

      while (var9 < var3.size()) {
         MultiMixDensity.Key var14 = var3.get(var9 - 1);
         MultiMixDensity.Key var15 = var3.get(var9);
         if (var14.value() == var15.value()) {
            var3.remove(var9);
         } else {
            var9++;
         }
      }

      var9 = 0;

      while (var9 < var3.size()) {
         if (var3.get(var9).density() == null) {
            var3.remove(var9);
         } else {
            var9++;
         }
      }

      for (int ix = var3.size() - 1; ix >= 0 && var3.get(ix).density() == null; ix--) {
         var3.remove(ix);
      }

      for (int ix = var3.size() - 2; ix >= 0; ix--) {
         if (var3.get(ix).density() == null && var3.get(ix + 1).density() == null) {
            var3.remove(ix);
         }
      }

      if (var3.isEmpty()) {
         class="kw">return new ConstantValueDensity(0.0);
      }

      if (var3.size() == 1) {
         class="kw">return var3.getFirst().density();
      }

      var3.trimToSize();
      Density var13 = var2.getLast();
      class="kw">return new MultiMixDensity(var3, var13);
   }

   @Override
   class="kw">public void cleanUp() {
      this.cleanUpInputs();
   }

   class="kw">public class="kw">static class KeyAsset class="kw">implements JsonAssetWithMap<String, DefaultAssetMap<String, MultiMixDensityAsset.KeyAsset>> {
      class="kw">public class="kw">static class="kw">final int NO_DENSITY_INDEX = 0;
      @Nonnull
      class="kw">public class="kw">static class="kw">final AssetBuilderCodec<String, MultiMixDensityAsset.KeyAsset> CODEC = AssetBuilderCodec.builder(
            MultiMixDensityAsset.KeyAsset.class,
            MultiMixDensityAsset.KeyAsset::new,
            Codec.STRING,
            (var0, var1) -> var0.id = var1,
            var0 -> var0.id,
            (var0, var1) -> var0.data = var1,
            var0 -> var0.data
         )
         .append(new KeyedCodec<>("Value", Codec.DOUBLE, true), (var0, var1) -> var0.value = var1, var0 -> var0.value)
         .add()
         .append(new KeyedCodec<>("DensityIndex", Codec.INTEGER, true), (var0, var1) -> var0.densityIndex = var1, var0 -> var0.densityIndex)
         .add()
         .build();
      class="kw">private String id;
      class="kw">private AssetExtraInfo.Data data;
      class="kw">private double value = 0.0;
      class="kw">private int densityIndex = 0;

      class="kw">public KeyAsset() {
      }

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