mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 10:55:01 -04:00
shulker box: load silver model (<4), improve model block mapping code
This commit is contained in:
parent
2ff185dcc6
commit
09acab1629
@ -17,7 +17,7 @@ import de.bixilon.kotlinglm.pow
|
||||
import de.bixilon.kutil.observer.DataObserver
|
||||
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
|
||||
import de.bixilon.minosoft.assets.connection.ConnectionAssetsManager
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsVersion.packFormat
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftPackFormat.packFormat
|
||||
import de.bixilon.minosoft.assets.properties.manager.AssetsManagerProperties
|
||||
import de.bixilon.minosoft.assets.properties.manager.pack.PackProperties
|
||||
import de.bixilon.minosoft.camera.ConnectionCamera
|
||||
|
@ -17,7 +17,7 @@ import de.bixilon.kutil.latch.AbstractLatch
|
||||
import de.bixilon.minosoft.Minosoft
|
||||
import de.bixilon.minosoft.assets.connection.ConnectionAssetsManager
|
||||
import de.bixilon.minosoft.assets.minecraft.JarAssetsManager
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsVersion.packFormat
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftPackFormat.packFormat
|
||||
import de.bixilon.minosoft.assets.minecraft.index.IndexAssetsManager
|
||||
import de.bixilon.minosoft.assets.properties.manager.AssetsManagerProperties
|
||||
import de.bixilon.minosoft.assets.properties.manager.pack.PackProperties
|
||||
|
@ -19,7 +19,7 @@ import de.bixilon.kutil.string.StringUtil.formatPlaceholder
|
||||
import de.bixilon.kutil.url.URLUtil.toURL
|
||||
import de.bixilon.minosoft.assets.AssetsManager
|
||||
import de.bixilon.minosoft.assets.InvalidAssetException
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsVersion.packFormat
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftPackFormat.packFormat
|
||||
import de.bixilon.minosoft.assets.properties.manager.AssetsManagerProperties
|
||||
import de.bixilon.minosoft.assets.properties.manager.pack.PackProperties
|
||||
import de.bixilon.minosoft.assets.util.FileAssetsTypes
|
||||
|
@ -32,7 +32,7 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_23W32A
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_23W42A
|
||||
import de.bixilon.minosoft.protocol.versions.Version
|
||||
|
||||
object MinecraftAssetsVersion {
|
||||
object MinecraftPackFormat {
|
||||
const val FLATTENING = 4
|
||||
const val LATEST_PACK_FORMAT = 19
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
package de.bixilon.minosoft.config.profile.profiles.resources.assets
|
||||
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsVersion.LATEST_PACK_FORMAT
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftPackFormat.LATEST_PACK_FORMAT
|
||||
import de.bixilon.minosoft.assets.minecraft.index.IndexAssetsType
|
||||
import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
|
||||
import de.bixilon.minosoft.config.profile.delegate.primitive.IntDelegate
|
||||
|
@ -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.
|
||||
*
|
||||
@ -15,6 +15,7 @@ package de.bixilon.minosoft.data.colors
|
||||
|
||||
import de.bixilon.kutil.enums.EnumUtil
|
||||
import de.bixilon.kutil.enums.ValuesEnum
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftPackFormat.FLATTENING
|
||||
|
||||
enum class DyeColors {
|
||||
WHITE,
|
||||
@ -38,5 +39,11 @@ enum class DyeColors {
|
||||
companion object : ValuesEnum<DyeColors> {
|
||||
override val VALUES: Array<DyeColors> = values()
|
||||
override val NAME_MAP: Map<String, DyeColors> = EnumUtil.getEnumValues(VALUES)
|
||||
|
||||
|
||||
fun DyeColors.name(packFormat: Int) = when {
|
||||
packFormat >= FLATTENING && this == LIGHT_GRAY -> "silver"
|
||||
else -> name.lowercase()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -14,33 +14,27 @@
|
||||
package de.bixilon.minosoft.data.entities.block.container.storage
|
||||
|
||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
||||
import de.bixilon.minosoft.data.colors.DyeColors
|
||||
import de.bixilon.minosoft.data.entities.block.BlockEntityFactory
|
||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||
import de.bixilon.minosoft.data.registries.blocks.types.entity.storage.ShulkerBoxBlock
|
||||
import de.bixilon.minosoft.data.registries.blocks.types.properties.DyedBlock
|
||||
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
|
||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||
import de.bixilon.minosoft.gui.rendering.chunk.entities.renderer.RenderedBlockEntity
|
||||
import de.bixilon.minosoft.gui.rendering.chunk.entities.renderer.storage.shulker.ShulkerBoxRenderer
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||
|
||||
class ShulkerBoxBlockEntity(connection: PlayConnection) : StorageBlockEntity(connection), RenderedBlockEntity<ShulkerBoxRenderer> {
|
||||
override var renderer: ShulkerBoxRenderer? = null
|
||||
|
||||
override fun createRenderer(context: RenderContext, state: BlockState, position: Vec3i, light: Int): ShulkerBoxRenderer? {
|
||||
// TODO: remove that junk code
|
||||
val model: BakedSkeletalModel?
|
||||
val prefix = state.block.identifier.path.removeSuffix("shulker_box")
|
||||
if (prefix.endsWith("_")) {
|
||||
// colored
|
||||
val color = DyeColors[prefix.removeSuffix("_")]
|
||||
model = context.models.skeletal[ShulkerBoxRenderer.NAME_COLOR[color.ordinal]]
|
||||
// TODO: light gray -> silver (<1.13)
|
||||
} else {
|
||||
model = context.models.skeletal[ShulkerBoxRenderer.NAME]
|
||||
if (state.block !is ShulkerBoxBlock) return null
|
||||
val name = when {
|
||||
state.block is DyedBlock -> ShulkerBoxRenderer.NAME_COLOR[state.block.color.ordinal]
|
||||
else -> ShulkerBoxRenderer.NAME
|
||||
}
|
||||
if (model == null) return null
|
||||
val model = context.models.skeletal[name] ?: return null
|
||||
return ShulkerBoxRenderer(this, context, state, position, model, light)
|
||||
}
|
||||
|
||||
|
@ -16,10 +16,12 @@ package de.bixilon.minosoft.gui.rendering.chunk.entities.renderer.storage.shulke
|
||||
import de.bixilon.kotlinglm.vec3.Vec3
|
||||
import de.bixilon.kotlinglm.vec3.Vec3i
|
||||
import de.bixilon.minosoft.data.colors.DyeColors
|
||||
import de.bixilon.minosoft.data.colors.DyeColors.Companion.name
|
||||
import de.bixilon.minosoft.data.entities.block.container.storage.ShulkerBoxBlockEntity
|
||||
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.getFacing
|
||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
|
||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||
import de.bixilon.minosoft.gui.rendering.chunk.entities.EntityRendererRegister
|
||||
@ -66,7 +68,6 @@ class ShulkerBoxRenderer(
|
||||
|
||||
private val named = minecraft("shulker")
|
||||
private val texture = minecraft("entity/shulker/shulker").texture()
|
||||
private val colored = Array(DyeColors.VALUES.size) { minecraft("entity/shulker/shulker_${DyeColors[it].name.lowercase()}").texture() }
|
||||
|
||||
private val ROTATIONS = arrayOf(
|
||||
Vec3(180, 0, 0).rad,
|
||||
@ -78,13 +79,17 @@ class ShulkerBoxRenderer(
|
||||
)
|
||||
|
||||
override fun register(loader: ModelLoader) {
|
||||
val texture = loader.context.textures.staticTextures.createTexture(texture)
|
||||
loader.skeletal.register(NAME, TEMPLATE, override = mapOf(this.named to texture))
|
||||
load(NAME, texture, loader)
|
||||
|
||||
for (color in DyeColors) {
|
||||
val texture = loader.context.textures.staticTextures.createTexture(colored[color.ordinal])
|
||||
loader.skeletal.register(NAME_COLOR[color.ordinal], TEMPLATE, override = mapOf(this.named to texture))
|
||||
val texture = minecraft("entity/shulker/shulker_${color.name(loader.packFormat)}").texture()
|
||||
load(NAME_COLOR[color.ordinal], texture, loader)
|
||||
}
|
||||
}
|
||||
|
||||
private fun load(name: ResourceLocation, texture: ResourceLocation, loader: ModelLoader) {
|
||||
val texture = loader.context.textures.staticTextures.createTexture(texture)
|
||||
loader.skeletal.register(name, TEMPLATE, override = mapOf(this.named to texture))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ import de.bixilon.kutil.collections.iterator.async.AsyncIterator.Companion.async
|
||||
import de.bixilon.kutil.collections.map.LockMap
|
||||
import de.bixilon.kutil.latch.AbstractLatch
|
||||
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsVersion
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftPackFormat
|
||||
import de.bixilon.minosoft.assets.util.InputStreamUtil.readJsonObject
|
||||
import de.bixilon.minosoft.data.registries.blocks.types.Block
|
||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||
@ -94,7 +94,7 @@ class BlockLoader(private val loader: ModelLoader) {
|
||||
}
|
||||
|
||||
fun fixTexturePath(name: ResourceLocation): ResourceLocation {
|
||||
return ResourceLocation(name.namespace, name.path.fixPrefix(loader.packFormat, MinecraftAssetsVersion.FLATTENING, "blocks/", "block/"))
|
||||
return ResourceLocation(name.namespace, name.path.fixPrefix(loader.packFormat, MinecraftPackFormat.FLATTENING, "blocks/", "block/"))
|
||||
}
|
||||
|
||||
private fun ResourceLocation.blockModel(): ResourceLocation {
|
||||
|
@ -16,7 +16,7 @@ package de.bixilon.minosoft.gui.rendering.models.loader
|
||||
import de.bixilon.kutil.cast.CastUtil.nullCast
|
||||
import de.bixilon.kutil.latch.AbstractLatch
|
||||
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsVersion
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftPackFormat
|
||||
import de.bixilon.minosoft.assets.util.InputStreamUtil.readJsonObject
|
||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||
import de.bixilon.minosoft.data.registries.item.items.Item
|
||||
@ -83,7 +83,7 @@ class ItemLoader(private val loader: ModelLoader) {
|
||||
}
|
||||
|
||||
fun fixTexturePath(name: ResourceLocation): ResourceLocation {
|
||||
return ResourceLocation(name.namespace, name.path.fixPrefix(loader.packFormat, MinecraftAssetsVersion.FLATTENING, "items/", "item/"))
|
||||
return ResourceLocation(name.namespace, name.path.fixPrefix(loader.packFormat, MinecraftPackFormat.FLATTENING, "items/", "item/"))
|
||||
}
|
||||
|
||||
private fun ResourceLocation.itemModel(): ResourceLocation {
|
||||
|
Loading…
x
Reference in New Issue
Block a user