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