From 2599a641a700fb183a0a7f3acb58c84cd3f3621a Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 20 Mar 2023 10:41:40 +0100 Subject: [PATCH] replace some sets with ObjectOpenHashSet (should improve performance at some points) --- .../minosoft/assets/directory/DirectoryAssetsManager.kt | 5 +++-- .../java/de/bixilon/minosoft/assets/file/ZipAssetsManager.kt | 3 ++- .../minosoft/assets/minecraft/index/IndexAssetsManager.kt | 3 ++- .../bixilon/minosoft/data/registries/blocks/BlockRegistry.kt | 5 +++-- .../minosoft/data/registries/fallback/tags/FallbackTags.kt | 5 +++-- .../data/registries/shapes/voxel/AbstractVoxelShape.kt | 4 ++-- .../de/bixilon/minosoft/modding/event/master/EventMaster.kt | 5 +++-- .../bixilon/minosoft/protocol/packets/s2c/play/TagsS2CP.kt | 3 ++- 8 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/assets/directory/DirectoryAssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/directory/DirectoryAssetsManager.kt index c73a29616..e75881fd0 100644 --- a/src/main/java/de/bixilon/minosoft/assets/directory/DirectoryAssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/assets/directory/DirectoryAssetsManager.kt @@ -21,6 +21,7 @@ import de.bixilon.minosoft.assets.util.FileAssetsUtil.toAssetName import de.bixilon.minosoft.assets.util.FileUtil import de.bixilon.minosoft.assets.util.InputStreamUtil.readJson import de.bixilon.minosoft.data.registries.identified.ResourceLocation +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import java.io.File import java.io.FileInputStream import java.io.FileNotFoundException @@ -38,8 +39,8 @@ class DirectoryAssetsManager( val prefix: String = AssetsManager.DEFAULT_ASSETS_PREFIX, ) : AssetsManager { private val basePath = File(rootPath).slashPath + "/" + prefix - override val namespaces: MutableSet = mutableSetOf() - private var assets: MutableSet = mutableSetOf() + override val namespaces: MutableSet = ObjectOpenHashSet() + private var assets: MutableSet = ObjectOpenHashSet() override var loaded: Boolean = false private set override var image: ByteArray? = null diff --git a/src/main/java/de/bixilon/minosoft/assets/file/ZipAssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/file/ZipAssetsManager.kt index f00ce3596..fa6b15604 100644 --- a/src/main/java/de/bixilon/minosoft/assets/file/ZipAssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/assets/file/ZipAssetsManager.kt @@ -18,6 +18,7 @@ import de.bixilon.minosoft.assets.AssetsManager import de.bixilon.minosoft.assets.util.FileAssetsUtil.toAssetName import de.bixilon.minosoft.assets.util.InputStreamUtil.readJson import de.bixilon.minosoft.data.registries.identified.ResourceLocation +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import java.io.File import java.io.FileInputStream import java.util.zip.ZipInputStream @@ -38,7 +39,7 @@ class ZipAssetsManager( override fun load(latch: CountUpAndDownLatch) { check(!loaded) { "Already loaded!" } - val namespaces: MutableSet = mutableSetOf() + val namespaces: MutableSet = ObjectOpenHashSet() while (true) { val entry = inputStream.nextEntry ?: break if (entry.isDirectory) { diff --git a/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt index 84d109f1f..27cd67f65 100644 --- a/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt @@ -37,6 +37,7 @@ import de.bixilon.minosoft.util.json.Jackson import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import java.io.ByteArrayInputStream import java.io.IOException import java.io.InputStream @@ -96,7 +97,7 @@ class IndexAssetsManager( val worker = UnconditionalWorker() - val hashes: MutableSet = mutableSetOf() + val hashes: MutableSet = ObjectOpenHashSet() for ((path, data) in assets) { check(data is Map<*, *>) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockRegistry.kt index f8f4666a6..f9259d86c 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockRegistry.kt @@ -32,6 +32,7 @@ import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.registry.MetaTypes import de.bixilon.minosoft.data.registries.registries.registry.Registry +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet class BlockRegistry( parent: Registry? = null, @@ -42,7 +43,7 @@ class BlockRegistry( fun updateStates(block: Block, data: JsonObject, registries: Registries) { val properties: MutableMap> = mutableMapOf() - val states: MutableSet = mutableSetOf() + val states: MutableSet = ObjectOpenHashSet() for ((stateId, stateJson) in data["states"].asAnyMap()) { val settings = BlockStateSettings.of(registries, stateJson.unsafeCast()) val state = if (block is BlockStateBuilder) block.buildState(settings) else AdvancedBlockState(block, settings) @@ -53,7 +54,7 @@ class BlockRegistry( if (state !is PropertyBlockState) continue for ((property, value) in state.properties) { - properties.getOrPut(property) { mutableSetOf() } += value + properties.getOrPut(property) { ObjectOpenHashSet() } += value } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/fallback/tags/FallbackTags.kt b/src/main/java/de/bixilon/minosoft/data/registries/fallback/tags/FallbackTags.kt index 1487741f7..44320a9c5 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/fallback/tags/FallbackTags.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/fallback/tags/FallbackTags.kt @@ -34,6 +34,7 @@ import de.bixilon.minosoft.tags.MinecraftTagTypes.ITEM import de.bixilon.minosoft.tags.Tag import de.bixilon.minosoft.tags.TagList import de.bixilon.minosoft.tags.TagManager +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet object FallbackTags { private val tags: MutableMap>> = mutableMapOf() @@ -41,7 +42,7 @@ object FallbackTags { private fun read(type: ResourceLocation, name: ResourceLocation): Set { val content = Minosoft.MINOSOFT_ASSETS_MANAGER[ResourceLocation(name.namespace, "tags/${type.path}/${name.path}.json")].readJsonObject()["values"].asAnyCollection() - val set: MutableSet = mutableSetOf() + val set: MutableSet = ObjectOpenHashSet() for (entry in content) { set += ResourceLocation.of(entry.toString()) } @@ -68,7 +69,7 @@ object FallbackTags { val map: MutableMap> = mutableMapOf() for ((name, entries) in entries) { - val set: MutableSet = mutableSetOf() + val set: MutableSet = ObjectOpenHashSet() for (item in entries) { set += registry[item] ?: continue } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/shapes/voxel/AbstractVoxelShape.kt b/src/main/java/de/bixilon/minosoft/data/registries/shapes/voxel/AbstractVoxelShape.kt index 30a7b3d30..72bbf258a 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/shapes/voxel/AbstractVoxelShape.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/shapes/voxel/AbstractVoxelShape.kt @@ -40,7 +40,7 @@ abstract class AbstractVoxelShape : Iterable { } operator fun plus(offset: Vec3t): AbstractVoxelShape { - val result: MutableSet = mutableSetOf() + val result: MutableSet = ObjectOpenHashSet() for (aabb in this) { result.add(aabb + offset) } @@ -48,7 +48,7 @@ abstract class AbstractVoxelShape : Iterable { } fun add(other: AbstractVoxelShape): AbstractVoxelShape { - val aabbs: MutableSet = mutableSetOf() + val aabbs: MutableSet = ObjectOpenHashSet() aabbs += this aabbs += other return VoxelShape(aabbs) diff --git a/src/main/java/de/bixilon/minosoft/modding/event/master/EventMaster.kt b/src/main/java/de/bixilon/minosoft/modding/event/master/EventMaster.kt index 49d7dc00f..fd12a12ce 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/master/EventMaster.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/master/EventMaster.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -22,6 +22,7 @@ import de.bixilon.minosoft.modding.event.events.CancelableEvent import de.bixilon.minosoft.modding.event.events.Event import de.bixilon.minosoft.modding.event.listener.EventListener import de.bixilon.minosoft.modding.event.listener.OneShotListener +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import java.util.* open class EventMaster(vararg parents: AbstractEventMaster) : AbstractEventMaster { @@ -61,7 +62,7 @@ open class EventMaster(vararg parents: AbstractEventMaster) : AbstractEventMaste } parentLock.release() - val toRemove: MutableSet = mutableSetOf() + val toRemove: MutableSet = ObjectOpenHashSet() eventInvokerLock.acquire() val worker = UnconditionalWorker() for (invoker in eventListeners) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TagsS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TagsS2CP.kt index d47ad10bf..9853c1df8 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TagsS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/TagsS2CP.kt @@ -36,6 +36,7 @@ import de.bixilon.minosoft.tags.TagManager import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet @LoadPacket class TagsS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { @@ -91,7 +92,7 @@ class TagsS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { } private fun PlayInByteBuffer.readTag(registry: Registry): Tag { - val items: MutableSet = mutableSetOf() + val items: MutableSet = ObjectOpenHashSet() for (id in readVarIntArray()) { items += registry.getOrNull(id) ?: continue }