EditOperation class
Пакет: com.hypixel.hytale.builtin.buildertools
Файл: com/hypixel/hytale/builtin/buildertools/EditOperation.java
Поля (25)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
BlockMask |
blockMask |
|
int |
var10 |
|
int |
var10 |
|
byte |
var11 |
|
int |
var11 |
|
int |
var12 |
|
int |
var13 |
|
long |
var3 |
|
Store |
var3 |
|
WorldChunk |
var4 |
|
int |
var5 |
|
WorldChunk |
var5 |
|
int |
var6 |
|
int |
var6 |
|
WorldChunk |
var6 |
|
long |
var6 |
|
int |
var7 |
|
WorldChunk |
var7 |
|
int |
var7 |
|
WorldChunk |
var8 |
|
int |
var8 |
|
int |
var8 |
|
WorldChunk |
var8 |
|
int |
var9 |
|
int |
var9 |
Методы (24)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
boolean |
clearFluidboolean clearFluid(int var1, int var2, int var3) |
public |
int |
getBlockint getBlock(int var1, int var2, int var3) |
public |
BlockMask |
getBlockMaskBlockMask getBlockMask() |
public |
int |
getFluidint getFluid(int var1, int var2, int var3) |
public |
List<EntityTransformSnapshot> |
getMovedEntitySnapshotsList<EntityTransformSnapshot> getMovedEntitySnapshots() |
public |
List<Ref<EntityStore>> |
getSpawnedEntityRefsList<Ref<EntityStore>> getSpawnedEntityRefs() |
public |
int |
getTintint getTint(int var1, int var2) |
|
|
if if(var6 != null && var7 != null) |
|
|
if if(var8 == null) |
|
|
if if(var4 == 0) |
|
|
if if(var7 == null) |
|
|
if if(var8 == 0) |
|
|
if if(var6 == null) |
|
|
if if(var9 < 0) |
|
|
if if(var5 == null) |
public |
void |
removeEntityvoid removeEntity(Ref<EntityStore> var1, Holder<EntityStore> var2) |
public |
boolean |
setBlockboolean setBlock(int var1, int var2, int var3, int var4) |
public |
boolean |
setBlockboolean setBlock(int var1, int var2, int var3, int var4, int var5) |
private |
boolean |
setFluidboolean setFluid(int var1, int var2, int var3, int var4, byte var5) |
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) |
public |
boolean |
setTintboolean setTint(int var1, int var2, int var3, double var4) |
public |
void |
trackMovedEntityvoid trackMovedEntity(Ref<EntityStore> var1, ComponentAccessor<EntityStore> var2) |
public |
void |
trackSpawnedEntityvoid trackSpawnedEntity(Ref<EntityStore> var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools;
class="kw">import com.hypixel.hytale.builtin.buildertools.snapshot.EntityTransformSnapshot;
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.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
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.accessor.LocalCachedChunkAccessor;
class="kw">import com.hypixel.hytale.server.core.universe.world.accessor.OverridableChunkAccessor;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;
class="kw">public class EditOperation {
class="kw">private class="kw">final BlockMask blockMask;
@Nonnull
class="kw">private class="kw">final OverridableChunkAccessor accessor;
@Nonnull
class="kw">private class="kw">final LongOpenHashSet occupied = new LongOpenHashSet();
@Nonnull
class="kw">private class="kw">final BlockSelection before;
@Nonnull
class="kw">private class="kw">final BlockSelection after;
@Nonnull
class="kw">private class="kw">final World world;
@Nullable
class="kw">private class="kw">final Vector3i selectionMin;
@Nullable
class="kw">private class="kw">final Vector3i selectionMax;
class="kw">private class="kw">final List<Ref<EntityStore>> spawnedEntityRefs = new ReferenceArrayList();
class="kw">private class="kw">final List<EntityTransformSnapshot> movedEntitySnapshots = new ArrayList<>();
class="kw">public EditOperation(
@Nonnull World var1,
int var2,
int var3,
int var4,
int var5,
@Nullable Vector3i var6,
@Nullable Vector3i var7,
@Nullable Vector3i var8,
@Nullable Vector3i var9,
BlockMask var10
) {
this.blockMask = var10;
this.accessor = LocalCachedChunkAccessor.atWorldCoords(var1, var2, var4, var5);
this.world = var1;
this.selectionMin = var8;
this.selectionMax = var9;
this.before = new BlockSelection();
this.before.setPosition(var2, var3, var4);
if (var6 != null && var7 != null) {
this.before.setSelectionArea(var6, var7);
}
this.after = new BlockSelection(this.before);
}
class="kw">public BlockMask getBlockMask() {
class="kw">return this.blockMask;
}
@Nullable
class="kw">public Vector3i getSelectionMin() {
class="kw">return this.selectionMin;
}
@Nullable
class="kw">public Vector3i getSelectionMax() {
class="kw">return this.selectionMax;
}
@Nonnull
class="kw">public BlockSelection getBefore() {
class="kw">return this.before;
}
@Nonnull
class="kw">public BlockSelection getAfter() {
class="kw">return this.after;
}
@Nonnull
class="kw">public OverridableChunkAccessor getAccessor() {
class="kw">return this.accessor;
}
class="kw">public int getBlock(int var1, int var2, int var3) {
class="kw">return this.accessor.getBlock(var1, var2, var3);
}
class="kw">public boolean setBlock(int var1, int var2, int var3, int var4) {
class="kw">return this.setBlock(var1, var2, var3, var4, 0);
}
class="kw">public boolean setBlock(int var1, int var2, int var3, int var4, int var5) {
int var6 = this.getBlock(var1, var2, var3);
int var7 = this.getFluid(var1, var2, var3);
if (this.blockMask != null && this.blockMask.isExcluded(this.accessor, var1, var2, var3, this.selectionMin, this.selectionMax, var6, var7)) {
class="kw">return false;
}
WorldChunk var8 = this.accessor.getChunkIfInMemory(ChunkUtil.indexChunkFromBlock(var1, var3));
if (var8 == null) {
class="kw">return false;
}
if (!this.before.hasBlockAtWorldPos(var1, var2, var3)) {
this.before
.addBlockAtWorldPos(
var1,
var2,
var3,
var6,
var8.getRotationIndex(var1, var2, var3),
var8.getFiller(var1, var2, var3),
var8.getSupportValue(var1, var2, var3),
var8.getBlockComponentHolder(var1, var2, var3)
);
if (this.before.getFluidAtWorldPos(var1, var2, var3) < 0 && var7 != 0) {
this.before.addFluidAtWorldPos(var1, var2, var3, var7, var8.getFluidLevel(var1, var2, var3));
}
}
this.after.addBlockAtWorldPos(var1, var2, var3, var4, var5, 0, 0);
if (var4 == 0) {
this.setFluid(var1, var2, var3, 0, (byte)0);
}
class="kw">return true;
}
class="kw">public boolean setMaterialWithFiller(int var1, int var2, int var3, @Nonnull Material var4) {
if (var4.isFluid()) {
class="kw">return this.setFluid(var1, var2, var3, var4.getFluidId(), var4.getFluidLevel());
}
int var5 = this.getBlock(var1, var2, var3);
int var6 = this.getFluid(var1, var2, var3);
if (this.blockMask != null && this.blockMask.isExcluded(this.accessor, var1, var2, var3, this.selectionMin, this.selectionMax, var5, var6)) {
class="kw">return false;
}
WorldChunk var7 = this.accessor.getChunkIfInMemory(ChunkUtil.indexChunkFromBlock(var1, var3));
if (var7 == null) {
class="kw">return false;
}
if (this.before.getFluidAtWorldPos(var1, var2, var3) < 0 && var6 != 0) {
this.before.addFluidAtWorldPos(var1, var2, var3, var6, var7.getFluidLevel(var1, var2, var3));
}
int var8 = var4.getBlockId();
if (var8 == 0) {
FillerPlacementUtil.captureAndClearFootprint(this.accessor, this.before, this.after, var1, var2, var3);
this.setFluid(var1, var2, var3, 0, (byte)0);
class="kw">return true;
} else {
class="kw">return FillerPlacementUtil.stampBlockWithFiller(
this.accessor, this.before, this.after, this.occupied, var1, var2, var3, var8, var4.getRotation(), false
);
}
}
class="kw">private boolean setFluid(int var1, int var2, int var3, int var4, byte var5) {
WorldChunk var6 = this.accessor.getChunkIfInMemory(ChunkUtil.indexChunkFromBlock(var1, var3));
if (var6 == null) {
class="kw">return false;
}
int var7 = this.getBlock(var1, var2, var3);
int var8 = this.getFluid(var1, var2, var3);
if (this.blockMask != null && this.blockMask.isExcluded(this.accessor, var1, var2, var3, this.selectionMin, this.selectionMax, var7, var8)) {
class="kw">return false;
}
int var9 = this.before.getFluidAtWorldPos(var1, var2, var3);
if (var9 < 0) {
int var10 = var6.getFluidId(var1, var2, var3);
byte var11 = var6.getFluidLevel(var1, var2, var3);
this.before.addFluidAtWorldPos(var1, var2, var3, var10, var11);
}
this.after.addFluidAtWorldPos(var1, var2, var3, var4, var5);
class="kw">return true;
}
class="kw">public boolean clearFluid(int var1, int var2, int var3) {
class="kw">return this.getFluid(var1, var2, var3) == 0 ? false : this.setFluid(var1, var2, var3, 0, (byte)0);
}
class="kw">public int getFluid(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 boolean setMaterial(int var1, int var2, int var3, @Nonnull Material var4) {
class="kw">return var4.isFluid()
? this.setFluid(var1, var2, var3, var4.getFluidId(), var4.getFluidLevel())
: this.setBlock(var1, var2, var3, var4.getBlockId(), var4.getRotation());
}
class="kw">public boolean setTint(int var1, int var2, int var3, double var4) {
if (!this.before.hasTintAtWorldPos(var1, var2)) {
long var6 = ChunkUtil.indexChunkFromBlock(var1, var2);
WorldChunk var8 = this.world.getNonTickingChunk(var6);
int var9 = var8.getBlockChunk().getTint(var1, var2);
int var10 = (int)MathUtil.lerp(var9 >> 16 & 0xFF, var3 >> 16 & 0xFF, var4);
int var11 = (int)MathUtil.lerp(var9 >> 8 & 0xFF, var3 >> 8 & 0xFF, var4);
int var12 = (int)MathUtil.lerp(var9 & 0xFF, var3 & 0xFF, var4);
int var13 = var10 << 16 | var11 << 8 | var12;
this.before.addTintAtWorldPos(var1, var2, var9);
this.after.addTintAtWorldPos(var1, var2, var13);
class="kw">return true;
} else {
class="kw">return false;
}
}
class="kw">public int getTint(int var1, int var2) {
long var3 = ChunkUtil.indexChunkFromBlock(var1, var2);
WorldChunk var5 = this.world.getNonTickingChunk(var3);
if (var5 == null) {
class="kw">return 0;
} else {
class="kw">return var5.getBlockChunk() == null ? 0 : var5.getBlockChunk().getTint(var1, var2);
}
}
class="kw">public void removeEntity(Ref<EntityStore> var1, Holder<EntityStore> var2) {
this.before.addEntityFromWorld(var2.clone());
Store var3 = this.world.getEntityStore().getStore();
this.world.execute(() -> var3.removeEntity(var1, RemoveReason.UNLOAD));
}
class="kw">public void trackSpawnedEntity(Ref<EntityStore> var1) {
this.spawnedEntityRefs.add(var1);
}
class="kw">public List<Ref<EntityStore>> getSpawnedEntityRefs() {
class="kw">return this.spawnedEntityRefs;
}
class="kw">public void trackMovedEntity(Ref<EntityStore> var1, ComponentAccessor<EntityStore> var2) {
this.movedEntitySnapshots.add(new EntityTransformSnapshot(var1, var2));
}
class="kw">public List<EntityTransformSnapshot> getMovedEntitySnapshots() {
class="kw">return this.movedEntitySnapshots;
}
}