Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local registeredCheckedFeatures = {}
- registerCheckedFeatured = function(checkedFeatureName, checkedFeatureFunc)
- if checkedFeatureName == nil or type(checkedFeatureName) ~= "string" or string.len(checkedFeatureName) == 0 or checkedFeatureFunc == nil or type(checkedFeatureFunc) ~= "function" or registeredCheckedFeatures[checkedFeatureName] ~= nil then
- return false
- end
- registeredCheckedFeatures[checkedFeatureName] = checkedFeatureFunc
- return true
- end
- unregisterCheckedFeature = function(checkedFeatureName)
- if checkedFeatureName == nil or type(checkedFeatureName) ~= "string" or string.len(checkedFeatureName) == 0 or registeredCheckedFeatures[checkedFeatureName] == nil then
- return false
- end
- registeredCheckedFeatures[checkedFeatureName] = nil
- return true
- end
- local checkPeripheralSupport = function(requiredPeripheralName)
- for key, value in pairs(peripheral.getNames()) do
- if peripheral.getType(value) == requiredPeripheralName then
- return true
- end
- end
- return false
- end
- features = function(requiredFeatures)
- if requiredFeatures == nil or type(requiredFeatures) ~= "table" then
- return false
- end
- local hasRequiredFeatures = true
- local missingRequiredFeatures = {}
- for requiredFeatureIndex, requiredFeatureName in pairs(requiredFeatures) do
- if registeredCheckedFeatures[requiredFeatureName] ~= nil then
- if not registeredCheckedFeatures[requiredFeatureName]() then
- hasRequiredFeatures = false
- missingRequiredFeatures[table.getn(missingRequiredFeatures) + 1] = requiredFeatureName
- end
- else
- if not checkPeripheralSupport(requiredFeatureName) then
- hasRequiredFeatures = false
- missingRequiredFeatures[table.getn(missingRequiredFeatures) + 1] = requiredFeatureName
- end
- end
- end
- return hasRequiredFeatures, missingRequiredFeatures
- end
- displayMissingRequirements = function(missingRequiredFeatures)
- print("You are missing the following required features to run this program. Please add the missing features and restart the program.\n")
- for missingRequiredFeatureIndex, missingRequiredFeature in pairs(missingRequiredFeatures) do
- print(missingRequiredFeature)
- end
- end
- local hasTurtleSupport = function()
- return turtle ~= nil
- end
- local getFreeTurtleInventorySlot = function()
- local freeTurtleInventorySlot = -1
- if hasTurtleSupport() then
- for turtleInventorySlot = 1, 16, 1 do
- if turtle.getItemCount(turtleInventorySlot) == 0 then
- freeTurtleInventorySlot = turtleInventorySlot
- break
- end
- end
- end
- return freeTurtleInventorySlot
- end
- local hasItemInTurtleInventorySlot = function(turtleInventorySlot, requiredItemName)
- 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
- return false
- end
- if hasTurtleSupport() then
- local turtleInventoryItemDetails = turtle.getItemDetail(turtleInventorySlot)
- if turtleInventoryItemDetails then
- return string.lower(turtleInventoryItemDetails.name) == string.lower(requiredItemName)
- end
- end
- return false
- end
- local hasItemInTurtleEquipmentSide = function(turtleEquipSide, requiredItemName)
- 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
- return false
- end
- if hasTurtleSupport() then
- local freeTurtleInventorySlot = getFreeTurtleInventorySlot()
- if freeTurtleInventorySlot >= 1 and freeTurtleInventorySlot <= 16 then
- local previousTurtleInventorySlot = turtle.getSelectedSlot()
- local foundRequiredItem = false
- turtle.select(freeTurtleInventorySlot)
- if string.lower(turtleEquipSide) == "left" then
- turtle.equipLeft()
- foundRequiredItem = hasItemInTurtleInventorySlot(freeTurtleInventorySlot, requiredItemName)
- turtle.equipLeft()
- elseif string.lower(turtleEquipSide) == "right" then
- turtle.equipRight()
- foundRequiredItem = hasItemInTurtleInventorySlot(freeTurtleInventorySlot, requiredItemName)
- turtle.equipRight()
- end
- turtle.select(previousTurtleInventorySlot)
- return foundRequiredItem
- end
- end
- return false
- end
- local hasTurtleEquippedItem = function(requiredItemName)
- return hasItemInTurtleEquipmentSide("right", requiredItemName) or hasItemInTurtleEquipmentSide("left", requiredItemName)
- end
- local hasMeleeSupport = function()
- return hasTurtleEquippedItem("minecraft:diamond_sword")
- end
- local hasMiningSupport = function()
- return hasTurtleEquippedItem("minecraft:diamond_pickaxe")
- end
- local hasDiggingSupport = function()
- return hasTurtleEquippedItem("minecraft:diamond_shovel")
- end
- local hasFellingSupport = function()
- return hasTurtleEquippedItem("minecraft:diamond_axe")
- end
- local hasFarmingSupport = function()
- return hasTurtleEquippedItem("minecraft:diamond_hoe")
- end
- local hasCraftingSupport = function()
- return hasTurtleSupport() and turtle.craft ~= nil
- end
- local hasWirelessModemSupport = function()
- for key, value in pairs(peripheral.getNames()) do
- if peripheral.getType(value) == "modem" then
- local modem = peripheral.wrap(value)
- if modem.isWireless() then
- return true
- end
- end
- end
- return hasTurtleEquippedItem("computercraft:cc-peripheral")
- end
- local hasWiredModemSupport = function()
- for key, value in pairs(peripheral.getNames()) do
- if peripheral.getType(value) == "modem" then
- local modem = peripheral.wrap(value)
- if not modem.isWireless() then
- return true
- end
- end
- end
- return false
- end
- local hasAdvancedSupport = function()
- return term.isColor()
- end
- local hasMonitorSupport = function()
- return checkPeripheralSupport("monitor")
- end
- local hasModemSupport = function()
- return checkPeripheralSupport("modem")
- end
- local hasPrinterSupport = function()
- return checkPeripheralSupport("printer")
- end
- local hasDriveSupport = function()
- return checkPeripheralSupport("drive")
- end
- registerCheckedFeatured("turtle", hasTurtleSupport)
- registerCheckedFeatured("melee", hasMeleeSupport)
- registerCheckedFeatured("mining", hasMiningSupport)
- registerCheckedFeatured("digging", hasDiggingSupport)
- registerCheckedFeatured("felling", hasFellingSupport)
- registerCheckedFeatured("farming", hasFarmingSupport)
- registerCheckedFeatured("crafty", hasCraftingSupport)
- registerCheckedFeatured("wireless", hasWirelessModemSupport)
- registerCheckedFeatured("wired", hasWiredModemSupport)
- registerCheckedFeatured("advanced", hasAdvancedSupport)
- registerCheckedFeatured("monitor", hasMonitorSupport)
- registerCheckedFeatured("modem", hasModemSupport)
- registerCheckedFeatured("printer", hasPrinterSupport)
- registerCheckedFeatured("drive", hasDriveSupport)
Advertisement
Add Comment
Please, Sign In to add comment