mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 10:55:01 -04:00
fix fluid digging, improve fluid velocity
This commit is contained in:
parent
9ebaeb6eb0
commit
ddcf3fd7f5
@ -60,9 +60,6 @@ import de.bixilon.minosoft.util.KUtil.decide
|
||||
import de.bixilon.minosoft.util.KUtil.nullCast
|
||||
import de.bixilon.minosoft.util.KUtil.synchronizedMapOf
|
||||
import de.bixilon.minosoft.util.MMath
|
||||
import de.bixilon.minosoft.util.logging.Log
|
||||
import de.bixilon.minosoft.util.logging.LogLevels
|
||||
import de.bixilon.minosoft.util.logging.LogMessageType
|
||||
import glm_.func.cos
|
||||
import glm_.func.rad
|
||||
import glm_.func.sin
|
||||
@ -575,14 +572,11 @@ class LocalPlayerEntity(
|
||||
velocity /= checks
|
||||
}
|
||||
|
||||
velocity *= velocityMultiplier
|
||||
|
||||
if (abs(this.velocity.x) < 0.003 && abs(this.velocity.z) < 0.003 && velocity.length() < 0.0045000000000000005) {
|
||||
velocity assign (velocity.normalize() * 0.0045000000000000005)
|
||||
}
|
||||
|
||||
val finalVelocity = this.velocity + velocity
|
||||
this.velocity assign finalVelocity
|
||||
this.velocity assign (this.velocity + velocity)
|
||||
}
|
||||
fluidHeights[fluid] = height
|
||||
return inFluid
|
||||
@ -599,11 +593,12 @@ class LocalPlayerEntity(
|
||||
updateFluidState(it.resourceLocation)
|
||||
}
|
||||
|
||||
submgergedFluid = null
|
||||
|
||||
// ToDo: Boat
|
||||
val eyeHeight = eyePosition.y - 0.1111111119389534
|
||||
|
||||
val eyePosition = (Vec3d(position.x, eyeHeight, position.z)).blockPosition
|
||||
submgergedFluid = null
|
||||
val blockState = connection.world[eyePosition] ?: return
|
||||
if (blockState.block !is FluidBlock) {
|
||||
return
|
||||
|
@ -35,10 +35,10 @@ abstract class FlowableFluid(
|
||||
abstract fun getVelocityMultiplier(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i): Double
|
||||
|
||||
open fun getVelocity(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i): Vec3d {
|
||||
if (blockState.block !is FluidBlock) {
|
||||
if (blockState.block !is FluidBlock || !blockState.block.fluid.matches(this)) {
|
||||
return Vec3d.EMPTY
|
||||
}
|
||||
val thisFluidHeight = blockState.block.fluid.getHeight(blockState)
|
||||
val fluidHeight = getHeight(blockState)
|
||||
|
||||
val velocity = Vec3d.EMPTY
|
||||
|
||||
@ -54,16 +54,16 @@ abstract class FlowableFluid(
|
||||
}
|
||||
val height = neighbourBlockState.block.fluid.getHeight(neighbourBlockState)
|
||||
|
||||
var magic = 0.0f
|
||||
var heightDifference = 0.0f
|
||||
|
||||
if (height == 0.0f) {
|
||||
// ToDo
|
||||
} else {
|
||||
magic = thisFluidHeight - height
|
||||
heightDifference = fluidHeight - height
|
||||
}
|
||||
|
||||
if (magic != 0.0f) {
|
||||
velocity += (direction.vectord * magic)
|
||||
if (heightDifference != 0.0f) {
|
||||
velocity += (direction.vectord * heightDifference)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -25,13 +25,11 @@ import de.bixilon.minosoft.data.registries.fluid.DefaultFluids
|
||||
import de.bixilon.minosoft.data.registries.items.tools.MiningToolItem
|
||||
import de.bixilon.minosoft.gui.rendering.RenderConstants
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
|
||||
import de.bixilon.minosoft.modding.event.CallbackEventInvoker
|
||||
import de.bixilon.minosoft.modding.event.events.BlockBreakAckEvent
|
||||
import de.bixilon.minosoft.protocol.packets.c2s.play.ArmSwingC2SP
|
||||
import de.bixilon.minosoft.protocol.packets.c2s.play.BlockBreakC2SP
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||
import de.bixilon.minosoft.util.KUtil.nullCast
|
||||
import de.bixilon.minosoft.util.KUtil.synchronizedMapOf
|
||||
import glm_.pow
|
||||
import glm_.vec3.Vec3i
|
||||
@ -100,7 +98,7 @@ class LeftClickHandler(
|
||||
cancelDigging()
|
||||
return false
|
||||
}
|
||||
val raycastHit = renderWindow.inputHandler.camera.target?.nullCast<BlockRaycastHit>()
|
||||
val raycastHit = renderWindow.inputHandler.camera.blockTarget
|
||||
|
||||
if (raycastHit == null) {
|
||||
cancelDigging()
|
||||
|
@ -18,12 +18,10 @@ import de.bixilon.minosoft.data.player.Hands
|
||||
import de.bixilon.minosoft.data.registries.blocks.BlockUsages
|
||||
import de.bixilon.minosoft.gui.rendering.RenderConstants
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.input.camera.hit.BlockRaycastHit
|
||||
import de.bixilon.minosoft.protocol.packets.c2s.play.ArmSwingC2SP
|
||||
import de.bixilon.minosoft.protocol.packets.c2s.play.BlockPlaceC2SP
|
||||
import de.bixilon.minosoft.protocol.packets.c2s.play.ItemUseC2SP
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||
import de.bixilon.minosoft.util.KUtil.nullCast
|
||||
import glm_.vec3.Vec3
|
||||
|
||||
class RightClickHandler(
|
||||
@ -47,7 +45,7 @@ class RightClickHandler(
|
||||
return
|
||||
}
|
||||
|
||||
val raycastHit = renderWindow.inputHandler.camera.target?.nullCast<BlockRaycastHit>() ?: return
|
||||
val raycastHit = renderWindow.inputHandler.camera.blockTarget ?: return
|
||||
|
||||
if (raycastHit.distance > RenderConstants.MAX_BLOCK_OUTLINE_RAYCAST_DISTANCE) {
|
||||
return
|
||||
|
@ -61,7 +61,7 @@ class Camera(
|
||||
|
||||
var target: RaycastHit? = null
|
||||
private set
|
||||
var blockTarget: BlockRaycastHit? = null
|
||||
var blockTarget: BlockRaycastHit? = null // Block target or if blocked by entity null
|
||||
private set
|
||||
var fluidTarget: FluidRaycastHit? = null
|
||||
private set
|
||||
|
@ -24,10 +24,10 @@ class FluidRaycastHit(
|
||||
position: Vec3d,
|
||||
distance: Double,
|
||||
hitDirection: Directions,
|
||||
blockState: BlockState,
|
||||
blockPosition: Vec3i,
|
||||
val blockState: BlockState,
|
||||
val blockPosition: Vec3i,
|
||||
val fluid: Fluid,
|
||||
) : BlockRaycastHit(position, distance, hitDirection, blockState, blockPosition) {
|
||||
) : RaycastHit(position, distance, hitDirection) {
|
||||
|
||||
override fun toString(): String {
|
||||
return "$blockPosition: ${fluid.resourceLocation}\n Height: ${fluid.getHeight(blockState)}\n Level: ${blockState.properties[BlockProperties.FLUID_LEVEL]}"
|
||||
|
Loading…
x
Reference in New Issue
Block a user