71 lines
2.3 KiB
Java
71 lines
2.3 KiB
Java
/**
|
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
|
* Copyright Daniel Ratcliffe, 2011-2013. This API may be redistributed unmodified and in full only.
|
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
|
*/
|
|
|
|
package dan200.computer.api;
|
|
import java.lang.reflect.Method;
|
|
|
|
/**
|
|
* The static entry point to the ComputerCraft API.
|
|
* Members in this class must be called after mod_ComputerCraft has been initialised,
|
|
* but may be called before it is fully loaded.
|
|
*/
|
|
public class ComputerCraftAPI
|
|
{
|
|
/**
|
|
* Registers a peripheral handler for a TileEntity that you do not have access to. Only
|
|
* use this if you want to expose IPeripheral on a TileEntity from another mod. For your own
|
|
* mod, just implement IPeripheral on the TileEntity directly.
|
|
* @see IPeripheral
|
|
* @see IPeripheralHandler
|
|
*/
|
|
public static void registerExternalPeripheral( Class <? extends net.minecraft.tileentity.TileEntity> clazz, IPeripheralHandler handler )
|
|
{
|
|
findCC();
|
|
if (computerCraft_registerExternalPeripheral != null)
|
|
{
|
|
try {
|
|
computerCraft_registerExternalPeripheral.invoke(null, clazz, handler);
|
|
} catch (Exception e){
|
|
// It failed
|
|
}
|
|
}
|
|
}
|
|
|
|
// The functions below here are private, and are used to interface with the non-API ComputerCraft classes.
|
|
// Reflection is used here so you can develop your mod in MCP without decompiling ComputerCraft and including
|
|
// it in your solution.
|
|
|
|
private static void findCC()
|
|
{
|
|
if( !ccSearched ) {
|
|
try {
|
|
computerCraft = Class.forName( "dan200.ComputerCraft" );
|
|
computerCraft_registerExternalPeripheral = findCCMethod( "registerExternalPeripheral", new Class[] {
|
|
Class.class, IPeripheralHandler.class
|
|
} );
|
|
} catch( Exception e ) {
|
|
System.out.println("ComputerCraftAPI: ComputerCraft not found.");
|
|
} finally {
|
|
ccSearched = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static Method findCCMethod( String name, Class[] args )
|
|
{
|
|
try {
|
|
return computerCraft.getMethod( name, args );
|
|
|
|
} catch( NoSuchMethodException e ) {
|
|
System.out.println("ComputerCraftAPI: ComputerCraft method " + name + " not found.");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private static boolean ccSearched = false;
|
|
private static Class computerCraft = null;
|
|
private static Method computerCraft_registerExternalPeripheral = null;
|
|
}
|