Unicopia/src/main/java/com/minelittlepony/unicopia/block/RockCropBlock.java
2022-06-25 00:19:55 +02:00

107 lines
4.2 KiB
Java

package com.minelittlepony.unicopia.block;
import com.minelittlepony.unicopia.EquinePredicates;
import com.minelittlepony.unicopia.item.UItems;
import net.minecraft.block.BlockState;
import net.minecraft.block.CropBlock;
import net.minecraft.block.ShapeContext;
import net.minecraft.item.ItemConvertible;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.random.Random;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
import net.minecraft.world.WorldEvents;
public class RockCropBlock extends CropBlock {
private static final VoxelShape[] AGE_TO_SHAPE = new VoxelShape[] {
VoxelShapes.union(
createCuboidShape(7, -1, 11, 8, 0, 12),
createCuboidShape(3.5F, -1, 3.5F, 5, 0, 5),
createCuboidShape(11.5F, -1, 5.5F, 13, 0, 7)
),
VoxelShapes.union(
createCuboidShape(6, -1, 10, 9, 1, 13),
createCuboidShape(2.5F, -1, 2.5F, 6.5F, 2, 6.5F),
createCuboidShape(10.5F, -1, 4.5F, 14.5F, 2, 8.5F)
),
VoxelShapes.union(
createCuboidShape(4, -1, 9, 10, 2, 14),
createCuboidShape(1.5F, -1, 1.5F, 7.5F, 3, 7.5F),
createCuboidShape(9, -1, 3.5F, 15.5F, 3, 9.5F)
),
VoxelShapes.union(
createCuboidShape(4, -1, 9, 10, 2, 14),
createCuboidShape(1.5F, -1, 1.5F, 7.5F, 4, 7.5F),
createCuboidShape(9, -1, 3.5F, 15.5F, 3, 9.5F)
),
VoxelShapes.union(
createCuboidShape(3, -1, 8, 11, 3, 15),
createCuboidShape(0.5F, -1, 0.5F, 8.5F, 5, 8.5F),
createCuboidShape(7.5F, -1, 2, 17, 5, 10.5F)
),
VoxelShapes.union(
createCuboidShape(3, -1, 8, 11, 4, 15),
createCuboidShape(0.5F, -1, 0.5F, 8.5F, 5, 8.5F),
createCuboidShape(7.5F, -1, 2, 17, 7, 10.5F)
),
VoxelShapes.union(
createCuboidShape(3, -1, 8, 11, 4, 15),
createCuboidShape(0.5F, -1, 0.5F, 8.5F, 7, 8.5F),
createCuboidShape(7.5F, -1, 2, 17, 9, 10.5F)
),
VoxelShapes.union(
createCuboidShape(3, -1, 8, 11, 4, 15),
createCuboidShape(0.5F, -1, 0.5F, 8.5F, 9, 8.5F),
createCuboidShape(7.5F, -1, 2, 17, 13, 10.5F)
)
};
protected RockCropBlock(Settings settings) {
super(settings);
}
@Override
public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
return AGE_TO_SHAPE[state.get(getAgeProperty())];
}
@Override
public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) {
if (canGrow(world, random, pos, state)) {
super.randomTick(state, world, pos, random);
}
}
@Override
@Deprecated
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
super.onStateReplaced(state, world, pos, newState, moved);
if (!moved && !(state.getBlock() == this && newState.getBlock() == this)) {
if (!world.isClient) {
world.syncWorldEvent(WorldEvents.BONE_MEAL_USED, pos, 0);
}
}
}
@Override
public boolean canGrow(World world, Random random, BlockPos pos, BlockState state) {
return world.getClosestPlayer(pos.getX(), pos.getY(), pos.getZ(), 20, EquinePredicates.PLAYER_CAN_USE_EARTH) != null;
}
@Override
public boolean isFertilizable(BlockView world, BlockPos pos, BlockState state, boolean isClient) {
if (world instanceof World && !canGrow((World)world, ((World)world).random, pos, state)) {
return false;
}
return super.isFertilizable(world, pos, state, isClient);
}
@Override
protected ItemConvertible getSeedsItem() {
return UItems.PEBBLES;
}
}