Blitz_9100

Computercraft - Supports API

Jan 6th, 2016
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.83 KB | None | 0 0
  1. local registeredCheckedFeatures = {}
  2.  
  3. registerCheckedFeatured = function(checkedFeatureName, checkedFeatureFunc)
  4.     if checkedFeatureName == nil or type(checkedFeatureName) ~= "string" or string.len(checkedFeatureName) == 0 or checkedFeatureFunc == nil or type(checkedFeatureFunc) ~= "function" or registeredCheckedFeatures[checkedFeatureName] ~= nil then
  5.         return false
  6.     end
  7.    
  8.     registeredCheckedFeatures[checkedFeatureName] = checkedFeatureFunc
  9.    
  10.     return true
  11. end
  12.  
  13. unregisterCheckedFeature = function(checkedFeatureName)
  14.     if checkedFeatureName == nil or type(checkedFeatureName) ~= "string" or string.len(checkedFeatureName) == 0 or registeredCheckedFeatures[checkedFeatureName] == nil then   
  15.         return false
  16.     end
  17.    
  18.     registeredCheckedFeatures[checkedFeatureName] = nil
  19.    
  20.     return true
  21. end
  22.  
  23. local checkPeripheralSupport = function(requiredPeripheralName)
  24.     for key, value in pairs(peripheral.getNames()) do
  25.         if peripheral.getType(value) == requiredPeripheralName then
  26.             return true
  27.         end
  28.     end
  29.    
  30.     return false
  31. end
  32.  
  33. features = function(requiredFeatures)
  34.     if requiredFeatures == nil or type(requiredFeatures) ~= "table" then
  35.         return false
  36.     end
  37.    
  38.     local hasRequiredFeatures = true
  39.     local missingRequiredFeatures = {}
  40.    
  41.     for requiredFeatureIndex, requiredFeatureName in pairs(requiredFeatures) do
  42.         if registeredCheckedFeatures[requiredFeatureName] ~= nil then
  43.             if not registeredCheckedFeatures[requiredFeatureName]() then
  44.                 hasRequiredFeatures = false
  45.                 missingRequiredFeatures[table.getn(missingRequiredFeatures) + 1] = requiredFeatureName
  46.             end
  47.         else
  48.             if not checkPeripheralSupport(requiredFeatureName) then
  49.                 hasRequiredFeatures = false
  50.                 missingRequiredFeatures[table.getn(missingRequiredFeatures) + 1] = requiredFeatureName
  51.             end
  52.         end
  53.     end
  54.    
  55.     return hasRequiredFeatures, missingRequiredFeatures
  56. end
  57.  
  58. displayMissingRequirements = function(missingRequiredFeatures)
  59.     print("You are missing the following required features to run this program. Please add the missing features and restart the program.\n")
  60.  
  61.     for missingRequiredFeatureIndex, missingRequiredFeature in pairs(missingRequiredFeatures) do
  62.         print(missingRequiredFeature)
  63.     end
  64. end
  65.  
  66. local hasTurtleSupport = function()
  67.     return turtle ~= nil
  68. end
  69.  
  70. local getFreeTurtleInventorySlot = function()
  71.     local freeTurtleInventorySlot = -1
  72.    
  73.     if hasTurtleSupport() then
  74.         for turtleInventorySlot = 1, 16, 1 do
  75.             if turtle.getItemCount(turtleInventorySlot) == 0 then
  76.                 freeTurtleInventorySlot = turtleInventorySlot
  77.                 break
  78.             end
  79.         end
  80.     end
  81.    
  82.     return freeTurtleInventorySlot
  83. end
  84.  
  85. local hasItemInTurtleInventorySlot = function(turtleInventorySlot, requiredItemName)
  86.     if turtleInventorySlot == nil or type(turtleInventorySlot) ~= "number" or turtleInventorySlot <= 0 or turtleInventorySlot >= 17 or requiredItemName == nil or type(requiredItemName) ~= "string" or string.len(requiredItemName) == 0 then
  87.         return false
  88.     end
  89.  
  90.     if hasTurtleSupport() then
  91.         local turtleInventoryItemDetails = turtle.getItemDetail(turtleInventorySlot)
  92.        
  93.         if turtleInventoryItemDetails then
  94.             return string.lower(turtleInventoryItemDetails.name) == string.lower(requiredItemName)
  95.         end
  96.     end
  97.    
  98.     return false
  99. end
  100.  
  101. local hasItemInTurtleEquipmentSide = function(turtleEquipSide, requiredItemName)
  102.     if turtleEquipSide == nil or type(turtleEquipSide) ~= "string" or string.len(turtleEquipSide) == 0 or requiredItemName == nil or type(requiredItemName) ~= "string" or string.len(requiredItemName) == 0 then
  103.         return false
  104.     end
  105.    
  106.     if hasTurtleSupport() then
  107.         local freeTurtleInventorySlot = getFreeTurtleInventorySlot()
  108.        
  109.         if freeTurtleInventorySlot >= 1 and freeTurtleInventorySlot <= 16 then
  110.             local previousTurtleInventorySlot = turtle.getSelectedSlot()
  111.             local foundRequiredItem = false
  112.             turtle.select(freeTurtleInventorySlot)
  113.            
  114.             if string.lower(turtleEquipSide) == "left" then
  115.                 turtle.equipLeft()
  116.                 foundRequiredItem = hasItemInTurtleInventorySlot(freeTurtleInventorySlot, requiredItemName)
  117.                 turtle.equipLeft()
  118.             elseif string.lower(turtleEquipSide) == "right" then
  119.                 turtle.equipRight()
  120.                 foundRequiredItem = hasItemInTurtleInventorySlot(freeTurtleInventorySlot, requiredItemName)
  121.                 turtle.equipRight()
  122.             end
  123.            
  124.             turtle.select(previousTurtleInventorySlot)
  125.             return foundRequiredItem
  126.         end
  127.     end
  128.    
  129.     return false
  130. end
  131.  
  132. local hasTurtleEquippedItem = function(requiredItemName)
  133.     return hasItemInTurtleEquipmentSide("right", requiredItemName) or hasItemInTurtleEquipmentSide("left", requiredItemName)
  134. end
  135.  
  136. local hasMeleeSupport = function()
  137.     return hasTurtleEquippedItem("minecraft:diamond_sword")
  138. end
  139.  
  140. local hasMiningSupport = function()
  141.     return hasTurtleEquippedItem("minecraft:diamond_pickaxe")
  142. end
  143.  
  144. local hasDiggingSupport = function()
  145.     return hasTurtleEquippedItem("minecraft:diamond_shovel")
  146. end
  147.  
  148. local hasFellingSupport = function()
  149.     return hasTurtleEquippedItem("minecraft:diamond_axe")
  150. end
  151.  
  152. local hasFarmingSupport = function()
  153.     return hasTurtleEquippedItem("minecraft:diamond_hoe")
  154. end
  155.  
  156. local hasCraftingSupport = function()
  157.     return hasTurtleSupport() and turtle.craft ~= nil
  158. end
  159.  
  160. local hasWirelessModemSupport = function()
  161.     for key, value in pairs(peripheral.getNames()) do
  162.         if peripheral.getType(value) == "modem" then
  163.             local modem = peripheral.wrap(value)
  164.             if modem.isWireless() then
  165.                 return true
  166.             end
  167.         end
  168.     end
  169.    
  170.     return hasTurtleEquippedItem("computercraft:cc-peripheral")
  171. end
  172.  
  173. local hasWiredModemSupport = function()
  174.     for key, value in pairs(peripheral.getNames()) do
  175.         if peripheral.getType(value) == "modem" then
  176.             local modem = peripheral.wrap(value)
  177.             if not modem.isWireless() then
  178.                 return true
  179.             end
  180.         end
  181.     end
  182.  
  183.     return false
  184. end
  185.  
  186. local hasAdvancedSupport = function()
  187.     return term.isColor()
  188. end
  189.  
  190. local hasMonitorSupport = function()
  191.     return checkPeripheralSupport("monitor")
  192. end
  193.  
  194. local hasModemSupport = function()
  195.     return checkPeripheralSupport("modem")
  196. end
  197.  
  198. local hasPrinterSupport = function()
  199.     return checkPeripheralSupport("printer")
  200. end
  201.  
  202. local hasDriveSupport = function()
  203.     return checkPeripheralSupport("drive")
  204. end
  205.  
  206. registerCheckedFeatured("turtle", hasTurtleSupport)
  207. registerCheckedFeatured("melee", hasMeleeSupport)
  208. registerCheckedFeatured("mining", hasMiningSupport)
  209. registerCheckedFeatured("digging", hasDiggingSupport)
  210. registerCheckedFeatured("felling", hasFellingSupport)
  211. registerCheckedFeatured("farming", hasFarmingSupport)
  212. registerCheckedFeatured("crafty", hasCraftingSupport)
  213. registerCheckedFeatured("wireless", hasWirelessModemSupport)
  214. registerCheckedFeatured("wired", hasWiredModemSupport)
  215. registerCheckedFeatured("advanced", hasAdvancedSupport)
  216. registerCheckedFeatured("monitor", hasMonitorSupport)
  217. registerCheckedFeatured("modem", hasModemSupport)
  218. registerCheckedFeatured("printer", hasPrinterSupport)
  219. registerCheckedFeatured("drive", hasDriveSupport)
Advertisement
Add Comment
Please, Sign In to add comment