mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-15 10:25:06 -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.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
|
||||
|
||||
|
@ -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")
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user