registry iterator

This commit is contained in:
Bixilon 2021-12-13 10:35:33 +01:00
parent 25a89cc8f7
commit b55d24ca89
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
9 changed files with 43 additions and 34 deletions

View File

@ -587,8 +587,8 @@ abstract class Entity(
return // ToDo return // ToDo
} }
connection.registries.fluidRegistry.forEachItem { for (fluid in connection.registries.fluidRegistry) {
updateFluidState(it.resourceLocation) updateFluidState(fluid.resourceLocation)
} }
submergedFluid = null submergedFluid = null

View File

@ -23,4 +23,10 @@ interface AbstractRegistry<T> : Iterable<T>, Clearable, Parentable<AbstractRegis
operator fun get(id: Int): T? operator fun get(id: Int): T?
fun getId(value: T): Int fun getId(value: T): Int
fun noParentIterator(): Iterator<T>
override fun iterator(): Iterator<T> {
return RegistryIterator(this)
}
} }

View File

@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.registries.registry
import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.data.registries.blocks.BlockState
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.toSynchronizedMap
class BlockStateRegistry(var flattened: Boolean) : AbstractRegistry<BlockState?> { class BlockStateRegistry(var flattened: Boolean) : AbstractRegistry<BlockState?> {
override var parent: AbstractRegistry<BlockState?>? = null override var parent: AbstractRegistry<BlockState?>? = null
@ -30,8 +29,8 @@ class BlockStateRegistry(var flattened: Boolean) : AbstractRegistry<BlockState?>
return value return value
} }
override fun iterator(): Iterator<BlockState> { override fun noParentIterator(): Iterator<BlockState?> {
return idMap.toSynchronizedMap().values.iterator() return idMap.values.iterator()
} }
override fun clear() { override fun clear() {

View File

@ -19,7 +19,6 @@ import de.bixilon.minosoft.data.registries.MultiResourceLocationAble
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.ResourceLocationAble import de.bixilon.minosoft.data.registries.ResourceLocationAble
import de.bixilon.minosoft.data.registries.registries.Registries 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.toInt
import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation
import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap
@ -171,14 +170,6 @@ open class Registry<T : RegistryItem>(
this.valueIdMap.putAll(valueIdMap) 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<Registry<T>>()?.forEachItem(lambda)
}
override fun toString(): String { override fun toString(): String {
return super.toString() + ": ${resourceLocationMap.size}x" return super.toString() + ": ${resourceLocationMap.size}x"
} }
@ -195,8 +186,7 @@ open class Registry<T : RegistryItem>(
BITS_16, BITS_16,
} }
@Deprecated("TODO") override fun noParentIterator(): Iterator<T> {
override fun iterator(): Iterator<T> {
return resourceLocationMap.values.iterator() return resourceLocationMap.values.iterator()
} }
} }

View File

@ -0,0 +1,21 @@
package de.bixilon.minosoft.data.registries.registries.registry
class RegistryIterator<T>(
private var registry: AbstractRegistry<T>,
) : Iterator<T> {
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()
}
}

View File

@ -74,8 +74,7 @@ class ResourceLocationRegistry(
return super.toString() + ": ${idValueMap.size}x" return super.toString() + ": ${idValueMap.size}x"
} }
@Deprecated("TODO") override fun noParentIterator(): Iterator<ResourceLocation> {
override fun iterator(): Iterator<ResourceLocation> {
return idValueMap.values.iterator() return idValueMap.values.iterator()
} }
} }

View File

@ -88,12 +88,12 @@ class ModelLoader(
fun load() { fun load() {
// ToDo: Optimize performance // ToDo: Optimize performance
Log.log(LogMessageType.VERSION_LOADING, LogLevels.VERBOSE) { "Loading block models..." } Log.log(LogMessageType.VERSION_LOADING, LogLevels.VERBOSE) { "Loading block models..." }
registry.blockRegistry.forEachItem { for (block in registry.blockRegistry) {
loadBlockStates(it) loadBlockStates(block)
} }
Log.log(LogMessageType.VERSION_LOADING, LogLevels.VERBOSE) { "Loading item models..." } Log.log(LogMessageType.VERSION_LOADING, LogLevels.VERBOSE) { "Loading item models..." }
registry.itemRegistry.forEachItem { for (item in registry.itemRegistry) {
loadItemModel(it.resourceLocation.prefix("item/")) loadItemModel(item.resourceLocation.prefix("item/"))
} }
Log.log(LogMessageType.VERSION_LOADING, LogLevels.VERBOSE) { "Done loading unbaked models!" } Log.log(LogMessageType.VERSION_LOADING, LogLevels.VERBOSE) { "Done loading unbaked models!" }

View File

@ -118,8 +118,8 @@ class ParticleRenderer(
transparentMesh.load() transparentMesh.load()
translucentMesh.load() translucentMesh.load()
connection.registries.particleTypeRegistry.forEachItem { for (particle in connection.registries.particleTypeRegistry) {
for (resourceLocation in it.textures) { for (resourceLocation in particle.textures) {
renderWindow.textureManager.staticTextures.createTexture(resourceLocation) renderWindow.textureManager.staticTextures.createTexture(resourceLocation)
} }
} }

View File

@ -13,10 +13,6 @@
package de.bixilon.minosoft.gui.rendering.world 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.KeyAction
import de.bixilon.minosoft.config.key.KeyBinding import de.bixilon.minosoft.config.key.KeyBinding
import de.bixilon.minosoft.config.key.KeyCodes import de.bixilon.minosoft.config.key.KeyCodes
@ -129,16 +125,14 @@ class WorldRenderer(
val preparingTasksSize: Int by preparingTasks::size val preparingTasksSize: Int by preparingTasks::size
override fun init() { override fun init() {
val asset = AssetsVersionProperties[connection.version]!!
val zip = FileUtil.readFile(FileAssetsUtil.getPath(asset.jarAssetsHash)).readArchive()
val modelLoader = ModelLoader(renderWindow) val modelLoader = ModelLoader(renderWindow)
modelLoader.load() modelLoader.load()
connection.registries.fluidRegistry.forEachItem { for (fluid in connection.registries.fluidRegistry) {
if (it is FlowableFluid) { if (fluid is FlowableFluid) {
it.flowingTexture = renderWindow.textureManager.staticTextures.createTexture(it.flowingTextureName!!.texture()) 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()) }
} }
} }