11package xyz.xenondevs.nova.world.block.behavior
22
3+ import net.minecraft.world.level.block.state.properties.BlockStateProperties
34import org.bukkit.GameMode
45import org.bukkit.Material
56import org.bukkit.Sound
@@ -9,7 +10,9 @@ import xyz.xenondevs.nova.context.param.DefaultContextParamTypes
910import xyz.xenondevs.nova.util.BlockUtils
1011import xyz.xenondevs.nova.world.BlockPos
1112import xyz.xenondevs.nova.world.block.state.NovaBlockState
13+ import xyz.xenondevs.nova.world.block.state.model.BackingStateBlockModelProvider
1214import xyz.xenondevs.nova.world.block.state.model.DisplayEntityBlockModelProvider
15+ import xyz.xenondevs.nova.world.block.state.model.ModelLessBlockModelProvider
1316import xyz.xenondevs.nova.world.block.state.property.DefaultBlockStateProperties.WATERLOGGED
1417import xyz.xenondevs.nova.world.block.tileentity.network.type.fluid.FluidType
1518import 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