BlockTypeModule class

Пакет: com.hypixel.hytale.server.core.blocktype

Файл: com/hypixel/hytale/server/core/blocktype/BlockTypeModule.java

extends: JavaPlugin

Поля (70)

МодификаторыТипИмя
instance
WorldChunk var1
int var10
int var10
Ref var10
int var10
int var10
int var11
BlockChunk var11
BlockBoundingBoxes var11
BlockType var11
int var12
int var12
int var12
int var12
String var12
BlockType var13
int var13
int var13
int var13
int var13
int var14
int var14
int var14
int var15
int var15
int var15
int var16
BlockType var16
int var16
int var17
int var17
long var17
int var18
int var18
BlockType var19
Ref var19
Holder var2
String var20
WorldChunk var20
int var21
BlockChunk var21
BlockBoundingBoxes var22
BlockSection var22
int var23
int var24
int var25
BlockType var26
int var27
int var28
BlockType var29
ChunkColumn var3
BlockSection var30
int var31
int var32
Holder[] var4
int var4
BlockType[] var5
BlockTypeAssetMap var5
IndexedLookupTableAssetMap var6
int var6
BlockSection var7
int var7
int var7
int var8
BlockType var8
long var8
int var8
int var9
int var9

Методы (40)

МодификаторыВозвратСигнатура
static void breakOrSetFillerBlocksvoid breakOrSetFillerBlocks(@Nonnull BlockTypeAssetMap<String, BlockType> var0, @Nonnull IndexedLookupTableAssetMap<String, BlockBoundingBoxes> var1, @Nonnull ComponentAccessor<ChunkStore> var2, @Nonnull WorldChunk var3, @Nonnull BlockChunk var4, int var5, int var6, int var7, @Nonnull BlockType var8, int var9)
for for(int var6 = 0; var6 < 10; var6++)
for for(int var7 = 0; var7 < 32; var7++)
for for(int var9 = 0; var9 < 32; var9++)
for for(int var11 = 0; var11 < 32; var11++)
static BlockTypeModule getBlockTypeModule get()
public ComponentType<ChunkStore, BlockPhysics> getBlockPhysicsComponentTypeComponentType<ChunkStore, BlockPhysics> getBlockPhysicsComponentType()
if if(var3 != null)
if if(var4 != null)
if if(var13 != null)
if if(var15 != 0)
if if(var16 >= 0 && var16 < 32)
if if(var17 >= 0 && var17 < 320)
if if(var18 >= 0 && var18 < 32)
if if(var19 != null)
if if(var22 != null)
if if(var10x != 0 || var11x != 0 || var12x != 0)
if if(var13 >= 0 && var13 < 32)
if if(var14 >= 0 && var14 < 320)
if if(var15 >= 0 && var15 < 32)
if if(var8 == null)
if if(var9 == 0)
if if(var10 != 0)
if if(var3 >= 0 && var3 < 32 && var4 >= 0 && var4 < 320 && var5 >= 0 && var5 < 32)
if if(var11 != null)
if if(var11 != null)
if if(var9x != 0 || var10x != 0 || var11x != 0)
if if(var12 >= 0 && var12 < 32 && var13 >= 0 && var13 < 320 && var14 >= 0 && var14 < 32)
if if(var29 != null)
if if(var20 != null)
if if(var26 != null)
if if(var11 == null)
static boolean isFillerValidboolean isFillerValid(@Nonnull BlockTypeAssetMap<String, BlockType> var0, @Nonnull ComponentAccessor<ChunkStore> var1, @Nonnull WorldChunk var2, @Nonnull BlockType var3, int var4, int var5, int var6, int var7)
static void onChunkPreLoadProcessvoid onChunkPreLoadProcess(@Nonnull ChunkPreLoadProcessEvent var0)
static void onChunkSectionPreLoadProcessvoid onChunkSectionPreLoadProcess(@Nonnull WorldChunk var0, @Nonnull BlockSection var1, int var2, @Nonnull BlockType[] var3)
abstract onChunkSectionPreLoadProcess onChunkSectionPreLoadProcess(var1, var7, var6, var5)
static void setFillerBlocksvoid setFillerBlocks(@Nonnull BlockTypeAssetMap<String, BlockType> var0, @Nonnull IndexedLookupTableAssetMap<String, BlockBoundingBoxes> var1, @Nonnull ComponentAccessor<ChunkStore> var2, @Nonnull WorldChunk var3, @Nonnull BlockChunk var4, int var5, int var6, int var7, @Nonnull BlockType var8, int var9)
abstract setFillerBlocks setFillerBlocks(var0, var1, var2, var3, var4, var11, var12, var13, var8, var9)
abstract setFillerBlocks setFillerBlocks(var0, var1, var2, var3, var4, var5, var6, var7, var8, var9)
abstract super super(var1)

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.protocol.BenchType;
class="kw">import com.hypixel.hytale.protocol.BlockMaterial;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.Bench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.CraftingBench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.DiagramCraftingBench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.ProcessingBench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.StructuralCraftingBench;
class="kw">import com.hypixel.hytale.server.core.blocktype.component.BlockPhysics;
class="kw">import com.hypixel.hytale.server.core.modules.LegacyModule;
class="kw">import com.hypixel.hytale.server.core.modules.item.ItemModule;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.ChunkColumn;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.events.ChunkPreLoadProcessEvent;
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 java.util.Arrays;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class BlockTypeModule class="kw">extends JavaPlugin {
   @Nonnull
   class="kw">public class="kw">static class="kw">final PluginManifest MANIFEST = PluginManifest.corePlugin(BlockTypeModule.class).depends(ItemModule.class).depends(LegacyModule.class).build();
   class="kw">public class="kw">static class="kw">final int SET_BLOCK_SETTINGS = 157;
   class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_UP = "BlockTextures/_Debug/Up.png";
   class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_DOWN = "BlockTextures/_Debug/Down.png";
   class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_NORTH = "BlockTextures/_Debug/North.png";
   class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_SOUTH = "BlockTextures/_Debug/South.png";
   class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_EAST = "BlockTextures/_Debug/East.png";
   class="kw">public class="kw">static class="kw">final String DEBUG_CUBE_TEXTURE_WEST = "BlockTextures/_Debug/West.png";
   class="kw">public class="kw">static class="kw">final String DEBUG_MODEL_MODEL = "Blocks/_Debug/Model.blockymodel";
   class="kw">public class="kw">static class="kw">final String DEBUG_MODEL_BLOCK_TEXTURE = "Blocks/_Debug/Texture.png";
   class="kw">public class="kw">static class="kw">final String DEBUG_MODEL_ENTITY_TEXTURE = "Characters/_Debug/Texture.png";
   class="kw">private class="kw">static class="kw">final ThreadLocal<BlockType[]> TEMP_BLOCKS = ThreadLocal.withInitial(() -> new BlockType[32768]);
   class="kw">private class="kw">static BlockTypeModule instance;
   class="kw">private ComponentType<ChunkStore, BlockPhysics> blockPhysicsComponentType;

   class="kw">public class="kw">static BlockTypeModule get() {
      class="kw">return instance;
   }

   class="kw">public BlockTypeModule(@Nonnull JavaPluginInit var1) {
      super(var1);
      instance = this;
   }

   @Override
   class="kw">protected void setup() {
      Bench.CODEC.register(BenchType.Crafting, CraftingBench.class, CraftingBench.CODEC);
      Bench.CODEC.register(BenchType.Processing, ProcessingBench.class, ProcessingBench.CODEC);
      Bench.CODEC.register(BenchType.DiagramCrafting, DiagramCraftingBench.class, DiagramCraftingBench.CODEC);
      Bench.CODEC.register(BenchType.StructuralCrafting, StructuralCraftingBench.class, StructuralCraftingBench.CODEC);
      this.blockPhysicsComponentType = this.getChunkStoreRegistry().registerComponent(BlockPhysics.class, "BlockPhysics", BlockPhysics.CODEC);
   }

   class="kw">public ComponentType<ChunkStore, BlockPhysics> getBlockPhysicsComponentType() {
      class="kw">return this.blockPhysicsComponentType;
   }

   class="kw">private class="kw">static void onChunkPreLoadProcess(@Nonnull ChunkPreLoadProcessEvent var0) {
      if (var0.isNewlyGenerated()) {
         WorldChunk var1 = var0.getChunk();
         Holder var2 = var0.getHolder();
         ChunkColumn var3 = var2.getComponent(ChunkColumn.getComponentType());
         if (var3 != null) {
            Holder[] var4 = var3.getSectionHolders();
            if (var4 != null) {
               BlockType[] var5 = TEMP_BLOCKS.get();

               for (int var6 = 0; var6 < 10; var6++) {
                  BlockSection var7 = var4[var6].ensureAndGetComponent(BlockSection.getComponentType());
                  if (!var7.isSolidAir() && !(var7.getMaximumHitboxExtent() <= 0.0)) {
                     onChunkSectionPreLoadProcess(var1, var7, var6, var5);
                  }
               }
            }
         }
      }
   }

   class="kw">private class="kw">static void onChunkSectionPreLoadProcess(@Nonnull WorldChunk var0, @Nonnull BlockSection var1, int var2, @Nonnull BlockType[] var3) {
      Arrays.fill(var3, null);
      int var4 = var2 << 5;
      BlockTypeAssetMap var5 = BlockType.getAssetMap();
      IndexedLookupTableAssetMap var6 = BlockBoundingBoxes.getAssetMap();

      for (int var7 = 0; var7 < 32; var7++) {
         int var8 = var4 | var7;

         for (int var9 = 0; var9 < 32; var9++) {
            int var10 = var9;

            for (int var11 = 0; var11 < 32; var11++) {
               int var12 = var11;
               BlockType var13 = getBlockType(var5, var3, var1, var10, var8, var12, true);
               if (var13 != null) {
                  int var14 = var1.getRotationIndex(var9, var7, var11);
                  int var15 = var1.getFiller(var9, var7, var11);
                  if (var15 != 0) {
                     int var16 = var10 - FillerBlockUtil.unpackX(var15);
                     if (var16 >= 0 && var16 < 32) {
                        int var17 = var8 - FillerBlockUtil.unpackY(var15);
                        if (var17 >= 0 && var17 < 320) {
                           int var18 = var12 - FillerBlockUtil.unpackZ(var15);
                           if (var18 >= 0 && var18 < 32) {
                              BlockType var19 = getBlockType(var5, var3, var1, var16, var17, var18, false);
                              if (var19 != null) {
                                 String var20 = var13.getId();
                                 if (var13.isUnknown() || !var20.equals(var19.getId())) {
                                    var0.breakBlock(var10, var8, var12, 157);
                                 }
                              }
                           }
                        }
                     }
                  } else {
                     int var21 = var5.getIndex(var13.getId());
                     BlockBoundingBoxes var22 = var6.getAsset(var13.getHitboxTypeIndex());
                     if (var22 != null) {
                        FillerBlockUtil.forEachFillerBlock(var22.get(var14), (var10x, var11x, var12x) -> {
                           if (var10x != 0 || var11x != 0 || var12x != 0) {
                              int var13 = var10 + var10x;
                              if (var13 >= 0 && var13 < 32) {
                                 int var14 = var8 + var11x;
                                 if (var14 >= 0 && var14 < 320) {
                                    int var15 = var12 + var12x;
                                    if (var15 >= 0 && var15 < 32) {
                                       BlockType var16 = getBlockType(var5, var3, var1, var13, var14, var15, false);
                                       if (var16 != null && var16.getMaterial() != BlockMaterial.Solid) {
                                          int var17 = FillerBlockUtil.pack(var10x, var11x, var12x);
                                          var0.setBlock(var13, var14, var15, var21, var13, var14, var17, 157);
                                       }
                                    }
                                 }
                              }
                           }
                        });
                     }
                  }
               }
            }
         }
      }
   }

   @Nullable
   class="kw">private class="kw">static BlockType getBlockType(
      @Nonnull BlockTypeAssetMap<String, BlockType> var0, @Nonnull BlockType[] var1, @Nonnull BlockSection var2, int var3, int var4, int var5, boolean var6
   ) {
      int var7 = ChunkUtil.indexBlock(var3, var4, var5);
      BlockType var8 = var1[var7];
      if (var8 == null) {
         int var9 = var2.get(var3, var4, var5);
         if (var9 == 0) {
            var1[var7] = BlockType.EMPTY;
            class="kw">return var6 ? null : BlockType.EMPTY;
         } else {
            class="kw">return var1[var7] = var0.getAsset(var9);
         }
      } else {
         class="kw">return var6 && "Empty".equals(var8.getId()) ? null : var8;
      }
   }

   class="kw">public class="kw">static void breakOrSetFillerBlocks(
      @Nonnull BlockTypeAssetMap<String, BlockType> var0,
      @Nonnull IndexedLookupTableAssetMap<String, BlockBoundingBoxes> var1,
      @Nonnull ComponentAccessor<ChunkStore> var2,
      @Nonnull WorldChunk var3,
      @Nonnull BlockChunk var4,
      int var5,
      int var6,
      int var7,
      @Nonnull BlockType var8,
      int var9
   ) {
      int var10 = var4.getSectionAtBlockY(var6).getFiller(var5, var6, var7);
      if (var10 != 0) {
         if (!isFillerValid(var0, var2, var3, var8, var10, var5, var6, var7)) {
            var3.breakBlock(var5, var6, var7, 157);
         } else {
            int var11 = var5 - FillerBlockUtil.unpackX(var10);
            int var12 = var6 - FillerBlockUtil.unpackY(var10);
            int var13 = var7 - FillerBlockUtil.unpackZ(var10);
            setFillerBlocks(var0, var1, var2, var3, var4, var11, var12, var13, var8, var9);
         }
      } else {
         setFillerBlocks(var0, var1, var2, var3, var4, var5, var6, var7, var8, var9);
      }
   }

   @Nullable
   class="kw">private class="kw">static BlockType getOriginBlockType(
      @Nonnull BlockTypeAssetMap<String, BlockType> var0, @Nonnull ComponentAccessor<ChunkStore> var1, @Nonnull WorldChunk var2, int var3, int var4, int var5
   ) {
      if (var3 >= 0 && var3 < 32 && var4 >= 0 && var4 < 320 && var5 >= 0 && var5 < 32) {
         int var13 = var2.getBlock(var3, var4, var5);
         class="kw">return var0.getAsset(var13);
      }

      int var6 = (var2.getX() << 5) + var3;
      int var7 = (var2.getZ() << 5) + var5;
      long var8 = ChunkUtil.indexChunkFromBlock(var6, var7);
      Ref var10 = var1.getExternalData().getChunkReference(var8);
      if (var10 != null && var10.isValid()) {
         BlockChunk var11 = var1.getComponent(var10, BlockChunk.getComponentType());
         if (var11 != null) {
            int var12 = var11.getBlock(var3, var4, var5);
            class="kw">return var0.getAsset(var12);
         }
      }

      get().getLogger().at(Level.WARNING).log("Origin chunk not in memory when resolving filler origin block! Origin: %s, %s, %s", var3, var4, var5);
      class="kw">return null;
   }

   class="kw">private class="kw">static void setFillerBlocks(
      @Nonnull BlockTypeAssetMap<String, BlockType> var0,
      @Nonnull IndexedLookupTableAssetMap<String, BlockBoundingBoxes> var1,
      @Nonnull ComponentAccessor<ChunkStore> var2,
      @Nonnull WorldChunk var3,
      @Nonnull BlockChunk var4,
      int var5,
      int var6,
      int var7,
      @Nonnull BlockType var8,
      int var9
   ) {
      int var10 = var0.getIndex(var8.getId());
      BlockBoundingBoxes var11 = var1.getAsset(var8.getHitboxTypeIndex());
      if (var11 != null) {
         FillerBlockUtil.forEachFillerBlock(
            var11.get(var9),
            (var9x, var10x, var11x) -> {
               if (var9x != 0 || var10x != 0 || var11x != 0) {
                  int var12 = var5 + var9x;
                  int var13 = var6 + var10x;
                  int var14 = var7 + var11x;
                  if (var12 >= 0 && var12 < 32 && var13 >= 0 && var13 < 320 && var14 >= 0 && var14 < 32) {
                     int var28 = var4.getBlock(var12, var13, var14);
                     BlockType var29 = var0.getAsset(var28);
                     if (var29 != null) {
                        BlockSection var30 = var4.getSectionAtBlockY(var13);
                        int var18 = var30.getRotationIndex(var12, var13, var14);
                        int var31 = var30.getFiller(var12, var13, var14);
                        if ((var31 == 0 || !isFillerValid(var0, var2, var3, var29, var31, var12, var13, var14)) && var29.getMaterial() != BlockMaterial.Solid) {
                           int var32 = FillerBlockUtil.pack(var9x, var10x, var11x);
                           var3.setBlock(var12, var13, var14, var10, var8, var18, var32, 157);
                        }
                     }
                  } else {
                     int var15 = (var3.getX() << 5) + var12;
                     int var16 = (var3.getZ() << 5) + var14;
                     long var17 = ChunkUtil.indexChunkFromBlock(var15, var16);
                     Ref var19 = var2.getExternalData().getChunkReference(var17);
                     if (var19 != null && var19.isValid()) {
                        WorldChunk var20 = var2.getComponent(var19, WorldChunk.getComponentType());
                        if (var20 != null) {
                           BlockChunk var21 = var2.getComponent(var19, BlockChunk.getComponentType());
                           assert var21 != null;
                           BlockSection var22 = var21.getSectionAtBlockY(var13);
                           int var23 = var20.getBlock(var12, var13, var14);
                           int var24 = var22.getRotationIndex(var12, var13, var14);
                           int var25 = var22.getFiller(var12, var13, var14);
                           BlockType var26 = var0.getAsset(var23);
                           if (var26 != null) {
                              if ((var25 == 0 || !isFillerValid(var0, var2, var3, var26, var25, var12, var13, var14))
                                 && var26.getMaterial() != BlockMaterial.Solid) {
                                 int var27 = FillerBlockUtil.pack(var9x, var10x, var11x);
                                 var20.setBlock(var12, var13, var14, var10, var8, var24, var27, 157);
                              }
                           }
                        }
                     }
                  }
               }
            }
         );
      }
   }

   class="kw">private class="kw">static boolean isFillerValid(
      @Nonnull BlockTypeAssetMap<String, BlockType> var0,
      @Nonnull ComponentAccessor<ChunkStore> var1,
      @Nonnull WorldChunk var2,
      @Nonnull BlockType var3,
      int var4,
      int var5,
      int var6,
      int var7
   ) {
      int var8 = var5 - FillerBlockUtil.unpackX(var4);
      int var9 = var6 - FillerBlockUtil.unpackY(var4);
      int var10 = var7 - FillerBlockUtil.unpackZ(var4);
      BlockType var11 = getOriginBlockType(var0, var1, var2, var8, var9, var10);
      if (var11 == null) {
         class="kw">return false;
      }

      if (var3.isUnknown()) {
         class="kw">return false;
      }

      String var12 = var3.getId();
      class="kw">return var12.equals(var11.getId());
   }
}