mirror of
https://github.com/Minestom/Minestom.git
synced 2025-01-02 14:38:26 +01:00
Use fastutil treemap
This commit is contained in:
parent
99d4682655
commit
560b450b3e
@ -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<Integer, Section> getSections();
|
||||
public abstract @NotNull Map<Integer, Section> 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}.
|
||||
*
|
||||
|
@ -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<Integer, Section> sectionMap = new TreeMap<>();
|
||||
protected final Int2ObjectAVLTreeMap<Section> sectionMap = new Int2ObjectAVLTreeMap<>();
|
||||
|
||||
// Key = ChunkUtils#getBlockIndex
|
||||
protected final Int2ObjectOpenHashMap<Block> entries = new Int2ObjectOpenHashMap<>();
|
||||
@ -69,7 +68,7 @@ public class DynamicChunk extends Chunk {
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TreeMap<Integer, Section> getSections() {
|
||||
public @NotNull Map<Integer, Section> getSections() {
|
||||
return sectionMap;
|
||||
}
|
||||
|
||||
@ -129,7 +128,7 @@ public class DynamicChunk extends Chunk {
|
||||
packet.biomes = biomes;
|
||||
packet.chunkX = chunkX;
|
||||
packet.chunkZ = chunkZ;
|
||||
packet.sections = (Map<Integer, Section>) 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;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user