58 lines
1.9 KiB
Java
58 lines
1.9 KiB
Java
package ru.betterend.blocks;
|
|
|
|
import java.util.Random;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockState;
|
|
import net.minecraft.block.ShapeContext;
|
|
import net.minecraft.server.world.ServerWorld;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraft.util.math.Vec3d;
|
|
import net.minecraft.util.shape.VoxelShape;
|
|
import net.minecraft.world.BlockView;
|
|
import ru.betterend.blocks.basis.EndPlantBlock;
|
|
import ru.betterend.registry.EndBlocks;
|
|
import ru.betterend.registry.EndFeatures;
|
|
|
|
public class SmallAmaranitaBlock extends EndPlantBlock {
|
|
private static final VoxelShape SHAPE = Block.createCuboidShape(4, 0, 4, 12, 10, 12);
|
|
|
|
@Override
|
|
protected boolean isTerrain(BlockState state) {
|
|
return state.isOf(EndBlocks.SANGNUM) || state.isOf(EndBlocks.MOSSY_OBSIDIAN) || state.isOf(EndBlocks.MOSSY_BONE);
|
|
}
|
|
|
|
@Override
|
|
public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) {
|
|
BlockPos bigPos = growBig(world, pos);
|
|
if (bigPos != null) {
|
|
return;
|
|
}
|
|
EndFeatures.LARGE_AMARANITA.getFeature().generate(world, null, random, pos, null);
|
|
}
|
|
|
|
@Override
|
|
public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ePos) {
|
|
Vec3d vec3d = state.getModelOffset(view, pos);
|
|
return SHAPE.offset(vec3d.x, vec3d.y, vec3d.z);
|
|
}
|
|
|
|
private BlockPos growBig(ServerWorld world, BlockPos pos) {
|
|
for (int x = -1; x < 2; x++) {
|
|
for (int z = -1; z < 2; z++) {
|
|
BlockPos p = pos.add(x, 0, z);
|
|
if (checkFrame(world, p)) {
|
|
return p;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private boolean checkFrame(ServerWorld world, BlockPos pos) {
|
|
return world.getBlockState(pos).isOf(this) ||
|
|
world.getBlockState(pos.south()).isOf(this) ||
|
|
world.getBlockState(pos.east()).isOf(this) ||
|
|
world.getBlockState(pos.south().east()).isOf(this);
|
|
}
|
|
}
|