Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local storage
- local save
- local selected
- local ID_ITEM_PICKAXE = "minecraft:diamond_pickaxe"
- local ID_ITEM_ENDER_MODEM = "computercraft:wireless_modem_advanced"
- local api = {}
- local function getItemName(id)
- local name = turtle.getItemDetail(id)
- if name == nil then
- return nil
- end
- return name.name
- end
- local toggleItemSwitchToPickaxeHook = function()
- local slot = storage.slot
- ThreadManager.blockExecutionOfOtherThreads()
- if slot ~= nil and getItemName(slot + 1) == ID_ITEM_PICKAXE then
- local selectedSlot = turtle.getSelectedSlot()
- turtle.select(slot + 1)
- if storage.side == "right" then
- turtle.equipRight()
- else
- turtle.equipLeft()
- end
- printDebug("switched to pickaxe", getItemName(slot + 1))
- turtle.select(selectedSlot)
- end
- ThreadManager.unblockExecutionOfOtherThreads()
- end
- local toggleItemSwitchToModemHook = function()
- local slot = storage.slot
- ThreadManager.blockExecutionOfOtherThreads()
- if slot ~= nil and getItemName(slot + 1) == ID_ITEM_ENDER_MODEM then
- local selectedSlot = turtle.getSelectedSlot()
- turtle.select(slot + 1)
- if storage.side == "right" then
- turtle.equipRight()
- else
- turtle.equipLeft()
- end
- printDebug("switched to modem", getItemName(slot + 1))
- turtle.select(selectedSlot)
- end
- ThreadManager.unblockExecutionOfOtherThreads()
- end
- installPreExecutionHook(turtle, "dig", "lib:toggleItem", toggleItemSwitchToPickaxeHook)
- installPreExecutionHook(turtle, "digUp", "lib:toggleItem", toggleItemSwitchToPickaxeHook)
- installPreExecutionHook(turtle, "digDown", "lib:toggleItem", toggleItemSwitchToPickaxeHook)
- installPreExecutionHook(rednet, "open", "lib:toggleItem", toggleItemSwitchToModemHook)
- installPreExecutionHook(rednet, "isOpen", "lib:toggleItem", toggleItemSwitchToModemHook)
- installPreExecutionHook(rednet, "receive", "lib:toggleItem", toggleItemSwitchToModemHook)
- installPreExecutionHook(rednet, "send", "lib:toggleItem", toggleItemSwitchToModemHook)
- installPreExecutionHook(rednet, "broadcast", "lib:toggleItem", toggleItemSwitchToModemHook)
- installPreExecutionHook(peripheral, "find", "lib:toggleItem", toggleItemSwitchToModemHook)
- installPreExecutionHook(gps, "locate", "lib:toggleItem", toggleItemSwitchToModemHook)
- function api.configureItemSwitch(slot, side, idTool, idModem)
- if not idTool then
- idTool = ID_ITEM_PICKAXE
- end
- if not idModem then
- idModem = ID_ITEM_ENDER_MODEM
- end
- if side ~= "left" and side ~= "right" then
- error("invalid side, must be either 'left' or 'right'")
- end
- if storage.slot then
- invokeHook("unprotectSlot", storage.slot, "lib:toggleItem")
- end
- invokeHook("protectSlot", slot, "lib:toggleItem")
- storage.slot = slot
- storage.side = side
- storage.idTool = idTool
- storage.idModem = idModem
- save()
- end
- function api.getItemSwitchSlot()
- return storage.slot
- end
- function api.getItemSwitchSide()
- return storage.side
- end
- function api.getIdTool()
- return storage.idTool
- end
- function api.getIdModem()
- return storage.idModem
- end
- return {
- name = 'toggleItem',
- api = api,
- onInitStorage = function(_storage, _save)
- storage = _storage
- save = _save
- end,
- dependencies = {
- '7q32mZDG' -- protect slot
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement