BlockOperations class

Пакет: com.hypixel.hytale.server.core.universe.world.chunk

Файл: com/hypixel/hytale/server/core/universe/world/chunk/BlockOperations.java

Поля (61)

МодификаторыТипИмя
Store var10
int var10
int var10
var10
var10
int var10
BlockType var10
ChunkSection var11
int var11
int var11
var11
var11
int var11
BlockSection var12
boolean var12
int var12
Ref var13
TickProcedure var13
int var13
Ref var14
BlockChunk var14
int var14
short var15
BlockComponentSection var15
Ref var15
int var16
BlockSection var16
int var17
BlockType var17
int var18
boolean var19
World var20
int var21
int var22
int var23
short var24
var24
Holder var25
Holder var26
var26
var26
Store var27
TickProcedure var28
FillerBlockUtil.ChangeReason var29
var29
BlockSection var4
IndexedLookupTableAssetMap var7
short var7
var7
var7
WorldNotificationHandler var7
BlockBoundingBoxes var8
BlockBoundingBoxes var8
int var8
BlockParticleEvent var8
BlockSection var8
int var9
var9
var9
int var9
String var9

Методы (25)

МодификаторыВозвратСигнатура
if if(var25 != null && var12 == 0)
if if(var11 == null)
if if(var12)
if if(var2 != null)
if if(var16 == null)
if if(var17 == null)
if if(var8 != null)
if if(var4 != null)
if if(var4 >= 0 && var4 < 320)
if if(var6 <= var4)
if if(var6 == var4 && var1 == 0)
if if(var1 == 0 && var2 != 0)
if if(var8 != null)
if if(var10 != null)
static boolean setBlockboolean setBlock(ChunkStore var0, Ref<ChunkStore> var1, ChunkSection var2, BlockSection var3, BlockComponentSection var4, BlockChunk var5, int var6, int var7, int var8, int var9, @Nonnull BlockType var10, int var11, int var12, int var13)
static boolean setBlockboolean setBlock(@Nonnull ChunkStore var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, int var5, @Nonnull BlockType var6, int var7, int var8, int var9)
abstract return setBlockreturn setBlock(var0, var1, var11, var12, var15, var14, var2, var3, var4, var5, var6, var7, var8, var9)
static void setBlockInteractionStatevoid setBlockInteractionState(@Nonnull ChunkStore var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, @Nonnull BlockType var5, @Nonnull String var6, boolean var7)
static boolean setBlockPreLoadboolean setBlockPreLoad(@Nonnull ChunkSection var0, @Nonnull BlockSection var1, @Nullable BlockChunk var2, int var3, int var4, int var5, int var6, @Nonnull BlockType var7, int var8, int var9)
static void spawnBlockParticlesvoid spawnBlockParticles(ChunkStore var0, int var1, int var2, int var3, int var4, int var5, boolean var6)
abstract boolean testboolean test(int var1, int var2, int var3, BlockType var4, int var5, int var6)
static boolean testPlaceBlockboolean testPlaceBlock(ComponentAccessor<ChunkStore> var0, BlockSection var1, int var2, int var3, int var4, @Nonnull BlockType var5, int var6)
static boolean testPlaceBlockboolean testPlaceBlock(ComponentAccessor<ChunkStore> var0, BlockSection var1, int var2, int var3, int var4, @Nonnull BlockType var5, int var6, BlockOperations.TestBlockFunction var7)
static void updateBlockAreavoid updateBlockArea(ChunkStore var0, BlockSection var1, BlockType var2, int var3, int var4, int var5, int var6)
static short updateBlockHeightshort updateBlockHeight(BlockChunk var0, int var1, BlockType var2, int var3, int var4, int var5, short var6)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.chunk;

class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
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.Store;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.protocol.BlockMaterial;
class="kw">import com.hypixel.hytale.protocol.BlockParticleEvent;
class="kw">import com.hypixel.hytale.protocol.Opacity;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.BlockTickManager;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.config.TickProcedure;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.blocktype.component.BlockPhysics;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockEntity;
class="kw">import com.hypixel.hytale.server.core.modules.blockanimation.BlockAnimationModule;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.WorldNotificationHandler;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockComponentSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.util.FillerBlockUtil;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class BlockOperations {
   class="kw">public BlockOperations() {
   }

   class="kw">public class="kw">static boolean setBlock(
      ChunkStore var0,
      Ref<ChunkStore> var1,
      ChunkSection var2,
      BlockSection var3,
      BlockComponentSection var4,
      BlockChunk var5,
      int var6,
      int var7,
      int var8,
      int var9,
      @Nonnull BlockType var10,
      int var11,
      int var12,
      int var13
   ) {
      Ref var14 = var2.getChunkColumnReference();
      short var15 = var5.getHeight(var6, var8);
      int var16 = var3.getRotationIndex(var6, var7, var8);
      int var17 = var3.getFiller(var6, var7, var8);
      int var18 = var3.get(var6, var7, var8);
      boolean var19 = (var18 != var9 || var11 != var16) && var3.set(var6, var7, var8, var9, var11, var12);
      World var20 = var0.getWorld();
      if (var19 || (var13 & 64) != 0) {
         var2.markNeedsSaving();
         int var21 = (var2.getX() << 5) + (var6 & 31);
         int var22 = (var2.getY() << 5) + (var7 & 31);
         int var23 = (var2.getZ() << 5) + (var8 & 31);
         if ((var13 & 64) != 0) {
            var3.invalidateBlock(var6, var7, var8);
         }

         short var24 = var15;
         if ((var13 & 512) == 0) {
            var24 = updateBlockHeight(var5, var9, var10, var6, var7, var8, var15);
         }

         if ((var13 & 4) == 0) {
            spawnBlockParticles(var0, var18, var9, var21, var22, var23, (var13 & 32) != 0);
         }

         BlockAnimationModule.onBlockReplaced(var0.getStore(), var1, ChunkUtil.indexBlock(var6, var7, var8), var18, var9);
         if ((var13 & 2) == 0 && var4 != null) {
            Holder var25 = var10.getBlockEntity();
            Holder var26;
            if (var25 != null && var12 == 0) {
               var26 = var25.clone();
            } else {
               var26 = null;
            }

            BlockEntity.setBlockEntity(var20.getChunkStore().getStore(), var1, var4, var21, var22, var23, var10, var11, var26);
         }

         var20.getChunkLighting().invalidateLightAtBlock(var20.getChunkStore(), var6, var7, var8, var10, var15, var24);
         TickProcedure var28 = BlockTickManager.getBlockTickProvider().getTickProcedure(var9);
         var3.setTicking(var6, var7, var8, var28 != null);
         FillerBlockUtil.ChangeReason var29 = FillerBlockUtil.ChangeReason.NONE;
         if ((var13 & 4) == 0) {
            var29 = (var13 & 32) != 0 ? FillerBlockUtil.ChangeReason.BY_PHYSICS : FillerBlockUtil.ChangeReason.NORMAL;
         }

         if ((var13 & 16) == 0 && var4 != null) {
            FillerBlockUtil.removeFillerBlocksAt(var20.getChunkStore().getStore(), var3, var4, var21, var22, var23, var18, var17, var16, var29);
         }

         if ((var13 & 8) == 0 && var12 == 0 && var4 != null) {
            Store var27 = var0.getStore();
            FillerBlockUtil.setFillerBlocksAt(var27, var1, var3, var4, var21, var22, var23, var9, var12, var11, var29);
         }

         if ((var13 & 256) != 0) {
            updateBlockArea(var20.getChunkStore(), var3, var10, var11, var6, var7, var8);
         }

         if (var14 != null && var14.isValid()) {
            if (!var10.hasSupport()) {
               BlockPhysics.clear(var0.getStore(), var1, var6, var7, var8);
            } else {
               BlockPhysics.reset(var0.getStore(), var1, var6, var7, var8);
            }
         }
      }

      class="kw">return var19;
   }

   class="kw">public class="kw">static boolean setBlock(
      @Nonnull ChunkStore var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, int var5, @Nonnull BlockType var6, int var7, int var8, int var9
   ) {
      Store var10 = var0.getStore();
      ChunkSection var11 = var10.getComponent(var1, ChunkSection.getComponentType());
      if (var11 == null) {
         class="kw">return false;
      }

      BlockSection var12 = var10.getComponent(var1, BlockSection.getComponentType());
      Ref var13 = var11.getChunkColumnReference();
      BlockChunk var14 = var10.getComponent(var13, BlockChunk.getComponentType());
      BlockComponentSection var15 = var10.getComponent(var1, BlockComponentSection.getComponentType());
      class="kw">return setBlock(var0, var1, var11, var12, var15, var14, var2, var3, var4, var5, var6, var7, var8, var9);
   }

   class="kw">public class="kw">static boolean setBlockPreLoad(
      @Nonnull ChunkSection var0,
      @Nonnull BlockSection var1,
      @Nullable BlockChunk var2,
      int var3,
      int var4,
      int var5,
      int var6,
      @Nonnull BlockType var7,
      int var8,
      int var9
   ) {
      int var10 = var1.getRotationIndex(var3, var4, var5);
      int var11 = var1.get(var3, var4, var5);
      boolean var12 = (var11 != var6 || var8 != var10) && var1.set(var3, var4, var5, var6, var8, var9);
      if (var12) {
         var0.markNeedsSaving();
         if (var2 != null) {
            updateBlockHeight(var2, var6, var7, var3, var4, var5, var2.getHeight(var3, var5));
         }

         TickProcedure var13 = BlockTickManager.getBlockTickProvider().getTickProcedure(var6);
         var1.setTicking(var3, var4, var5, var13 != null);
      }

      class="kw">return var12;
   }

   class="kw">public class="kw">static boolean testPlaceBlock(ComponentAccessor<ChunkStore> var0, BlockSection var1, int var2, int var3, int var4, @Nonnull BlockType var5, int var6) {
      class="kw">return testPlaceBlock(var0, var1, var2, var3, var4, var5, var6, (var0x, var1x, var2x, var3x, var4x, var5x) -> false);
   }

   class="kw">public class="kw">static boolean testPlaceBlock(
      ComponentAccessor<ChunkStore> var0,
      BlockSection var1,
      int var2,
      int var3,
      int var4,
      @Nonnull BlockType var5,
      int var6,
      BlockOperations.TestBlockFunction var7
   ) {
      BlockBoundingBoxes var8 = BlockBoundingBoxes.getAssetMap().getAsset(var5.getHitboxType());
      class="kw">return var8 == null ? false : FillerBlockUtil.testFillerBlocks(var8.get(var6), (var6x, var7x, var8x) -> {
         int var12 = var2 + var6x;
         int var13 = var3 + var7x;
         int var14 = var4 + var8x;
         int var9;
         int var10;
         int var11;
         if (ChunkUtil.isSameChunkSection(var2, var3, var4, var12, var13, var14)) {
            var9 = var1.get(var12, var13, var14);
            var10 = var1.getRotationIndex(var12, var13, var14);
            var11 = var1.getFiller(var12, var13, var14);
         } else {
            Ref var15 = var0.getExternalData().getChunkSectionReferenceAtBlock(var12, var13, var14);
            if (var15 == null || !var15.isValid()) {
               class="kw">return false;
            }

            BlockSection var16 = var0.getComponent(var15, BlockSection.getComponentType());
            if (var16 == null) {
               class="kw">return false;
            }

            var9 = var16.get(var12, var13, var14);
            var10 = var16.getRotationIndex(var12, var13, var14);
            var11 = var16.getFiller(var12, var13, var14);
         }

         BlockType var17 = BlockType.getAssetMap().getAsset(var9);
         if (var17 == null) {
            class="kw">return false;
         } else if (var17 == BlockType.EMPTY) {
            class="kw">return true;
         } else if (var17.getMaterial() == BlockMaterial.Empty) {
            class="kw">return true;
         } else {
            class="kw">return var11 != 0 && var17.isUnknown() ? true : var7.test(var12, var13, var14, var17, var10, var11);
         }
      });
   }

   class="kw">public class="kw">static void updateBlockArea(ChunkStore var0, BlockSection var1, BlockType var2, int var3, int var4, int var5, int var6) {
      IndexedLookupTableAssetMap var7 = BlockBoundingBoxes.getAssetMap();
      BlockBoundingBoxes var8 = var7.getAsset(var2.getHitboxTypeIndex());
      if (var8 != null) {
         FillerBlockUtil.forEachFillerBlock(0.0F, 1, var8.get(var3), (var5x, var6x, var7x) -> {
            int var8 = var4 + var5x;
            int var9 = var5 + var6x;
            int var10 = var6 + var7x;
            if (ChunkUtil.isSameChunkSection(var8, var9, var10, var4, var5, var6)) {
               var1.setTicking(var8, var9, var10, true);
            } else {
               var0.getChunkSectionReferenceAtBlockAsync(var8, var9, var10, 3).thenAccept(var3x -> {
                  if (var3x != null && var3x.isValid()) {
                     BlockSection var4 = var3x.getStore().getComponent((Ref<ChunkStore>)var3x, BlockSection.getComponentType());
                     if (var4 != null) {
                        var4.setTicking(var8, var9, var10, true);
                     }
                  }
               });
            }
         });
      }
   }

   class="kw">public class="kw">static short updateBlockHeight(BlockChunk var0, int var1, BlockType var2, int var3, int var4, int var5, short var6) {
      if (var4 >= 0 && var4 < 320) {
         short var7 = var6;
         if (var6 <= var4) {
            if (var6 == var4 && var1 == 0) {
               var7 = var0.updateHeight(var3, var5, (short)var4);
            } else if (var6 < var4 && var1 != 0 && var2.getOpacity() != Opacity.Transparent) {
               var7 = (short)var4;
               var0.setHeight(var3, var5, var7);
            }
         }

         class="kw">return var7;
      } else {
         class="kw">return var6;
      }
   }

   class="kw">public class="kw">static void spawnBlockParticles(ChunkStore var0, int var1, int var2, int var3, int var4, int var5, boolean var6) {
      WorldNotificationHandler var7 = var0.getWorld().getNotificationHandler();
      if (var1 == 0 && var2 != 0) {
         var7.sendBlockParticle(var3 + 0.5, var4 + 0.5, var5 + 0.5, var2, BlockParticleEvent.Build);
      } else if (var1 != 0 && var2 == 0) {
         BlockParticleEvent var8 = var6 ? BlockParticleEvent.Physics : BlockParticleEvent.Break;
         var7.sendBlockParticle(var3 + 0.5, var4 + 0.5, var5 + 0.5, var1, var8);
      } else {
         var7.sendBlockParticle(var3 + 0.5, var4 + 0.5, var5 + 0.5, var1, BlockParticleEvent.Break);
         var7.sendBlockParticle(var3 + 0.5, var4 + 0.5, var5 + 0.5, var2, BlockParticleEvent.Build);
      }
   }

   class="kw">public class="kw">static void setBlockInteractionState(
      @Nonnull ChunkStore var0, @Nonnull Ref<ChunkStore> var1, int var2, int var3, int var4, @Nonnull BlockType var5, @Nonnull String var6, boolean var7
   ) {
      BlockSection var8 = var0.getStore().getComponent(var1, BlockSection.getComponentType());
      if (var8 != null) {
         if (var5.getData() != null) {
            String var9 = var5.getState() != null ? var5.getStateForBlock(var5) : null;
            if (var7 || var9 == null || !var9.equals(var6)) {
               BlockType var10 = var5.getBlockForState(var6);
               if (var10 != null) {
                  int var11 = 198;
                  int var12 = var8.getRotationIndex(var2, var3, var4);
                  setBlock(var0, var1, var2, var3, var4, BlockType.getAssetMap().getIndex(var10.getId()), var10, var12, 0, 198);
               }
            }
         }
      }
   }

   @FunctionalInterface
   class="kw">public class="kw">interface TestBlockFunction {
      boolean test(int var1, int var2, int var3, BlockType var4, int var5, int var6);
   }
}