BrushConfigEditStore class
Пакет: com.hypixel.hytale.builtin.buildertools.scriptedbrushes
Файл: com/hypixel/hytale/builtin/buildertools/scriptedbrushes/BrushConfigEditStore.java
Поля (45)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
int |
var10 |
|
int |
var10 |
|
int |
var10 |
|
boolean |
var10 |
|
int |
var10 |
|
int |
var11 |
|
WorldChunk |
var11 |
|
int |
var11 |
|
BlockMask |
var12 |
|
int |
var12 |
|
BlockType |
var12 |
|
WorldChunk |
var13 |
|
byte |
var13 |
|
BlockTypeAssetMap |
var13 |
|
ObjectIterator |
var14 |
|
Entry |
var15 |
|
int |
var16 |
|
WorldChunk |
var4 |
|
int |
var4 |
|
boolean |
var5 |
|
boolean |
var5 |
|
boolean |
var5 |
|
BuilderToolsPlugin.BuilderState.BlocksSampleData |
var5 |
|
Vector3i |
var6 |
|
int |
var6 |
|
boolean |
var6 |
|
int |
var6 |
|
Int2IntMap |
var6 |
|
int |
var7 |
|
int |
var7 |
|
int |
var7 |
|
int |
var7 |
|
int |
var8 |
|
BlockMask |
var8 |
|
int |
var8 |
|
BlockMask |
var8 |
|
int |
var9 |
|
WorldChunk |
var9 |
|
boolean |
var9 |
|
BlockMask |
var9 |
|
int |
var9 |
Методы (29)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
void |
flushCurrentEditsToPreviousvoid flushCurrentEditsToPrevious() |
|
|
for for(int var7 = var1 - var4; var7 <= var1 + var4; var7++) |
|
|
for for(int var8 = var3 - var4; var8 <= var3 + var4; var8++) |
|
|
for for(int var9 = var2 - var4; var9 <= var2 + var4; var9++) |
public |
int |
getBlockint getBlock(int var1, int var2, int var3) |
public |
int |
getBlockIncludingCurrentint getBlockIncludingCurrent(int var1, int var2, int var3) |
public |
int |
getFluidint getFluid(int var1, int var2, int var3) |
public |
int |
getOriginalBlockint getOriginalBlock(int var1, int var2, int var3) |
private |
int |
getOriginalFluidint getOriginalFluid(int var1, int var2, int var3) |
|
|
if if(!var5) |
|
|
if if(var5) |
|
|
if if(var9 != null) |
|
|
if if(!var9) |
|
|
if if(var9) |
|
|
if if(var13 != null) |
|
|
if if(!var6) |
|
|
if if(var6) |
|
|
if if(var10 < 0) |
|
|
if if(var11 != null) |
|
|
if if(!var5) |
|
|
if if(var5) |
|
|
if if(var9 == 0) |
|
|
if if(var11 > var5.mainBlockCount) |
|
|
if if(var11 > var5.mainBlockNotAirCount && var16 != 0) |
public |
boolean |
setBlockboolean setBlock(int var1, int var2, int var3, int var4) |
|
boolean |
setFluidboolean setFluid(int var1, int var2, int var3, int var4, byte var5) |
public |
boolean |
setFullBlockboolean setFullBlock(int var1, int var2, int var3, int var4, int var5, int var6, int var7, @Nullable Holder<ChunkStore> var8) |
public |
boolean |
setMaterialboolean setMaterial(int var1, int var2, int var3, @Nonnull Material var4) |
public |
boolean |
setMaterialWithFillerboolean setMaterialWithFiller(int var1, int var2, int var3, @Nonnull Material var4) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.scriptedbrushes;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsPlugin;
class="kw">import com.hypixel.hytale.builtin.buildertools.utils.FillerPlacementUtil;
class="kw">import com.hypixel.hytale.builtin.buildertools.utils.Material;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.math.block.BlockUtil;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.mask.BlockMask;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.standard.BlockSelection;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import it.unimi.dsi.fastutil.ints.Int2IntMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2IntMaps;
class="kw">import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2IntMap.Entry;
class="kw">import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;
class="kw">public class BrushConfigEditStore {
@Nonnull
class="kw">private class="kw">final BrushConfig brushConfig;
@Nonnull
class="kw">private class="kw">final BrushConfigChunkAccessor accessor;
@Nonnull
class="kw">private class="kw">final BlockSelection before;
@Nonnull
class="kw">private class="kw">final BlockSelection previous;
class="kw">private BlockSelection current;
class="kw">private class="kw">final LongOpenHashSet packedPlacedBlockPositions;
class="kw">private class="kw">final LongOpenHashSet occupied = new LongOpenHashSet();
@Nullable
class="kw">private class="kw">final Vector3i selectionMin;
@Nullable
class="kw">private class="kw">final Vector3i selectionMax;
class="kw">public BrushConfigEditStore(LongOpenHashSet var1, @Nonnull BrushConfig var2, World var3, @Nullable Vector3i var4, @Nullable Vector3i var5) {
this.brushConfig = var2;
this.packedPlacedBlockPositions = var1;
this.selectionMin = var4;
this.selectionMax = var5;
Vector3i var6 = var2.getOrigin();
int var7 = var2.getShapeWidth();
int var8 = var2.getShapeHeight();
int var9 = var7 / 2;
int var10 = var8 / 2;
this.accessor = BrushConfigChunkAccessor.atWorldCoords(this, var3, var6.x, var6.z, var7 * 2);
this.before = new BlockSelection();
this.before.setPosition(var6.x, var6.y, var6.z);
this.before.setSelectionArea(new Vector3i(var6.x - var9, var6.y - var10, var6.z - var9), new Vector3i(var6.x + var9, var6.y + var10, var6.z + var9));
this.previous = new BlockSelection(this.before);
this.current = new BlockSelection(this.before);
}
@Nonnull
class="kw">public BrushConfigChunkAccessor getAccessor() {
class="kw">return this.accessor;
}
@Nonnull
class="kw">public BrushConfig getBrushConfig() {
class="kw">return this.brushConfig;
}
@Nullable
class="kw">public Vector3i getSelectionMin() {
class="kw">return this.selectionMin;
}
@Nullable
class="kw">public Vector3i getSelectionMax() {
class="kw">return this.selectionMax;
}
class="kw">public int getOriginalBlock(int var1, int var2, int var3) {
class="kw">return this.accessor.getBlockIgnoringHistory(var1, var2, var3);
}
class="kw">public int getBlock(int var1, int var2, int var3) {
class="kw">return this.previous.hasBlockAtWorldPos(var1, var2, var3) ? this.previous.getBlockAtWorldPos(var1, var2, var3) : this.getOriginalBlock(var1, var2, var3);
}
class="kw">public int getBlockIncludingCurrent(int var1, int var2, int var3) {
class="kw">return this.current.hasBlockAtWorldPos(var1, var2, var3) ? this.current.getBlockAtWorldPos(var1, var2, var3) : this.getBlock(var1, var2, var3);
}
class="kw">public boolean setBlock(int var1, int var2, int var3, int var4) {
boolean var5 = this.previous.hasBlockAtWorldPos(var1, var2, var3) || this.previous.getFluidAtWorldPos(var1, var2, var3) >= 0;
class="kw">switch (this.brushConfig.getHistoryMask()) {
case Only:
if (!var5) {
class="kw">return false;
}
break;
case Not:
if (var5) {
class="kw">return false;
}
case None:
}
if (this.brushConfig.getRandom().nextInt(100) >= this.brushConfig.getDensity()) {
class="kw">return false;
}
if (this.getOriginalBlock(var1, var2, var3) == 0) {
this.packedPlacedBlockPositions.add(BlockUtil.pack(var1, var2, var3));
}
int var6 = this.getBlock(var1, var2, var3);
int var7 = this.getFluid(var1, var2, var3);
BlockMask var8 = this.brushConfig.getBlockMask();
if (var8 != null && var8.isExcluded(this.accessor, var1, var2, var3, this.selectionMin, this.selectionMax, var6, var7)) {
class="kw">return false;
}
if (!this.before.hasBlockAtWorldPos(var1, var2, var3)) {
WorldChunk var9 = this.accessor.getChunkIfInMemory(ChunkUtil.indexChunkFromBlock(var1, var3));
if (var9 != null) {
this.before
.addBlockAtWorldPos(
var1,
var2,
var3,
var6,
var9.getRotationIndex(var1, var2, var3),
var9.getFiller(var1, var2, var3),
var9.getSupportValue(var1, var2, var3),
var9.getBlockComponentHolder(var1, var2, var3)
);
}
}
this.current.addBlockAtWorldPos(var1, var2, var3, var4, 0, 0, 0);
class="kw">return true;
}
class="kw">public boolean setFullBlock(int var1, int var2, int var3, int var4, int var5, int var6, int var7, @Nullable Holder<ChunkStore> var8) {
boolean var9 = this.previous.hasBlockAtWorldPos(var1, var2, var3) || this.previous.getFluidAtWorldPos(var1, var2, var3) >= 0;
class="kw">switch (this.brushConfig.getHistoryMask()) {
case Only:
if (!var9) {
class="kw">return false;
}
break;
case Not:
if (var9) {
class="kw">return false;
}
case None:
}
if (this.brushConfig.getRandom().nextInt(100) >= this.brushConfig.getDensity()) {
class="kw">return false;
}
if (this.getOriginalBlock(var1, var2, var3) == 0) {
this.packedPlacedBlockPositions.add(BlockUtil.pack(var1, var2, var3));
}
int var10 = this.getBlock(var1, var2, var3);
int var11 = this.getFluid(var1, var2, var3);
BlockMask var12 = this.brushConfig.getBlockMask();
if (var12 != null && var12.isExcluded(this.accessor, var1, var2, var3, this.selectionMin, this.selectionMax, var10, var11)) {
class="kw">return false;
}
if (!this.before.hasBlockAtWorldPos(var1, var2, var3)) {
WorldChunk var13 = this.accessor.getChunkIfInMemory(ChunkUtil.indexChunkFromBlock(var1, var3));
if (var13 != null) {
this.before
.addBlockAtWorldPos(
var1,
var2,
var3,
var10,
var13.getRotationIndex(var1, var2, var3),
var13.getFiller(var1, var2, var3),
var13.getSupportValue(var1, var2, var3),
var13.getBlockComponentHolder(var1, var2, var3)
);
}
}
this.current.addBlockAtWorldPos(var1, var2, var3, var4, var5, var6, var7, var8);
class="kw">return true;
}
boolean setFluid(int var1, int var2, int var3, int var4, byte var5) {
boolean var6 = this.previous.hasBlockAtWorldPos(var1, var2, var3) || this.previous.getFluidAtWorldPos(var1, var2, var3) >= 0;
class="kw">switch (this.brushConfig.getHistoryMask()) {
case Only:
if (!var6) {
class="kw">return false;
}
break;
case Not:
if (var6) {
class="kw">return false;
}
case None:
}
if (this.brushConfig.getRandom().nextInt(100) >= this.brushConfig.getDensity()) {
class="kw">return false;
}
int var7 = this.getBlock(var1, var2, var3);
int var8 = this.getFluid(var1, var2, var3);
BlockMask var9 = this.brushConfig.getBlockMask();
if (var9 != null && var9.isExcluded(this.accessor, var1, var2, var3, this.selectionMin, this.selectionMax, var7, var8)) {
class="kw">return false;
}
int var10 = this.before.getFluidAtWorldPos(var1, var2, var3);
if (var10 < 0) {
WorldChunk var11 = this.accessor.getChunkIfInMemory(ChunkUtil.indexChunkFromBlock(var1, var3));
if (var11 != null) {
int var12 = var11.getFluidId(var1, var2, var3);
byte var13 = var11.getFluidLevel(var1, var2, var3);
this.before.addFluidAtWorldPos(var1, var2, var3, var12, var13);
}
}
this.current.addFluidAtWorldPos(var1, var2, var3, var4, var5);
class="kw">return true;
}
class="kw">private int getOriginalFluid(int var1, int var2, int var3) {
WorldChunk var4 = this.accessor.getChunkIfInMemory(ChunkUtil.indexChunkFromBlock(var1, var3));
class="kw">return var4 != null ? var4.getFluidId(var1, var2, var3) : 0;
}
class="kw">public int getFluid(int var1, int var2, int var3) {
int var4 = this.previous.getFluidAtWorldPos(var1, var2, var3);
class="kw">return var4 >= 0 ? var4 : this.getOriginalFluid(var1, var2, var3);
}
class="kw">public boolean setMaterial(int var1, int var2, int var3, @Nonnull Material var4) {
if (var4.isFluid() && var4.getBlockId() == 0) {
class="kw">return this.setFluid(var1, var2, var3, var4.getFluidId(), var4.getFluidLevel());
}
boolean var5 = this.setFullBlock(var1, var2, var3, var4.getBlockId(), var4.getRotation(), var4.getFiller(), var4.getSupport(), var4.getHolder());
if (var5 && var4.isEmpty()) {
this.setFluid(var1, var2, var3, 0, (byte)0);
} else if (var5 && var4.getFluidId() != 0) {
this.setFluid(var1, var2, var3, var4.getFluidId(), var4.getFluidLevel());
}
class="kw">return var5;
}
class="kw">public boolean setMaterialWithFiller(int var1, int var2, int var3, @Nonnull Material var4) {
if (var4.isFluid() && var4.getBlockId() == 0) {
class="kw">return this.setFluid(var1, var2, var3, var4.getFluidId(), var4.getFluidLevel());
}
boolean var5 = this.previous.hasBlockAtWorldPos(var1, var2, var3) || this.previous.getFluidAtWorldPos(var1, var2, var3) >= 0;
class="kw">switch (this.brushConfig.getHistoryMask()) {
case Only:
if (!var5) {
class="kw">return false;
}
break;
case Not:
if (var5) {
class="kw">return false;
}
case None:
}
if (this.brushConfig.getRandom().nextInt(100) >= this.brushConfig.getDensity()) {
class="kw">return false;
}
int var6 = this.getBlock(var1, var2, var3);
int var7 = this.getFluid(var1, var2, var3);
BlockMask var8 = this.brushConfig.getBlockMask();
if (var8 != null && var8.isExcluded(this.accessor, var1, var2, var3, this.selectionMin, this.selectionMax, var6, var7)) {
class="kw">return false;
}
if (this.accessor.getChunkIfInMemory(ChunkUtil.indexChunkFromBlock(var1, var3)) == null) {
class="kw">return false;
}
if (this.getOriginalBlock(var1, var2, var3) == 0) {
this.packedPlacedBlockPositions.add(BlockUtil.pack(var1, var2, var3));
}
int var9 = var4.getBlockId();
if (var9 == 0) {
FillerPlacementUtil.captureAndClearFootprint(this.accessor, this.before, this.current, var1, var2, var3, this.previous);
this.setFluid(var1, var2, var3, 0, (byte)0);
class="kw">return true;
}
boolean var10 = FillerPlacementUtil.stampBlockWithFiller(
this.accessor, this.before, this.current, this.occupied, var1, var2, var3, var9, var4.getRotation(), false, this.previous
);
if (var10 && var4.getFluidId() != 0) {
this.setFluid(var1, var2, var3, var4.getFluidId(), var4.getFluidLevel());
}
class="kw">return var10;
}
@Nonnull
class="kw">public BuilderToolsPlugin.BuilderState.BlocksSampleData getBlockSampledataIncludingPreviousStages(int var1, int var2, int var3, int var4) {
BuilderToolsPlugin.BuilderState.BlocksSampleData var5 = new BuilderToolsPlugin.BuilderState.BlocksSampleData();
Int2IntMap var6 = new Int2IntOpenHashMap();
for (int var7 = var1 - var4; var7 <= var1 + var4; var7++) {
for (int var8 = var3 - var4; var8 <= var3 + var4; var8++) {
for (int var9 = var2 - var4; var9 <= var2 + var4; var9++) {
int var10 = this.getBlock(var7, var9, var8);
var6.put(var10, var6.getOrDefault(var10, 0) + 1);
}
}
}
BlockTypeAssetMap var13 = BlockType.getAssetMap();
ObjectIterator var14 = Int2IntMaps.fastIterable(var6).iterator();
while (var14.hasNext()) {
Entry var15 = (Entry)var14.next();
int var16 = var15.getIntKey();
int var11 = var15.getIntValue();
if (var11 > var5.mainBlockCount) {
var5.mainBlock = var16;
var5.mainBlockCount = var11;
}
BlockType var12 = var13.getAsset(var16);
if (var11 > var5.mainBlockNotAirCount && var16 != 0) {
var5.mainBlockNotAir = var16;
var5.mainBlockNotAirCount = var11;
}
}
class="kw">return var5;
}
class="kw">public void flushCurrentEditsToPrevious() {
this.previous.add(this.current);
this.current = new BlockSelection();
this.current.setPosition(this.brushConfig.getOrigin().x, this.brushConfig.getOrigin().y, this.brushConfig.getOrigin().z);
this.occupied.clear();
}
@Nonnull
class="kw">public BlockSelection getAfter() {
class="kw">return this.previous;
}
@Nonnull
class="kw">public BlockSelection getBefore() {
class="kw">return this.before;
}
}