From fccf7d2f29af6c89c042a0dde85794cf6ab8d068 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Wed, 10 Oct 2012 21:48:55 -0400 Subject: [PATCH] Update to UE 9.1 Need to test still since it looks like my forge it out data i can't test just yet --- .../basicpipes/LTanks/TileEntityLTank.java | 8 +- .../basicpipes/conductors/TileEntityPipe.java | 2 +- .../basicpipes/conductors/TileEntityRod.java | 6 +- .../dan200/computer/api/IComputerAccess.java | 131 ++++++++++++++++++ .../dan200/computer/api/IPeripheral.java | 103 ++++++++++++++ .../steampower/boiler/TileEntityBoiler.java | 2 +- .../steampower/burner/TileEntityFireBox.java | 2 +- .../steampower/turbine/TileEntityGen.java | 4 +- .../turbine/TileEntitySteamPiston.java | 4 +- 9 files changed, 249 insertions(+), 13 deletions(-) create mode 100644 src/common/dan200/computer/api/IComputerAccess.java create mode 100644 src/common/dan200/computer/api/IPeripheral.java diff --git a/src/common/basicpipes/LTanks/TileEntityLTank.java b/src/common/basicpipes/LTanks/TileEntityLTank.java index c9245978b..547a144ec 100644 --- a/src/common/basicpipes/LTanks/TileEntityLTank.java +++ b/src/common/basicpipes/LTanks/TileEntityLTank.java @@ -180,13 +180,13 @@ public int presureOutput(Liquid type, ForgeDirection side) { @Override -public void handlePacketData(NetworkManager network, +public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { + ByteArrayDataInput data) { try { - this.type = Liquid.getLiquid(dataStream.readInt()); - this.LStored = dataStream.readInt(); + this.type = Liquid.getLiquid(data.readInt()); + this.LStored = data.readInt(); }catch(Exception e) { e.printStackTrace(); diff --git a/src/common/basicpipes/conductors/TileEntityPipe.java b/src/common/basicpipes/conductors/TileEntityPipe.java index 10ca4e98c..66855c559 100644 --- a/src/common/basicpipes/conductors/TileEntityPipe.java +++ b/src/common/basicpipes/conductors/TileEntityPipe.java @@ -245,7 +245,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke @Override - public void handlePacketData(NetworkManager network, + public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput data) { try diff --git a/src/common/basicpipes/conductors/TileEntityRod.java b/src/common/basicpipes/conductors/TileEntityRod.java index 451903d42..ca588e9e4 100644 --- a/src/common/basicpipes/conductors/TileEntityRod.java +++ b/src/common/basicpipes/conductors/TileEntityRod.java @@ -112,12 +112,12 @@ public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechan } @Override - public void handlePacketData(NetworkManager network, + public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { + ByteArrayDataInput data) { try { - this.force = dataStream.readInt(); + this.force = data.readInt(); }catch(Exception e) { e.printStackTrace(); diff --git a/src/common/dan200/computer/api/IComputerAccess.java b/src/common/dan200/computer/api/IComputerAccess.java new file mode 100644 index 000000000..52a034e22 --- /dev/null +++ b/src/common/dan200/computer/api/IComputerAccess.java @@ -0,0 +1,131 @@ + +package dan200.computer.api; + +/** + * The interface passed to peripherals by computers or turtles, providing methods + * that they can call. This should not be implemented by your classes. Do not interact + * with computers except via this interface. + */ +public interface IComputerAccess +{ + /** + * Creates a new numbered directory in a subPath of the users game save, and return that number. To be used with mountSaveDir.
+ * For example: n = createNewSaveDir( "computer/cdrom" ), will create a new + * numbered folder in the "computer/cdrom" subdirectory of the users save file, and return that number. + * mountSaveDir( "computer/rom", n ) could then be used to mount that folder onto the computers directory + * structure, and the value n could be saved out and used again in future to give the peripheral + * persistant storage. + * @param subPath A relative file path from the users world save, where the directory should be located. + * @return The numeric represenation of the name of the folder created. Will be positive. + * @see #mountSaveDir(String, String, int, boolean, long) + */ + public int createNewSaveDir( String subPath ); + + /** + * Equivalent to mountSaveDir( String desiredLocation, String subPath, int id, boolean readOnly, long spaceLimit ) with no space limit. + * Mounts created with this method will have unlimited capacity. + * @see #mountSaveDir(String, String, int, boolean, long) + */ + public String mountSaveDir( String desiredLocation, String subPath, int id, boolean readOnly ); + + /** + * Mounts a directory into the computers file system, from a real directory a subPath of the users game save, + * with a numerical name. To be used with createNewSaveDir.
+ * For example: n = createNewSaveDir( "computer/cdrom" ), will create a new + * numbered folder in the "computer/cdrom" subdirectory of the users save file, and return that number. + * mountSaveDir( "computer/rom", n ) could then be used to mount that folder onto the computers directory + * structure, and the value n can be saved out by the peripheral and used again, to give the peripheral + * persistant storage.
+ * When a directory is mounted, it will appear in the computers file system, and the user will be + * able to use file operation to read from and write to the directory (unless readOnly, then only writes will be allowed). + * @param desiredLocation The desired location in the computers file system where you would like the directory to appear. + * If this location already exists, a number will be appended until a free name is found, and the + * actual location will be returned. eg: "cdrom" can become "cdrom2" if two peripherals attempt to + * mount "cdrom", or a "cdrom" folder already exists. + * @param subPath The real relative file path from the users world save, where the directory to mount can be located. + * @param id The numerical name of the folder to mount from the subPath: ex: mountSaveDir( "cdrom", "computer/cdrom", 7 ) + * will mount the directory "computer/cdrom/7". Use createNewSaveDir to obtain a unique directory id. + * @param readOnly Whether the computer will be disallowed from making changes to the mounted directory and modifing or creating files therin. + * @param spaceLimit The size limit of the mount, in bytes. + * @return The location in the computers file system where the directory was mounted. This may differ from "desiredLocation", so the + * return value should be kept track of so the folder can be unmounted later. + * @see #createNewSaveDir(String) + * @see #mountFixedDir(String, String, boolean, long) + * @see #unmount(String) + */ + public String mountSaveDir( String desiredLocation, String subPath, int id, boolean readOnly, long spaceLimit ); + + /** + * Equivalent to mountFixedDir( String desiredLocation, String path, boolean readOnly, long spaceLimit ) with no space limit. + * Mounts created with this method will have unlimited capacity. + * @see #mountFixedDir(String, String, boolean, long) + */ + public String mountFixedDir( String desiredLocation, String path, boolean readOnly ); + + /** + * Mounts a directory into the computers file system, from a real directory in the Minecraft install folder.
+ * For example: mountFixedDir( "stuff", "mods/mymod/lua/stuff", true ), will mount the "lua/stuff" folder from + * your mod's directory into the computers filesystem at the location "stuff", with readonly permission, giving the + * computer access to those files.
+ * When a directory is mounted, it will appear in the computers file system, and the user will be + * able to use file operation to read from and write to the directory (unless readOnly, then only writes will be allowed).
+ * mountFixedDir can also be used to mount files, for example: mountFixedDir( "rom/apis/myapi", "mods/mymod/lua/myapi.lua", true ) can + * be used to have the peripheral install an API onto the computer it attaches to. + * @param desiredLocation The desired location in the computers file system where you would like the directory to appear. + * If this location already exists, a number will be appended until a free name is found, and the + * actual location will be returned. eg: "cdrom" can become "cdrom2" if two peripherals attempt to + * mount "cdrom", or a "cdrom" folder already exists. + * @param subPath The real relative file path from the minecraft install root, where the directory to mount can be located. + * @param readOnly Whether the computer will be disallowed from making changes to the mounted directory and modifing or creating files therin. + * @param spaceLimit The size limit of the mount, in bytes. + * @return The location in the computers file system where the directory was mounted. This may differ from "desiredLocation", so the + * return value should be kept track of so the folder can be unmounted later. + * @see #mountSaveDir(String, String, int, boolean, long) + * @see #unmount(String) + */ + public String mountFixedDir( String desiredLocation, String path, boolean readOnly, long spaceLimit ); + + /** + * Unmounts a directory previously mounted onto the computers file system by mountSaveDir or mountFixedDir.
+ * When a directory is unmounted, it will disappear from the computers file system, and the user will no longer be able to + * access it. All directories mounted by a mountFixedDir or mountSaveDir are automatically unmounted when the peripheral + * is attached if they have not been explicitly unmounted. + * @param location The desired location in the computers file system of the directory to unmount. + * This must be the location of a directory previously mounted by mountFixedDir() or mountSaveDir(), as + * indicated by their return value. + * @see #mountSaveDir(String, String, int, boolean, long) + * @see #mountFixedDir(String, String, boolean, long) + */ + public void unmount( String location ); + + /** + * Returns the numerical ID of this computer.
+ * This is the same number obtained by calling os.getComputerID() or running the "id" program from lua, + * and is guarunteed unique. This number will be positive. + * @return The identifier. + */ + public int getID(); + + /** + * Equivalent to queueEvent( String event, Object[] arguments ) with an empty arguments array. + * @see #queueEvent(String, Object[]) + */ + public void queueEvent( String event ); + + /** + * Causes an event to be raised on this computer, which the computer can respond to by calling + * os.pullEvent(). This can be used to notify the computer when things happen in the world or to + * this peripheral. + * @param event A string identifying the type of event that has occurred, this will be + * returned as the first value from os.pullEvent(). It is recommended that you + * you choose a name that is unique, and recognisable as originating from your + * peripheral. eg: If your peripheral type is "button", a suitable event would be + * "button_pressed". + * @param arguments In addition to a name, you may pass an array of extra arguments to the event, that will + * be supplied as extra return values to os.pullEvent(). Objects in the array will be converted + * to lua data types in the same fashion as the return values of IPeripheral.callMethod().
+ * You may supply null to indicate that no arguments are to be supplied. + * @see IPeripheral#callMethod + */ + public void queueEvent( String event, Object[] arguments ); +} diff --git a/src/common/dan200/computer/api/IPeripheral.java b/src/common/dan200/computer/api/IPeripheral.java new file mode 100644 index 000000000..8dfeb8dce --- /dev/null +++ b/src/common/dan200/computer/api/IPeripheral.java @@ -0,0 +1,103 @@ + +package dan200.computer.api; + +/** + * The interface that defines a peripheral. This should be implemented by the + * TileEntity of any block that you wish to be interacted with by + * computer or turtle. + */ +public interface IPeripheral +{ + /** + * Should return a string that uniquely identifies this type of peripheral. + * This can be queried from lua by calling peripheral.getType() + * @return A string identifying the type of peripheral. + */ + public String getType(); + + /** + * Should return an array of strings that identify the methods that this + * peripheral exposes to Lua. This will be called once before each attachment, + * and should not change when called multiple times. + * @return An array of strings representing method names. + * @see #callMethod + */ + public String[] getMethodNames(); + + /** + * This is called when a lua program on an attached computer calls peripheral.call() with + * one of the methods exposed by getMethodNames().
+ *
+ * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe + * when interacting with minecraft objects. + * @param computer The interface to the computer that is making the call. Remember that multiple + * computers can be attached to a peripheral at once. + * @param method An integer identifying which of the methods from getMethodNames() the computer + * wishes to call. The integer indicates the index into the getMethodNames() table + * that corresponds to the string passed into peripheral.call() + * @param arguments An array of objects, representing the arguments passed into peripheral.call().
+ * Lua values of type "string" will be represented by Object type String.
+ * Lua values of type "number" will be represented by Object type Double.
+ * Lua values of type "boolean" will be represented by Object type Boolean.
+ * Lua values of any other type will be represented by a null object.
+ * This array will be empty if no arguments are passed. + * @return An array of objects, representing values you wish to return to the lua program.
+ * Integers, Doubles, Floats, Strings, Booleans and null be converted to their corresponding lua type.
+ * All other types will be converted to nil.
+ * You may return null to indicate no values should be returned. + * @throws Exception If you throw any exception from this function, a lua error will be raised with the + * same message as your exception. Use this to throw appropriate errors if the wrong + * arguments are supplied to your method. + * @see #getMethodNames + */ + public Object[] callMethod( IComputerAccess computer, int method, Object[] arguments ) throws Exception; + + /** + * Is called before the computer attempts to attach to the peripheral, and should return whether to allow + * the attachment. Use this to restrict the number of computers that can attach, or to limit attachments to + * certain world directions.
+ * If true is returned, attach() will be called shortly afterwards, and the computer will be able to make method calls. + * If false is returned, attach() will not be called, and the peripheral will be invisible to the computer. + * @param side The world direction (0=bottom, 1=top, etc) that the computer lies relative to the peripheral. + * @return Whether to allow the attachment, as a boolean. + * @see #attach + */ + public boolean canAttachToSide( int side ); + + /** + * Is called when canAttachToSide has returned true, and a computer is attaching to the peripheral. + * This will occur when a peripheral is placed next to an active computer, when a computer is turned on next to a peripheral, + * or when a turtle travels into a square next to a peripheral. + * Between calls to attach() and detach(), the attached computer can make method calls on the peripheral using peripheral.call(). + * This method can be used to keep track of which computers are attached to the peripheral, or to take action when attachment + * occurs.
+ *
+ * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe + * when interacting with minecraft objects. + * @param computer The interface to the computer that is being attached. Remember that multiple + * computers can be attached to a peripheral at once. + * @param computerSide A string indicating which "side" of the computer the peripheral is attaching, + * relative to the computers orientation. This value will be one of "top", "bottom", + * "left", "right", "front" or "back". This can be used to uniquely identify the + * peripheral when raising events or returning values to the computer. + * @see #canAttachToSide + * @see #detach + */ + public void attach( IComputerAccess computer, String computerSide ); + + /** + * Is called when a computer is detaching from the peripheral. + * This will occur when a computer shuts down, when the peripheral is removed while attached to computers, + * or when a turtle moves away from a square attached to a peripheral. + * This method can be used to keep track of which computers are attached to the peripheral, or to take action when detachment + * occurs.
+ *
+ * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe + * when interacting with minecraft objects. + * @param computer The interface to the computer that is being detached. Remember that multiple + * computers can be attached to a peripheral at once. + * @see #canAttachToSide + * @see #detach + */ + public void detach( IComputerAccess computer ); +} diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index c0c481076..8af9e00b4 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -64,7 +64,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv } @Override - public void handlePacketData(NetworkManager network, + public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { try diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/src/common/steampower/burner/TileEntityFireBox.java index 6389dd848..8da2df027 100644 --- a/src/common/steampower/burner/TileEntityFireBox.java +++ b/src/common/steampower/burner/TileEntityFireBox.java @@ -191,7 +191,7 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei } @Override - public void handlePacketData(NetworkManager network, + public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { try diff --git a/src/common/steampower/turbine/TileEntityGen.java b/src/common/steampower/turbine/TileEntityGen.java index 7e04f8576..e45650300 100644 --- a/src/common/steampower/turbine/TileEntityGen.java +++ b/src/common/steampower/turbine/TileEntityGen.java @@ -99,9 +99,9 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, super.updateEntity(); } @Override - public void handlePacketData(NetworkManager network, + public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { + ByteArrayDataInput data) { // TODO Auto-generated method stub } diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index 74f6d2866..f77868a46 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -276,7 +276,9 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR return false; } @Override - public void handlePacketData(NetworkManager network,Packet250CustomPayload packet, EntityPlayer player,ByteArrayDataInput dataStream) { + public void handlePacketData(NetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { try { this.steam = dataStream.readInt();