asweigart

Untitled

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