From eee5778cfe450a40577b0d3e4d7f80c7ad1bfddf Mon Sep 17 00:00:00 2001 From: themode Date: Fri, 24 Dec 2021 09:48:02 +0100 Subject: [PATCH] make pathfinding classes internals --- .../entity/pathfinding/NavigableEntity.java | 3 +-- .../server/entity/pathfinding/PFBlock.java | 24 ++++++------------- .../entity/pathfinding/PFColumnarSpace.java | 8 +++---- .../entity/pathfinding/PFInstanceSpace.java | 7 ++---- 4 files changed, 14 insertions(+), 28 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/pathfinding/NavigableEntity.java b/src/main/java/net/minestom/server/entity/pathfinding/NavigableEntity.java index 069de7697..f6b070158 100644 --- a/src/main/java/net/minestom/server/entity/pathfinding/NavigableEntity.java +++ b/src/main/java/net/minestom/server/entity/pathfinding/NavigableEntity.java @@ -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(); } diff --git a/src/main/java/net/minestom/server/entity/pathfinding/PFBlock.java b/src/main/java/net/minestom/server/entity/pathfinding/PFBlock.java index 5f23e6fdc..3b82f11e8 100644 --- a/src/main/java/net/minestom/server/entity/pathfinding/PFBlock.java +++ b/src/main/java/net/minestom/server/entity/pathfinding/PFBlock.java @@ -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 BLOCK_DESCRIPTION_MAP = new Short2ObjectOpenHashMap<>(); +@ApiStatus.Internal +public final class PFBlock implements IBlockDescription, IBlockObject { + private static final Short2ObjectSyncMap 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; } diff --git a/src/main/java/net/minestom/server/entity/pathfinding/PFColumnarSpace.java b/src/main/java/net/minestom/server/entity/pathfinding/PFColumnarSpace.java index 7472ea469..3ef7e6e00 100644 --- a/src/main/java/net/minestom/server/entity/pathfinding/PFColumnarSpace.java +++ b/src/main/java/net/minestom/server/entity/pathfinding/PFColumnarSpace.java @@ -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; } diff --git a/src/main/java/net/minestom/server/entity/pathfinding/PFInstanceSpace.java b/src/main/java/net/minestom/server/entity/pathfinding/PFInstanceSpace.java index 71959a848..d59126f9c 100644 --- a/src/main/java/net/minestom/server/entity/pathfinding/PFInstanceSpace.java +++ b/src/main/java/net/minestom/server/entity/pathfinding/PFInstanceSpace.java @@ -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 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);