blob: a10c46bc73278313d0be136eb5f33500922c7a6d [file] [log] [blame] [raw]
package appeng.api.movable;
import net.minecraft.tileentity.TileEntity;
/**
* Used to determine if a tile is marked as movable, a block will be considered
* movable, if...
*
* 1. The Tile or its super classes have been white listed with
* whiteListTileEntity.
*
* 2. The Tile has been register with the IMC ( which
* basically calls whiteListTileEntity. )
*
* 3. The Tile implements IMovableTile 4.
* A IMovableHandler is register that returns canHandle = true for the Tile
* Entity Class
*
* IMC Example: FMLInterModComms.sendMessage( "AppliedEnergistics",
* "movabletile", "appeng.common.AppEngTile" );
*
* The movement process is as follows,
*
* 1. IMovableTile.prepareToMove() or TileEntity.invalidate() depending on your
* opt-in method. 2. The tile will be removed from the world. 3. Its world,
* coordinates will be changed. *** this can be overridden with a
* IMovableHandler *** 4. It will then be re-added to the world, or a new world.
* 5. TileEntity.validate() 6. IMovableTile.doneMoving ( if you implemented
* IMovableTile )
*
* Please note, this is a 100% white list only feature, I will never opt in any
* non-vanilla, non-AE blocks. If you do not want to support your tiles being
* moved, you don't have to do anything.
*
* I appreciate anyone that takes the effort to get their tiles to work with
* this system to create a better use experience.
*
* If you need a build of deobf build of AE for testing, do not hesitate to ask.
*/
public interface IMovableRegistry
{
/**
* White list your tile entity with the registry.
*
* You can also use the IMC, FMLInterModComms.sendMessage(
* "AppliedEnergistics", "movabletile", "appeng.common.AppEngTile" );
*
* If you tile is handled with IMovableHandler or IMovableTile you do not
* need to white list it.
*/
void whiteListTileEntity(Class<? extends TileEntity> c);
/**
* @param te
* @return true if the tile has accepted your request to move it
*/
boolean askToMove(TileEntity te);
/**
* tells the tile you are done moving it.
*
* @param te
*/
void doneMoving(TileEntity te);
/**
* add a new handler movable handler.
*
* @param handler
*/
void addHandler(IMovableHandler handler);
/**
* handlers are used to perform movement, this allows you to override AE's
* internal version.
*
* only valid after askToMove(...) = true
*
* @param te
* @return
*/
IMovableHandler getHandler(TileEntity te);
/**
* @return a copy of the default handler
*/
IMovableHandler getDefaultHandler();
}