make pathfinding classes internals

This commit is contained in:
themode 2021-12-24 09:48:02 +01:00 committed by TheMode
parent 40a2168d52
commit eee5778cfe
4 changed files with 14 additions and 28 deletions

View File

@ -8,6 +8,5 @@ import org.jetbrains.annotations.NotNull;
* All pathfinder methods are available with {@link #getNavigator()}.
*/
public interface NavigableEntity {
@NotNull
Navigator getNavigator();
@NotNull Navigator getNavigator();
}

View File

@ -3,14 +3,14 @@ package net.minestom.server.entity.pathfinding;
import com.extollit.gaming.ai.path.model.IBlockDescription;
import com.extollit.gaming.ai.path.model.IBlockObject;
import com.extollit.linalg.immutable.AxisAlignedBBox;
import it.unimi.dsi.fastutil.shorts.Short2ObjectMap;
import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap;
import net.minestom.server.instance.block.Block;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import space.vectrix.flare.fastutil.Short2ObjectSyncMap;
public class PFBlock implements IBlockDescription, IBlockObject {
private static final Short2ObjectMap<PFBlock> BLOCK_DESCRIPTION_MAP = new Short2ObjectOpenHashMap<>();
@ApiStatus.Internal
public final class PFBlock implements IBlockDescription, IBlockObject {
private static final Short2ObjectSyncMap<PFBlock> BLOCK_DESCRIPTION_MAP = Short2ObjectSyncMap.hashmap();
/**
* Gets the {@link PFBlock} linked to the block state id.
@ -21,22 +21,12 @@ public class PFBlock implements IBlockDescription, IBlockObject {
* @return the {@link PFBlock} linked to {@code blockStateId}
*/
public static @NotNull PFBlock get(@NotNull Block block) {
final short blockStateId = block.stateId();
if (!BLOCK_DESCRIPTION_MAP.containsKey(blockStateId)) {
synchronized (BLOCK_DESCRIPTION_MAP) {
if (!BLOCK_DESCRIPTION_MAP.containsKey(blockStateId)) {
final var pfBlock = new PFBlock(block);
BLOCK_DESCRIPTION_MAP.put(blockStateId, pfBlock);
return pfBlock;
}
}
}
return BLOCK_DESCRIPTION_MAP.get(blockStateId);
return BLOCK_DESCRIPTION_MAP.computeIfAbsent(block.stateId(), state -> new PFBlock(block));
}
private final Block block;
public PFBlock(Block block) {
PFBlock(Block block) {
this.block = block;
}

View File

@ -6,15 +6,15 @@ import com.extollit.gaming.ai.path.model.IColumnarSpace;
import com.extollit.gaming.ai.path.model.IInstanceSpace;
import net.minestom.server.instance.Chunk;
import net.minestom.server.instance.block.Block;
import org.jetbrains.annotations.ApiStatus;
public class PFColumnarSpace implements IColumnarSpace {
@ApiStatus.Internal
public final class PFColumnarSpace implements IColumnarSpace {
private final ColumnarOcclusionFieldList occlusionFieldList = new ColumnarOcclusionFieldList(this);
private final PFInstanceSpace instanceSpace;
private final Chunk chunk;
public PFColumnarSpace(PFInstanceSpace instanceSpace, Chunk chunk) {
PFColumnarSpace(PFInstanceSpace instanceSpace, Chunk chunk) {
this.instanceSpace = instanceSpace;
this.chunk = chunk;
}

View File

@ -10,8 +10,7 @@ import net.minestom.server.instance.block.Block;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class PFInstanceSpace implements IInstanceSpace {
public final class PFInstanceSpace implements IInstanceSpace {
private final Instance instance;
private final Map<Chunk, PFColumnarSpace> chunkSpaceMap = new ConcurrentHashMap<>();
@ -28,9 +27,7 @@ public class PFInstanceSpace implements IInstanceSpace {
@Override
public IColumnarSpace columnarSpaceAt(int cx, int cz) {
final Chunk chunk = instance.getChunk(cx, cz);
if (chunk == null) {
return null;
}
if (chunk == null) return null;
return chunkSpaceMap.computeIfAbsent(chunk, c -> {
final PFColumnarSpace cs = new PFColumnarSpace(this, c);
c.setColumnarSpace(cs);