diff --git a/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt b/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt index 2dbdf84bf..46ffe09ed 100644 --- a/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt @@ -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 diff --git a/src/main/java/de/bixilon/minosoft/data/registries/fluid/FlowableFluid.kt b/src/main/java/de/bixilon/minosoft/data/registries/fluid/FlowableFluid.kt index 60f2e40d9..397c4c2a1 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/fluid/FlowableFluid.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/fluid/FlowableFluid.kt @@ -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) } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt index 20149c5fd..a59f40f8f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/LeftClickHandler.kt @@ -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() + val raycastHit = renderWindow.inputHandler.camera.blockTarget if (raycastHit == null) { cancelDigging() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/RightClickHandler.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/RightClickHandler.kt index 5fd4bcbfd..4d0bdf816 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/RightClickHandler.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/RightClickHandler.kt @@ -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() ?: return + val raycastHit = renderWindow.inputHandler.camera.blockTarget ?: return if (raycastHit.distance > RenderConstants.MAX_BLOCK_OUTLINE_RAYCAST_DISTANCE) { return diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt index 6f4f856ff..d4646f614 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt @@ -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 diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/FluidRaycastHit.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/FluidRaycastHit.kt index 76df701cd..2ceee71ab 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/FluidRaycastHit.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/hit/FluidRaycastHit.kt @@ -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]}"