Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ---@field ItemNames table
- ItemNames = {
- torch = "minecraft:torch",
- cobble = "minecraft:cobblestone",
- chest = "minecraft:chest",
- lavaBucket = "lava_bucket",
- lava = "lava"
- }
- ItemTags = {
- logs = "minecraft:logs",
- saplings = "minecraft:saplings"
- }
- ---@class TaskModule
- TaskModule = Class()
- ---@param states table
- function TaskModule:initStates(states)
- if self.states == nil then self.states = {} end
- for key,state in pairs(states) do
- self.states[key] = {name = tostring(key), properties = state}
- end
- end
- ---@param newState table
- function TaskModule:changeState(newState)
- print(("Last state = %s, new State = %s"):format(self.state.name,newState.name))
- self.state = newState
- end
- ---@param ... table
- function TaskModule:debug(...)
- print(string.format(...))
- end
- ---@param ... table
- function TaskModule:debugSparse(...)
- if self.updateLoopIx % self.debugTicks == 0 then
- self:debug(...)
- end
- end
- ---@param item string
- function TaskModule:fillGround(item)
- if item and not turtle.detectDown() then
- if self:selectItemSlot(item) then
- turtle.placeDown()
- end
- end
- end
- ---@param fillGroundItem string
- function TaskModule:moveForward(fillGroundItem)
- self:fillGround(fillGroundItem)
- while not turtle.forward() do
- turtle.dig()
- end
- end
- ---@param fillGroundItem string
- function TaskModule:moveForwardAndDigUp(fillGroundItem)
- turtle.digUp()
- self:moveForward(fillGroundItem)
- end
- ---@param fillGroundItem string
- function TaskModule:moveDown(fillGroundItem)
- while not turtle.down() do
- turtle.digDown()
- end
- self:fillGround(fillGroundItem)
- end
- function TaskModule:moveUp()
- while not turtle.up() do
- turtle.digUp()
- end
- end
- ---@param fillGroundItem string
- function TaskModule:moveBack(fillGroundItem)
- self:fillGround(fillGroundItem)
- if turtle.back() then
- return
- end
- turtle.turnLeft()
- turtle.turnLeft()
- turtle.dig()
- turtle.turnLeft()
- turtle.turnLeft()
- end
- ---@param fillGroundItem string
- function TaskModule:moveLeft(fillGroundItem)
- turtle.turnLeft()
- self:moveForward(fillGroundItem)
- end
- ---@param fillGroundItem string
- function TaskModule:moveRight(fillGroundItem)
- turtle.turnRight()
- self:moveForward(fillGroundItem)
- end
- function TaskModule:place()
- while not turtle.place() do
- turtle.dig()
- end
- end
- ---@param itemName string
- ---@return boolean Item placed ?
- function TaskModule:placeItem(itemName)
- if self:selectItemSlot(itemName) then
- self:place()
- return true
- end
- return false
- end
- ---@return boolean Chest placed ?
- function TaskModule:placeChest()
- self:moveForward(ItemNames.cobble)
- turtle.digUp()
- turtle.back()
- return self:placeItem(ItemNames.chest)
- end
- function TaskModule:rotate180()
- turtle.turnRight()
- turtle.turnRight()
- end
- ---@param itemName string
- ---@return boolean Item selected
- function TaskModule:selectItemSlot(itemName)
- local ix = 0
- for i=1,16 do
- local detail = turtle.getItemDetail(i)
- if detail and detail.name == itemName then
- ix = i
- break
- end
- end
- if ix>0 then
- turtle.select(ix)
- return true
- end
- print(("No item with name %s found."):format(itemName))
- return false
- end
- ---@param tagName string
- function TaskModule:selectItemSlotByTag(tagName)
- local ix = 0
- for i=1,16 do
- local detail = turtle.getItemDetail(i,true)
- if detail and detail.tags and detail.tags[tagName] then
- ix = i
- break
- end
- end
- if ix>0 then
- turtle.select(ix)
- return true
- end
- print(("No item with tag %s found."):format(tagName))
- return false
- end
- ---@return boolean Torch selected
- function TaskModule:selectTorchSlot()
- return self:selectItemSlot(ItemNames.torch)
- end
- ---@return boolean Cobble selected
- function TaskModule:selectCobbleSlot()
- return self:selectItemSlot(ItemNames.cobble)
- end
- function TaskModule:placeTorchRight()
- turtle.turnRight()
- if self:selectTorchSlot() then
- self:place()
- end
- turtle.turnLeft()
- end
- ---@param ix number
- function TaskModule:dropSlot(ix)
- turtle.select(ix)
- turtle.drop()
- end
- ---@param itemName string
- function TaskModule:dropItem(itemName)
- local hasDropped = false
- for i=1,16 do
- local itemDetail = turtle.getItemDetail(i)
- if itemDetail and itemDetail.name == itemName then
- turtle.select(i)
- hasDropped = turtle.drop()
- end
- end
- return hasDropped
- end
- ---@param itemTag string
- function TaskModule:dropItemByTag(itemTag)
- local hasDropped = false
- for i=1,16 do
- local itemDetail = turtle.getItemDetail(i,true)
- if itemDetail and itemDetail.tags and itemDetail.tags[itemTag] then
- turtle.select(i)
- hasDropped = turtle.drop()
- end
- end
- return hasDropped
- end
- ---@return boolean Fuel level okay ?
- function TaskModule:isFuelLevelOkay()
- return turtle.getFuelLevel() >= turtle.getFuelLimit()/4
- end
- ---@return boolean Inventory full ?
- function TaskModule:isInventoryFull()
- return turtle.getItemCount(16) > 1
- end
- function TaskModule:refuel()
- while(not self:isFuelLevelOkay()) do
- for i=1,16 do
- turtle.select(i)
- local oldFillLevel = turtle.getFuelLevel()
- local ok, err = turtle.refuel()
- if ok then
- local newFillLevel = turtle.getFuelLevel()
- print(("Refuelled %d, current level is %d"):format(newFillLevel - oldFillLevel, newFillLevel))
- end
- end
- end
- end
- function TaskModule:createStairCaseStepDown()
- self:moveDown(ItemNames.cobble)
- self:moveForward()
- turtle.digUp()
- end
- function TaskModule:createStairCaseDown()
- local blocksMoved = 0
- local torchCounter = 4
- while true do
- if not self:isFuelLevelOkay() then
- return
- end
- self:createStairCaseStepDown()
- blocksMoved = blocksMoved + 1
- if blocksMoved % torchCounter == 0 then
- self:placeTorchRight()
- end
- end
- end
Add Comment
Please, Sign In to add comment