Skip to content

Commit d31f37a

Browse files
Fix duplicated sound and hand swing from Waterloggable
1 parent f123210 commit d31f37a

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

nova/src/main/kotlin/xyz/xenondevs/nova/world/block/behavior/Waterloggable.kt

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package xyz.xenondevs.nova.world.block.behavior
22

3+
import net.minecraft.world.level.block.state.properties.BlockStateProperties
34
import org.bukkit.GameMode
45
import org.bukkit.Material
56
import org.bukkit.Sound
@@ -9,7 +10,9 @@ import xyz.xenondevs.nova.context.param.DefaultContextParamTypes
910
import xyz.xenondevs.nova.util.BlockUtils
1011
import xyz.xenondevs.nova.world.BlockPos
1112
import xyz.xenondevs.nova.world.block.state.NovaBlockState
13+
import xyz.xenondevs.nova.world.block.state.model.BackingStateBlockModelProvider
1214
import xyz.xenondevs.nova.world.block.state.model.DisplayEntityBlockModelProvider
15+
import xyz.xenondevs.nova.world.block.state.model.ModelLessBlockModelProvider
1316
import xyz.xenondevs.nova.world.block.state.property.DefaultBlockStateProperties.WATERLOGGED
1417
import xyz.xenondevs.nova.world.block.tileentity.network.type.fluid.FluidType
1518
import xyz.xenondevs.nova.world.player.swingHandEventless
@@ -36,16 +39,20 @@ object Waterloggable : BlockBehavior {
3639
if (player.gameMode != GameMode.CREATIVE) {
3740
Bucketable.emptyBucketInHand(player, hand)
3841
}
39-
pos.playSound(Sound.ITEM_BUCKET_EMPTY, 1f, 1f)
40-
player.swingHandEventless(hand)
42+
if (hasNoWaterloggingPrediction(state)) {
43+
pos.playSound(Sound.ITEM_BUCKET_EMPTY, 1f, 1f)
44+
player.swingHandEventless(hand)
45+
}
4146
return true
4247
} else if (isWaterlogged && itemStack.type == Material.BUCKET) {
4348
BlockUtils.updateBlockState(pos, state.with(WATERLOGGED, false))
4449
if (player.gameMode != GameMode.CREATIVE) {
4550
Bucketable.fillBucketInHand(player, hand, FluidType.WATER)
4651
}
47-
pos.playSound(Sound.ITEM_BUCKET_FILL, 1f, 1f)
48-
player.swingHandEventless(hand)
52+
if (hasNoWaterloggingPrediction(state)) {
53+
pos.playSound(Sound.ITEM_BUCKET_FILL, 1f, 1f)
54+
player.swingHandEventless(hand)
55+
}
4956
return true
5057
}
5158

@@ -56,4 +63,13 @@ object Waterloggable : BlockBehavior {
5663
(state.modelProvider as? DisplayEntityBlockModelProvider)?.updateWaterlogEntity(pos)
5764
}
5865

66+
private fun hasNoWaterloggingPrediction(state: NovaBlockState): Boolean {
67+
val bs = when (val mp = state.modelProvider) {
68+
is DisplayEntityBlockModelProvider -> mp.info.hitboxType
69+
is BackingStateBlockModelProvider -> mp.info.vanillaBlockState
70+
is ModelLessBlockModelProvider -> mp.info
71+
}
72+
return !bs.hasProperty(BlockStateProperties.WATERLOGGED)
73+
}
74+
5975
}

0 commit comments

Comments
 (0)