robathome icon

Untitled

robathome | PRO | 11/04/25 08:39:07 PM UTC | 0 ⭐ | 556 👁️ | Never ⏰ | []
text |

2.52 KB

|

None

|

0 👍

/

0 👎

-- 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()
 

Comments