/******************************************************************************* * Copyright 2014-2019, the Biomes O' Plenty Team * * This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License. * * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. ******************************************************************************/ package biomesoplenty.common.block; import biomesoplenty.api.block.BOPBlocks; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.BushBlock; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.stats.Stats; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.PlantType; import javax.annotation.Nullable; public class FoliageBlockBOP extends BushBlock implements IPlantable { protected static final VoxelShape NORMAL = Block.box(2.0D, 0.0D, 2.0D, 14.0D, 13.0D, 14.0D); protected static final VoxelShape SHORT = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 7.0D, 15.0D); public FoliageBlockBOP(Block.Properties properties) { super(properties); } @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext selectionContext) { Block block = state.getBlock(); if (block == BOPBlocks.desert_grass) { return SHORT; } return NORMAL; } @Override public void playerDestroy(World worldIn, PlayerEntity player, BlockPos pos, BlockState state, @Nullable TileEntity te, ItemStack stack) { if (!worldIn.isClientSide && stack.getItem() == Items.SHEARS) { player.awardStat(Stats.BLOCK_MINED.get(this)); player.causeFoodExhaustion(0.005F); this.popResource(worldIn, pos, new ItemStack(this)); } else { super.playerDestroy(worldIn, player, pos, state, te, stack); } } public java.util.List onSheared(ItemStack item, net.minecraft.world.IWorld world, BlockPos pos, int fortune) { world.setBlock(pos, Blocks.AIR.defaultBlockState(), 11); return java.util.Arrays.asList(new ItemStack(this)); } @Override public boolean canSurvive(BlockState state, IWorldReader worldIn, BlockPos pos) { BlockState groundState = worldIn.getBlockState(pos.below()); Block ground = groundState.getBlock(); if (this == BOPBlocks.sprout) { return groundState.isFaceSturdy(worldIn, pos.below(), Direction.UP) || super.canSurvive(state, worldIn, pos); } if (this == BOPBlocks.dune_grass) { return ground == Blocks.SAND || ground == Blocks.RED_SAND || ground == BOPBlocks.white_sand || ground == BOPBlocks.orange_sand || ground == BOPBlocks.black_sand; } if (this == BOPBlocks.desert_grass || this == BOPBlocks.dead_grass) { return ground == BOPBlocks.dried_salt || ground == Blocks.GRAVEL || ground == Blocks.SAND || ground == Blocks.RED_SAND || ground == BOPBlocks.white_sand || ground == BOPBlocks.orange_sand || ground == BOPBlocks.black_sand || ground == Blocks.NETHERRACK || super.canSurvive(state, worldIn, pos); } return super.canSurvive(state, worldIn, pos); } @Override public Block.OffsetType getOffsetType() { return Block.OffsetType.XYZ; } @Override public PlantType getPlantType(IBlockReader world, BlockPos pos) { return PlantType.PLAINS; } }