Advertisement
asweigart

Untitled

Feb 15th, 2016
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.81 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. LAVA_ENERGY = 1000
  7. COAL_ENERGY = 80
  8. COAL_COKE_ENERGY = 160
  9. WOOD_ENERGY = 15
  10. 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 -- the minimum fuel level, not percentage
  31. if #tArgs > 0 then
  32. minLevel = ((tonumber(tArgs[1])) / 100) * turtle.getFuelLimit()
  33. if turtle.getFuelLevel() >= minLevel then
  34. print('Minimum already reached!')
  35. return
  36. end
  37. else
  38. minLevel = turtle.getFuelLimit()
  39. end
  40.  
  41. print('DEBUG: minLevel=',minLevel)
  42.  
  43.  
  44. -- remember which slot was selected so we can set it back to that at the end
  45. local originalSelectedSlot = turtle.getSelectedSlot()
  46.  
  47. -- function to get amount of fuel needed to reach minimum level
  48. local function fuelNeeded()
  49. return minLevel - turtle.getFuelLevel()
  50. end
  51.  
  52.  
  53. -- main program
  54. local startingLevel = turtle.getFuelLevel()
  55. local totalConsumed = 0
  56.  
  57. -- find out if there's lava, and use it first
  58. local lavaAt = nil
  59. for slot=1,16 do
  60. if fuelNeeded() > LAVA_ENERGY then
  61. turtle.select(slot)
  62. itemData = turtle.getItemDetail()
  63. if itemData ~= nil and itemData['name'] == 'minecraft:lava_bucket' then
  64. print('DEBUG found lava at ', slot)
  65. turtle.refuel(1) -- consume the lava
  66. end
  67. end
  68. -- really wish Lua had a continue statement that I could put here, no big deal though
  69. end
  70.  
  71.  
  72. -- go through inventory and keep fueling until minimum level is met
  73. for slot=1,16 do
  74. turtle.select(slot)
  75. itemData = turtle.getItemDetail()
  76. if itemData ~= nil then
  77. print('DEBUG item at ', slot)
  78. local energyGain
  79. if itemData['name'] == 'ImmersiveEngineering:material' then
  80. energyGain = COAL_COKE_ENERGY
  81. elseif itemData['name'] == 'minecraft:coal' then
  82. energyGain = COAL_ENERGY
  83. elseif string.find(itemData['name'], 'sapling') ~= nil then
  84. energyGain = SAPLING_ENERGY
  85. elseif string.find(itemData['name'], 'planks') ~= nil or itemData['name'] == 'minecraft:log' then
  86. energyGain = WOOD_ENERGY
  87. else
  88. energyGain = 15 -- default guess
  89. end
  90.  
  91. -- if it turns out this item isn't burnable, it won't affect our calculations
  92.  
  93. if fuelNeeded() > energyGain then
  94. local numConsumed = math.floor(fuelNeeded() / energyGain)
  95. numConsumed = math.min(turtle.getItemCount(), numConsumed)
  96. local refuelStatus = turtle.refuel(numConsumed)
  97. if refuelStatus ~= 0 then
  98. totalConsumed = totalConsumed + numConsumed
  99. end
  100. print('DEBUG refueld slot #', slot)
  101. end
  102. end
  103. end
  104.  
  105.  
  106. -- copied this from my fuel.lua script:
  107. io.write(tostring(turtle.getFuelLevel()))
  108. io.write(' / ')
  109. io.write(tostring(turtle.getFuelLimit()))
  110. io.write(' ')
  111. local amt = 100 * turtle.getFuelLevel() / turtle.getFuelLimit()
  112. print(tostring(amt) .. '%')
  113.  
  114. -- display usage stats
  115. local totalRefueled = turtle.getFuelLevel() - startingLevel
  116. print('Used ' .. tostring(totalConsumed) .. ' items for ' .. tostring(totalRefueled) .. ' fuel.')
  117.  
  118. -- reset back to original selected slot
  119. turtle.select(originalSelectedSlot)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement