Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- right_edge_rules.lua
- -- IDs to match
- local IS_DIRT = { ["minecraft:dirt"]=true, ["minecraft:coarse_dirt"]=true }
- local IS_BRICKS = { ["minecraft:bricks"]=true }
- -- inventory
- local function selectAny()
- for i=1,16 do if turtle.getItemCount(i)>0 then turtle.select(i); return true end end
- return false
- end
- -- placement helpers
- local function placeDownIfAir()
- if turtle.detectDown() then return end
- if selectAny() then turtle.placeDown() end
- end
- local function placeBehindIfAir()
- turtle.turnRight(); turtle.turnRight()
- local ok,_ = turtle.inspect()
- if not ok then if selectAny() then turtle.place() end end
- turtle.turnRight(); turtle.turnRight()
- end
- -- motion
- local function safeForward()
- local tries=0
- while not turtle.forward() do
- if turtle.detect() then turtle.dig() else turtle.attack() end
- tries=tries+1; if tries>10 then return false end
- sleep(0.1)
- end
- return true
- end
- -- sensing
- local function aheadBlocked()
- return turtle.detect()
- end
- local function aboveIsBricks()
- local ok,up = turtle.inspectUp()
- return ok and IS_BRICKS[up.name] or false
- end
- -- right lane checks:
- -- 1) is the ground to the right a dirt tile?
- -- 2) is the space to the right at turtle level free to turn into?
- local function rightGroundIsDirt()
- turtle.turnRight()
- local ok,down = turtle.inspectDown()
- local isDirt = ok and IS_DIRT[down.name] or false
- turtle.turnLeft()
- return isDirt
- end
- local function rightSpaceIsAir()
- turtle.turnRight()
- local blocked = turtle.detect()
- turtle.turnLeft()
- return not blocked
- end
- -- main step applying your rules
- local function step()
- -- Rule 1: if the block ahead is not air, stop
- if aheadBlocked() then return false end
- local upBricks = aboveIsBricks()
- local rightDirt = rightGroundIsDirt()
- local rightAir = rightSpaceIsAir()
- -- Rule 2: if above is bricks OR right-ground is dirt
- if upBricks or rightDirt then
- placeDownIfAir()
- placeBehindIfAir()
- return safeForward()
- end
- -- Rule 3: if above and right are air -> behind, turn right, forward
- if (not upBricks) and rightAir then
- placeBehindIfAir()
- turtle.turnRight()
- return safeForward()
- end
- -- Fallback (interprets your unfinished line as "otherwise, go straight"):
- -- place below+behind, then forward.
- placeDownIfAir()
- placeBehindIfAir()
- return safeForward()
- end
- -- loop
- local function run()
- while true do
- if not step() then
- print("Halt.")
- break
- end
- end
- end
- run()
Advertisement
Add Comment
Please, Sign In to add comment