BlockSelectionSupportUtil class

Пакет: com.hypixel.hytale.builtin.blockphysics

Файл: com/hypixel/hytale/builtin/blockphysics/BlockSelectionSupportUtil.java

Поля (25)

МодификаторыТипИмя
Long2ObjectMap var1
long var10
BlockPhysicsUtil.SupportBlock var12
BlockType var13
int var14
int var15
int var16
int var17
LongArrayList var18
ObjectIterator var19
Fluid var2
int var20
Entry var21
Long2IntOpenHashMap var23
ObjectIterator var24
it.unimi.dsi.fastutil.longs.Long2IntMap.Entry var25
Long2IntOpenHashMap var3
BlockSelectionSupportUtil.SelectionSupportReader var4
int var5
var5
ObjectIterator var6
BlockType var6
Entry var7
int var7
BlockType var8

Методы (11)

МодификаторыВозвратСигнатура
static void applySupportValuesvoid applySupportValues(@Nonnull BlockSelection var0)
public boolean doesMissingNeighbourSatisfySupportpublic boolean doesMissingNeighbourSatisfySupport(@Nonnull Vector3ic var1)
for for(int var22 = 0; var22 < var20; var22++)
abstract for for(int var9 = 0; var9 < var18.size()
public BlockPhysicsUtil.SupportBlock getBlockpublic BlockPhysicsUtil.SupportBlock getBlock(int var1, int var2, int var3)
public int getSupportValuepublic int getSupportValue(int var1, int var2, int var3)
if if(var2 != null)
if if(var8 != null)
if if(var12 != null)
if if(var17 == -1 || var17 == -2)
public boolean isPositionAvailablepublic boolean isPositionAvailable(int var1, int var2, int var3)

Исходный код

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

class="kw">import com.hypixel.hytale.math.block.BlockUtil;
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.prefab.selection.standard.BlockSelection;
class="kw">import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.longs.LongArrayList;
class="kw">import it.unimi.dsi.fastutil.longs.LongComparators;
class="kw">import it.unimi.dsi.fastutil.longs.Long2ObjectMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3ic;

class="kw">public class="kw">final class BlockSelectionSupportUtil {
   class="kw">private BlockSelectionSupportUtil() {
   }

   class="kw">public class="kw">static void applySupportValues(@Nonnull BlockSelection var0) {
      Long2ObjectMap var1 = new Long2ObjectOpenHashMap();
      Fluid var2 = Fluid.getAssetMap().getAsset(0);
      if (var2 != null) {
         var0.forEachBlock(
            (var2x, var3x, var4x, var5x) -> var1.put(
               BlockUtil.pack(var2x, var3x, var4x), new BlockPhysicsUtil.SupportBlock(var5x.blockId(), var5x.rotation(), var5x.filler(), 0, var2)
            )
         );
         if (!var1.isEmpty()) {
            Long2IntOpenHashMap var3 = new Long2IntOpenHashMap(var1.size());
            var3.defaultReturnValue(0);
            BlockSelectionSupportUtil.SelectionSupportReader var4 = new BlockSelectionSupportUtil.SelectionSupportReader(var1, var3);
            int var5 = 0;
            ObjectIterator var6 = var1.long2ObjectEntrySet().iterator();

            while (var6.hasNext()) {
               Entry var7 = (Entry<BlockPhysicsUtil.SupportBlock>)var6.next();
               BlockType var8 = BlockType.getAssetMap().getAsset(((BlockPhysicsUtil.SupportBlock)var7.getValue()).blockId());
               if (var8 != null) {
                  var5 = Math.max(var5, var8.getMaxSupportDistance());
               }
            }

            LongArrayList var18 = new LongArrayList(var1.size());
            ObjectIterator var19 = var1.long2ObjectEntrySet().iterator();

            while (var19.hasNext()) {
               Entry var21 = (Entry<BlockPhysicsUtil.SupportBlock>)var19.next();
               var18.add(var21.getLongKey());
            }

            var18.sort(LongComparators.asLongComparator((var0x, var1x) -> Integer.compare(BlockUtil.unpackY(var0x), BlockUtil.unpackY(var1x))));
            int var20 = Math.max(1, var5 + 1);

            for (int var22 = 0; var22 < var20; var22++) {
               for (int var9 = 0; var9 < var18.size(); var9++) {
                  long var10 = var18.getLong(var9);
                  BlockPhysicsUtil.SupportBlock var12 = (BlockPhysicsUtil.SupportBlock)var1.get(var10);
                  if (var12 != null) {
                     BlockType var13 = BlockType.getAssetMap().getAsset(var12.blockId());
                     if (var13 != null && var13.hasSupport()) {
                        int var14 = BlockUtil.unpackX(var10);
                        int var15 = BlockUtil.unpackY(var10);
                        int var16 = BlockUtil.unpackZ(var10);
                        int var17 = var12.filler() != 0
                           ? -1
                           : BlockPhysicsUtil.testBlockPhysics(var4, var14, var15, var16, var13, var12.rotation(), var12.filler());
                        if (var17 == -1 || var17 == -2) {
                           var3.put(var10, 0);
                        } else if (var17 > 0) {
                           var3.put(var10, var17);
                        } else {
                           var3.put(var10, 0);
                        }
                     }
                  }
               }
            }

            Long2IntOpenHashMap var23 = new Long2IntOpenHashMap();
            var0.forEachBlock((var2x, var3x, var4x, var5x) -> {
               BlockType var6 = BlockType.getAssetMap().getAsset(var5x.blockId());
               if (var6 != null && var6.hasSupport()) {
                  int var7 = var3.get(BlockUtil.pack(var2x, var3x, var4x));
                  if (var7 != var5x.supportValue()) {
                     var23.put(BlockUtil.pack(var2x, var3x, var4x), var7);
                  }
               }
            });
            ObjectIterator var24 = var23.long2IntEntrySet().iterator();

            while (var24.hasNext()) {
               it.unimi.dsi.fastutil.longs.Long2IntMap.Entry var25 = (it.unimi.dsi.fastutil.longs.Long2IntMap.Entry)var24.next();
               var0.setSupportValueAtLocalPos(
                  BlockUtil.unpackX(var25.getLongKey()), BlockUtil.unpackY(var25.getLongKey()), BlockUtil.unpackZ(var25.getLongKey()), var25.getIntValue()
               );
            }
         }
      }
   }

   class="kw">private record SelectionSupportReader(@Nonnull Long2ObjectMap<BlockPhysicsUtil.SupportBlock> blocks, @Nonnull Long2IntOpenHashMap supportValues)
      class="kw">implements BlockPhysicsUtil.SupportReader {
      class="kw">private SelectionSupportReader {
      }

      @Override
      class="kw">public boolean isPositionAvailable(int var1, int var2, int var3) {
         class="kw">return true;
      }

      @Nullable
      @Override
      class="kw">public BlockPhysicsUtil.SupportBlock getBlock(int var1, int var2, int var3) {
         class="kw">return (BlockPhysicsUtil.SupportBlock)this.blocks.get(BlockUtil.pack(var1, var2, var3));
      }

      @Override
      class="kw">public int getSupportValue(int var1, int var2, int var3) {
         class="kw">return this.supportValues.get(BlockUtil.pack(var1, var2, var3));
      }

      @Override
      class="kw">public boolean doesMissingNeighbourSatisfySupport(@Nonnull Vector3ic var1) {
         class="kw">return var1.y() < 0;
      }
   }
}