package me.ryanhamshire.ExtraHardMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
public class BlockPhysicsCheckTask implements Runnable {
Block block;
int recursionCount;
public BlockPhysicsCheckTask(Block block, int recursionCount)
{
this.block = block;
this.recursionCount = recursionCount;
}
@Override
public void run()
{
block = block.getWorld().getBlockAt(block.getLocation());
boolean fall = false;
Material material = block.getType();
if( (block.getRelative(BlockFace.DOWN).getType() == Material.AIR || block.getRelative(BlockFace.DOWN).isLiquid() || block.getRelative(BlockFace.DOWN).getType() == Material.TORCH) &&
(material == Material.SAND || material == Material.GRAVEL || ExtraHardMode.instance.config_moreFallingBlocks.contains(material)))
{
ExtraHardMode.applyPhysics(block);
fall = true;
}
if(fall || this.recursionCount == 0)
{
if(recursionCount < 10)
{
Block neighbor = block.getRelative(BlockFace.UP);
ExtraHardMode.physicsCheck(neighbor, recursionCount + 1, false);
neighbor = block.getRelative(BlockFace.DOWN);
ExtraHardMode.physicsCheck(neighbor, recursionCount + 1, false);
neighbor = block.getRelative(BlockFace.EAST);
ExtraHardMode.physicsCheck(neighbor, recursionCount + 1, false);
neighbor = block.getRelative(BlockFace.WEST);
ExtraHardMode.physicsCheck(neighbor, recursionCount + 1, false);
neighbor = block.getRelative(BlockFace.NORTH);
ExtraHardMode.physicsCheck(neighbor, recursionCount + 1, false);
neighbor = block.getRelative(BlockFace.SOUTH);
ExtraHardMode.physicsCheck(neighbor, recursionCount + 1, false);
}
}
}
}