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