PrefabProp class

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

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

extends: Prop

Поля (73)

МодификаторыТипИмя
continue
return
return
return
PrefabRotation var10
int var10
TransformComponent var10
var10
int var11
Vector3d var11
var11
Bounds3i var12
Vector3d var12
Vector3i var13
Holder var13
PrefabBuffer.ChildPrefab[] var14
Scanner.Context var14
EntityPlacementData var14
int var15
Integer var15
var15
int var15
int var16
Vector3i var17
int var17
Material var18
int var19
String var19
var19
var19
Bounds3i var2
ScanResult var2
List var2
RotatedPosition var20
Integer var20
var20
String var21
var21
int var21
List var22
VoxelSpace var22
Material var22
WeightedMap var23
PrefabProp var23
StaticDirectionality var24
int var24
PrefabProp var25
RotatedPosition var25
var25
Vector3i var26
PrefabProp var27
Integer var27
Vector3i var28
int var28
Bounds3i var29
List var3
List var3
int var3
Scanner.Context var4
Bounds3i var4
Random var4
Vector3i var5
Vector3i var5
Bounds3i var5
PrefabBufferCall var5
Vector3i var6
Pattern.Context var6
IPrefabBuffer var6
RotatedPositionsScanResult var7
VoxelSpace var7
var7
int var8
int var9

Методы (27)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("prefab pool contains list with null element")
for for(IPrefabBuffer var13 : var11)
for for(PrefabBuffer.ChildPrefab var19 : var14)
for for(Vector3i var9 : var3)
for for(RotatedPosition var7 : var3)
for for(var13.x = var12.min.x; var13.x < var12.max.x; var13.x++)
for for(var13.z = var12.min.z; var13.z < var12.max.z; var13.z++)
for for(int var9 = 0; var9 < var7x.length; var9++)
abstract for for(int var26 = 0; var26 < this.childPositions.size()
abstract for for(int var18 = 0; var18 < this.childProps.size()
if if(var13 == null)
if if(var10 != null)
if if(var3 != null)
if if(var6 != null)
if if(this.moldingDirection != MoldingDirection.NONE)
if if(this.moldingDirection == MoldingDirection.DOWN || this.moldingDirection == MoldingDirection.UP)
if if(var15 != null && this.moldingDirection == MoldingDirection.UP)
if if(this.moldingDirection == MoldingDirection.DOWN || this.moldingDirection == MoldingDirection.UP)
if if(var20 == null)
if if(var11x == 0)
if if(this.loadEntities)
if if(var7x != null)
if if(var10 != null)
if if(var10 != null)
if if(var27 == null)
public void placevoid place(@Nonnull RotatedPosition var1, @Nonnull VoxelSpace<Material> var2, @Nonnull EntityFunnel var3)
public void place_deprecatedvoid place_deprecated(@Nonnull Prop.Context var1, @Nonnull ScanResult var2)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.BlockMask;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.EntityPlacementData;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.WeightedMap;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.entityfunnel.EntityFunnel;
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.ConstantPattern;
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.ScanResult;
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.props.deprecated.directionality.StaticDirectionality;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.rng.RngField;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.rng.SeedBox;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.scanners.DirectScanner;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.scanners.Scanner;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.voxelspace.ArrayVoxelSpace;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.voxelspace.VoxelSpace;
class="kw">import com.hypixel.hytale.common.util.ExceptionUtil;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabRotation;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.PrefabBufferCall;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.impl.IPrefabBuffer;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.buffer.impl.PrefabBuffer;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Objects;
class="kw">import java.util.Random;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class PrefabProp class="kw">extends Prop {
   @Nonnull
   class="kw">private class="kw">final WeightedMap<List<IPrefabBuffer>> prefabPool;
   @Nonnull
   class="kw">private class="kw">final Scanner scanner;
   @Nonnull
   class="kw">private class="kw">final MaterialCache materialCache;
   @Nonnull
   class="kw">private class="kw">final RngField rngField;
   @Nonnull
   class="kw">private class="kw">final BlockMask materialMask;
   @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;
   @Nonnull
   class="kw">private class="kw">final List<PrefabProp> childProps;
   @Nonnull
   class="kw">private class="kw">final List<RotatedPosition> childPositions;
   @Nonnull
   class="kw">private class="kw">final Function<String, List<IPrefabBuffer>> childPrefabLoader;
   class="kw">private class="kw">final Scanner moldingScanner;
   class="kw">private class="kw">final Pattern moldingPattern;
   class="kw">private class="kw">final MoldingDirection moldingDirection;
   class="kw">private class="kw">final boolean moldChildren;
   class="kw">private boolean loadEntities;
   @Nonnull
   class="kw">private class="kw">final MaterialCache.MaterialKey rMaterialKey = new MaterialCache.MaterialKey();

   class="kw">public PrefabProp(
      @Nonnull WeightedMap<List<IPrefabBuffer>> var1,
      @Nonnull Scanner var2,
      @Nonnull Directionality var3,
      @Nonnull MaterialCache var4,
      @Nonnull BlockMask var5,
      @Nonnull PrefabMoldingConfiguration var6,
      @Nullable Function<String, List<IPrefabBuffer>> var7,
      @Nonnull SeedBox var8,
      boolean var9
   ) {
      this.prefabPool = var1;
      this.scanner = var2;
      this.directionality = var3;
      this.materialCache = var4;
      this.rngField = new RngField(var8.createSupplier().get());
      this.materialMask = var5;
      this.loadEntities = var9;
      this.childProps = new ArrayList<>();
      this.childPositions = new ArrayList<>();
      this.childPrefabLoader = var7 == null ? var0 -> null : var7;
      this.moldingScanner = var6.moldingScanner;
      this.moldingPattern = var6.moldingPattern;
      this.moldingDirection = var6.moldingDirection;
      this.moldChildren = var6.moldChildren;
      this.readBounds_voxelGrid = var3.getBoundsWith_voxelGrid(var2);
      this.writeBounds_voxelGrid = new Bounds3i();

      for (List var11 : var1.elements()) {
         if (var11.isEmpty()) {
            class="kw">return;
         }

         for (IPrefabBuffer var13 : var11) {
            if (var13 == null) {
               throw new IllegalArgumentException("prefab pool contains list with null element");
            }

            this.writeBounds_voxelGrid.encompass(this.getWriteBounds_voxelGrid(var13));
            PrefabBuffer.ChildPrefab[] var14 = var13.getChildPrefabs();
            int var15 = 0;

            for (PrefabBuffer.ChildPrefab var19 : var14) {
               RotatedPosition var20 = new RotatedPosition(var19.getX(), var19.getY(), var19.getZ(), var19.getRotation());
               String var21 = var19.getPath().replace('.', '/');
               var21 = var21.replace("*", "");
               List var22 = this.childPrefabLoader.apply(var21);
               WeightedMap var23 = new WeightedMap<>();
               var23.add(var22, 1.0);
               StaticDirectionality var24 = new StaticDirectionality(var19.getRotation(), ConstantPattern.INSTANCE_TRUE);
               PrefabProp var25 = new PrefabProp(
                  var23,
                  new DirectScanner(),
                  var24,
                  var4,
                  var5,
                  this.moldChildren ? var6 : PrefabMoldingConfiguration.none(),
                  var7,
                  var8.child(String.valueOf(var15++)),
                  var9
               );
               this.childProps.add(var25);
               this.childPositions.add(var20);
            }

            for (int var26 = 0; var26 < this.childPositions.size(); var26++) {
               PrefabProp var27 = this.childProps.get(var26);
               Vector3i var28 = this.childPositions.get(var26).toVector3i();
               Bounds3i var29 = var27.getWriteBounds_voxelGrid().clone();
               var29.offset(var28);
               this.writeBounds_voxelGrid.encompass(var29);
            }
         }
      }

      this.writeBounds_voxelGrid.stack(var2.getBounds_voxelGrid());
   }

   @Nonnull
   class="kw">private Bounds3i getWriteBounds_voxelGrid(@Nonnull IPrefabBuffer var1) {
      Bounds3i var2 = new Bounds3i();

      for (PrefabRotation var4 : this.directionality.getPossibleRotations()) {
         Vector3i var5 = PrefabPropUtil.getMax(var1, var4);
         var5.add(1, 1, 1);
         Vector3i var6 = PrefabPropUtil.getMin(var1, var4);
         var2.encompass(var6);
         var2.encompass(var5);
      }

      class="kw">return var2;
   }

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

   @Nonnull
   class="kw">public ScanResult 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 ScanResult var2) {
      if (this.prefabPool.size() != 0) {
         List var3 = RotatedPositionsScanResult.cast(var2).positions;
         if (var3 != null) {
            Bounds3i var4 = this.writeBounds_voxelGrid.clone().offset(var1.position);
            if (var4.intersects(var4)) {
               Bounds3i var5 = var1.materialWriteSpace.getBounds();

               for (RotatedPosition var7 : var3) {
                  this.place(var7, var1.materialWriteSpace, var1.entityWriteBuffer);
               }
            }
         }
      }
   }

   @Nullable
   class="kw">private IPrefabBuffer pickPrefab(@Nonnull Random var1) {
      List var2 = this.prefabPool.pick(var1);
      if (var2.isEmpty()) {
         class="kw">return null;
      }

      int var3 = var1.nextInt(var2.size());
      class="kw">return var2.get(var3);
   }

   class="kw">public void place(@Nonnull RotatedPosition var1, @Nonnull VoxelSpace<Material> var2, @Nonnull EntityFunnel var3) {
      if (this.prefabPool.size() != 0) {
         Random var4 = new Random(this.rngField.get(var1.x, var1.y, var1.z));
         PrefabBufferCall var5 = new PrefabBufferCall(var4, var1.rotation);
         IPrefabBuffer var6 = this.pickPrefab(var4);
         if (var6 != null) {
            VoxelSpace var7 = null;
            if (this.moldingDirection != MoldingDirection.NONE) {
               int var8 = var6.getMinX(var1.rotation);
               int var9 = var6.getMinZ(var1.rotation);
               int var10 = var6.getMaxX(var1.rotation);
               int var11 = var6.getMaxZ(var1.rotation);
               Bounds3i var12 = new Bounds3i(new Vector3i(var8 + var1.x, 0, var9 + var1.z), new Vector3i(var10 + var1.x, 1, var11 + var1.z));
               var7 = new ArrayVoxelSpace<>(var12);
               if (this.moldingDirection == MoldingDirection.DOWN || this.moldingDirection == MoldingDirection.UP) {
                  Vector3i var13 = new Vector3i(0, var1.y, 0);
                  Scanner.Context var14 = new Scanner.Context(var13, this.moldingPattern, var2, new ArrayList<>());

                  for (var13.x = var12.min.x; var13.x < var12.max.x; var13.x++) {
                     for (var13.z = var12.min.z; var13.z < var12.max.z; var13.z++) {
                        var14.validPositions_out.clear();
                        this.moldingScanner.scan(var14);
                        Integer var15 = var14.validPositions_out.isEmpty() ? null : var14.validPositions_out.getFirst().y - var1.y;
                        if (var15 != null && this.moldingDirection == MoldingDirection.UP) {
                           var15 = var15 - 1;
                        }

                        var7.set(var15, var13.x, 0, var13.z);
                     }
                  }
               }
            }

            try {
               Vector3i var17 = var1.toVector3i();
               VoxelSpace var22 = var7;
               int var24 = Objects.hash(var1.x, var1.y, var1.z, var6.hashCode());
               var6.forEach(IPrefabBuffer.iterateAllColumns(), (var4x, var5x, var6x, var7x, var8x, var9x, var10x, var11x, var12x, var13x, var14x) -> {
                  int var15 = var1.x + var4x;
                  int var16 = var1.y + var5x;
                  int var17 = var1.z + var6x;
                  if (var2.getBounds().contains(var15, var16, var17)) {
                     this.rMaterialKey.getSolidKey().set(var7x, var9x, var10x, var11x, var8x != null ? var8x.clone() : null);
                     this.rMaterialKey.getFluidKey().set(var13x, (byte)var14x);
                     Material var18 = this.materialCache.getMaterial(this.rMaterialKey);
                     int var19 = var18.hashMaterialIds();
                     if (this.materialMask.canPlace(var19)) {
                        if (this.moldingDirection == MoldingDirection.DOWN || this.moldingDirection == MoldingDirection.UP) {
                           Integer var20 = null;
                           if (var22.getBounds().contains(var15, 0, var17)) {
                              var20 = var22.get(var15, 0, var17);
                           }

                           if (var20 == null) {
                              class="kw">return;
                           }

                           var16 += var20;
                        }

                        Material var22 = var2.get(var15, var16, var17);
                        int var21 = var22.hashMaterialIds();
                        if (this.materialMask.canReplace(var19, var21)) {
                           if (var11x == 0) {
                              var2.set(var18, var15, var16, var17);
                           }
                        }
                     }
                  }
               }, (var5x, var6x, var7x, var8x) -> {
                  if (this.loadEntities) {
                     if (var7x != null) {
                        for (int var9 = 0; var9 < var7x.length; var9++) {
                           TransformComponent var10 = var7x[var9].getComponent(TransformComponent.getComponentType());
                           if (var10 != null) {
                              Vector3d var11 = new Vector3d(var10.getPosition());
                              var8x.rotation.rotate(var11);
                              Vector3d var12 = var11.add(var17.x, var17.y, var17.z);
                              if (var3.getBounds().contains(var12)) {
                                 Holder var13 = var7x[var9].clone();
                                 var10 = var13.getComponent(TransformComponent.getComponentType());
                                 if (var10 != null) {
                                    var11 = var10.getPosition();
                                    var11.x = var12.x;
                                    var11.y = var12.y;
                                    var11.z = var12.z;
                                    if (!var2.getBounds().contains((int)Math.floor(var11.x), (int)Math.floor(var11.y), (int)Math.floor(var11.z))) {
                                       class="kw">return;
                                    }

                                    EntityPlacementData var14 = new EntityPlacementData(new Vector3i(), PrefabRotation.ROTATION_0, var13, var24);
                                    var3.addEntity(var14);
                                 }
                              }
                           }
                        }
                     }
                  }
               }, (var0, var1x, var2x, var3x, var4x, var5x, var6x, var7x, var8x, var9x) -> {}, var5);
            } catch (Exception var16) {
               String var19 = "Couldn't place prefab prop.";
               var19 = var19 + "\n";
               var19 = var19 + ExceptionUtil.toStringWithStack(var16);
               ((HytaleLogger.Api)HytaleLogger.getLogger().atWarning()).log("%s", var19);
            }

            for (int var18 = 0; var18 < this.childProps.size(); var18++) {
               PrefabProp var23 = this.childProps.get(var18);
               RotatedPosition var25 = this.childPositions.get(var18).getRelativeTo(var1);
               Vector3i var26 = new Vector3i(var25.x, var25.y, var25.z);
               var1.rotation.rotate(var26);
               if (var7 != null && var7.getBounds().contains(var25.x, 0, var25.z)) {
                  Integer var27 = var7.get(var25.x, 0, var25.z);
                  if (var27 == null) {
                     class="kw">continue;
                  }

                  int var28 = var25.y + var27;
                  var25 = new RotatedPosition(var25.x, var28, var25.z, var25.rotation);
               }

               var23.place(var25, var2, var3);
            }
         }
      }
   }

   @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;
   }
}