SkyProperties

This commit is contained in:
Bixilon 2022-11-01 20:04:11 +01:00
parent 05ff4647a2
commit f1a87aac25
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
7 changed files with 217 additions and 2 deletions

View File

@ -19,7 +19,11 @@ import de.bixilon.kutil.primitive.BooleanUtil.toBoolean
import de.bixilon.kutil.primitive.FloatUtil.toFloat
import de.bixilon.kutil.primitive.IntUtil.toInt
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.gui.rendering.sky.properties.DefaultSkyProperties
import de.bixilon.minosoft.gui.rendering.sky.properties.OverworldSkyProperties
import de.bixilon.minosoft.gui.rendering.sky.properties.SkyProperties
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.toResourceLocation
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.get
data class DimensionProperties(
@ -30,7 +34,7 @@ data class DimensionProperties(
val respawnAnchorWorks: Boolean = false,
val hasSkyLight: Boolean = true,
val bedWorks: Boolean = true,
val skyProperties: ResourceLocation = ResourceLocation("overworld"),
val skyProperties: SkyProperties = OverworldSkyProperties,
val hasRaids: Boolean = true,
val logicalHeight: Int = DEFAULT_HEIGHT,
val coordinateScale: Double = 0.0,
@ -79,7 +83,7 @@ data class DimensionProperties(
respawnAnchorWorks = data["respawn_anchor_works"]?.toBoolean() ?: false,
hasSkyLight = data["has_skylight", "has_sky_light"]?.toBoolean() ?: false,
bedWorks = data["bed_works"]?.toBoolean() ?: false,
skyProperties = ResourceLocation(data["effects"].nullCast<String>() ?: "overworld"),
skyProperties = data["effects"].nullCast<String>()?.let { DefaultSkyProperties[it.toResourceLocation()] } ?: OverworldSkyProperties,
hasRaids = data["has_raids"]?.toBoolean() ?: false,
logicalHeight = data["logical_height"]?.toInt() ?: DEFAULT_MAX_Y,
coordinateScale = data["coordinate_scale"].nullCast() ?: 0.0,

View File

@ -0,0 +1,22 @@
/*
* Minosoft
* Copyright (C) 2020-2022 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.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.gui.rendering.sky.properties
import de.bixilon.minosoft.util.ResourceLocationMap
object DefaultSkyProperties : ResourceLocationMap<SkyProperties>(
OverworldSkyProperties,
NetherSkyProperties,
EndSkyProperties,
)

View File

@ -0,0 +1,38 @@
/*
* Minosoft
* Copyright (C) 2020-2022 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.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.gui.rendering.sky.properties
import de.bixilon.kutil.exception.Broken
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.texture
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.KUtil.minecraft
object EndSkyProperties : SkyProperties {
override val resourceLocation = minecraft("the_end")
override val daylightCycle: Boolean get() = false
override val fixedTexture: ResourceLocation = minecraft("environment/end_sky").texture()
override val sun: Boolean get() = false
override val moon: Boolean get() = false
override val stars: Boolean get() = false
override val clouds: Boolean get() = false
override fun getCloudHeight(connection: PlayConnection): IntRange = Broken()
override val fullbright: Boolean get() = true
override val fog: Boolean get() = false
}

View File

@ -0,0 +1,35 @@
/*
* Minosoft
* Copyright (C) 2020-2022 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.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.gui.rendering.sky.properties
import de.bixilon.kutil.exception.Broken
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.KUtil.minecraft
object NetherSkyProperties : SkyProperties {
override val resourceLocation = minecraft("the_nether")
override val daylightCycle: Boolean get() = false
override val sun: Boolean get() = false
override val moon: Boolean get() = false
override val stars: Boolean get() = false
override val clouds: Boolean get() = false
override fun getCloudHeight(connection: PlayConnection): IntRange = Broken()
override val fullbright: Boolean get() = true
override val fog: Boolean get() = true
}

View File

@ -0,0 +1,41 @@
/*
* Minosoft
* Copyright (C) 2020-2022 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.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.gui.rendering.sky.properties
import de.bixilon.minosoft.data.registries.dimension.DimensionProperties
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.KUtil.minecraft
object OverworldSkyProperties : SkyProperties {
override val resourceLocation = minecraft("overworld")
override val daylightCycle: Boolean get() = true
override val sun: Boolean get() = true
override val moon: Boolean get() = true
override val stars: Boolean get() = true
override val clouds: Boolean get() = true
override fun getCloudHeight(connection: PlayConnection): IntRange {
val height = connection.world.dimension?.dataHeight ?: DimensionProperties.DEFAULT_HEIGHT
if (height > DimensionProperties.DEFAULT_HEIGHT) {
return 192..196
}
return 128..132
}
override val fullbright: Boolean get() = false
override val fog: Boolean get() = true
}

View File

@ -0,0 +1,34 @@
/*
* Minosoft
* Copyright (C) 2020-2022 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.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.gui.rendering.sky.properties
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.ResourceLocationAble
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
interface SkyProperties : ResourceLocationAble {
val daylightCycle: Boolean
val fixedTexture: ResourceLocation? get() = null
val sun: Boolean
val moon: Boolean
val stars: Boolean
val clouds: Boolean
fun getCloudHeight(connection: PlayConnection): IntRange
val fullbright: Boolean get() = false
val fog: Boolean
}

View File

@ -0,0 +1,41 @@
/*
* Minosoft
* Copyright (C) 2020-2022 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.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.util
import de.bixilon.minosoft.data.registries.MultiResourceLocationAble
import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.ResourceLocationAble
open class ResourceLocationMap<T : ResourceLocationAble>(vararg entries: T) : Iterable<T> {
private val entries: MutableMap<ResourceLocation, T> = mutableMapOf()
init {
for (factory in entries) {
this.entries[factory.resourceLocation] = factory
if (factory is MultiResourceLocationAble) {
for (resourceLocation in factory.ALIASES) {
this.entries[resourceLocation] = factory
}
}
}
}
operator fun get(resourceLocation: ResourceLocation): T? {
return this.entries[resourceLocation]
}
override fun iterator(): Iterator<T> {
return this.entries.values.iterator()
}
}