Advertisement
Ichabod2032

Minecraft - Item Recharging Script Redux

May 29th, 2013
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --2013 Ichabod_Clay (Ichabod2032)
  2. --Item charger script for Minecraft.
  3. --This script uses an Interactive Sorter to take an item (ideally from an ender chest)
  4. -- and send it off to charge in a charging station (batbox, MFE, MFSU).
  5. --The way I have it set up is the Sorter scans the chest every so often and, if the
  6. -- proper item is found, takes the item and sends it to a charge station through a
  7. -- Buildcraft pipe. This allows you to fill the chest up with crap, but only send out
  8. -- what needs to be charged!
  9. --The return trip is handled by an Autarchic AND Gate that is set to extract the item
  10. -- from the charge station once it is full. Set 1 setting to energy pulse when an item is
  11. -- in inventory, and the other setting set to energy pulse when charging a fully charged
  12. -- item. Easy Peasy!
  13.  
  14. --Redux Update: Added the ability to test if an item sent to charge was returned, therefor allowing
  15. -- multiple users to use the same ender chest at the same time. The test is handled by a gate on the
  16. -- return pipe that emits a redstone signal if an item is traversing. The redstone signal is picked up
  17. -- by the computer to let it know that the item is charged.
  18. --If you're confused at all by this explanation (and I know you are, cause I am too), please refer to
  19. -- this picture: http://imgur.com/ejP2juQ . This is my current setup that works without issue (knock on wood).
  20.  
  21. tArgs = {...};
  22. if #tArgs ~= 1 then
  23.   print("Usage: <name of this program> <side sorter is attached to>");
  24.   return;
  25. end
  26.  
  27. local sorter = peripheral.wrap(tArgs[1]);
  28.  
  29. --Redux Update: The programs scans the ender chest using ids from this table.
  30. --Feel free to add more ids for more chargeable items!
  31. local items =
  32. {
  33.   jetpack   = 30209,
  34.   A_jetpack = 30481,
  35.   chest     = 30177,
  36.   pants     = 30176,
  37.   helm      = 30178,
  38.   boots     = 30175,
  39.   Q_Pants   = 30172
  40. };
  41.  
  42. --Small helper table to make working with cardinal directions easier.
  43. --5/29/13
  44. --East and West values have been swapped from what the interactive sorter's wiki says.
  45. -- Unsure what is causing the values to be incorrect, as the same issues with East and
  46. -- West is present when using Factorization's Routers.
  47. local direction =
  48. {
  49.   down  = 0,
  50.   up    = 1,
  51.   north = 2,
  52.   south = 3,
  53.   west  = 4,
  54.   east  = 5
  55. }
  56.  
  57. --Helper function to find the actual item ID and
  58. -- meta value from a UUID.
  59. local function getID(uuid)
  60.   id = 0;
  61.   meta = 0;
  62.  
  63.   if uuid > 32768 then
  64.     id = uuid % 32768;
  65.     meta = (uuid - id) / 32768;
  66.   else
  67.     id = uuid;
  68.     meta = 0;
  69.   end
  70.  
  71.   return id, meta;
  72. end
  73.  
  74. --Simple helper function. Returns true, uuid and meta of item if found,
  75. -- false otherwise.
  76. local function findJetpack(direction)
  77.   local inventory = sorter.list(direction);
  78.   for uuid, count in pairs(inventory) do
  79.     local id, meta = getID(uuid);
  80.     for name, itemID in pairs(items) do
  81.       if (id == itemID) and (meta ~= 1) then
  82.         return true, uuid, meta, name;
  83.       end
  84.     end
  85.   end
  86.   return false;
  87. end
  88.  
  89. --Helper function to find a charged item. Gets the redstone output from a
  90. -- gate on the return pipe coming from the MFE/MFSU
  91. --*Make sure to fill in the required parameter before using!*
  92. -- change EDITME!!! to the side the redstone signal will enter the computer.
  93. -- Make sure to use quotation marks as well
  94. -- eg: rs.getInput("back") or rs.getInput("left")
  95. local function isItemCharged()
  96.   return rs.getInput(EDITME!!!);
  97. end
  98.  
  99.  
  100. --*Make sure to fill in the required parameters before using!*
  101. --The sorter's 'extract' function has the following parameters:
  102. -- sorter.extract(from, uuid, to, amount)
  103. --Replace 'from' and 'to' with the correct directions, ideally using
  104. -- the table provided at the top of this script.
  105. -- eg: sorter.extract(direction.north, uuid, direction.down, 1)
  106.  
  107. --Main loop start! WOO!
  108. while true do
  109.   local jetpackFound, uuid, meta, name = findJetpack(CHANGEME!!!);
  110.  
  111.   if jetpackFound then
  112.     sorter.extract(CHANGEME!!!, uuid, CHANGEME!!!, 1);
  113.     print("Day: "..os.day().." Time: "..os.time());
  114.     print(name.." sent to charge");
  115.     while true do
  116.       if isItemCharged() then
  117.         print(name.." charged");
  118.         break;
  119.       else
  120.         sleep(0.5);
  121.       end
  122.     end
  123.   end
  124.  
  125.   sleep(10);
  126. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement