diff --git a/src/main/java/net/minestom/server/instance/Chunk.java b/src/main/java/net/minestom/server/instance/Chunk.java index e91b760f2..63196371a 100644 --- a/src/main/java/net/minestom/server/instance/Chunk.java +++ b/src/main/java/net/minestom/server/instance/Chunk.java @@ -4,8 +4,6 @@ import net.minestom.server.Tickable; import net.minestom.server.Viewable; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; -import net.minestom.server.data.Data; -import net.minestom.server.data.DataContainer; import net.minestom.server.entity.Player; import net.minestom.server.entity.pathfinding.PFColumnarSpace; import net.minestom.server.event.EventDispatcher; @@ -42,8 +40,7 @@ import java.util.concurrent.ConcurrentHashMap; * You generally want to avoid storing references of this object as this could lead to a huge memory leak, * you should store the chunk coordinates instead. */ -public abstract class Chunk implements BlockGetter, BlockSetter, Viewable, Tickable, TagHandler, DataContainer { - +public abstract class Chunk implements BlockGetter, BlockSetter, Viewable, Tickable, TagHandler { public static final int CHUNK_SIZE_X = 16; public static final int CHUNK_SIZE_Z = 16; public static final int CHUNK_SECTION_SIZE = 16; @@ -68,7 +65,6 @@ public abstract class Chunk implements BlockGetter, BlockSetter, Viewable, Ticka // Data private final NBTCompound nbt = new NBTCompound(); - protected Data data; public Chunk(@NotNull Instance instance, @Nullable Biome[] biomes, int chunkX, int chunkZ, boolean shouldGenerate) { this.identifier = UUID.randomUUID(); @@ -102,7 +98,7 @@ public abstract class Chunk implements BlockGetter, BlockSetter, Viewable, Ticka @Override public abstract void setBlock(int x, int y, int z, @NotNull Block block); - public abstract @NotNull TreeMap getSections(); + public abstract @NotNull Map getSections(); public abstract @NotNull Section getSection(int section); @@ -373,17 +369,6 @@ public abstract class Chunk implements BlockGetter, BlockSetter, Viewable, Ticka tag.write(nbt, value); } - @Nullable - @Override - public Data getData() { - return data; - } - - @Override - public void setData(@Nullable Data data) { - this.data = data; - } - /** * Sends the chunk data to {@code player}. * diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index 2b5b64e27..0888ba40e 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -1,6 +1,7 @@ package net.minestom.server.instance; import com.extollit.gaming.ai.path.model.ColumnarOcclusionFieldList; +import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minestom.server.coordinate.Vec; import net.minestom.server.entity.pathfinding.PFBlock; @@ -11,12 +12,10 @@ import net.minestom.server.utils.chunk.ChunkUtils; import net.minestom.server.world.biomes.Biome; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jglrxavpok.hephaistos.nbt.NBTCompound; import java.lang.ref.SoftReference; import java.util.Map; import java.util.Objects; -import java.util.TreeMap; /** * Represents a {@link Chunk} which store each individual block in memory. @@ -25,7 +24,7 @@ import java.util.TreeMap; */ public class DynamicChunk extends Chunk { - protected final TreeMap sectionMap = new TreeMap<>(); + protected final Int2ObjectAVLTreeMap
sectionMap = new Int2ObjectAVLTreeMap<>(); // Key = ChunkUtils#getBlockIndex protected final Int2ObjectOpenHashMap entries = new Int2ObjectOpenHashMap<>(); @@ -69,7 +68,7 @@ public class DynamicChunk extends Chunk { } @Override - public @NotNull TreeMap getSections() { + public @NotNull Map getSections() { return sectionMap; } @@ -129,7 +128,7 @@ public class DynamicChunk extends Chunk { packet.biomes = biomes; packet.chunkX = chunkX; packet.chunkZ = chunkZ; - packet.sections = (Map) sectionMap.clone(); // TODO deep clone + packet.sections = sectionMap.clone(); // TODO deep clone packet.entries = entries.clone(); this.cachedPacketTime = getLastChangeTime(); @@ -141,8 +140,8 @@ public class DynamicChunk extends Chunk { @Override public Chunk copy(@NotNull Instance instance, int chunkX, int chunkZ) { DynamicChunk dynamicChunk = new DynamicChunk(instance, biomes.clone(), chunkX, chunkZ); - for (var entry : sectionMap.entrySet()) { - dynamicChunk.sectionMap.put(entry.getKey(), entry.getValue().clone()); + for (var entry : sectionMap.int2ObjectEntrySet()) { + dynamicChunk.sectionMap.put(entry.getIntKey(), entry.getValue().clone()); } dynamicChunk.entries.putAll(entries); return dynamicChunk; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java index c1a554016..2afddff44 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java @@ -5,7 +5,6 @@ import io.netty.buffer.Unpooled; import it.unimi.dsi.fastutil.ints.Int2LongRBTreeMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minestom.server.MinecraftServer; -import net.minestom.server.instance.DynamicChunk; import net.minestom.server.instance.Section; import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.BlockHandler; @@ -133,7 +132,7 @@ public class ChunkDataPacket implements ServerPacket, CacheablePacket { final int index = entry.getKey(); final var block = entry.getValue(); final BlockHandler handler = block.handler(); - if(handler == null) + if (handler == null) continue; final var blockEntityTags = handler.getBlockEntityTags(); if (blockEntityTags.isEmpty()) // Verify if the block should be sent as block entity to client