BlockDataProvider class

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

Файл: com/hypixel/hytale/server/core/modules/collision/BlockDataProvider.java

extends: BlockData

Поля (10)

МодификаторыТипИмя
static int FULL_LEVEL
int var4
FluidSection var4
FluidSection var4
int var4
int var5
int var5
Fluid var6
int var6
byte var7

Методы (18)

МодификаторыВозвратСигнатура
public void cleanupvoid cleanup()
protected void cleanup0void cleanup0()
if if(this.blockId != var4 || this.fluidId != var5)
if if(var4 == 0 && var5 == 0)
if if(this.chunkSectionRef == null)
if if(this.chunkSectionRef == null)
if if(var1 == 0)
public void initializevoid initialize(World var1)
static int materialFromFillLevelint materialFromFillLevel(@Nonnull Fluid var0, byte var1)
public void readvoid read(int var1, int var2, int var3)
protected int readBlockIdint readBlockId(int var1, int var2, int var3)
protected int readFillerint readFiller(int var1, int var2, int var3)
protected int readFluidIdint readFluidId(int var1, int var2, int var3)
protected byte readFluidLevelbyte readFluidLevel(int var1, int var2, int var3)
protected int readRotationint readRotation(int var1, int var2, int var3)
protected void refreshSectionvoid refreshSection(int var1, int var2, int var3)
protected void setBlockvoid setBlock(int var1, @Nonnull BlockType var2, int var3, int var4, BlockBoundingBoxes var5)
protected void setBlockvoid setBlock(int var1, @Nonnull BlockType var2, int var3, int var4)

Исходный код

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

class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
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.fluid.Fluid;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
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.FluidSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class BlockDataProvider class="kw">extends BlockData {
   class="kw">protected class="kw">static int FULL_LEVEL = 8;
   @Nullable
   class="kw">protected World world;
   @Nullable
   class="kw">protected BlockSection chunkSection;
   class="kw">protected int chunkX;
   class="kw">protected int chunkY;
   class="kw">protected int chunkZ;
   @Nullable
   class="kw">protected Ref<ChunkStore> chunkSectionRef;

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

   class="kw">public void initialize(World var1) {
      this.world = var1;
      this.blockId = Integer.MIN_VALUE;
      this.cleanup0();
   }

   class="kw">public void cleanup() {
      this.world = null;
      this.cleanup0();
   }

   class="kw">public void read(int var1, int var2, int var3) {
      int var4 = this.readBlockId(var1, var2, var3);
      int var5 = this.readFluidId(var1, var2, var3);
      if (this.blockId != var4 || this.fluidId != var5) {
         if (var4 == 0 && var5 == 0) {
            this.setBlock(0, BlockType.EMPTY, 0, 1);
            this.fluidId = 0;
            this.fluid = Fluid.EMPTY;
            this.fluidKey = "Empty";
            this.fillHeight = 0.0;
         } else if (var4 == 1) {
            this.setBlock(1, BlockType.UNKNOWN, 0, 4);
            this.fluidId = 0;
            this.fluid = Fluid.EMPTY;
            this.fluidKey = "Empty";
            this.fillHeight = 0.0;
         } else {
            this.blockId = var4;
            this.blockType = BlockType.getAssetMap().getAsset(var4);
            if (this.blockType.isUnknown()) {
               this.setBlock(var4, this.blockType, 0, 4);
               this.fluidId = 0;
               this.fluid = Fluid.EMPTY;
               this.fluidKey = "Empty";
               this.fillHeight = 0.0;
            } else {
               Fluid var6 = Fluid.getAssetMap().getAsset(var5);
               byte var7 = this.readFluidLevel(var1, var2, var3);
               this.blockTypeKey = this.blockType.getId();
               this.filler = this.readFiller(var1, var2, var3);
               this.rotation = this.readRotation(var1, var2, var3);
               if (this.blockType.getMaterial() == BlockMaterial.Solid) {
                  this.collisionMaterials = 4;
                  if (this.blockType.getHitboxTypeIndex() != 0) {
                     this.collisionMaterials = this.collisionMaterials + materialFromFillLevel(var6, var7);
                  }
               } else {
                  this.collisionMaterials = materialFromFillLevel(var6, var7);
               }

               this.fluidId = var5;
               this.fluid = var6;
               this.fluidKey = var6.getId();
               this.fillHeight = var5 != 0 ? (double)var7 / var6.getMaxFluidLevel() : 0.0;
               this.blockBoundingBoxes = null;
            }
         }
      }
   }

   class="kw">protected int readBlockId(int var1, int var2, int var3) {
      this.refreshSection(var1, var2, var3);
      class="kw">return this.chunkSection == null ? 1 : this.chunkSection.get(var1, var2, var3);
   }

   class="kw">protected int readRotation(int var1, int var2, int var3) {
      this.refreshSection(var1, var2, var3);
      class="kw">return this.chunkSection == null ? 0 : this.chunkSection.getRotationIndex(var1, var2, var3);
   }

   class="kw">protected int readFiller(int var1, int var2, int var3) {
      this.refreshSection(var1, var2, var3);
      class="kw">return this.chunkSection == null ? 0 : this.chunkSection.getFiller(var1, var2, var3);
   }

   class="kw">protected int readFluidId(int var1, int var2, int var3) {
      this.refreshSection(var1, var2, var3);
      if (this.chunkSectionRef == null) {
         class="kw">return 1;
      }

      FluidSection var4 = this.world.getChunkStore().getStore().getComponent(this.chunkSectionRef, FluidSection.getComponentType());
      class="kw">return var4 == null ? 1 : var4.getFluidId(var1, var2, var3);
   }

   class="kw">protected byte readFluidLevel(int var1, int var2, int var3) {
      this.refreshSection(var1, var2, var3);
      if (this.chunkSectionRef == null) {
         class="kw">return 0;
      }

      FluidSection var4 = this.world.getChunkStore().getStore().getComponent(this.chunkSectionRef, FluidSection.getComponentType());
      class="kw">return var4 == null ? 0 : var4.getFluidLevel(var1, var2, var3);
   }

   class="kw">protected void refreshSection(int var1, int var2, int var3) {
      int var4 = ChunkUtil.chunkCoordinate(var1);
      int var5 = ChunkUtil.chunkCoordinate(var2);
      int var6 = ChunkUtil.chunkCoordinate(var3);
      if (this.chunkSection == null
         || this.chunkSectionRef == null
         || !this.chunkSectionRef.isValid()
         || this.chunkX != var4
         || this.chunkY != var5
         || this.chunkZ != var6) {
         this.chunkSectionRef = this.world.getChunkStore().getChunkSectionReference(var4, var5, var6);
         this.chunkSection = this.chunkSectionRef != null && this.chunkSectionRef.isValid()
            ? this.world.getChunkStore().getStore().getComponent(this.chunkSectionRef, BlockSection.getComponentType())
            : null;
         this.chunkX = var4;
         this.chunkY = var5;
         this.chunkZ = var6;
      }
   }

   class="kw">protected void setBlock(int var1, @Nonnull BlockType var2, int var3, int var4, BlockBoundingBoxes var5) {
      this.blockId = var1;
      this.rotation = var3;
      this.blockType = var2;
      this.blockTypeKey = var2.getId();
      this.collisionMaterials = var4;
      this.blockBoundingBoxes = var5;
      this.fillHeight = 0.0;
   }

   class="kw">protected void setBlock(int var1, @Nonnull BlockType var2, int var3, int var4) {
      this.setBlock(var1, var2, var3, var4, BlockBoundingBoxes.UNIT_BOX);
   }

   class="kw">protected void cleanup0() {
      this.chunkSectionRef = null;
      this.chunkSection = null;
      this.blockType = null;
      this.blockTypeKey = null;
      this.blockBoundingBoxes = null;
      this.fluid = null;
      this.fluidKey = null;
   }

   class="kw">protected class="kw">static int materialFromFillLevel(@Nonnull Fluid var0, byte var1) {
      if (var1 == 0) {
         class="kw">return 1;
      } else {
         class="kw">return var1 == var0.getMaxFluidLevel() ? 2 : 3;
      }
   }
}