BlockPositionProvider class
Пакет: com.hypixel.hytale.server.core.universe.world.chunk.section.blockpositions
Файл: com/hypixel/hytale/server/core/universe/world/chunk/section/blockpositions/BlockPositionProvider.java
implements: Component<ChunkStore>
Поля (7)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
BitSet |
searchedBlockSets |
|
List |
var11 |
|
TransformComponent |
var12 |
|
Vector3d |
var13 |
|
double |
var14 |
|
IBlockPositionData |
var17 |
|
double |
var18 |
Методы (10)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
<T> void |
findBlocks<T> void findBlocks(@Nonnull List<IBlockPositionData> var1,
int var2,
double var3,
double var5,
@Nonnull Ref<EntityStore> var7,
@Nullable BiPredicate<IBlockPositionData, T> var8,
T var9,
@Nonnull ComponentAccessor<EntityStore> var10) |
abstract |
|
for for(int var16 = 0; var16 < var11.size() |
public |
void |
forEachBlockSetvoid forEachBlockSet(@Nonnull IntObjectConsumer<List<IBlockPositionData>> var1) |
static |
ComponentType<ChunkStore, BlockPositionProvider> |
getComponentTypeComponentType<ChunkStore, BlockPositionProvider> getComponentType() |
public |
BitSet |
getSearchedBlockSetsBitSet getSearchedBlockSets() |
|
|
if if(var2 != null) |
|
|
if if(this.blockData != null) |
|
|
if if(var11 != null) |
|
|
if if(this.blockData != null) |
public |
boolean |
isStaleboolean isStale(int var1, @Nonnull BlockSection var2) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.chunk.section.blockpositions;
class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.function.consumer.IntObjectConsumer;
class="kw">import com.hypixel.hytale.server.core.modules.LegacyModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import java.util.BitSet;
class="kw">import java.util.List;
class="kw">import java.util.function.BiPredicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class BlockPositionProvider class="kw">implements Component<ChunkStore> {
class="kw">private class="kw">final BitSet searchedBlockSets;
@Nullable
class="kw">private class="kw">final Int2ObjectMap<List<IBlockPositionData>> blockData;
class="kw">private class="kw">final short lightChangeCounter;
class="kw">public class="kw">static ComponentType<ChunkStore, BlockPositionProvider> getComponentType() {
class="kw">return LegacyModule.get().getBlockPositionProviderComponentType();
}
class="kw">public BlockPositionProvider(@Nonnull BitSet var1, @Nullable Int2ObjectOpenHashMap<List<IBlockPositionData>> var2, short var3) {
this.searchedBlockSets = (BitSet)var1.clone();
this.lightChangeCounter = var3;
if (var2 != null) {
this.blockData = Int2ObjectMaps.unmodifiable(var2);
} else {
this.blockData = null;
}
}
class="kw">public boolean isStale(int var1, @Nonnull BlockSection var2) {
class="kw">return this.lightChangeCounter != var2.getLocalChangeCounter() || !this.searchedBlockSets.get(var1);
}
class="kw">public <T> void findBlocks(
@Nonnull List<IBlockPositionData> var1,
int var2,
double var3,
double var5,
@Nonnull Ref<EntityStore> var7,
@Nullable BiPredicate<IBlockPositionData, T> var8,
T var9,
@Nonnull ComponentAccessor<EntityStore> var10
) {
if (this.blockData != null) {
List var11 = (List<IBlockPositionData>)this.blockData.getOrDefault(var2, null);
if (var11 != null) {
TransformComponent var12 = var10.getComponent(var7, TransformComponent.getComponentType());
assert var12 != null;
Vector3d var13 = var12.getPosition();
double var14 = var3 * var3;
for (int var16 = 0; var16 < var11.size(); var16++) {
IBlockPositionData var17 = var11.get(var16);
double var18 = var17.getYCentre();
if (Math.abs(var13.y - var18) <= var5
&& var13.distanceSquared(var17.getXCentre(), var18, var17.getZCentre()) <= var14
&& (var8 == null || !var8.test(var17, var9))) {
var1.add(var17);
}
}
}
}
}
class="kw">public BitSet getSearchedBlockSets() {
class="kw">return (BitSet)this.searchedBlockSets.clone();
}
class="kw">public void forEachBlockSet(@Nonnull IntObjectConsumer<List<IBlockPositionData>> var1) {
if (this.blockData != null) {
this.blockData.forEach(var1::accept);
}
}
@Nonnull
@Override
class="kw">public Component<ChunkStore> clone() {
class="kw">return this;
}
}