From dfb32387fde0c05ff58eaeb290225e7f3751a375 Mon Sep 17 00:00:00 2001 From: Micle Date: Thu, 5 Jun 2025 23:23:53 +0100 Subject: [PATCH] Implemented sounds into the block animateTick method. Implemented missing isMoonVisible method. Updated parameter names. --- .../block/FireflyBushBlock.java | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java index 3d1f952..00f2247 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java +++ b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java @@ -1,15 +1,19 @@ package dev.micle.firefly_bush_backport.block; +import dev.micle.firefly_bush_backport.sound.ModSounds; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.BonemealableBlock; import net.minecraft.world.level.block.BushBlock; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import javax.annotation.ParametersAreNonnullByDefault; import java.util.List; import java.util.Optional; @@ -20,28 +24,45 @@ public class FireflyBushBlock extends BushBlock implements BonemealableBlock { private static final int FIREFLY_SPAWN_MAX_BRIGHTNESS_LEVEL = 13; private static final int FIREFLY_AMBIENT_SOUND_CHANCE_ONE_IN = 30; - public FireflyBushBlock(Properties pProperties) { - super(pProperties); + public FireflyBushBlock(Properties properties) { + super(properties); } @Override - public void animateTick(BlockState pState, Level pLevel, BlockPos pPos, RandomSource pRandom) { - super.animateTick(pState, pLevel, pPos, pRandom); + @ParametersAreNonnullByDefault + public void animateTick(BlockState blockState, Level level, BlockPos blockPos, RandomSource randomSource) { + if (randomSource.nextInt(30) == 0 + && isMoonVisible(level) + && level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, blockPos.getX(), blockPos.getZ()) <= blockPos.getY()) { + level.playLocalSound(blockPos, ModSounds.FIREFLY_BUSH_IDLE.get(), SoundSource.AMBIENT, 1.0F, 1.0F, false); + } + } + + public boolean isMoonVisible(Level level) { + if (!level.dimensionType().natural()) { + return false; + } else { + int i = (int) (level.getDayTime() % 24000L); + return i >= 12600 && i <= 23400; + } } @Override - public boolean isValidBonemealTarget(LevelReader pLevel, BlockPos pPos, BlockState pState, boolean pIsClient) { - return hasSpreadableNeighbourPos(pLevel, pPos, pState); + @ParametersAreNonnullByDefault + public boolean isValidBonemealTarget(LevelReader level, BlockPos blockPos, BlockState blockState, boolean isClient) { + return hasSpreadableNeighbourPos(level, blockPos, blockState); } @Override - public boolean isBonemealSuccess(Level pLevel, RandomSource pRandom, BlockPos pPos, BlockState pState) { + @ParametersAreNonnullByDefault + public boolean isBonemealSuccess(Level level, RandomSource randomSource, BlockPos blockPos, BlockState blockState) { return true; } @Override - public void performBonemeal(ServerLevel pLevel, RandomSource pRandom, BlockPos pPos, BlockState pState) { - findSpreadableNeighbourPos(pLevel, pPos, pState).ifPresent(x -> pLevel.setBlockAndUpdate(x, this.defaultBlockState())); + @ParametersAreNonnullByDefault + public void performBonemeal(ServerLevel level, RandomSource randomSource, BlockPos blockPos, BlockState blockState) { + findSpreadableNeighbourPos(level, blockPos, blockState).ifPresent(x -> level.setBlockAndUpdate(x, this.defaultBlockState())); } static boolean hasSpreadableNeighbourPos(LevelReader levelReader, BlockPos blockPos, BlockState blockState) {