content: package thebetweenlands.common.block.structure;
  
  import java.util.Random;
  
  import net.minecraft.block.Block;
  import net.minecraft.block.SoundType;
  import net.minecraft.block.material.Material;
  import net.minecraft.block.properties.PropertyDirection;
  import net.minecraft.block.state.BlockStateContainer;
  import net.minecraft.block.state.IBlockState;
  import net.minecraft.entity.Entity;
  import net.minecraft.entity.EntityLivingBase;
  import net.minecraft.entity.player.EntityPlayer;
  import net.minecraft.util.EnumFacing;
  import net.minecraft.util.Mirror;
  import net.minecraft.util.Rotation;
  import net.minecraft.util.SoundCategory;
  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 thebetweenlands.client.render.particle.BLParticles;
  import thebetweenlands.client.tab.BLCreativeTabs;
  import thebetweenlands.common.block.BasicBlock;
  import thebetweenlands.common.registries.BlockRegistry;
  
  public class BlockMudTilesWater extends BasicBlock {
  
  	public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL);
  
  	public BlockMudTilesWater() {
  		super(Material.ROCK);
  		setDefaultState(blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH));
  		setHardness(1.5F);
  		setResistance(10.0F);
  		setSoundType(SoundType.STONE);
  		this.setCreativeTab(BLCreativeTabs.BLOCKS);
  	}
  
  	@Override
  	public boolean isOpaqueCube(IBlockState state) {
  		return false;
  	}
  
  	@Override
  	public IBlockState getStateFromMeta(int meta) {
  		EnumFacing facing = EnumFacing.byIndex(meta); // Using this instead of 'byHorizontalIndex' because the ids don't match and previous was release
  		return getDefaultState().withProperty(FACING, facing.getAxis().isHorizontal() ? facing: EnumFacing.NORTH);
  	}
  
  	@Override
  	public int getMetaFromState(IBlockState state) {
  		int meta = 0;
  		meta = meta | state.getValue(FACING).getIndex();
  		return meta;
  	}
  
  	@Override
  	public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) {
  		return getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite());
  	}
  
  	@Override
  	public IBlockState withRotation(IBlockState state, Rotation rot) {
  		return state.withProperty(FACING, rot.rotate(state.getValue(FACING)));
  	}
  
  	@Override
  	public IBlockState withMirror(IBlockState state, Mirror mirrorIn) {
  		return state.withRotation(mirrorIn.toRotation(state.getValue(FACING)));
  	}
  
  	@Override
  	protected BlockStateContainer createBlockState() {
  		return new BlockStateContainer(this, FACING);
  	}
  
  	@Override
  	public int quantityDropped(Random random) {
  		return 0;
  	}
  
  	@SideOnly(Side.CLIENT)
  	@Override //grrrr 
  	public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand) {
  		double d0 = (double) pos.getX() + 0.375D;
  		double d1 = (double) pos.getY();
  		double d2 = (double) pos.getZ() + 0.375D;
  		int distance = 0;
  		for (distance = 1; distance < 10; distance++) {
  			Material material = world.getBlockState(pos.up(distance)).getMaterial();
  			if (state.getBlock() != null && material.blocksMovement() && !material.isLiquid())
  				break;
  		}
  
  		if (distance > 1 && distance < 10) {
  			double d3 = d0 + (double) rand.nextFloat() * 0.25F;
  			double d5 = (d1 + distance) - 0.05D;
  			double d7 = d2 + (double) rand.nextFloat() * 0.25F;
  			BLParticles.CAVE_WATER_DRIP.spawn(world, d3, d5, d7).setRBGColorF(0.4118F, 0.2745F, 0.1568F);
  		}
  	}
  
  	@Override
  	public void onEntityWalk(World world, BlockPos pos, Entity entity) {
  		if (!world.isRemote)
  			if(entity instanceof EntityPlayer && !entity.isSneaking()) {
  				world.playSound(null, pos, blockSoundType.getBreakSound(), SoundCategory.BLOCKS, 0.5F, 1F);
  				world.playEvent(null, 2001, pos, Block.getIdFromBlock(BlockRegistry.MUD_TILES)); //this will do unless we want specific particles
  				world.setBlockState(pos, BlockRegistry.STAGNANT_WATER.getDefaultState());
  			}
  	}
  
  	@Override
  	public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) {
  		this.onBlockHarvested(world, pos, state, player);
  		return world.setBlockState(pos, BlockRegistry.STAGNANT_WATER.getDefaultState(), world.isRemote ? 11 : 3);
  	}
  
  	@Override
  	public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos) {
  		return false;
  	}
  }