Private
Public Access
1
0

Implemented sounds into the block animateTick method. Implemented missing isMoonVisible method. Updated parameter names.

This commit is contained in:
2025-06-05 23:23:53 +01:00
parent ad8cf966ed
commit dfb32387fd

View File

@ -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) {