package electroblob.wizardry.block; import electroblob.wizardry.Wizardry; import electroblob.wizardry.WizardryGuiHandler; import electroblob.wizardry.registry.WizardryTabs; import electroblob.wizardry.tileentity.TileEntityLectern; import electroblob.wizardry.util.ParticleBuilder; import electroblob.wizardry.util.ParticleBuilder.Type; import net.minecraft.block.BlockHorizontal; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.BlockFaceShape; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nullable; import java.util.Random; public class BlockLectern extends BlockHorizontal implements ITileEntityProvider { public BlockLectern(){ super(Material.WOOD); this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); this.setCreativeTab(WizardryTabs.WIZARDRY); this.setHardness(2.0F); this.setResistance(5.0F); this.setSoundType(SoundType.WOOD); } @Override protected BlockStateContainer createBlockState(){ return new BlockStateContainer.Builder(this).add(FACING).build(); } @Override public IBlockState getStateFromMeta(int meta){ EnumFacing enumfacing = EnumFacing.byIndex(meta); if(enumfacing.getAxis() == EnumFacing.Axis.Y) enumfacing = EnumFacing.NORTH; return this.getDefaultState().withProperty(FACING, enumfacing); } @Override public int getMetaFromState(IBlockState state){ return state.getValue(FACING).getIndex(); } @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ EntityPlayer entityplayer = world.getClosestPlayer(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, TileEntityLectern.BOOK_OPEN_DISTANCE, false); if(entityplayer != null){ ParticleBuilder.create(Type.DUST).pos(pos.getX() + rand.nextFloat(), pos.getY() + 1, pos.getZ() + rand.nextFloat()) .vel(0, 0.03, 0).clr(1, 1, 0.65f).fade(0.7f, 0, 1).shaded(false).spawn(world); } } @Override public boolean isOpaqueCube(IBlockState state){ return false; } @Override public boolean isFullCube(IBlockState state){ return false; } @Override public boolean isFullBlock(IBlockState state){ return false; } @Override public boolean isNormalCube(IBlockState state){ return false; } @Override public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos){ return false; } @Override public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face){ return face == EnumFacing.DOWN ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; } @Override public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer){ return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()); } @Override public IBlockState withRotation(IBlockState state, Rotation rotation){ return state.withProperty(FACING, rotation.rotate(state.getValue(FACING))); } @Override public IBlockState withMirror(IBlockState state, Mirror mirror){ return state.withRotation(mirror.toRotation(state.getValue(FACING))); } @Nullable @Override public TileEntity createNewTileEntity(World world, int meta){ return new TileEntityLectern(); } @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState block, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ){ TileEntity tileEntity = world.getTileEntity(pos); if(tileEntity == null || player.isSneaking()){ return false; } player.openGui(Wizardry.instance, WizardryGuiHandler.LECTERN, world, pos.getX(), pos.getY(), pos.getZ()); return true; } }