FoundBlockConsumer class
Пакет: com.hypixel.hytale.server.npc.blackboard.view.blocktype
Файл: com/hypixel/hytale/server/npc/blackboard/view/blocktype/BlockPositionEntryGenerator.java
implements: IntConsumer
Поля (16)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private Int2ObjectOpenHashMap<List<IBlockPositionData>> |
blockData |
|
private final Int2IntMap |
blockSetCounts |
|
|
break |
|
private int |
maxBlockType |
|
private BitSet |
searchedBlockSets |
|
private ChunkSectionReference |
sectionPointer |
|
BlockSection |
var2 |
|
BlockSetModule |
var3 |
|
int |
var4 |
|
BlockPositionData |
var5 |
|
|
var5 |
|
|
var5 |
|
List |
var7 |
|
|
var7 |
|
int |
var8 |
|
int |
var9 |
Методы (11)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
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;
}
}
}