mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 19:05:02 -04:00
fluid submerged state, check block break water submerged state
This commit is contained in:
parent
b603439d44
commit
84c5a4d39a
@ -34,6 +34,7 @@ import de.bixilon.minosoft.data.registries.effects.attributes.DefaultStatusEffec
|
||||
import de.bixilon.minosoft.data.registries.effects.attributes.StatusEffectAttributeInstance
|
||||
import de.bixilon.minosoft.data.registries.enchantment.DefaultEnchantments
|
||||
import de.bixilon.minosoft.data.registries.fluid.FlowableFluid
|
||||
import de.bixilon.minosoft.data.registries.fluid.Fluid
|
||||
import de.bixilon.minosoft.data.registries.items.DefaultItems
|
||||
import de.bixilon.minosoft.data.registries.items.Item
|
||||
import de.bixilon.minosoft.data.registries.other.containers.Container
|
||||
@ -45,6 +46,7 @@ import de.bixilon.minosoft.gui.rendering.input.camera.MovementInput
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.assign
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.blockPosition
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.chunkPosition
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.clearZero
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.empty
|
||||
@ -95,6 +97,7 @@ class LocalPlayerEntity(
|
||||
|
||||
// fluids stuff
|
||||
private val fluidHeights: MutableMap<ResourceLocation, Float> = synchronizedMapOf()
|
||||
var submgergedFluid: Fluid? = null
|
||||
|
||||
var input = MovementInput()
|
||||
|
||||
@ -645,18 +648,18 @@ class LocalPlayerEntity(
|
||||
continue
|
||||
}
|
||||
|
||||
val fluid = blockState.block.fluid
|
||||
val blockFluid = blockState.block.fluid
|
||||
|
||||
if (fluid !is FlowableFluid) {
|
||||
if (blockFluid !is FlowableFluid) {
|
||||
continue
|
||||
}
|
||||
val fluidVelocity = fluid.getVelocity(connection, blockState, blockPosition)
|
||||
val fluidVelocity = blockFluid.getVelocity(connection, blockState, blockPosition)
|
||||
|
||||
if (height < 0.4) {
|
||||
fluidVelocity *= height
|
||||
}
|
||||
|
||||
velocity += (fluidVelocity * fluid.getVelocityMultiplier(connection, blockState, blockPosition))
|
||||
velocity += (fluidVelocity * blockFluid.getVelocityMultiplier(connection, blockState, blockPosition))
|
||||
checks++
|
||||
}
|
||||
|
||||
@ -689,6 +692,20 @@ class LocalPlayerEntity(
|
||||
updateFluidState(it.resourceLocation)
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
val height = eyePosition.y + blockState.block.fluid.getHeight(blockState)
|
||||
|
||||
if (height > eyeHeight) {
|
||||
submgergedFluid = blockState.block.fluid
|
||||
}
|
||||
}
|
||||
|
||||
override fun realTick() {
|
||||
|
@ -19,4 +19,5 @@ object DefaultEnchantments {
|
||||
val SOUL_SPEED = "minecraft:soul_speed".asResourceLocation()
|
||||
val UNBREAKING = "minecraft:unbreaking".asResourceLocation()
|
||||
val EFFICIENCY = "minecraft:efficiency".asResourceLocation()
|
||||
val AQUA_AFFINITY = "minecraft:aqua_affinity".asResourceLocation()
|
||||
}
|
||||
|
@ -62,7 +62,11 @@ open class Fluid(
|
||||
}
|
||||
|
||||
fun getHeight(blockState: BlockState): Float {
|
||||
return (blockState.properties[BlockProperties.FLUID_LEVEL] ?: return 0.0f).unsafeCast<Int>() / 9.0f
|
||||
val fluidLevel = blockState.properties[BlockProperties.FLUID_LEVEL]?.unsafeCast<Int>() ?: 0
|
||||
if (fluidLevel == 0) {
|
||||
return 1.0f
|
||||
}
|
||||
return fluidLevel / 9.0f
|
||||
}
|
||||
|
||||
open fun randomTick(connection: PlayConnection, blockState: BlockState, blockPosition: Vec3i, random: Random) {}
|
||||
|
@ -21,6 +21,7 @@ import de.bixilon.minosoft.data.player.Hands
|
||||
import de.bixilon.minosoft.data.registries.blocks.BlockState
|
||||
import de.bixilon.minosoft.data.registries.effects.DefaultStatusEffects
|
||||
import de.bixilon.minosoft.data.registries.enchantment.DefaultEnchantments
|
||||
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
|
||||
@ -54,6 +55,8 @@ class LeftClickHandler(
|
||||
private var acknowledgedBreakStarts: MutableMap<Vec3i, BlockState?> = synchronizedMapOf()
|
||||
|
||||
private val efficiencyEnchantment = connection.registries.enchantmentRegistry[DefaultEnchantments.EFFICIENCY]
|
||||
private val aquaAffinityEnchantment = connection.registries.enchantmentRegistry[DefaultEnchantments.AQUA_AFFINITY]
|
||||
|
||||
private val hasteStatusEffect = connection.registries.statusEffectRegistry[DefaultStatusEffects.HASTE]
|
||||
private val miningFatigueStatusEffect = connection.registries.statusEffectRegistry[DefaultStatusEffects.MINING_FATIGUE]
|
||||
|
||||
@ -194,10 +197,17 @@ class LeftClickHandler(
|
||||
}
|
||||
|
||||
connection.player.activeStatusEffects[miningFatigueStatusEffect]?.let {
|
||||
speedMultiplier *= 0.3f.pow(it.amplifier + 1)
|
||||
speedMultiplier *= when (it.amplifier) {
|
||||
0 -> 0.3f
|
||||
1 -> 0.09f
|
||||
2 -> 0.0027f
|
||||
else -> 8.1E-4f
|
||||
}
|
||||
}
|
||||
|
||||
// ToDo: Check if is in water
|
||||
if (connection.player.submgergedFluid?.resourceLocation == DefaultFluids.WATER && connection.player.getEquipmentEnchant(aquaAffinityEnchantment) == 0) {
|
||||
speedMultiplier /= 5.0f
|
||||
}
|
||||
|
||||
if (!connection.player.onGround) {
|
||||
speedMultiplier /= 5.0f
|
||||
|
Loading…
x
Reference in New Issue
Block a user