Advertisement
asweigart

Untitled

Feb 10th, 2016
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. -- This is a ComputerCraft script that makes a turtle consume *all* of its fuel (if needed), instead of just one block like the 'refuel' program.
  2. -- Written by al@inventwithpython.com
  3.  
  4. -- constants for energy amounts of each fuel type
  5. -- (these must change if ComputerCraft changes it, which is unlikely)
  6. local LAVA_ENERGY = 1000
  7. local COAL_ENERGY = 80
  8. local COAL_COKE_ENERGY = 160
  9. local WOOD_ENERGY = 15
  10. local SAPLING_ENERGY = 5
  11.  
  12. -- check if "unlimited fuel" is set on this server
  13. if turtle.getFuelLimit() == 'unlimited' then
  14. print('Turtles are set to "unlimited" fuel already!')
  15. return
  16. end
  17.  
  18. -- check for valid command line arguments
  19. local tArgs = {...}
  20. if #tArgs > 0 and (tonumber(tArgs[1]) == nil) then
  21. print('Usage: refuelall [min percent]')
  22. print(' Refuels using all inventory up to')
  23. print(' the minimum percent level, which is')
  24. print(' 100% by default. Smart enough to')
  25. print(' not waste fuel. Uses lava first.')
  26. return
  27. end
  28.  
  29. -- get minimum fuel level from command line argument
  30. local minLevel
  31. if #tArgs > 0 then
  32. minLevel = ((tonumber(tArgs[1])) / 100) * turtle.getFuelLimit()
  33. else
  34. minLevel = turtle.getFuelLimit()
  35. end
  36.  
  37. print('DEBUG: minLevel=',minLevel)
  38.  
  39. -- function to get amount of fuel needed to reach minimum level
  40. local function fuelNeeded()
  41. return minLevel - turtle.getFuelLevel()
  42. end
  43.  
  44.  
  45. -- main program
  46. local startingLevel = turtle.getFuelLevel()
  47. local totalConsumed = 0
  48.  
  49. -- find out if there's lava, and use it first
  50. local lavaAt = nil
  51. for slot=1,16 do
  52. if fuelNeeded() > LAVA_ENERGY then
  53. turtle.select(slot)
  54. itemData = turtle.getItemDetail()
  55. if itemData ~= nil and itemData['name'] == 'minecraft:lava_bucket' then
  56. print('DEBUG found lava at ', slot)
  57. turtle.refuel(1) -- consume the lava
  58. end
  59. end
  60. -- really wish Lua had a continue statement that I could put here, no big deal though
  61. end
  62.  
  63.  
  64. -- go through inventory and keep fueling until minimum level is met
  65. for slot=1,16 do
  66. turtle.select(slot)
  67. itemData = turtle.getItemDetail()
  68. if itemData ~= nil then
  69. print('DEBUG item at ', slot)
  70. local energyGain
  71. if itemData['name'] == 'ImmersiveEngineering:material' then
  72. energyGain = COAL_COKE_ENERGY
  73. elseif itemData['name'] == 'minecraft:coal' then
  74. energyGain = COAL_ENERGY
  75. elseif string.find(itemData['name'], 'sapling') ~= nil then
  76. energyGain = SAPLING_ENERGY
  77. elseif string.find(itemData['name'], 'planks') ~= nil or itemData['name'] == 'minecraft:log' then
  78. energyGain = WOOD_ENERGY
  79. else
  80. energyGain = 15 -- default guess
  81. end
  82.  
  83. -- if it turns out this item isn't burnable, it won't affect our calculations
  84.  
  85. if fuelNeeded() > energyGain then
  86. local numConsumed = math.floor(fuelNeeded() / energyGain)
  87. numConsumed = math.min(turtle.getItem, numConsumed)
  88. turtle.refuel(numConsumed)
  89. totalConsumed = totalConsumed + numConsumed
  90. print('DEBUG refueld slot #', slot)
  91. end
  92. end
  93. end
  94.  
  95.  
  96. -- copied this from my fuel.lua script:
  97. io.write(tostring(turtle.getFuelLevel()))
  98. io.write(' / ')
  99. io.write(tostring(turtle.getFuelLimit()))
  100. io.write(' ')
  101. local amt = 100 * turtle.getFuelLevel() / turtle.getFuelLimit()
  102. print(tostring(amt) .. '%')
  103.  
  104.  
  105. local totalRefueled = turtle.getFuelLevel() - startingLevel
  106. print('Used ' .. tostring(totalConsumed) .. ' items for ' .. tostring(totalRefueled) .. ' fuel.')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement