BlockPositionEntryGenerator class

Пакет: com.hypixel.hytale.server.npc.blackboard.view.blocktype

Файл: com/hypixel/hytale/server/npc/blackboard/view/blocktype/BlockPositionEntryGenerator.java

Поля (20)

МодификаторыТипИмя
private Int2ObjectOpenHashMap<List<IBlockPositionData>> blockData
private final Int2IntMap blockSetCounts
break
final BlockPositionEntryGenerator.FoundBlockConsumer foundBlockConsumer
private int maxBlockType
private BitSet searchedBlockSets
private ChunkSectionReference sectionPointer
BlockSection var2
BlockSetModule var3
int var4
BlockPositionData var5
var5
var5
BlockSection var6
ChunkSectionReference var7
List var7
var7
Int2ObjectOpenHashMap var8
int var8
int var9

Методы (14)

МодификаторыВозвратСигнатура
abstract return new BlockPositionProviderreturn new BlockPositionProvider(var5, null, var1)
abstract return new BlockPositionProviderreturn new BlockPositionProvider(var5, var8, var1)
private FoundBlockConsumerprivate FoundBlockConsumer()
public void acceptpublic void accept(int var1)
abstract for for(int var6 = this.searchedBlockSets.nextSetBit(0)
public Int2ObjectOpenHashMap<List<IBlockPositionData>> getBlockDatapublic Int2ObjectOpenHashMap<List<IBlockPositionData>> getBlockData()
if if(var7 == null)
if if(var8 < this.maxBlockType)
if if(var5 == null)
if if(var9 < this.maxBlockType)
if if(var5 == null)
if if(var6 == Integer.MAX_VALUE)
public void initpublic void init(ChunkSectionReference var1, BitSet var2)
public void releasepublic void release()

Исходный код

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

class="kw">import com.hypixel.hytale.math.random.RandomExtra;
class="kw">import com.hypixel.hytale.server.core.modules.blockset.BlockSetModule;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
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.ChunkSectionReference;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.blockpositions.BlockPositionData;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.blockpositions.BlockPositionProvider;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.blockpositions.IBlockPositionData;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import it.unimi.dsi.fastutil.ints.Int2IntMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntConsumer;
class="kw">import it.unimi.dsi.fastutil.ints.IntList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.BitSet;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class BlockPositionEntryGenerator {
   class="kw">private class="kw">final BlockPositionEntryGenerator.FoundBlockConsumer foundBlockConsumer = new BlockPositionEntryGenerator.FoundBlockConsumer();

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

   @Nonnull
   class="kw">public BlockPositionProvider generate(short var1, int var2, @Nonnull BlockChunk var3, IntList var4, @Nonnull BitSet var5) {
      BlockSection var6 = var3.getSectionAtIndex(var2);
      if (var6.isSolidAir()) {
         class="kw">return new BlockPositionProvider(var5, null, var1);
      }

      if (!var6.containsAny(var4)) {
         class="kw">return new BlockPositionProvider(var5, null, var1);
      }

      ChunkSectionReference var7 = new ChunkSectionReference(var3, var6, var2);
      this.foundBlockConsumer.init(var7, var5);
      var6.find(var4, this.foundBlockConsumer);
      Int2ObjectOpenHashMap var8 = this.foundBlockConsumer.getBlockData();
      this.foundBlockConsumer.release();
      class="kw">return new BlockPositionProvider(var5, var8, var1);
   }

   class="kw">private class="kw">static class FoundBlockConsumer class="kw">implements IntConsumer {
      class="kw">private class="kw">final Int2IntMap blockSetCounts = new Int2IntOpenHashMap();
      @Nullable
      class="kw">private ChunkSectionReference sectionPointer;
      @Nullable
      class="kw">private BitSet searchedBlockSets;
      class="kw">private int maxBlockType;
      @Nullable
      class="kw">private Int2ObjectOpenHashMap<List<IBlockPositionData>> blockData;

      class="kw">private FoundBlockConsumer() {
      }

      class="kw">public void init(ChunkSectionReference var1, BitSet var2) {
         this.sectionPointer = var1;
         this.searchedBlockSets = var2;
         this.maxBlockType = NPCPlugin.get().getMaxBlackboardBlockCountPerType();
         this.blockData = new Int2ObjectOpenHashMap();
      }

      class="kw">public void release() {
         this.blockSetCounts.clear();
         this.sectionPointer = null;
         this.searchedBlockSets = null;
         this.blockData = null;
      }

      class="kw">public void accept(int var1) {
         BlockSection var2 = this.sectionPointer.getSection();
         if (var2.getFiller(var1) == 0) {
            BlockSetModule var3 = BlockSetModule.getInstance();
            int var4 = var2.get(var1);
            BlockPositionData var5 = null;

            for (int var6 = this.searchedBlockSets.nextSetBit(0); var6 >= 0; var6 = this.searchedBlockSets.nextSetBit(var6 + 1)) {
               if (var3.blockInSet(var6, var4)) {
                  List var7 = (List<IBlockPositionData>)this.blockData.getOrDefault(var6, null);
                  if (var7 == null) {
                     var7 = new ObjectArrayList();
                     this.blockData.put(var6, var7);
                  }

                  int var8 = this.blockSetCounts.getOrDefault(var6, 0);
                  if (var8 < this.maxBlockType) {
                     if (var5 == null) {
                        var5 = new BlockPositionData(var1, this.sectionPointer, var4);
                     }

                     var7.add(var5);
                  } else {
                     int var9 = RandomExtra.randomRange(var8 + 1);
                     if (var9 < this.maxBlockType) {
                        if (var5 == null) {
                           var5 = new BlockPositionData(var1, this.sectionPointer, var4);
                        }

                        var7.set(var9, var5);
                     }
                  }

                  this.blockSetCounts.put(var6, var8 + 1);
               }

               if (var6 == Integer.MAX_VALUE) {
                  break;
               }
            }
         }
      }

      class="kw">public Int2ObjectOpenHashMap<List<IBlockPositionData>> getBlockData() {
         this.blockData.trim();
         class="kw">return this.blockData;
      }
   }
}