ConnectedBlockContext class

Пакет: com.hypixel.hytale.server.core.universe.world.connectedblocks.config.rule

Файл: com/hypixel/hytale/server/core/universe/world/connectedblocks/config/rule/ConnectedBlockContext.java

implements: ConnectedBlockRule.Context

Поля (36)

МодификаторыТипИмя
final int QUICK_ACCESS_REGION_SIZE
Store var1
int var10
int var10
int var10
int var11
Ref var2
Vector3i var2
Vector3i var2
Ref var2
int var2
PatternedConnectedBlockRuleSetAsset var2
BlockSection var3
int var3
int var3
PatternedConnectedBlockRuleSet var3
var3
Vector3i var4
int var4
int var4
PatternedConnectedBlockRuleSetAsset var4
var4
BlockSection var5
var5
int var5
int var5
BlockSection var6
BlockSection var6
int var7
int var7
int var8
RotationTuple var8
Ref var9
int var9
int var9
PatternedConnectedBlockRuleSetAsset var9

Методы (20)

МодификаторыВозвратСигнатура
public void buildQuickAccessRegionvoid buildQuickAccessRegion()
for for(int var6 = this.origin.x - 1; var6 <= this.origin.x + 1; var6++)
for for(int var7 = this.origin.z - 1; var7 <= this.origin.z + 1; var7++)
for for(int var8 = this.origin.y - 1; var8 <= this.origin.y + 1; var8++)
if if(var3 != null)
if if(var5 != null)
if if(this.quickAccessFillers[var9] != 0)
if if(var6 == null)
if if(var7 != 0)
if if(this.quickAccessFillers[var9] != 0)
if if(var6 == null)
if if(var7 != 0)
if if(var1 == null)
if if(var2 == Integer.MIN_VALUE)
if if(var9 != null)
if if(var4 == null)
if if(var1 == null)
static boolean isInQuickAccessboolean isInQuickAccess(int var0, int var1, int var2)
static int quickAccessIndexBlockint quickAccessIndexBlock(int var0, int var1, int var2)
public void setRotationvoid setRotation(RotationTuple var1)

Исходный код

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

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.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.PatternedConnectedBlockRuleSet;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.PatternedConnectedBlockRuleSetAsset;
class="kw">import com.hypixel.hytale.server.core.universe.world.connectedblocks.config.shape.ConnectedBlockShapeConfig;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;
class="kw">import org.joml.Vector3ic;

class="kw">public class ConnectedBlockContext class="kw">implements ConnectedBlockRule.Context {
   class="kw">private class="kw">static class="kw">final int QUICK_ACCESS_REGION_SIZE = 27;
   class="kw">private class="kw">final PatternedConnectedBlockRuleSet ruleSet;
   class="kw">private class="kw">final ChunkStore chunkStore;
   class="kw">private class="kw">final Vector3i origin = new Vector3i();
   class="kw">private RotationTuple rotation;
   class="kw">private class="kw">final Vector3i temp = new Vector3i();
   class="kw">private int[] quickAccessBlockIds;
   class="kw">private int[] quickAccessRotations;
   class="kw">private int[] quickAccessFillers;

   class="kw">public ConnectedBlockContext(ChunkStore var1, PatternedConnectedBlockRuleSet var2, Vector3ic var3, RotationTuple var4) {
      this.chunkStore = var1;
      this.ruleSet = var2;
      this.origin.set(var3);
      this.rotation = var4;
   }

   class="kw">private class="kw">static int quickAccessIndexBlock(int var0, int var1, int var2) {
      class="kw">return (var2 + 1) * 9 + (var1 + 1) * 3 + var0 + 1;
   }

   class="kw">private class="kw">static boolean isInQuickAccess(int var0, int var1, int var2) {
      class="kw">return var0 >= -1 && var0 <= 1 && var1 >= -1 && var1 <= 1 && var2 >= -1 && var2 <= 1;
   }

   class="kw">public void buildQuickAccessRegion() {
      Store var1 = this.chunkStore.getStore();
      Ref var2 = this.chunkStore.getChunkSectionReferenceAtBlock(this.origin.x, this.origin.y, this.origin.z);
      if (var2 != null && var2.isValid()) {
         BlockSection var3 = var1.getComponent(var2, BlockSection.getComponentType());
         if (var3 != null) {
            this.quickAccessBlockIds = new int[27];
            this.quickAccessRotations = new int[27];
            this.quickAccessFillers = new int[27];
            Vector3i var4 = new Vector3i(this.origin);
            BlockSection var5 = var3;

            for (int var6 = this.origin.x - 1; var6 <= this.origin.x + 1; var6++) {
               for (int var7 = this.origin.z - 1; var7 <= this.origin.z + 1; var7++) {
                  for (int var8 = this.origin.y - 1; var8 <= this.origin.y + 1; var8++) {
                     if (!ChunkUtil.isSameChunkSection(var4.x, var4.y, var4.z, var6, var8, var7)) {
                        var4.set(var6, var8, var7);
                        Ref var9 = this.chunkStore.getChunkSectionReferenceAtBlock(var6, var8, var7);
                        var5 = var9 != null && var9.isValid() ? var1.getComponent(var9, BlockSection.getComponentType()) : null;
                     }

                     if (var5 != null) {
                        int var11 = ChunkUtil.indexBlock(var6, var8, var7);
                        int var10 = quickAccessIndexBlock(var6 - this.origin.x, var8 - this.origin.y, var7 - this.origin.z);
                        this.quickAccessBlockIds[var10] = var5.get(var11);
                        this.quickAccessRotations[var10] = var5.getRotationIndex(var11);
                        this.quickAccessFillers[var10] = var5.getFiller(var11);
                     }
                  }
               }
            }
         }
      }
   }

   @Override
   class="kw">public BlockType getLocalBlockType(Vector3ic var1) {
      Vector3i var2 = this.temp;
      this.rotation.applyRotationTo(var2.set(var1));
      int var3 = var2.x;
      int var4 = var2.y;
      int var5 = var2.z;
      var2.add(this.origin);
      if (this.quickAccessBlockIds != null && isInQuickAccess(var3, var4, var5)) {
         int var9 = quickAccessIndexBlock(var3, var4, var5);
         if (this.quickAccessFillers[var9] != 0) {
            class="kw">return null;
         }

         int var10 = this.quickAccessBlockIds[var9];
         class="kw">return BlockType.getAssetMap().getAsset(var10);
      } else {
         BlockSection var6 = this.fetchBlockSection(var2);
         if (var6 == null) {
            class="kw">return null;
         }

         int var7 = var6.getFiller(var2.x, var2.y, var2.z);
         if (var7 != 0) {
            class="kw">return null;
         }

         int var8 = var6.get(var2.x, var2.y, var2.z);
         class="kw">return BlockType.getAssetMap().getAsset(var8);
      }
   }

   @Override
   class="kw">public RotationTuple getLocalRotation(Vector3ic var1) {
      Vector3i var2 = this.temp;
      this.rotation.applyRotationTo(var2.set(var1));
      int var3 = var2.x;
      int var4 = var2.y;
      int var5 = var2.z;
      var2.add(this.origin);
      if (this.quickAccessRotations != null && isInQuickAccess(var3, var4, var5)) {
         int var9 = quickAccessIndexBlock(var3, var4, var5);
         if (this.quickAccessFillers[var9] != 0) {
            class="kw">return null;
         }

         int var10 = this.quickAccessRotations[var9];
         class="kw">return RotationTuple.composeInverse(this.rotation, RotationTuple.get(var10));
      } else {
         BlockSection var6 = this.fetchBlockSection(var2);
         if (var6 == null) {
            class="kw">return null;
         }

         int var7 = var6.getFiller(var2.x, var2.y, var2.z);
         if (var7 != 0) {
            class="kw">return null;
         }

         RotationTuple var8 = var6.getRotation(var2.x, var2.y, var2.z);
         class="kw">return RotationTuple.composeInverse(this.rotation, var8);
      }
   }

   @Nullable
   class="kw">private BlockSection fetchBlockSection(Vector3i var1) {
      Ref var2 = this.chunkStore.getChunkSectionReferenceAtBlock(var1.x, var1.y, var1.z);
      class="kw">return var2 != null && var2.isValid() ? this.chunkStore.getStore().getComponent(var2, BlockSection.getComponentType()) : null;
   }

   @Nullable
   @Override
   class="kw">public ConnectedBlockShapeConfig getShapeForBlockType(@Nullable BlockType var1) {
      if (var1 == null) {
         class="kw">return null;
      }

      int var2 = BlockType.getAssetMap().getIndex(var1.getId());
      if (var2 == Integer.MIN_VALUE) {
         class="kw">return null;
      }

      PatternedConnectedBlockRuleSet var3 = this.ruleSet;
      PatternedConnectedBlockRuleSetAsset var4 = this.ruleSet.getRuleSetAsset();
      if (var1.getConnectedBlockRuleSet() class="kw">instanceof PatternedConnectedBlockRuleSet var5) {
         PatternedConnectedBlockRuleSetAsset var9 = var5.getRuleSetAsset();
         if (var9 != null) {
            var4 = var9;
            var3 = var5;
         }
      }

      if (var4 == null) {
         class="kw">return null;
      }

      for (ConnectedBlockShapeConfig var7 : var4.getShapes().values()) {
         if (var7.matches(var3, var1)) {
            class="kw">return var7;
         }
      }

      class="kw">return null;
   }

   @Nullable
   @Override
   class="kw">public ConnectedBlockShapeConfig getShapeById(String var1) {
      if (var1 == null) {
         class="kw">return null;
      }

      PatternedConnectedBlockRuleSetAsset var2 = this.ruleSet.getRuleSetAsset();
      class="kw">return var2 == null ? null : var2.getShapes().get(var1);
   }

   class="kw">public void setRotation(RotationTuple var1) {
      this.rotation = var1;
   }
}