PondFillerProp class
Пакет: com.hypixel.hytale.builtin.hytalegenerator.props
Файл: com/hypixel/hytale/builtin/hytalegenerator/props/PondFillerProp.java
extends: Prop
Поля (28)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
TRAVERSED |
|
ArrayDeque |
var10 |
|
Vector3i |
var11 |
|
int |
var12 |
|
int |
var13 |
|
int |
var16 |
|
Bounds3i |
var2 |
|
int |
var21 |
|
int |
var22 |
|
Material |
var23 |
|
Material |
var26 |
|
|
var26 |
|
|
var26 |
|
|
var26 |
|
|
var26 |
|
int |
var3 |
|
int |
var35 |
|
int |
var39 |
|
int |
var40 |
|
int |
var41 |
|
Material |
var6 |
|
int |
var7 |
|
int |
var8 |
|
int |
var9 |
|
|
var9 |
|
|
var9 |
|
|
var9 |
|
|
var9 |
Методы (12)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(int var4 = this.rLocalBounds.min.x; var4 < this.rLocalBounds.max.x; var4++) |
|
|
for for(int var5 = this.rLocalBounds.min.z; var5 < this.rLocalBounds.max.z; var5++) |
|
|
for for(int var14 = this.rLocalBounds.min.y + 1; var14 < this.rLocalBounds.max.y; var14++) |
|
|
for for(int var18 = this.rLocalBounds.min.x; var18 < this.rLocalBounds.max.x; var18++) |
|
|
for for(int var20 = this.rLocalBounds.min.z; var20 < this.rLocalBounds.max.z; var20++) |
|
|
for for(int var15 = this.rLocalWriteBounds.min.y; var15 < this.rLocalWriteBounds.max.y; var15++) |
|
|
for for(int var17 = this.rLocalWriteBounds.min.x; var17 < this.rLocalWriteBounds.max.x; var17++) |
|
|
for for(int var19 = this.rLocalWriteBounds.min.z; var19 < this.rLocalWriteBounds.max.z; var19++) |
static |
boolean |
isLeaksboolean isLeaks(int var0) |
static |
boolean |
isSolidboolean isSolid(int var0) |
static |
boolean |
isStackedboolean isStacked(int var0) |
static |
boolean |
isTraversedboolean isTraversed(int var0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.props;
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.voxelspace.ArrayVoxelSpace;
class="kw">import java.util.ArrayDeque;
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 Bounds3i bounds;
@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 Bounds3i rLocalBounds;
@Nonnull
class="kw">private class="kw">final Bounds3i rLocalWriteBounds;
@Nonnull
class="kw">private class="kw">final ArrayVoxelSpace<Integer> rMask;
@Nonnull
class="kw">private class="kw">final MaterialProvider.Context rMaterialProviderContext;
class="kw">public PondFillerProp(@Nonnull Bounds3i var1, @Nonnull MaterialProvider<Material> var2, @Nonnull MaterialSet var3) {
this.bounds = var1.clone();
this.fillerMaterialProvider = var2;
this.solidSet = var3;
this.rLocalBounds = new Bounds3i();
this.rLocalWriteBounds = new Bounds3i();
this.rMask = new ArrayVoxelSpace<>(var1);
this.rMaterialProviderContext = new MaterialProvider.Context(new Vector3i(), 0.0, 0, 0, 0, 0, null, Double.MAX_VALUE, null, null);
}
@Override
class="kw">public boolean generate(@Nonnull Prop.Context var1) {
this.rLocalBounds.assign(this.bounds).offset(var1.position);
this.rLocalWriteBounds.assign(this.rLocalBounds).intersect(var1.materialWriteSpace.getBounds());
if (!var1.materialReadSpace.getBounds().contains(this.rLocalBounds)) {
class="kw">return true;
}
Bounds3i var2 = this.rMask.getBounds();
var2.assign(this.bounds);
var2.offset(var1.position);
this.rMask.setAll(0);
int var3 = this.rLocalBounds.min.y;
for (int var4 = this.rLocalBounds.min.x; var4 < this.rLocalBounds.max.x; var4++) {
for (int var5 = this.rLocalBounds.min.z; var5 < this.rLocalBounds.max.z; var5++) {
Material var6 = var1.materialReadSpace.get(var4, var3, var5);
int var7 = var6.hashMaterialIds();
int var8 = 1;
if (this.solidSet.test(var7)) {
var8 |= 256;
this.rMask.set(var8, var4, var3, var5);
} else {
var8 |= 16;
this.rMask.set(var8, var4, var3, var5);
}
}
}
for (int var14 = this.rLocalBounds.min.y + 1; var14 < this.rLocalBounds.max.y; var14++) {
int var16 = var14 - 1;
for (int var18 = this.rLocalBounds.min.x; var18 < this.rLocalBounds.max.x; var18++) {
for (int var20 = this.rLocalBounds.min.z; var20 < this.rLocalBounds.max.z; var20++) {
if (!isTraversed(this.rMask.get(var18, var14, var20))) {
int var22 = this.rMask.get(var18, var16, var20);
Material var26 = var1.materialReadSpace.get(var18, var14, var20);
int var9 = var26.hashMaterialIds();
if (this.solidSet.test(var9)) {
int var35 = 0;
var35 |= 1;
var35 |= 256;
this.rMask.set(var35, var18, var14, var20);
} else if (isLeaks(var22)
|| var18 == this.rLocalBounds.min.x
|| var18 == this.rLocalBounds.max.x - 1
|| var20 == this.rLocalBounds.min.z
|| var20 == this.rLocalBounds.max.z - 1) {
ArrayDeque var10 = new ArrayDeque<>();
var10.push(new Vector3i(var18, var14, var20));
this.rMask.set(4096, var18, var14, var20);
while (!var10.isEmpty()) {
Vector3i var11 = var10.pop();
int var12 = this.rMask.get(var11.x, var11.y, var11.z);
var12 |= 16;
this.rMask.set(var12, var11.x, var11.y, var11.z);
var11.x--;
if (this.rMask.getBounds().contains(var11.x, var11.y, var11.z)) {
int var13 = this.rMask.get(var11.x, var11.y, var11.z);
if (!isStacked(var13)) {
var26 = var1.materialReadSpace.get(var11.x, var11.y, var11.z);
var9 = var26.hashMaterialIds();
if (!this.solidSet.test(var9)) {
var10.push(new Vector3i(var11));
this.rMask.set(4096 | var13, var11.x, var11.y, var11.z);
}
}
}
var11.x += 2;
if (this.rMask.getBounds().contains(var11.x, var11.y, var11.z)) {
int var39 = this.rMask.get(var11.x, var11.y, var11.z);
if (!isStacked(var39)) {
var26 = var1.materialReadSpace.get(var11.x, var11.y, var11.z);
var9 = var26.hashMaterialIds();
if (!this.solidSet.test(var9)) {
var10.push(new Vector3i(var11));
this.rMask.set(4096 | var39, var11.x, var11.y, var11.z);
}
}
}
var11.x--;
var11.z--;
if (this.rMask.getBounds().contains(var11.x, var11.y, var11.z)) {
int var40 = this.rMask.get(var11.x, var11.y, var11.z);
if (!isStacked(var40)) {
var26 = var1.materialReadSpace.get(var11.x, var14, var11.z);
var9 = var26.hashMaterialIds();
if (!this.solidSet.test(var9)) {
var10.push(new Vector3i(var11));
this.rMask.set(4096 | var40, var11.x, var11.y, var11.z);
}
}
}
var11.z += 2;
if (this.rMask.getBounds().contains(var11.x, var11.y, var11.z)) {
int var41 = this.rMask.get(var11.x, var11.y, var11.z);
if (!isStacked(var41)) {
var26 = var1.materialReadSpace.get(var11.x, var11.y, var11.z);
var9 = var26.hashMaterialIds();
if (!this.solidSet.test(var9)) {
var10.push(new Vector3i(var11));
this.rMask.set(4096 | var41, var11.x, var11.y, var11.z);
}
}
}
var11.z--;
}
}
}
}
}
}
this.rMaterialProviderContext.distanceToBiomeEdge = var1.distanceToBiomeEdge;
for (int var15 = this.rLocalWriteBounds.min.y; var15 < this.rLocalWriteBounds.max.y; var15++) {
for (int var17 = this.rLocalWriteBounds.min.x; var17 < this.rLocalWriteBounds.max.x; var17++) {
for (int var19 = this.rLocalWriteBounds.min.z; var19 < this.rLocalWriteBounds.max.z; var19++) {
int var21 = this.rMask.get(var17, var15, var19);
if (!isSolid(var21) && !isLeaks(var21)) {
this.rMaterialProviderContext.position.set(var17, var15, var19);
Material var23 = this.fillerMaterialProvider.getVoxelTypeAt(this.rMaterialProviderContext);
var1.materialWriteSpace.set(var23, var17, var15, var19);
}
}
}
}
class="kw">return true;
}
@Nonnull
@Override
class="kw">public Bounds3i getReadBounds_voxelGrid() {
class="kw">return this.bounds;
}
@Nonnull
@Override
class="kw">public Bounds3i getWriteBounds_voxelGrid() {
class="kw">return this.bounds;
}
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;
}
}