filename:
common/src/main/java/rearth/oritech/block/blocks/arcane/WitheredCropBlock.java
branch:
1.21
back to repo
package rearth.oritech.block.blocks.arcane;
import net.minecraft.block.*;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemConvertible;
import net.minecraft.item.ItemStack;
import net.minecraft.item.tooltip.TooltipType;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.random.Random;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
import net.minecraft.world.event.GameEvent;
import rearth.oritech.init.BlockContent;
import java.util.List;
public class WitheredCropBlock extends CropBlock {
private static final VoxelShape[] AGE_TO_SHAPE = new VoxelShape[]{
Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 3.0D, 16.0D),
Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 4.0D, 16.0D),
Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 5.0D, 16.0D),
Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 6.0D, 16.0D),
Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 8.0D, 16.0D),
Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 10.0D, 16.0D),
Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 13.0D, 16.0D),
Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 15.0D, 16.0D)
};
public WitheredCropBlock(Settings settings) {
super(settings);
}
@Override
protected ItemConvertible getSeedsItem() {
return BlockContent.WITHER_CROP_BLOCK;
}
@Override
protected boolean canPlantOnTop(BlockState floor, BlockView world, BlockPos pos) {
return floor.isOf(Blocks.SOUL_SOIL);
}
@Override
protected int getGrowthAmount(World world) {
return MathHelper.nextInt(world.random, 1, 2);
}
@Override
protected void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) {
if (world.getBaseLightLevel(pos, 0) >= 9) {
int age = this.getAge(state);
if (age < this.getMaxAge()) {
if (random.nextInt(5) == 0) {
world.setBlockState(pos, this.withAge(age + 1), Block.NOTIFY_LISTENERS);
}
}
}
}
@Override
protected VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
return AGE_TO_SHAPE[state.get(this.getAgeProperty())];
}
@Override
public BlockState onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) {
if (this.getAge(state) == this.getMaxAge())
world.emitGameEvent(GameEvent.ENTITY_DIE.registryKey(), pos, GameEvent.Emitter.of(state));
return super.onBreak(world, pos, state, player);
}
@Override
public void appendTooltip(ItemStack stack, Item.TooltipContext context, List<Text> tooltip, TooltipType options) {
super.appendTooltip(stack, context, tooltip, options);
tooltip.add(Text.translatable("tooltip.oritech.soul_crop").formatted(Formatting.GRAY));
}
}