|  | /** | 
|  | * 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.turtle.api; | 
|  | import java.lang.reflect.Method; | 
|  |  | 
|  | /** | 
|  | * The static entry point to the ComputerCraft Turtle Upgrade API. | 
|  | * Members in this class must be called after mod_CCTurtle has been initialised, | 
|  | * but may be called before it is fully loaded. | 
|  | */ | 
|  | public class TurtleAPI | 
|  | { | 
|  | /** | 
|  | * Registers a new turtle upgrade for use in ComputerCraft. After calling this, | 
|  | * users should be able to craft Turtles with your new upgrade. It is recommended to call | 
|  | * this during the load() method of your mod. | 
|  | * @throws Exception if you try to register an upgrade with an already used or reserved upgradeID | 
|  | * @see ITurtleUpgrade | 
|  | */ | 
|  | public static void registerUpgrade( ITurtleUpgrade upgrade ) | 
|  | { | 
|  | if( upgrade != null ) | 
|  | { | 
|  | findCCTurtle(); | 
|  | if( ccTurtle_registerTurtleUpgrade != null ) | 
|  | { | 
|  | try { | 
|  | ccTurtle_registerTurtleUpgrade.invoke( null, new Object[]{ upgrade } ); | 
|  | } 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 findCCTurtle() | 
|  | { | 
|  | if( !ccTurtleSearched ) { | 
|  | // Search for CCTurtle | 
|  | try { | 
|  | ccTurtle = Class.forName( "dan200.CCTurtle" ); | 
|  | ccTurtle_registerTurtleUpgrade = findCCTurtleMethod( "registerTurtleUpgrade", new Class[] { | 
|  | ITurtleUpgrade.class | 
|  | } ); | 
|  |  | 
|  | } catch( ClassNotFoundException e ) { | 
|  | System.out.println("ComputerCraftAPI: CCTurtle not found."); | 
|  |  | 
|  | } finally { | 
|  | ccTurtleSearched = true; | 
|  |  | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | private static Method findCCTurtleMethod( String name, Class[] args ) | 
|  | { | 
|  | try { | 
|  | return ccTurtle.getMethod( name, args ); | 
|  |  | 
|  | } catch( NoSuchMethodException e ) { | 
|  | System.out.println("ComputerCraftAPI: CCTurtle method " + name + " not found."); | 
|  | return null; | 
|  | } | 
|  | } | 
|  |  | 
|  | private static boolean ccTurtleSearched = false; | 
|  | private static Class ccTurtle = null; | 
|  | private static Method ccTurtle_registerTurtleUpgrade = null; | 
|  | } |