package com.elmakers.mine.bukkit.api.block;

import java.util.List;

import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;

import com.elmakers.mine.bukkit.api.magic.Mage;

public interface UndoList extends BlockList {
	public void commit();
	
	public void scheduleCleanup();
	public boolean undoScheduled();
	public boolean undo();
	
	public void setScheduleUndo(int ttl);
	public int getScheduledUndo();
	public boolean bypass();
	public long getCreatedTime();
	public long getModifiedTime();

	public void prune();
	
	public void add(Entity entity);
	public void remove(Entity entity);
	public void modify(Entity entity);
	
	public void convert(Entity entity, Block block);
	public void fall(Entity entity, Block block);
	public void explode(Entity entity, List<Block> explodedBlocks);
	public void cancelExplosion(Entity entity);
	
	public boolean contains(Location location, int threshold);
	
	public String getName();
	public Mage getOwner();
}

package com.elmakers.mine.bukkit.api.block;

import java.util.List;

import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;

import com.elmakers.mine.bukkit.api.magic.Mage;

public interface UndoList extends BlockList {
	public void commit();
	
	public void scheduleCleanup();
	public boolean undoScheduled();
	public boolean undo();
	
	public void setScheduleUndo(int ttl);
	public int getScheduledUndo();
	public boolean bypass();
	public long getCreatedTime();
	public long getModifiedTime();

	public void prune();
	
	public void add(Entity entity);
	public void remove(Entity entity);
	public void modify(Entity entity);
	public void add(Runnable runnable);
	
	public void convert(Entity entity, Block block);
	public void fall(Entity entity, Block block);
	public void explode(Entity entity, List<Block> explodedBlocks);
	public void cancelExplosion(Entity entity);
	
	public boolean contains(Location location, int threshold);
	
	public String getName();
	public Mage getOwner();
}

Add a way to specify a generic Runnable on an UndoList