Long hash map somehow is ~4 times faster than AVL tree map
This commit is contained in:
parent
bbcf83e239
commit
2857a3f9ef
@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.block.entity
|
||||
|
||||
import it.unimi.dsi.fastutil.longs.Long2ObjectAVLTreeMap
|
||||
import it.unimi.dsi.fastutil.longs.Long2ObjectFunction
|
||||
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
@ -92,7 +93,7 @@ abstract class SynchronizedBlockEntity(p_155228_: BlockEntityType<*>, p_155229_:
|
||||
unsubscribe()
|
||||
|
||||
val subs = playerMap
|
||||
.computeIfAbsent(level) { Long2ObjectAVLTreeMap() }
|
||||
.computeIfAbsent(level) { Long2ObjectOpenHashMap() }
|
||||
.computeIfAbsent(ChunkPos(blockPos).toLong(), Long2ObjectFunction { ChunkSubscribers(level = WeakReference(level), chunkPos = ChunkPos(blockPos).toLong()) })
|
||||
|
||||
subs.subscribe(this)
|
||||
@ -276,7 +277,7 @@ abstract class SynchronizedBlockEntity(p_155228_: BlockEntityType<*>, p_155229_:
|
||||
* [net.minecraft.server.level.ChunkMap.getPlayers], which is not something we want
|
||||
*/
|
||||
companion object {
|
||||
private val playerMap = WeakHashMap<ServerLevel, Long2ObjectAVLTreeMap<ChunkSubscribers>>()
|
||||
private val playerMap = WeakHashMap<ServerLevel, Long2ObjectOpenHashMap<ChunkSubscribers>>()
|
||||
private val tickingMap = WeakHashMap<ServerLevel, ArrayList<WeakReference<ChunkSubscribers>>>()
|
||||
|
||||
fun onLevelUnload(event: LevelEvent.Unload) {
|
||||
@ -331,7 +332,7 @@ abstract class SynchronizedBlockEntity(p_155228_: BlockEntityType<*>, p_155229_:
|
||||
}
|
||||
|
||||
fun onWatch(event: ChunkWatchEvent.Watch) {
|
||||
playerMap.computeIfAbsent(event.level) { Long2ObjectAVLTreeMap() }.computeIfAbsent(event.pos.toLong(), Long2ObjectFunction { ChunkSubscribers(level = WeakReference(event.level), chunkPos = event.pos.toLong()) }).let {
|
||||
playerMap.computeIfAbsent(event.level) { Long2ObjectOpenHashMap() }.computeIfAbsent(event.pos.toLong(), Long2ObjectFunction { ChunkSubscribers(level = WeakReference(event.level), chunkPos = event.pos.toLong()) }).let {
|
||||
val (blocks, players) = it
|
||||
|
||||
if (event.player !in players) {
|
||||
|
Loading…
Reference in New Issue
Block a user