From a208d7a926116bcd3a46e4507c7b1d11e391c8c6 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Wed, 20 Apr 2022 14:12:24 +0200 Subject: [PATCH] wall sign model, render wall signs --- .../assets/file/ResourcesAssetsUtil.kt | 2 +- .../data/entities/block/MeshedBlockEntity.kt | 2 +- .../data/entities/block/SignBlockEntity.kt | 2 +- .../data/registries/blocks/MinecraftBlocks.kt | 4 +- .../blocks/types/entity/sign/SignBlock.kt | 5 +- .../types/entity/sign/StandingSignBlock.kt | 2 - .../blocks/types/entity/sign/WallSignBlock.kt | 2 - .../gui/rendering/models/ModelLoader.kt | 3 + .../rendering/models/SingleBlockRenderable.kt | 2 +- .../unbaked/block/UnbakedBlockStateModel.kt | 2 +- .../world/entities/DefaultEntityModels.kt | 21 ---- .../renderer/sign/SignBlockEntityRenderer.kt | 15 +-- .../world/entities/renderer/sign/SignModel.kt | 20 ---- .../sign/standing/StandingSignModel.kt | 21 ---- .../sign/standing/StandingSignModels.kt | 98 ------------------- .../renderer/sign/wall/WallSignModel.kt | 21 ---- .../renderer/sign/wall/WallSignModels.kt | 98 ------------------- .../preparer/cull/SolidCullSectionPreparer.kt | 10 +- .../blockstates/acacia_wall_sign.json | 19 ++++ .../blockstates/birch_wall_sign.json | 19 ++++ .../blockstates/crimson_wall_sign.json | 19 ++++ .../blockstates/dark_oak_wall_sign.json | 19 ++++ .../blockstates/jungle_wall_sign.json | 19 ++++ .../minecraft/blockstates/oak_wall_sign.json | 19 ++++ .../blockstates/spruce_wall_sign.json | 19 ++++ .../blockstates/warped_wall_sign.json | 19 ++++ .../models/block/acacia_wall_sign.json | 7 ++ .../models/block/birch_wall_sign.json | 7 ++ .../models/block/crimson_wall_sign.json | 7 ++ .../models/block/dark_oak_wall_sign.json | 7 ++ .../models/block/jungle_wall_sign.json | 7 ++ .../minecraft/models/block/oak_wall_sign.json | 7 ++ .../models/block/spruce_wall_sign.json | 7 ++ .../models/block/template_wall_sign.json | 39 ++++++++ .../models/block/warped_wall_sign.json | 7 ++ 35 files changed, 274 insertions(+), 303 deletions(-) delete mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignModel.kt delete mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/standing/StandingSignModel.kt delete mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/standing/StandingSignModels.kt delete mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/wall/WallSignModel.kt delete mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/wall/WallSignModels.kt create mode 100644 src/main/resources/assets_overwrite/minecraft/blockstates/acacia_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/blockstates/birch_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/blockstates/crimson_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/blockstates/dark_oak_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/blockstates/jungle_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/blockstates/oak_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/blockstates/spruce_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/blockstates/warped_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/models/block/acacia_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/models/block/birch_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/models/block/crimson_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/models/block/dark_oak_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/models/block/jungle_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/models/block/oak_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/models/block/spruce_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/models/block/template_wall_sign.json create mode 100644 src/main/resources/assets_overwrite/minecraft/models/block/warped_wall_sign.json diff --git a/src/main/java/de/bixilon/minosoft/assets/file/ResourcesAssetsUtil.kt b/src/main/java/de/bixilon/minosoft/assets/file/ResourcesAssetsUtil.kt index 4507dc510..8ffacd08f 100644 --- a/src/main/java/de/bixilon/minosoft/assets/file/ResourcesAssetsUtil.kt +++ b/src/main/java/de/bixilon/minosoft/assets/file/ResourcesAssetsUtil.kt @@ -23,7 +23,7 @@ import java.nio.charset.StandardCharsets object ResourcesAssetsUtil { fun create(clazz: Class<*>, canUnload: Boolean = true, prefix: String = AssetsManager.DEFAULT_ASSETS_PREFIX): AssetsManager { - val rootResources = clazz.classLoader.getResource("assets") ?: throw FileNotFoundException("Can not find assets folder in $clazz") + val rootResources = clazz.classLoader.getResource(prefix) ?: throw FileNotFoundException("Can not find assets folder in $clazz") return when (rootResources.protocol) { "file" -> DirectoryAssetsManager(rootResources.path, canUnload, prefix) // Read them directly from the folder diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/MeshedBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/MeshedBlockEntity.kt index 70e31f063..09eb47cbc 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/block/MeshedBlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/block/MeshedBlockEntity.kt @@ -13,12 +13,12 @@ package de.bixilon.minosoft.data.entities.block +import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.world.entities.BlockEntityRenderer import de.bixilon.minosoft.gui.rendering.world.entities.MeshedBlockEntityRenderer import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import glm_.vec3.Vec3i abstract class MeshedBlockEntity(connection: PlayConnection) : BlockEntity(connection) { diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/SignBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/SignBlockEntity.kt index a6173b4fa..a71ee5e2d 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/block/SignBlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/block/SignBlockEntity.kt @@ -13,6 +13,7 @@ package de.bixilon.minosoft.data.entities.block +import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.blocks.BlockState @@ -21,7 +22,6 @@ import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.SignBlockEntityRenderer import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition -import glm_.vec3.Vec3i class SignBlockEntity(connection: PlayConnection) : MeshedBlockEntity(connection) { var lines: Array = Array(ProtocolDefinition.SIGN_LINES) { ChatComponent.of("") } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/MinecraftBlocks.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/MinecraftBlocks.kt index b1d7fff0a..9dcb62bdb 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/MinecraftBlocks.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/MinecraftBlocks.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 Moritz Zwerger + * 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. * @@ -189,7 +189,7 @@ object MinecraftBlocks { val LADDER = "minecraft:ladder".toResourceLocation() val RAIL = "minecraft:rail".toResourceLocation() val COBBLESTONE_STAIRS = "minecraft:cobblestone_stairs".toResourceLocation() - val OAK_WALL_SIGN = "minecraft:oak_wall_sign".toResourceLocation() + val OAK_WALL_SIGN = "minecraft:oak_wall_sign.json".toResourceLocation() val SPRUCE_WALL_SIGN = "minecraft:spruce_wall_sign".toResourceLocation() val BIRCH_WALL_SIGN = "minecraft:birch_wall_sign".toResourceLocation() val ACACIA_WALL_SIGN = "minecraft:acacia_wall_sign".toResourceLocation() diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/SignBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/SignBlock.kt index 9f648465d..89a4ed505 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/SignBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/SignBlock.kt @@ -17,9 +17,6 @@ import de.bixilon.minosoft.data.entities.block.SignBlockEntity import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.blocks.types.entity.BlockWithEntity import de.bixilon.minosoft.data.registries.registries.Registries -import de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.SignModel -abstract class SignBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map) : BlockWithEntity(resourceLocation, registries, data) { - abstract val model: SignModel? -} +abstract class SignBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map) : BlockWithEntity(resourceLocation, registries, data) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/StandingSignBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/StandingSignBlock.kt index 2e3a42ae2..ff1e97973 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/StandingSignBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/StandingSignBlock.kt @@ -17,10 +17,8 @@ import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.blocks.BlockFactory import de.bixilon.minosoft.data.registries.factory.clazz.MultiClassFactory import de.bixilon.minosoft.data.registries.registries.Registries -import de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.standing.StandingSignModel open class StandingSignBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map) : SignBlock(resourceLocation, registries, data) { - override var model: StandingSignModel? = null companion object : BlockFactory, MultiClassFactory { override val ALIASES: Set = setOf("SignBlock") diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/WallSignBlock.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/WallSignBlock.kt index c5aea1c14..a5b7fa05f 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/WallSignBlock.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/entity/sign/WallSignBlock.kt @@ -16,10 +16,8 @@ package de.bixilon.minosoft.data.registries.blocks.types.entity.sign import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.blocks.BlockFactory import de.bixilon.minosoft.data.registries.registries.Registries -import de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.wall.WallSignModel open class WallSignBlock(resourceLocation: ResourceLocation, registries: Registries, data: Map) : SignBlock(resourceLocation, registries, data) { - override var model: WallSignModel? = null companion object : BlockFactory { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt index cf31b80d2..73926dbf9 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt @@ -51,6 +51,9 @@ class ModelLoader( } private fun loadBlockStates(block: Block) { + if (block.resourceLocation.toString() == "minecraft:oak_wall_sign.json") { + println("Test") + } val blockStateJson = assetsManager[block.resourceLocation.blockState()].readJsonObject() val model = RootModel(this, blockStateJson) ?: return diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/SingleBlockRenderable.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/SingleBlockRenderable.kt index 7720a194d..b5c7d9e1b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/SingleBlockRenderable.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/SingleBlockRenderable.kt @@ -13,9 +13,9 @@ package de.bixilon.minosoft.gui.rendering.models +import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.gui.rendering.world.mesh.WorldMesh -import glm_.vec3.Vec3i import java.util.* interface SingleBlockRenderable { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/block/UnbakedBlockStateModel.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/block/UnbakedBlockStateModel.kt index 10ab0c037..2cf980b26 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/block/UnbakedBlockStateModel.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/block/UnbakedBlockStateModel.kt @@ -63,7 +63,7 @@ data class UnbakedBlockStateModel( for (element in model.elements) { for (face in element.faces) { - val texture = textures[face.texture.removePrefix("#")]!! // ToDo: Allow direct texture names? + val texture = textures[face.texture.removePrefix("#")] ?: throw IllegalArgumentException("Can not find texture variable ${face.texture}")// ToDo: Allow direct texture names? val positions = face.direction.getPositions(element.from, element.to) element.rotation?.let { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/DefaultEntityModels.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/DefaultEntityModels.kt index ccf9f3cfa..9c1b02937 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/DefaultEntityModels.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/DefaultEntityModels.kt @@ -13,8 +13,6 @@ package de.bixilon.minosoft.gui.rendering.world.entities -import de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.standing.StandingSignModels -import de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.wall.WallSignModels import de.bixilon.minosoft.gui.rendering.world.entities.renderer.storage.DoubleChestRenderer import de.bixilon.minosoft.gui.rendering.world.entities.renderer.storage.SingleChestRenderer @@ -26,24 +24,5 @@ object DefaultEntityModels { DoubleChestRenderer.NormalChest, DoubleChestRenderer.TrappedChest, - - - StandingSignModels.Acacia, - StandingSignModels.Birch, - StandingSignModels.Crimson, - StandingSignModels.DarkOak, - StandingSignModels.Jungle, - StandingSignModels.Oak, - StandingSignModels.Spruce, - StandingSignModels.WarpedSign, - - WallSignModels.Acacia, - WallSignModels.Birch, - WallSignModels.Crimson, - WallSignModels.DarkOak, - WallSignModels.Jungle, - WallSignModels.Oak, - WallSignModels.Spruce, - WallSignModels.WarpedSign, ) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt index b5edfbfd8..4ba50796a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignBlockEntityRenderer.kt @@ -13,13 +13,13 @@ package de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign -import de.bixilon.kutil.cast.CastUtil.nullCast +import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.data.entities.block.SignBlockEntity import de.bixilon.minosoft.data.registries.blocks.BlockState -import de.bixilon.minosoft.data.registries.blocks.types.entity.sign.SignBlock +import de.bixilon.minosoft.data.registries.blocks.types.entity.sign.StandingSignBlock +import de.bixilon.minosoft.data.registries.blocks.types.entity.sign.WallSignBlock import de.bixilon.minosoft.gui.rendering.world.entities.MeshedBlockEntityRenderer import de.bixilon.minosoft.gui.rendering.world.mesh.WorldMesh -import glm_.vec3.Vec3i import java.util.* class SignBlockEntityRenderer( @@ -28,9 +28,12 @@ class SignBlockEntityRenderer( ) : MeshedBlockEntityRenderer { override fun singleRender(position: Vec3i, mesh: WorldMesh, random: Random, blockState: BlockState, neighbours: Array, light: ByteArray, ambientLight: FloatArray, tints: IntArray?): Boolean { - val model = this.blockState.block.nullCast()?.model ?: return false - println("Rendering sign at $position") - + val block = this.blockState.block + if (block is StandingSignBlock) { + println("Rendering standing sign at $position (${block.resourceLocation})") + } else if (block is WallSignBlock) { + println("Rendering wall sign at $position (${block.resourceLocation})") + } // ToDo diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignModel.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignModel.kt deleted file mode 100644 index acd1e7b49..000000000 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/SignModel.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign - -import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture - -abstract class SignModel( - val texture: AbstractTexture, -) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/standing/StandingSignModel.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/standing/StandingSignModel.kt deleted file mode 100644 index 59c05c063..000000000 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/standing/StandingSignModel.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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 . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.standing - -import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture -import de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.SignModel - -class StandingSignModel( - texture: AbstractTexture, -) : SignModel(texture) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/standing/StandingSignModels.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/standing/StandingSignModels.kt deleted file mode 100644 index 3dc9c03ce..000000000 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/standing/StandingSignModels.kt +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 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 . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.standing - -import de.bixilon.kutil.cast.CastUtil.nullCast -import de.bixilon.minosoft.data.registries.ResourceLocation -import de.bixilon.minosoft.data.registries.blocks.MinecraftBlocks -import de.bixilon.minosoft.data.registries.blocks.types.entity.sign.StandingSignBlock -import de.bixilon.minosoft.gui.rendering.RenderWindow -import de.bixilon.minosoft.gui.rendering.models.ModelLoader -import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.texture -import de.bixilon.minosoft.gui.rendering.world.entities.EntityRendererRegister -import de.bixilon.minosoft.util.KUtil.toResourceLocation - -object StandingSignModels { - - fun register(renderWindow: RenderWindow, modelLoader: ModelLoader, textureName: ResourceLocation, block: ResourceLocation) { - val block = renderWindow.connection.registries.blockRegistry[block].nullCast() ?: return - val texture = renderWindow.textureManager.staticTextures.createTexture(textureName) - val signModel = StandingSignModel(texture) - block.model = signModel - } - - object Acacia : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/acacia".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.ACACIA_SIGN) - } - } - - object Birch : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/birch".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.BIRCH_SIGN) - } - } - - object Crimson : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/crimson".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.CRIMSON_SIGN) - } - } - - object DarkOak : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/dark_oak".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.DARK_OAK_SIGN) - } - } - - object Jungle : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/jungle".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.JUNGLE_SIGN) - } - } - - object Oak : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/oak".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.OAK_SIGN) - } - } - - object Spruce : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/spruce".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.SPRUCE_SIGN) - } - } - - object WarpedSign : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/warped".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.WARPED_SIGN) - } - } -} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/wall/WallSignModel.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/wall/WallSignModel.kt deleted file mode 100644 index 7a539dc82..000000000 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/wall/WallSignModel.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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 . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.wall - -import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture -import de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.SignModel - -class WallSignModel( - texture: AbstractTexture, -) : SignModel(texture) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/wall/WallSignModels.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/wall/WallSignModels.kt deleted file mode 100644 index f1ca1c836..000000000 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/entities/renderer/sign/wall/WallSignModels.kt +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 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 . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.gui.rendering.world.entities.renderer.sign.wall - -import de.bixilon.kutil.cast.CastUtil.nullCast -import de.bixilon.minosoft.data.registries.ResourceLocation -import de.bixilon.minosoft.data.registries.blocks.MinecraftBlocks -import de.bixilon.minosoft.data.registries.blocks.types.entity.sign.WallSignBlock -import de.bixilon.minosoft.gui.rendering.RenderWindow -import de.bixilon.minosoft.gui.rendering.models.ModelLoader -import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.texture -import de.bixilon.minosoft.gui.rendering.world.entities.EntityRendererRegister -import de.bixilon.minosoft.util.KUtil.toResourceLocation - -object WallSignModels { - - fun register(renderWindow: RenderWindow, modelLoader: ModelLoader, textureName: ResourceLocation, block: ResourceLocation) { - val block = renderWindow.connection.registries.blockRegistry[block].nullCast() ?: return - val texture = renderWindow.textureManager.staticTextures.createTexture(textureName) - val signModel = WallSignModel(texture) - block.model = signModel - } - - object Acacia : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/acacia".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.ACACIA_WALL_SIGN) - } - } - - object Birch : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/birch".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.BIRCH_WALL_SIGN) - } - } - - object Crimson : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/crimson".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.CRIMSON_WALL_SIGN) - } - } - - object DarkOak : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/dark_oak".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.DARK_OAK_WALL_SIGN) - } - } - - object Jungle : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/jungle".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.JUNGLE_WALL_SIGN) - } - } - - object Oak : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/oak".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.OAK_WALL_SIGN) - } - } - - object Spruce : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/spruce".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.SPRUCE_WALL_SIGN) - } - } - - object WarpedSign : EntityRendererRegister { - val TEXTURE = "minecraft:entity/signs/warped".toResourceLocation().texture() - - override fun register(renderWindow: RenderWindow, modelLoader: ModelLoader) { - register(renderWindow, modelLoader, TEXTURE, MinecraftBlocks.WARPED_WALL_SIGN) - } - } -} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/preparer/cull/SolidCullSectionPreparer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/preparer/cull/SolidCullSectionPreparer.kt index 959ea7486..327ee76e5 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/preparer/cull/SolidCullSectionPreparer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/preparer/cull/SolidCullSectionPreparer.kt @@ -92,14 +92,14 @@ class SolidCullSectionPreparer( position = Vec3i(offsetX + x, offsetY + y, offsetZ + z) blockEntity = section.blockEntities.unsafeGet(x, y, z) val blockEntityModel = blockEntity?.getRenderer(renderWindow, blockState, position, light[6].toInt()) - if (blockEntityModel != null) { // ToDo: ignore if is MeshedBlockEntityRenderer? + if (blockEntityModel != null) { blockEntities += blockEntityModel mesh.addBlock(x, y, z) } - model = if (blockEntityModel is MeshedBlockEntityRenderer) { + model = blockState.blockModel ?: if (blockEntityModel is MeshedBlockEntityRenderer) { blockEntityModel } else { - blockState.blockModel ?: continue + continue } @@ -168,6 +168,10 @@ class SolidCullSectionPreparer( tints = tintColorCalculator.getAverageTint(chunk, neighbourChunks, blockState, x, y, z) rendered = model.singleRender(position, mesh, random, blockState, neighbourBlocks, light, ambientLight, tints) + if (blockEntityModel is MeshedBlockEntityRenderer<*>) { + rendered = rendered || blockEntityModel.singleRender(position, mesh, random, blockState, neighbourBlocks, light, ambientLight, tints) + } + if (rendered) { mesh.addBlock(x, y, z) } diff --git a/src/main/resources/assets_overwrite/minecraft/blockstates/acacia_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/blockstates/acacia_wall_sign.json new file mode 100644 index 000000000..d8932badd --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/blockstates/acacia_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "minecraft:block/acacia_wall_sign" + }, + "facing=east": { + "model": "minecraft:block/acacia_wall_sign", + "y": 90 + }, + "facing=south": { + "model": "minecraft:block/acacia_wall_sign", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/acacia_wall_sign", + "y": 270 + } + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/blockstates/birch_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/blockstates/birch_wall_sign.json new file mode 100644 index 000000000..643d5a060 --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/blockstates/birch_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "minecraft:block/birch_wall_sign" + }, + "facing=east": { + "model": "minecraft:block/birch_wall_sign", + "y": 90 + }, + "facing=south": { + "model": "minecraft:block/birch_wall_sign", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/birch_wall_sign", + "y": 270 + } + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/blockstates/crimson_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/blockstates/crimson_wall_sign.json new file mode 100644 index 000000000..4e09b8990 --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/blockstates/crimson_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "minecraft:block/crimson_wall_sign" + }, + "facing=east": { + "model": "minecraft:block/crimson_wall_sign", + "y": 90 + }, + "facing=south": { + "model": "minecraft:block/crimson_wall_sign", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/crimson_wall_sign", + "y": 270 + } + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/blockstates/dark_oak_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/blockstates/dark_oak_wall_sign.json new file mode 100644 index 000000000..0ff8f946e --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/blockstates/dark_oak_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "minecraft:block/dark_oak_wall_sign" + }, + "facing=east": { + "model": "minecraft:block/dark_oak_wall_sign", + "y": 90 + }, + "facing=south": { + "model": "minecraft:block/dark_oak_wall_sign", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/dark_oak_wall_sign", + "y": 270 + } + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/blockstates/jungle_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/blockstates/jungle_wall_sign.json new file mode 100644 index 000000000..f88965c67 --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/blockstates/jungle_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "minecraft:block/jungle_wall_sign" + }, + "facing=east": { + "model": "minecraft:block/jungle_wall_sign", + "y": 90 + }, + "facing=south": { + "model": "minecraft:block/jungle_wall_sign", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/jungle_wall_sign", + "y": 270 + } + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/blockstates/oak_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/blockstates/oak_wall_sign.json new file mode 100644 index 000000000..c5111ed40 --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/blockstates/oak_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "minecraft:block/oak_wall_sign" + }, + "facing=east": { + "model": "minecraft:block/oak_wall_sign", + "y": 90 + }, + "facing=south": { + "model": "minecraft:block/oak_wall_sign", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/oak_wall_sign", + "y": 270 + } + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/blockstates/spruce_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/blockstates/spruce_wall_sign.json new file mode 100644 index 000000000..110bd559e --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/blockstates/spruce_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "minecraft:block/spruce_wall_sign" + }, + "facing=east": { + "model": "minecraft:block/spruce_wall_sign", + "y": 90 + }, + "facing=south": { + "model": "minecraft:block/spruce_wall_sign", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/spruce_wall_sign", + "y": 270 + } + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/blockstates/warped_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/blockstates/warped_wall_sign.json new file mode 100644 index 000000000..056779e5f --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/blockstates/warped_wall_sign.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "minecraft:block/warped_wall_sign" + }, + "facing=east": { + "model": "minecraft:block/warped_wall_sign", + "y": 90 + }, + "facing=south": { + "model": "minecraft:block/warped_wall_sign", + "y": 180 + }, + "facing=west": { + "model": "minecraft:block/warped_wall_sign", + "y": 270 + } + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/models/block/acacia_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/models/block/acacia_wall_sign.json new file mode 100644 index 000000000..246b28316 --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/models/block/acacia_wall_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_sign", + "textures": { + "particle": "minecraft:block/acacia_planks", + "sign": "minecraft:entity/signs/acacia" + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/models/block/birch_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/models/block/birch_wall_sign.json new file mode 100644 index 000000000..88c3dee84 --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/models/block/birch_wall_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_sign", + "textures": { + "particle": "minecraft:block/birch_planks", + "sign": "minecraft:entity/signs/birch" + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/models/block/crimson_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/models/block/crimson_wall_sign.json new file mode 100644 index 000000000..4183c27fe --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/models/block/crimson_wall_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_sign", + "textures": { + "particle": "minecraft:block/crimson_planks", + "sign": "minecraft:entity/signs/crimson" + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/models/block/dark_oak_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/models/block/dark_oak_wall_sign.json new file mode 100644 index 000000000..17625c6f1 --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/models/block/dark_oak_wall_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_sign", + "textures": { + "particle": "minecraft:block/dark_oak_planks", + "sign": "minecraft:entity/signs/dark_oak" + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/models/block/jungle_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/models/block/jungle_wall_sign.json new file mode 100644 index 000000000..e07495205 --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/models/block/jungle_wall_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_sign", + "textures": { + "particle": "minecraft:block/jungle_planks", + "sign": "minecraft:entity/signs/jungle" + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/models/block/oak_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/models/block/oak_wall_sign.json new file mode 100644 index 000000000..73829497c --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/models/block/oak_wall_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_sign", + "textures": { + "particle": "minecraft:block/oak_planks", + "sign": "minecraft:entity/signs/oak" + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/models/block/spruce_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/models/block/spruce_wall_sign.json new file mode 100644 index 000000000..7edaff748 --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/models/block/spruce_wall_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_sign", + "textures": { + "particle": "minecraft:block/spruce_planks", + "sign": "minecraft:entity/signs/spruce" + } +} diff --git a/src/main/resources/assets_overwrite/minecraft/models/block/template_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/models/block/template_wall_sign.json new file mode 100644 index 000000000..b1f7506ea --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/models/block/template_wall_sign.json @@ -0,0 +1,39 @@ +{ + "elements": [ + { + "from": [0, 4.5, 14], + "to": [16, 12.5, 16], + "faces": { + "down": { + "uv": [0.5, 0, 4.5, 1], + "texture": "#sign" + }, + "up": { + "uv": [4.5, 0, 8.5, 1], + "rotation": 180, + "texture": "#sign" + }, + "east": { + "uv": [0.0, 1, 0.5, 7], + "texture": "#sign", + "cullface": "east" + }, + "north": { + "uv": [0.5, 1, 4.5, 7], + "texture": "#sign", + "cullface": "north" + }, + "south": { + "uv": [4.5, 1, 8.0, 7], + "texture": "#sign", + "cullface": "south" + }, + "west": { + "uv": [8.0, 1, 8.5, 7], + "texture": "#sign", + "cullface": "west" + } + } + } + ] +} diff --git a/src/main/resources/assets_overwrite/minecraft/models/block/warped_wall_sign.json b/src/main/resources/assets_overwrite/minecraft/models/block/warped_wall_sign.json new file mode 100644 index 000000000..1a055eb9b --- /dev/null +++ b/src/main/resources/assets_overwrite/minecraft/models/block/warped_wall_sign.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_wall_sign", + "textures": { + "particle": "minecraft:block/warped_planks", + "sign": "minecraft:entity/signs/warped" + } +}