ColumnProp class

Пакет: com.hypixel.hytale.builtin.hytalegenerator.props.deprecated

Файл: com/hypixel/hytale/builtin/hytalegenerator/props/deprecated/ColumnProp.java

extends: Prop

Поля (17)

МодификаторыТипИмя
PrefabRotation var10
RotatedPositionsScanResult var2
List var3
PrefabRotation var3
Scanner.Context var4
Material[] var4
Vector3i var5
Material var5
Pattern.Context var6
int var6
int var7
var7
RotatedPositionsScanResult var7
int var8
var8
int var8
Material var9

Методы (8)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("blocks and positions sizes don't match")
for for(int var9 = 0; var9 < this.yPositions.length; var9++)
for for(Vector3i var9 : var3)
for for(RotatedPosition var5 : var2.positions)
for for(int var7 = 0; var7 < this.yPositions.length; var7++)
if if(var10 != null)
private void placevoid place(@Nonnull RotatedPosition var1, @Nonnull VoxelSpace<Material> var2)
public void place_deprecatedvoid place_deprecated(@Nonnull Prop.Context var1, @Nonnull RotatedPositionsScanResult var2)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.BlockMask;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.material.Material;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.material.MaterialCache;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.Pattern;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.Prop;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.deprecated.directionality.Directionality;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.deprecated.directionality.RotatedPosition;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.deprecated.directionality.RotatedPositionsScanResult;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.scanners.Scanner;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.voxelspace.VoxelSpace;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabRotation;
class="kw">import it.unimi.dsi.fastutil.ints.IntList;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;

@Deprecated
class="kw">public class ColumnProp class="kw">extends Prop {
   @Nonnull
   class="kw">private class="kw">final int[] yPositions;
   @Nonnull
   class="kw">private class="kw">final Material[] blocks0;
   @Nonnull
   class="kw">private class="kw">final Material[] blocks90;
   @Nonnull
   class="kw">private class="kw">final Material[] blocks180;
   @Nonnull
   class="kw">private class="kw">final Material[] blocks270;
   @Nonnull
   class="kw">private class="kw">final BlockMask blockMask;
   @Nonnull
   class="kw">private class="kw">final Scanner scanner;
   @Nonnull
   class="kw">private class="kw">final Directionality directionality;
   @Nonnull
   class="kw">private class="kw">final Bounds3i readBounds_voxelGrid;
   @Nonnull
   class="kw">private class="kw">final Bounds3i writeBounds_voxelGrid;

   class="kw">public ColumnProp(
      @Nonnull IntList var1,
      @Nonnull List<Material> var2,
      @Nonnull BlockMask var3,
      @Nonnull Scanner var4,
      @Nonnull Directionality var5,
      @Nonnull MaterialCache var6
   ) {
      if (var1.size() != var2.size()) {
         throw new IllegalArgumentException("blocks and positions sizes don't match");
      }

      this.blockMask = var3;
      this.yPositions = new int[var1.size()];
      this.blocks0 = new Material[var2.size()];
      this.blocks90 = new Material[var2.size()];
      this.blocks180 = new Material[var2.size()];
      this.blocks270 = new Material[var2.size()];
      int var7 = Integer.MAX_VALUE;
      int var8 = Integer.MIN_VALUE;

      for (int var9 = 0; var9 < this.yPositions.length; var9++) {
         this.yPositions[var9] = var1.getInt(var9);
         this.blocks0[var9] = var2.get(var9);
         this.blocks90[var9] = var2.get(var9);
         this.blocks90[var9] = var2.get(var9);
         this.blocks180[var9] = var2.get(var9);
         this.blocks270[var9] = var2.get(var9);
         var7 = Math.min(var7, this.yPositions[var9]);
         var8 = Math.max(var8, this.yPositions[var9] + 1);
      }

      this.scanner = var4;
      this.directionality = var5;
      this.readBounds_voxelGrid = var5.getBoundsWith_voxelGrid(var4);
      this.writeBounds_voxelGrid = new Bounds3i(new Vector3i(0, var7, 0), new Vector3i(1, var8, 1));
      this.writeBounds_voxelGrid.stack(var4.getBounds_voxelGrid());
   }

   @Override
   class="kw">public boolean generate(@Nonnull Prop.Context var1) {
      RotatedPositionsScanResult var2 = this.scan_deprecated(var1.position, var1.materialReadSpace);
      this.place_deprecated(var1, var2);
      class="kw">return !var2.isNegative();
   }

   @Nonnull
   class="kw">public RotatedPositionsScanResult scan_deprecated(@Nonnull Vector3i var1, @Nonnull VoxelSpace<Material> var2) {
      List var3 = new ArrayList<>();
      Scanner.Context var4 = new Scanner.Context(var1, this.directionality.getGeneralPattern(), var2, var3);
      this.scanner.scan(var4);
      Vector3i var5 = new Vector3i();
      Pattern.Context var6 = new Pattern.Context(var5, var2);
      RotatedPositionsScanResult var7 = new RotatedPositionsScanResult(new ArrayList<>());

      for (Vector3i var9 : var3) {
         var5.set(var9);
         PrefabRotation var10 = this.directionality.getRotationAt(var6);
         if (var10 != null) {
            var7.positions.add(new RotatedPosition(var9.x, var9.y, var9.z, var10));
         }
      }

      class="kw">return var7;
   }

   class="kw">public void place_deprecated(@Nonnull Prop.Context var1, @Nonnull RotatedPositionsScanResult var2) {
      for (RotatedPosition var5 : var2.positions) {
         this.place(var5, var1.materialWriteSpace);
      }
   }

   class="kw">private void place(@Nonnull RotatedPosition var1, @Nonnull VoxelSpace<Material> var2) {
      PrefabRotation var3 = var1.rotation;

      Material[] var4 = class="kw">switch (var3) {
         case ROTATION_0 -> this.blocks0;
         case ROTATION_90 -> this.blocks90;
         case ROTATION_180 -> this.blocks180;
         case ROTATION_270 -> this.blocks270;
      };

      for (int var7 = 0; var7 < this.yPositions.length; var7++) {
         int var8 = this.yPositions[var7] + var1.y;
         Material var9 = var4[var7];
         if (var2.getBounds().contains(var1.x, var8, var1.z) && this.blockMask.canPlace(var9)) {
            Material var5 = var2.get(var1.x, var8, var1.z);
            assert var5 != null;
            int var6 = var5.hashMaterialIds();
            if (this.blockMask.canReplace(var9.hashMaterialIds(), var6)) {
               var2.set(var9, var1.x, var8, var1.z);
            }
         }
      }
   }

   @Nonnull
   @Override
   class="kw">public Bounds3i getReadBounds_voxelGrid() {
      class="kw">return this.readBounds_voxelGrid;
   }

   @Nonnull
   @Override
   class="kw">public Bounds3i getWriteBounds_voxelGrid() {
      class="kw">return this.writeBounds_voxelGrid;
   }
}