correct wrong pixlyzer random block offset

This commit is contained in:
Moritz Zwerger 2023-07-30 21:14:27 +02:00
parent f453878333
commit 17b9086930
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
4 changed files with 24 additions and 5 deletions

View File

@ -32,7 +32,6 @@ import de.bixilon.minosoft.data.world.chunk.chunk.Chunk
import de.bixilon.minosoft.data.world.positions.BlockPosition
import de.bixilon.minosoft.data.world.positions.ChunkPositionUtil.chunkPosition
import de.bixilon.minosoft.data.world.positions.ChunkPositionUtil.inChunkPosition
import de.bixilon.minosoft.gui.rendering.util.VecUtil.getWorldOffset
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.floor
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.raycastDistance
@ -102,7 +101,7 @@ class TargetHandler(
return null
}
var shape = state.block.getOutlineShape(camera.connection, state) ?: return null
state.block.nullCast<RandomOffsetBlock>()?.randomOffset?.let { shape += blockPosition.getWorldOffset(it) }
state.block.nullCast<RandomOffsetBlock>()?.offsetBlock(blockPosition)?.let { shape += it }
shape += blockPosition

View File

@ -12,6 +12,8 @@
*/
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer
import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.kotlinglm.vec3.Vec3i
import de.bixilon.kutil.cast.CastUtil.nullCast
import de.bixilon.kutil.cast.CastUtil.unsafeNull
import de.bixilon.kutil.cast.CollectionCast.asAnyMap
@ -46,6 +48,8 @@ import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
import de.bixilon.minosoft.data.registries.registries.registry.codec.ResourceLocationCodec
import de.bixilon.minosoft.data.world.positions.BlockPosition
import de.bixilon.minosoft.gui.rendering.util.VecUtil.getWorldOffset
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.logging.Log
import de.bixilon.minosoft.util.logging.LogLevels
@ -57,7 +61,6 @@ open class PixLyzerBlock(
registries: Registries,
data: Map<String, Any>,
) : Block(identifier, BlockSettings(soundGroup = data["sound_group"]?.toInt()?.let { registries.soundGroup[it] })), FrictionBlock, JumpBlock, VelocityBlock, RandomOffsetBlock, OutlinedBlock, BlockStateBuilder, ReplaceableBlock, PotentialFullOpaqueBlock, WaterloggableBlock, CollidableBlock, ToolRequirement, BlockWithItem<Item> {
override val randomOffset: RandomOffsetTypes? = data["offset_type"].nullCast<String>()?.let { RandomOffsetTypes[it] }
override val friction = data["friction"]?.toFloat() ?: FrictionBlock.DEFAULT_FRICTION
@ -101,7 +104,14 @@ open class PixLyzerBlock(
return identifier.toString()
}
override fun offsetBlock(position: Vec3i): Vec3 {
val offset = randomOffset ?: return Vec3.EMPTY
return super.offsetBlock(position) + if (offset == RandomOffsetTypes.XZ) NULL_OFFSET_XZ else NULL_OFFSET_XYZ // this corrects wrong pixlyzer data
}
companion object : ResourceLocationCodec<Block>, PixLyzerBlockFactory<Block>, MultiClassFactory<Block> {
private val NULL_OFFSET_XYZ = Vec3i(0, 0, 0).getWorldOffset(RandomOffsetTypes.XYZ)
private val NULL_OFFSET_XZ = Vec3i(0, 0, 0).getWorldOffset(RandomOffsetTypes.XZ)
private val ITEM_FIELD = PixLyzerBlock::item.javaField!!
override val ALIASES: Set<String> = setOf("Block")

View File

@ -13,6 +13,17 @@
package de.bixilon.minosoft.data.registries.blocks.types.properties.offset
import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.kotlinglm.vec3.Vec3i
import de.bixilon.minosoft.gui.rendering.util.VecUtil.getWorldOffset
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
interface RandomOffsetBlock {
val randomOffset: RandomOffsetTypes? // TODO: make non nullable
fun offsetBlock(position: Vec3i): Vec3 {
val offset = this.randomOffset ?: return Vec3.EMPTY
return position.getWorldOffset(offset)
}
}

View File

@ -36,7 +36,6 @@ import de.bixilon.minosoft.gui.rendering.system.base.DepthFunctions
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
import de.bixilon.minosoft.gui.rendering.system.base.layer.RenderLayer
import de.bixilon.minosoft.gui.rendering.system.base.settings.RenderSettings
import de.bixilon.minosoft.gui.rendering.util.VecUtil.getWorldOffset
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d
import de.bixilon.minosoft.gui.rendering.util.mesh.LineMesh
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
@ -125,7 +124,7 @@ class BlockOutlineRenderer(
val blockOffset = target.blockPosition.toVec3d
if (target.state.block is RandomOffsetBlock) {
target.state.block.randomOffset?.let { blockOffset += target.blockPosition.getWorldOffset(it) }
blockOffset += target.state.block.offsetBlock(target.blockPosition)
}