From 4b718d6c5f498f7aaa5e32ba4bb4bd6bd62c2a69 Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Sun, 8 Oct 2023 17:29:02 +0200 Subject: [PATCH] fix default dimension height, test equality of dimension deserialization and default constructor This fixes some chunk bugs in < 1.15 if the top section was set --- .../data/registries/dimension/AmbientLight.kt | 4 ++++ .../registries/dimension/DimensionProperties.kt | 9 ++++----- .../dimension/DimensionPropertiesTest.kt | 17 ++++++++++++++++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/dimension/AmbientLight.kt b/src/main/java/de/bixilon/minosoft/data/registries/dimension/AmbientLight.kt index 8e999c864..ac7ddf627 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/dimension/AmbientLight.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/dimension/AmbientLight.kt @@ -33,4 +33,8 @@ class AmbientLight(val base: Float = 0.0f) { override fun toString(): String { return base.toString() } + + companion object { + val DEFAULT = AmbientLight() + } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/dimension/DimensionProperties.kt b/src/main/java/de/bixilon/minosoft/data/registries/dimension/DimensionProperties.kt index 9087c53b8..eac2e9830 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/dimension/DimensionProperties.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/dimension/DimensionProperties.kt @@ -28,7 +28,7 @@ import de.bixilon.minosoft.util.nbt.tag.NBTUtil.get data class DimensionProperties( // val piglinSafe: Boolean = false, // val natural: Boolean = true, - val ambientLight: AmbientLight = AmbientLight(), + val ambientLight: AmbientLight = AmbientLight.DEFAULT, // val respawnAnchorWorks: Boolean = false, val light: Boolean = true, val skyLight: Boolean = true, @@ -59,16 +59,15 @@ data class DimensionProperties( companion object { const val DEFAULT_HEIGHT = 256 - const val DEFAULT_MAX_Y = DEFAULT_HEIGHT - 1 fun deserialize(identifier: ResourceLocation? = null, data: Map): DimensionProperties { return DimensionProperties( //piglinSafe = data["piglin_safe"]?.toBoolean() ?: false, //natural = data["natural"]?.toBoolean() ?: false, - ambientLight = AmbientLight(data["ambient_light"]?.toFloat() ?: 0.0f), + ambientLight = data["ambient_light"]?.toFloat()?.let { AmbientLight(it) } ?: AmbientLight.DEFAULT, //infiniBurn = ResourceLocation(data["infiniburn"].nullCast() ?: "infiniburn_overworld"), //respawnAnchorWorks = data["respawn_anchor_works"]?.toBoolean() ?: false, - skyLight = data["has_skylight", "has_sky_light"]?.toBoolean() ?: false, + skyLight = data["has_skylight", "has_sky_light"]?.toBoolean() ?: true, //bedWorks = data["bed_works"]?.toBoolean() ?: false, effects = data["effects"].nullCast()?.let { DefaultDimensionEffects[it.toResourceLocation()] } ?: identifier?.let { DefaultDimensionEffects[it] } ?: OverworldEffects, //hasRaids = data["has_raids"]?.toBoolean() ?: false, @@ -77,7 +76,7 @@ data class DimensionProperties( minY = data["min_y"]?.toInt() ?: 0, //hasCeiling = data["has_ceiling"]?.toBoolean() ?: false, ultraWarm = data["ultrawarm"]?.toBoolean() ?: false, - height = data["height"]?.toInt() ?: DEFAULT_MAX_Y, + height = data["height"]?.toInt() ?: DEFAULT_HEIGHT, supports3DBiomes = data["supports_3d_biomes"]?.toBoolean() ?: true, ) } diff --git a/src/test/java/de/bixilon/minosoft/data/registries/dimension/DimensionPropertiesTest.kt b/src/test/java/de/bixilon/minosoft/data/registries/dimension/DimensionPropertiesTest.kt index 655f01efb..95e12cffa 100644 --- a/src/test/java/de/bixilon/minosoft/data/registries/dimension/DimensionPropertiesTest.kt +++ b/src/test/java/de/bixilon/minosoft/data/registries/dimension/DimensionPropertiesTest.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. * @@ -38,4 +38,19 @@ class DimensionPropertiesTest { assertEquals(0, properties.maxSection) assertEquals(15, properties.maxY) } + + @Test + fun `legacy dimension`() { + val properties = DimensionProperties() + assertEquals(16, properties.sections) + assertEquals(0, properties.minSection) + assertEquals(15, properties.maxSection) + assertEquals(255, properties.maxY) + } + + @Test + fun `default of deserialization`() { + val properties = DimensionProperties.deserialize(null, emptyMap()) + assertEquals(properties, DimensionProperties()) + } }