mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-15 02:15:34 -04:00
chest block model: update position and rotation on change
This commit is contained in:
parent
ecba02d533
commit
6858bd87a6
@ -31,11 +31,11 @@ abstract class BlockEntity(
|
|||||||
|
|
||||||
open fun tick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) = Unit
|
open fun tick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) = Unit
|
||||||
|
|
||||||
open fun getRenderer(context: RenderContext, blockState: BlockState, blockPosition: Vec3i, light: Int): BlockEntityRenderer<out BlockEntity>? {
|
open fun getRenderer(context: RenderContext, state: BlockState, position: Vec3i, light: Int): BlockEntityRenderer<out BlockEntity>? {
|
||||||
if (this.renderer?.blockState != blockState) {
|
if (this.renderer?.state != state) {
|
||||||
this.renderer = createRenderer(context, blockState, blockPosition, light)
|
this.renderer = createRenderer(context, state, position, light)
|
||||||
} else {
|
} else {
|
||||||
this.renderer?.light = light
|
this.renderer?.update(position, state, light)
|
||||||
}
|
}
|
||||||
return this.renderer
|
return this.renderer
|
||||||
}
|
}
|
||||||
|
@ -22,12 +22,12 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
|||||||
|
|
||||||
abstract class MeshedBlockEntity(connection: PlayConnection) : BlockEntity(connection) {
|
abstract class MeshedBlockEntity(connection: PlayConnection) : BlockEntity(connection) {
|
||||||
|
|
||||||
override fun getRenderer(context: RenderContext, blockState: BlockState, blockPosition: Vec3i, light: Int): MeshedEntityRenderer<*> {
|
override fun getRenderer(context: RenderContext, state: BlockState, position: Vec3i, light: Int): MeshedEntityRenderer<*> {
|
||||||
var renderer = this.renderer
|
var renderer = this.renderer
|
||||||
if (renderer is MeshedEntityRenderer && renderer.blockState == blockState) {
|
if (renderer is MeshedEntityRenderer && renderer.state == state) {
|
||||||
return renderer
|
return renderer
|
||||||
}
|
}
|
||||||
renderer = createMeshedRenderer(context, blockState, blockPosition)
|
renderer = createMeshedRenderer(context, state, position)
|
||||||
this.renderer = renderer
|
this.renderer = renderer
|
||||||
return renderer
|
return renderer
|
||||||
}
|
}
|
||||||
|
@ -15,12 +15,13 @@ package de.bixilon.minosoft.gui.rendering.chunk.entities
|
|||||||
|
|
||||||
import de.bixilon.minosoft.data.entities.block.BlockEntity
|
import de.bixilon.minosoft.data.entities.block.BlockEntity
|
||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
||||||
|
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||||
|
|
||||||
interface BlockEntityRenderer<E : BlockEntity> {
|
interface BlockEntityRenderer<E : BlockEntity> {
|
||||||
val enabled: Boolean get() = true
|
val enabled: Boolean get() = true
|
||||||
|
|
||||||
val blockState: BlockState
|
var state: BlockState
|
||||||
var light: Int
|
var light: Int
|
||||||
get() = 0
|
get() = 0
|
||||||
set(value) = Unit
|
set(value) = Unit
|
||||||
@ -29,4 +30,9 @@ interface BlockEntityRenderer<E : BlockEntity> {
|
|||||||
|
|
||||||
fun unload() = Unit
|
fun unload() = Unit
|
||||||
fun load() = Unit
|
fun load() = Unit
|
||||||
|
|
||||||
|
fun update(position: BlockPosition, state: BlockState, light: Int) {
|
||||||
|
this.light = light
|
||||||
|
this.state = state
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,18 +48,19 @@ import java.util.*
|
|||||||
class SignBlockEntityRenderer(
|
class SignBlockEntityRenderer(
|
||||||
val sign: SignBlockEntity,
|
val sign: SignBlockEntity,
|
||||||
val context: RenderContext,
|
val context: RenderContext,
|
||||||
override val blockState: BlockState,
|
override var state: BlockState,
|
||||||
) : MeshedEntityRenderer<SignBlockEntity> {
|
) : MeshedEntityRenderer<SignBlockEntity> {
|
||||||
override val enabled: Boolean get() = false
|
override val enabled: Boolean get() = false
|
||||||
|
|
||||||
private fun getRotation(): Float {
|
private fun getRotation(): Float {
|
||||||
if (blockState !is PropertyBlockState) return 0.0f
|
val state = this.state
|
||||||
val rotation = blockState.properties[BlockProperties.ROTATION]?.toFloat() ?: return 0.0f
|
if (state !is PropertyBlockState) return 0.0f
|
||||||
|
val rotation = state.properties[BlockProperties.ROTATION]?.toFloat() ?: return 0.0f
|
||||||
return rotation * 22.5f
|
return rotation * 22.5f
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun render(position: BlockPosition, offset: FloatArray, mesh: ChunkMesh, random: Random?, state: BlockState, neighbours: Array<BlockState?>, light: ByteArray, tints: IntArray?): Boolean {
|
override fun render(position: BlockPosition, offset: FloatArray, mesh: ChunkMesh, random: Random?, state: BlockState, neighbours: Array<BlockState?>, light: ByteArray, tints: IntArray?): Boolean {
|
||||||
val block = this.blockState.block
|
val block = this.state.block
|
||||||
if (block is StandingSignBlock) {
|
if (block is StandingSignBlock) {
|
||||||
renderStandingText(offset, mesh, light[SELF_LIGHT_INDEX].toInt())
|
renderStandingText(offset, mesh, light[SELF_LIGHT_INDEX].toInt())
|
||||||
} else if (block is WallSignBlock) {
|
} else if (block is WallSignBlock) {
|
||||||
@ -97,7 +98,7 @@ class SignBlockEntityRenderer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun renderWallText(position: FloatArray, mesh: ChunkMesh, light: Int) {
|
private fun renderWallText(position: FloatArray, mesh: ChunkMesh, light: Int) {
|
||||||
val yRotation = -when (val rotation = this.blockState.getFacing()) {
|
val yRotation = -when (val rotation = this.state.getFacing()) {
|
||||||
Directions.SOUTH -> 0.0f
|
Directions.SOUTH -> 0.0f
|
||||||
Directions.EAST -> 90.0f
|
Directions.EAST -> 90.0f
|
||||||
Directions.NORTH -> 180.0f
|
Directions.NORTH -> 180.0f
|
||||||
|
@ -20,6 +20,7 @@ import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.get
|
|||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
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.Namespaces.minecraft
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
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.RenderContext
|
||||||
import de.bixilon.minosoft.gui.rendering.chunk.entities.EntityRendererRegister
|
import de.bixilon.minosoft.gui.rendering.chunk.entities.EntityRendererRegister
|
||||||
import de.bixilon.minosoft.gui.rendering.models.loader.ModelLoader
|
import de.bixilon.minosoft.gui.rendering.models.loader.ModelLoader
|
||||||
@ -41,7 +42,11 @@ class DoubleChestRenderer(
|
|||||||
) {
|
) {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
skeletal?.update(blockPosition, blockState.getFacing())
|
update(blockPosition, state, light)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun update(position: BlockPosition, state: BlockState, light: Int) {
|
||||||
|
skeletal?.update(position, state.getFacing())
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -20,6 +20,7 @@ import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.get
|
|||||||
import de.bixilon.minosoft.data.registries.blocks.state.BlockState
|
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.Namespaces.minecraft
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
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.RenderContext
|
||||||
import de.bixilon.minosoft.gui.rendering.chunk.entities.EntityRendererRegister
|
import de.bixilon.minosoft.gui.rendering.chunk.entities.EntityRendererRegister
|
||||||
import de.bixilon.minosoft.gui.rendering.models.loader.ModelLoader
|
import de.bixilon.minosoft.gui.rendering.models.loader.ModelLoader
|
||||||
@ -39,8 +40,13 @@ class SingleChestRenderer(
|
|||||||
model.createInstance(context),
|
model.createInstance(context),
|
||||||
light,
|
light,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
skeletal?.update(blockPosition, blockState.getFacing())
|
update(blockPosition, state, light)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun update(position: BlockPosition, state: BlockState, light: Int) {
|
||||||
|
skeletal?.update(position, state.getFacing())
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -20,7 +20,7 @@ import de.bixilon.minosoft.gui.rendering.chunk.entities.BlockEntityRenderer
|
|||||||
import de.bixilon.minosoft.gui.rendering.skeletal.instance.SkeletalInstance
|
import de.bixilon.minosoft.gui.rendering.skeletal.instance.SkeletalInstance
|
||||||
|
|
||||||
abstract class StorageBlockEntityRenderer<E : StorageBlockEntity>(
|
abstract class StorageBlockEntityRenderer<E : StorageBlockEntity>(
|
||||||
override val blockState: BlockState,
|
override var state: BlockState,
|
||||||
protected val skeletal: SkeletalInstance?,
|
protected val skeletal: SkeletalInstance?,
|
||||||
override var light: Int,
|
override var light: Int,
|
||||||
) : BlockEntityRenderer<E> {
|
) : BlockEntityRenderer<E> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user