From b55d24ca893862d2af2afe6dc3c7f145f56ec771 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 13 Dec 2021 10:35:33 +0100 Subject: [PATCH] registry iterator --- .../minosoft/data/entities/entities/Entity.kt | 4 ++-- .../registries/registry/AbstractRegistry.kt | 6 ++++++ .../registries/registry/BlockStateRegistry.kt | 5 ++--- .../registries/registry/Registry.kt | 12 +---------- .../registries/registry/RegistryIterator.kt | 21 +++++++++++++++++++ .../registry/ResourceLocationRegistry.kt | 3 +-- .../gui/rendering/models/ModelLoader.kt | 8 +++---- .../rendering/particle/ParticleRenderer.kt | 4 ++-- .../gui/rendering/world/WorldRenderer.kt | 14 ++++--------- 9 files changed, 43 insertions(+), 34 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/data/registries/registries/registry/RegistryIterator.kt diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt index de8aeb675..abf75e979 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt @@ -587,8 +587,8 @@ abstract class Entity( return // ToDo } - connection.registries.fluidRegistry.forEachItem { - updateFluidState(it.resourceLocation) + for (fluid in connection.registries.fluidRegistry) { + updateFluidState(fluid.resourceLocation) } submergedFluid = null diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/AbstractRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/AbstractRegistry.kt index e2bd1ebd1..55bf154af 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/AbstractRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/AbstractRegistry.kt @@ -23,4 +23,10 @@ interface AbstractRegistry : Iterable, Clearable, Parentable + + override fun iterator(): Iterator { + return RegistryIterator(this) + } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/BlockStateRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/BlockStateRegistry.kt index 0e0763325..2f201f36e 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/BlockStateRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/BlockStateRegistry.kt @@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.registries.registry import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition -import de.bixilon.minosoft.util.KUtil.toSynchronizedMap class BlockStateRegistry(var flattened: Boolean) : AbstractRegistry { override var parent: AbstractRegistry? = null @@ -30,8 +29,8 @@ class BlockStateRegistry(var flattened: Boolean) : AbstractRegistry return value } - override fun iterator(): Iterator { - return idMap.toSynchronizedMap().values.iterator() + override fun noParentIterator(): Iterator { + return idMap.values.iterator() } override fun clear() { diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt index 17021990d..c198cef3a 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt @@ -19,7 +19,6 @@ import de.bixilon.minosoft.data.registries.MultiResourceLocationAble import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocationAble import de.bixilon.minosoft.data.registries.registries.Registries -import de.bixilon.minosoft.util.KUtil.nullCast import de.bixilon.minosoft.util.KUtil.toInt import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap @@ -171,14 +170,6 @@ open class Registry( this.valueIdMap.putAll(valueIdMap) } - @Deprecated("Too slow, should be used with a ToDo: RegistryIterator") - fun forEachItem(lambda: (T) -> Unit) { - for (item in resourceLocationMap.values) { - lambda(item) - } - parent.nullCast>()?.forEachItem(lambda) - } - override fun toString(): String { return super.toString() + ": ${resourceLocationMap.size}x" } @@ -195,8 +186,7 @@ open class Registry( BITS_16, } - @Deprecated("TODO") - override fun iterator(): Iterator { + override fun noParentIterator(): Iterator { return resourceLocationMap.values.iterator() } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/RegistryIterator.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/RegistryIterator.kt new file mode 100644 index 000000000..014a4bb72 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/RegistryIterator.kt @@ -0,0 +1,21 @@ +package de.bixilon.minosoft.data.registries.registries.registry + +class RegistryIterator( + private var registry: AbstractRegistry, +) : Iterator { + private var iterator = registry.noParentIterator() + + override fun hasNext(): Boolean { + val hasNext = iterator.hasNext() + if (hasNext) { + return true + } + registry = registry.parent ?: return false + iterator = registry.noParentIterator() + return iterator.hasNext() + } + + override fun next(): T { + return iterator.next() + } +} diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/ResourceLocationRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/ResourceLocationRegistry.kt index 0bd1b15c0..663ba4aa8 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/ResourceLocationRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/ResourceLocationRegistry.kt @@ -74,8 +74,7 @@ class ResourceLocationRegistry( return super.toString() + ": ${idValueMap.size}x" } - @Deprecated("TODO") - override fun iterator(): Iterator { + override fun noParentIterator(): Iterator { return idValueMap.values.iterator() } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt index ecb508c9c..41d813528 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt @@ -88,12 +88,12 @@ class ModelLoader( fun load() { // ToDo: Optimize performance Log.log(LogMessageType.VERSION_LOADING, LogLevels.VERBOSE) { "Loading block models..." } - registry.blockRegistry.forEachItem { - loadBlockStates(it) + for (block in registry.blockRegistry) { + loadBlockStates(block) } Log.log(LogMessageType.VERSION_LOADING, LogLevels.VERBOSE) { "Loading item models..." } - registry.itemRegistry.forEachItem { - loadItemModel(it.resourceLocation.prefix("item/")) + for (item in registry.itemRegistry) { + loadItemModel(item.resourceLocation.prefix("item/")) } Log.log(LogMessageType.VERSION_LOADING, LogLevels.VERBOSE) { "Done loading unbaked models!" } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt index 7a6e16591..034860c61 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt @@ -118,8 +118,8 @@ class ParticleRenderer( transparentMesh.load() translucentMesh.load() - connection.registries.particleTypeRegistry.forEachItem { - for (resourceLocation in it.textures) { + for (particle in connection.registries.particleTypeRegistry) { + for (resourceLocation in particle.textures) { renderWindow.textureManager.staticTextures.createTexture(resourceLocation) } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt index b692bb77e..a3ae1b92c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt @@ -13,10 +13,6 @@ package de.bixilon.minosoft.gui.rendering.world -import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties -import de.bixilon.minosoft.assets.util.FileAssetsUtil -import de.bixilon.minosoft.assets.util.FileUtil -import de.bixilon.minosoft.assets.util.FileUtil.readArchive import de.bixilon.minosoft.config.key.KeyAction import de.bixilon.minosoft.config.key.KeyBinding import de.bixilon.minosoft.config.key.KeyCodes @@ -129,16 +125,14 @@ class WorldRenderer( val preparingTasksSize: Int by preparingTasks::size override fun init() { - val asset = AssetsVersionProperties[connection.version]!! - val zip = FileUtil.readFile(FileAssetsUtil.getPath(asset.jarAssetsHash)).readArchive() val modelLoader = ModelLoader(renderWindow) modelLoader.load() - connection.registries.fluidRegistry.forEachItem { - if (it is FlowableFluid) { - it.flowingTexture = renderWindow.textureManager.staticTextures.createTexture(it.flowingTextureName!!.texture()) + for (fluid in connection.registries.fluidRegistry) { + if (fluid is FlowableFluid) { + fluid.flowingTexture = renderWindow.textureManager.staticTextures.createTexture(fluid.flowingTextureName!!.texture()) } - it.stillTexture = it.stillTextureName?.let { texture -> renderWindow.textureManager.staticTextures.createTexture(texture.texture()) } + fluid.stillTexture = fluid.stillTextureName?.let { texture -> renderWindow.textureManager.staticTextures.createTexture(texture.texture()) } } }