LayerContextType enum

Пакет: com.hypixel.hytale.builtin.hytalegenerator.materialproviders.spaceanddepth

Файл: com/hypixel/hytale/builtin/hytalegenerator/materialproviders/spaceanddepth/SpaceAndDepthMaterialProvider.java

Поля (2)

МодификаторыТипИмя
public static final Codec<SpaceAndDepthMaterialProvider.LayerContextType> CODEC
DEPTH_INTO_FLOOR, DEPTH_INTO_CEILING

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.LoggerUtil;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.materialproviders.MaterialProvider;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class SpaceAndDepthMaterialProvider<V> class="kw">extends MaterialProvider<V> {
   @Nonnull
   class="kw">private class="kw">final SpaceAndDepthMaterialProvider.LayerContextType layerContextType;
   @Nonnull
   class="kw">private class="kw">final SpaceAndDepthMaterialProvider.Layer<V>[] layers;
   @Nonnull
   class="kw">private class="kw">final SpaceAndDepthMaterialProvider.Condition condition;
   class="kw">private class="kw">final int maxDistance;

   class="kw">public SpaceAndDepthMaterialProvider(
      @Nonnull SpaceAndDepthMaterialProvider.LayerContextType var1,
      @Nonnull List<SpaceAndDepthMaterialProvider.Layer<V>> var2,
      @Nonnull SpaceAndDepthMaterialProvider.Condition var3,
      int var4
   ) {
      this.layerContextType = var1;
      this.maxDistance = var4;
      this.layers = new SpaceAndDepthMaterialProvider.Layer[var2.size()];

      for (int var5 = 0; var5 < var2.size(); var5++) {
         SpaceAndDepthMaterialProvider.Layer var6 = var2.get(var5);
         if (var6 == null) {
            LoggerUtil.getLogger().warning("Couldn't retrieve layer with index " + var5);
         } else {
            this.layers[var5] = var6;
         }
      }

      this.condition = var3;
   }

   @Nullable
   @Override
   class="kw">public V getVoxelTypeAt(@Nonnull MaterialProvider.Context var1) {
      int var2 = class="kw">switch (this.layerContextType) {
         case DEPTH_INTO_FLOOR -> var1.depthIntoFloor;
         case DEPTH_INTO_CEILING -> var1.depthIntoCeiling;
      };
      if (var2 > this.maxDistance) {
         class="kw">return null;
      }

      if (!this.condition
         .qualifies(var1.position.x, var1.position.y, var1.position.z, var1.depthIntoFloor, var1.depthIntoCeiling, var1.spaceAboveFloor, var1.spaceBelowCeiling)
         )
       {
         class="kw">return null;
      }

      MaterialProvider var3 = null;
      int var4 = 0;

      for (SpaceAndDepthMaterialProvider.Layer var8 : this.layers) {
         int var9 = var8.getThicknessAt(
            var1.position.x,
            var1.position.y,
            var1.position.z,
            var1.depthIntoFloor,
            var1.depthIntoCeiling,
            var1.spaceAboveFloor,
            var1.spaceBelowCeiling,
            var1.distanceToBiomeEdge
         );
         int var10 = var4 + var9;
         if (var2 > var4 && var2 <= var10) {
            var3 = var8.getMaterialProvider();
            break;
         }

         var4 = var10;
      }

      class="kw">return var3 == null ? null : var3.getVoxelTypeAt(var1);
   }

   class="kw">public class="kw">interface Condition {
      boolean qualifies(int var1, int var2, int var3, int var4, int var5, int var6, int var7);
   }

   class="kw">public class="kw">abstract class="kw">static class Layer<V> {
      class="kw">public Layer() {
      }

      class="kw">public class="kw">abstract int getThicknessAt(int var1, int var2, int var3, int var4, int var5, int var6, int var7, double var8);

      @Nullable
      class="kw">public class="kw">abstract MaterialProvider<V> getMaterialProvider();
   }

   class="kw">public enum LayerContextType {
      DEPTH_INTO_FLOOR,
      DEPTH_INTO_CEILING;

      @Nonnull
      class="kw">public class="kw">static class="kw">final Codec<SpaceAndDepthMaterialProvider.LayerContextType> CODEC = new EnumCodec<>(
         SpaceAndDepthMaterialProvider.LayerContextType.class, EnumCodec.EnumStyle.LEGACY
      );

      LayerContextType() {
      }
   }
}