PondFillerProp class
Пакет: com.hypixel.hytale.builtin.hytalegenerator.props.deprecated.filler
Файл: com/hypixel/hytale/builtin/hytalegenerator/props/deprecated/filler/PondFillerProp.java
extends: Prop
Поля (41)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
TRAVERSED |
|
int |
var12 |
|
int |
var13 |
|
ArrayDeque |
var14 |
|
Vector3i |
var15 |
|
int |
var16 |
|
int |
var17 |
|
ScanResult |
var2 |
|
Material |
var20 |
|
|
var20 |
|
|
var20 |
|
|
var20 |
|
|
var20 |
|
int |
var25 |
|
|
var25 |
|
|
var25 |
|
|
var25 |
|
|
var25 |
|
Scanner.Context |
var3 |
|
Vector3i |
var3 |
|
|
var3 |
|
List |
var3 |
|
int |
var32 |
|
ArrayList |
var33 |
|
ArrayList |
var4 |
|
Vector3i |
var4 |
|
|
var4 |
|
int |
var40 |
|
int |
var41 |
|
int |
var45 |
|
int |
var46 |
|
int |
var47 |
|
Bounds3i |
var5 |
|
ArrayVoxelSpace |
var6 |
|
MaterialProvider.Context |
var6 |
|
List |
var7 |
|
Material |
var7 |
|
Material |
var7 |
|
List |
var8 |
|
int |
var8 |
|
int |
var9 |
Методы (19)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
return new |
FillerPropScanResultreturn new FillerPropScanResult(var8) |
abstract |
return new |
FillerPropScanResultreturn new FillerPropScanResult(var4) |
|
|
for for(Vector3i var6 : var3.validPositions_out) |
|
|
for for(int var10 = var3.x; var10 < var4.x; var10++) |
|
|
for for(int var11 = var3.z; var11 < var4.z; var11++) |
|
|
for for(int var30 = var3.y + 1; var30 < var4.y; var30++) |
|
|
for for(int var34 = var3.x; var34 < var4.x; var34++) |
|
|
for for(int var38 = var3.z; var38 < var4.z; var38++) |
|
|
for for(int var31 = var5.min.y + 1; var31 < var5.max.y; var31++) |
|
|
for for(int var35 = var5.min.x + 1; var35 < var5.max.x - 1; var35++) |
|
|
for for(int var39 = var5.min.z + 1; var39 < var5.max.z - 1; var39++) |
|
|
for for(Vector3i var5 : var3) |
|
|
if if(var3 != null) |
|
|
if if(var7 != null) |
static |
boolean |
isLeaksboolean isLeaks(int var0) |
static |
boolean |
isSolidboolean isSolid(int var0) |
static |
boolean |
isStackedboolean isStacked(int var0) |
static |
boolean |
isTraversedboolean isTraversed(int var0) |
public |
void |
place_deprecatedvoid place_deprecated(@Nonnull Prop.Context var1, @Nonnull ScanResult var2) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.props.deprecated.filler;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.MaterialSet;
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.materialproviders.MaterialProvider;
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.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.math.vector.Vector3iUtil;
class="kw">import java.util.ArrayDeque;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;
class="kw">public class PondFillerProp class="kw">extends Prop {
class="kw">private class="kw">static class="kw">final int TRAVERSED = 1;
class="kw">private class="kw">static class="kw">final int LEAKS = 16;
class="kw">private class="kw">static class="kw">final int SOLID = 256;
class="kw">private class="kw">static class="kw">final int STACKED = 4096;
@Nonnull
class="kw">private class="kw">final Vector3i boundingMin;
@Nonnull
class="kw">private class="kw">final Vector3i boundingMax;
@Nonnull
class="kw">private class="kw">final MaterialProvider<Material> fillerMaterialProvider;
@Nonnull
class="kw">private class="kw">final MaterialSet solidSet;
@Nonnull
class="kw">private class="kw">final Scanner scanner;
@Nonnull
class="kw">private class="kw">final Pattern pattern;
@Nonnull
class="kw">private class="kw">final Bounds3i readBounds_voxelGrid;
@Nonnull
class="kw">private class="kw">final Bounds3i writeBounds_voxelGrid;
class="kw">public PondFillerProp(
@Nonnull Vector3i var1,
@Nonnull Vector3i var2,
@Nonnull MaterialSet var3,
@Nonnull MaterialProvider<Material> var4,
@Nonnull Scanner var5,
@Nonnull Pattern var6
) {
this.boundingMin = new Vector3i(var1);
this.boundingMax = new Vector3i(var2);
this.solidSet = var3;
this.fillerMaterialProvider = var4;
this.scanner = var5;
this.pattern = var6;
this.readBounds_voxelGrid = this.scanner.getBoundsWithPattern_voxelGrid(var6);
this.writeBounds_voxelGrid = new Bounds3i(var1, var2);
this.writeBounds_voxelGrid.stack(this.readBounds_voxelGrid);
}
class="kw">private class="kw">static boolean isTraversed(int var0) {
class="kw">return (var0 & 1) == 1;
}
class="kw">private class="kw">static boolean isLeaks(int var0) {
class="kw">return (var0 & 16) == 16;
}
class="kw">private class="kw">static boolean isSolid(int var0) {
class="kw">return (var0 & 256) == 256;
}
class="kw">private class="kw">static boolean isStacked(int var0) {
class="kw">return (var0 & 4096) == 4096;
}
@Nonnull
class="kw">public FillerPropScanResult scan_deprecated(@Nonnull Vector3i var1, @Nonnull VoxelSpace<Material> var2) {
Scanner.Context var3 = new Scanner.Context(var1, this.pattern, var2, new ArrayList<>());
this.scanner.scan(var3);
if (var3.validPositions_out.size() == 1) {
List var8 = this.renderFluidBlocks(var3.validPositions_out.getFirst(), var2);
class="kw">return new FillerPropScanResult(var8);
}
ArrayList var4 = new ArrayList<>();
for (Vector3i var6 : var3.validPositions_out) {
List var7 = this.renderFluidBlocks(var6, var2);
var4.addAll(var7);
}
class="kw">return new FillerPropScanResult(var4);
}
@Nonnull
class="kw">private List<Vector3i> renderFluidBlocks(@Nonnull Vector3i var1, @Nonnull VoxelSpace<Material> var2) {
Vector3i var3 = new Vector3i(this.boundingMin).add(var1);
Vector3i var4 = new Vector3i(this.boundingMax).add(var1);
var3 = Vector3iUtil.max(var3, var2.getBounds().min);
var4 = Vector3iUtil.min(var4, var2.getBounds().max);
Bounds3i var5 = new Bounds3i(var3, var4);
ArrayVoxelSpace var6 = new ArrayVoxelSpace<>(new Bounds3i(var3, var4));
var6.setAll(0);
int var9 = var3.y;
for (int var10 = var3.x; var10 < var4.x; var10++) {
for (int var11 = var3.z; var11 < var4.z; var11++) {
Material var7 = var2.get(var10, var9, var11);
int var8 = var7.hashMaterialIds();
int var12 = 1;
if (this.solidSet.test(var8)) {
var12 |= 256;
var6.set(var12, var10, var9, var11);
} else {
var12 |= 16;
var6.set(var12, var10, var9, var11);
}
}
}
for (int var30 = var3.y + 1; var30 < var4.y; var30++) {
int var32 = var30 - 1;
for (int var34 = var3.x; var34 < var4.x; var34++) {
for (int var38 = var3.z; var38 < var4.z; var38++) {
if (!isTraversed(var6.get(var34, var30, var38))) {
int var13 = var6.get(var34, var32, var38);
Material var20 = var2.get(var34, var30, var38);
int var25 = var20.hashMaterialIds();
if (this.solidSet.test(var25)) {
int var41 = 0;
var41 |= 1;
var41 |= 256;
var6.set(var41, var34, var30, var38);
} else if (isLeaks(var13) || var34 == var3.x || var34 == var4.x - 1 || var38 == var3.z || var38 == var4.z - 1) {
ArrayDeque var14 = new ArrayDeque<>();
var14.push(new Vector3i(var34, var30, var38));
var6.set(4096, var34, var30, var38);
while (!var14.isEmpty()) {
Vector3i var15 = var14.pop();
int var16 = var6.get(var15.x, var15.y, var15.z);
var16 |= 16;
var6.set(var16, var15.x, var15.y, var15.z);
var15.x--;
if (var6.getBounds().contains(var15.x, var15.y, var15.z)) {
int var17 = var6.get(var15.x, var15.y, var15.z);
if (!isStacked(var17)) {
var20 = var2.get(var15.x, var15.y, var15.z);
var25 = var20.hashMaterialIds();
if (!this.solidSet.test(var25)) {
var14.push(new Vector3i(var15));
var6.set(4096 | var17, var15.x, var15.y, var15.z);
}
}
}
var15.x += 2;
if (var6.getBounds().contains(var15.x, var15.y, var15.z)) {
int var45 = var6.get(var15.x, var15.y, var15.z);
if (!isStacked(var45)) {
var20 = var2.get(var15.x, var15.y, var15.z);
var25 = var20.hashMaterialIds();
if (!this.solidSet.test(var25)) {
var14.push(new Vector3i(var15));
var6.set(4096 | var45, var15.x, var15.y, var15.z);
}
}
}
var15.x--;
var15.z--;
if (var6.getBounds().contains(var15.x, var15.y, var15.z)) {
int var46 = var6.get(var15.x, var15.y, var15.z);
if (!isStacked(var46)) {
var20 = var2.get(var15.x, var30, var15.z);
var25 = var20.hashMaterialIds();
if (!this.solidSet.test(var25)) {
var14.push(new Vector3i(var15));
var6.set(4096 | var46, var15.x, var15.y, var15.z);
}
}
}
var15.z += 2;
if (var6.getBounds().contains(var15.x, var15.y, var15.z)) {
int var47 = var6.get(var15.x, var15.y, var15.z);
if (!isStacked(var47)) {
var20 = var2.get(var15.x, var15.y, var15.z);
var25 = var20.hashMaterialIds();
if (!this.solidSet.test(var25)) {
var14.push(new Vector3i(var15));
var6.set(4096 | var47, var15.x, var15.y, var15.z);
}
}
}
var15.z--;
}
}
}
}
}
}
ArrayList var33 = new ArrayList<>();
for (int var31 = var5.min.y + 1; var31 < var5.max.y; var31++) {
for (int var35 = var5.min.x + 1; var35 < var5.max.x - 1; var35++) {
for (int var39 = var5.min.z + 1; var39 < var5.max.z - 1; var39++) {
int var40 = var6.get(var35, var31, var39);
if (!isSolid(var40) && !isLeaks(var40)) {
var33.add(new Vector3i(var35, var31, var39));
}
}
}
}
class="kw">return var33;
}
class="kw">public void place_deprecated(@Nonnull Prop.Context var1, @Nonnull ScanResult var2) {
List var3 = FillerPropScanResult.cast(var2).getFluidBlocks();
if (var3 != null) {
for (Vector3i var5 : var3) {
if (var1.materialWriteSpace.getBounds().contains(var5.x, var5.y, var5.z)) {
MaterialProvider.Context var6 = new MaterialProvider.Context(var5, 0.0, 0, 0, 0, 0, null, var1.distanceToBiomeEdge, null, null);
Material var7 = this.fillerMaterialProvider.getVoxelTypeAt(var6);
if (var7 != null) {
var1.materialWriteSpace.set(var7, var5.x, var5.y, var5.z);
}
}
}
}
}
@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
@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;
}
}