mirror of
https://github.com/GayPizzaSpecifications/foundation.git
synced 2025-08-03 21:41:32 +00:00
Gjallarhorn: Implement block state global cache.
This reduces memory usage by reusing block state objects.
This commit is contained in:
@ -29,7 +29,7 @@ class BlockChangelog(
|
|||||||
val location = BlockCoordinate(x.toLong(), y.toLong(), z.toLong())
|
val location = BlockCoordinate(x.toLong(), y.toLong(), z.toLong())
|
||||||
|
|
||||||
val fromBlock = if (changeIsBreak) {
|
val fromBlock = if (changeIsBreak) {
|
||||||
BlockState(block)
|
BlockState.cached(block)
|
||||||
} else {
|
} else {
|
||||||
BlockState.AirBlock
|
BlockState.AirBlock
|
||||||
}
|
}
|
||||||
@ -37,7 +37,7 @@ class BlockChangelog(
|
|||||||
val toBlock = if (changeIsBreak) {
|
val toBlock = if (changeIsBreak) {
|
||||||
BlockState.AirBlock
|
BlockState.AirBlock
|
||||||
} else {
|
} else {
|
||||||
BlockState(block)
|
BlockState.cached(block)
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockChange(
|
BlockChange(
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
package cloud.kubelet.foundation.gjallarhorn.state
|
package cloud.kubelet.foundation.gjallarhorn.state
|
||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
@Serializable
|
class BlockState(val type: String) {
|
||||||
data class BlockState(val type: String) {
|
|
||||||
companion object {
|
companion object {
|
||||||
val AirBlock = BlockState("minecraft:air")
|
private val cache = ConcurrentHashMap<String, BlockState>()
|
||||||
|
|
||||||
|
val AirBlock: BlockState = cached("minecraft:air")
|
||||||
|
|
||||||
|
fun cached(type: String): BlockState = cache.computeIfAbsent(type) { BlockState(type) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user