mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 02:45:13 -04:00
correct wrong pixlyzer random block offset
This commit is contained in:
parent
f453878333
commit
17b9086930
@ -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.BlockPosition
|
||||||
import de.bixilon.minosoft.data.world.positions.ChunkPositionUtil.chunkPosition
|
import de.bixilon.minosoft.data.world.positions.ChunkPositionUtil.chunkPosition
|
||||||
import de.bixilon.minosoft.data.world.positions.ChunkPositionUtil.inChunkPosition
|
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.VecUtil.toVec3d
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.floor
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.floor
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.raycastDistance
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.raycastDistance
|
||||||
@ -102,7 +101,7 @@ class TargetHandler(
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
var shape = state.block.getOutlineShape(camera.connection, state) ?: 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
|
shape += blockPosition
|
||||||
|
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
*/
|
*/
|
||||||
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer
|
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.nullCast
|
||||||
import de.bixilon.kutil.cast.CastUtil.unsafeNull
|
import de.bixilon.kutil.cast.CastUtil.unsafeNull
|
||||||
import de.bixilon.kutil.cast.CollectionCast.asAnyMap
|
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.RegistryItem
|
||||||
import de.bixilon.minosoft.data.registries.registries.registry.codec.ResourceLocationCodec
|
import de.bixilon.minosoft.data.registries.registries.registry.codec.ResourceLocationCodec
|
||||||
import de.bixilon.minosoft.data.world.positions.BlockPosition
|
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.protocol.network.connection.play.PlayConnection
|
||||||
import de.bixilon.minosoft.util.logging.Log
|
import de.bixilon.minosoft.util.logging.Log
|
||||||
import de.bixilon.minosoft.util.logging.LogLevels
|
import de.bixilon.minosoft.util.logging.LogLevels
|
||||||
@ -57,7 +61,6 @@ open class PixLyzerBlock(
|
|||||||
registries: Registries,
|
registries: Registries,
|
||||||
data: Map<String, Any>,
|
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> {
|
) : 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 randomOffset: RandomOffsetTypes? = data["offset_type"].nullCast<String>()?.let { RandomOffsetTypes[it] }
|
||||||
|
|
||||||
override val friction = data["friction"]?.toFloat() ?: FrictionBlock.DEFAULT_FRICTION
|
override val friction = data["friction"]?.toFloat() ?: FrictionBlock.DEFAULT_FRICTION
|
||||||
@ -101,7 +104,14 @@ open class PixLyzerBlock(
|
|||||||
return identifier.toString()
|
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> {
|
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!!
|
private val ITEM_FIELD = PixLyzerBlock::item.javaField!!
|
||||||
override val ALIASES: Set<String> = setOf("Block")
|
override val ALIASES: Set<String> = setOf("Block")
|
||||||
|
|
||||||
|
@ -13,6 +13,17 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.data.registries.blocks.types.properties.offset
|
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 {
|
interface RandomOffsetBlock {
|
||||||
val randomOffset: RandomOffsetTypes? // TODO: make non nullable
|
val randomOffset: RandomOffsetTypes? // TODO: make non nullable
|
||||||
|
|
||||||
|
|
||||||
|
fun offsetBlock(position: Vec3i): Vec3 {
|
||||||
|
val offset = this.randomOffset ?: return Vec3.EMPTY
|
||||||
|
return position.getWorldOffset(offset)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.RenderSystem
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.layer.RenderLayer
|
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.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.VecUtil.toVec3d
|
||||||
import de.bixilon.minosoft.gui.rendering.util.mesh.LineMesh
|
import de.bixilon.minosoft.gui.rendering.util.mesh.LineMesh
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
@ -125,7 +124,7 @@ class BlockOutlineRenderer(
|
|||||||
|
|
||||||
val blockOffset = target.blockPosition.toVec3d
|
val blockOffset = target.blockPosition.toVec3d
|
||||||
if (target.state.block is RandomOffsetBlock) {
|
if (target.state.block is RandomOffsetBlock) {
|
||||||
target.state.block.randomOffset?.let { blockOffset += target.blockPosition.getWorldOffset(it) }
|
blockOffset += target.state.block.offsetBlock(target.blockPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user