BiomesOPlenty/src/main/java/biomesoplenty/common/block/FoliageBlockBOP.java

110 lines
4.0 KiB
Java

/*******************************************************************************
* 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<ItemStack> 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;
}
}