Advertisement
Blackhome

FluidProofer

Jan 7th, 2025 (edited)
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.34 KB | Gaming | 0 0
  1. --[[
  2.     status:         1: Digs up area,
  3.                     2: Digs up area + side walls
  4.                     3: Waterproof + side walls
  5.                     4: Waterproof + all walls
  6.                 else:  input settings
  7.  
  8.     dF:             length in forward direction
  9.     dR:             length in right direction
  10.     dU:             hight of area
  11. ]]
  12.  
  13. local status, dF, dR, dU = ...
  14. local mode = 0
  15. if status then
  16.     mode = tonumber(status)
  17. end
  18.  
  19. local move = require("move")
  20.  
  21.  
  22. information1 = [[
  23. This program digs up a specified area.
  24. You can select between three different modi:
  25.     1. Dig up area
  26.     2. Dig up area + build side walls
  27.     3. Dig up area + all walls
  28. Otherwise the default mode is selected.
  29.  
  30. Type something to continue]]
  31.  
  32. information2 = [[
  33. You can choose the mode in the first argument when starting the programm or by adjusting the settings.
  34.  
  35. The second to fourth argument define the size of the area:
  36.     second: forward length
  37.     third:  right width (side)
  38.     fourth: height
  39.  
  40. Type something to continue]]
  41.  
  42. local function getSettings()
  43.     local y_n_toBoolean = { ["y"] = true, ["n"] = false }
  44.     local numDecision = 1
  45.  
  46.     print("Type 1 to run the default code")
  47.     print("Type 2 to adjust the settings")
  48.     print("Type 3 to exit")
  49.     print("Type 4 for further information")
  50.     numDecision = tonumber(io.read())
  51.     print("")
  52.  
  53.     if numDecision == 4 then
  54.         print(information1)
  55.         io.read()
  56.         print(information2)
  57.         io.read()
  58.         print("Type 1 to run the default code")
  59.         print("Type 2 to adjust the settings")
  60.         print("Type 3 to exit")
  61.         numDecision = tonumber(io.read())
  62.     end
  63.  
  64.     if ((numDecision >= 3) or (numDecision < 1)) then
  65.         return 0, nil, nil, nil
  66.     elseif numDecision == 1 then
  67.         return 1, 50, 3, 3
  68.     else
  69.         print("")
  70.         print("Enter in which modus you want to dig up the area (1/2/3)")
  71.         local modus_A = tonumber(io.read())
  72.         print("")
  73.         print("Enter the length of the area")
  74.         local length_F = tonumber(io.read())
  75.         print("")
  76.         print("Enter the width of the area")
  77.         local width_R = tonumber(io.read())
  78.         print("")
  79.         print("Enter the height of the area")
  80.         local height_H = tonumber(io.read())
  81.  
  82.         return modus_A, length_F, width_R, height_H
  83.     end
  84. end
  85.  
  86. if mode == 0 then
  87.     mode, dF, dR, dU = getSettings()
  88. end
  89. if mode == 0 or mode > 4 then
  90.     print("Exiting the programm")
  91.     return
  92. end
  93.  
  94. local deltaForward = 50
  95. if dF then
  96.     deltaForward = tonumber(dF)
  97. end
  98.  
  99. local deltaRight = 3
  100. if dR then
  101.     deltaRight = tonumber(dR)
  102. end
  103.  
  104. local deltaUp = 3
  105. if dU then
  106.     deltaUp = tonumber(dU)
  107. end
  108.  
  109. print("Arguments")
  110. print(mode, deltaForward, deltaRight, deltaUp)
  111.  
  112. -- forward, right, up
  113. turtlePos = {0, 0, 0}
  114. turtleLastPos = {0, 0, 0}
  115. -- {1, 0} = forward,  {0, 1} = right,  {-1, 0} = back,  {0, -1} = left
  116. turtleVec = {1, 0}
  117. turtleLastVec = {1, 0}
  118.  
  119. local function loc_MoveForward(t_pos, t_direct)
  120.     move.Forward()
  121.     t_pos[1] = t_pos[1] + t_direct[1]
  122.     t_pos[2] = t_pos[2] + t_direct[2]
  123. end
  124. local function loc_MoveUp(t_pos, t_direct)
  125.     move.Up()
  126.     t_pos[3] = t_pos[3] + 1
  127. end
  128. local function loc_MoveDown(t_pos, t_direct)
  129.     move.Down()
  130.     t_pos[3] = t_pos[3] - 1
  131. end
  132. local function loc_TurnLeft(t_direct)
  133.     turtle.turnLeft()
  134.     t_direct[1] = t_direct[2]
  135.     t_direct[2] = -t_direct[1]
  136. end
  137. local function loc_TurnRight(t_direct)
  138.     turtle.turnRight()
  139.     t_direct[1] = -t_direct[2]
  140.     t_direct[2] = t_direct[1]
  141. end
  142.  
  143. local function selectItemSlot(itemName)
  144.     local itemA = turtle.getItemDetail()
  145.     if itemA then
  146.         if not(itemA.name == itemName) then
  147.             for i=1, 16, 1 do
  148.                 turtle.select(i)
  149.                 local itemB = turtle.getItemDetail()
  150.                 if itemB then
  151.                     if item.name == itemName then
  152.                         return true
  153.                     end
  154.                 end
  155.             end
  156.         end
  157.     else
  158.         for i=1, 16, 1 do
  159.             turtle.select(i)
  160.             local itemB = turtle.getItemDetail()
  161.             if itemB then
  162.                 if itemB.name == itemName then
  163.                     return true
  164.                 end
  165.             end
  166.         end
  167.     end
  168.     return false
  169. end
  170.  
  171. local function fluidProofForward()
  172.     selectItemSlot("minecraft:cobbled_deepslate")
  173.     if not (turtle.detect()) then
  174.         turtle.place()
  175.     end
  176. end
  177.  
  178. local function fluidProofUp()
  179.     selectItemSlot("minecraft:cobbled_deepslate")
  180.     if not (turtle.detectUp()) then
  181.         turtle.placeUp()
  182.     end
  183. end
  184.  
  185. local function fluidProofDown()
  186.     selectItemSlot("minecraft:cobbled_deepslate")
  187.     if not (turtle.detectDown()) then
  188.         turtle.placeDown()
  189.     end
  190. end
  191.  
  192. -- Digs up the given area
  193. function digArea(modus, lenForward, lenRight, lenUp)
  194.     local rowCnt = 1
  195.  
  196.     local bOutside = false
  197.     -- Go forward
  198.     for i=1, lenForward, 1 do
  199.         if modus == 1 then
  200.             if i % 2 == 1 then
  201.                 loc_TurnRight(turtleVec)
  202.             else
  203.                 loc_TurnLeft(turtleVec)
  204.             end
  205.         end
  206.         -- Go sideways
  207.         for j=1, lenRight, 1 do
  208.             -- Go up/down
  209.             for k=1, lenUp - 1, 1 do
  210.                 -- Odd rows (starting with 1) up, even rows down
  211.  
  212.  
  213.                 local condition_1 = (j == 1 and modus >= 2)
  214.                 local condition_2 = (j == lenRight and modus >= 2)
  215.                
  216.                 local condition_3 = (i == 1 and modus == 4)
  217.                 local condition_4 = (i == lenForward and modus == 4)
  218.  
  219.                 -- bottom or top of side wall: place block if there is none
  220.                 if (k == 1 and condition_1) then
  221.                     if i % 2 == 1 then
  222.                         loc_TurnLeft(turtleVec)
  223.                     else
  224.                         loc_TurnRight(turtleVec)
  225.                     end
  226.                     fluidProofForward()
  227.                 end
  228.                 if (k == 1 and condition_2) then
  229.                     fluidProofForward()
  230.                     if condition_3 then
  231.                         loc_TurnRight(turtleVec)
  232.                         fluidProofForward()
  233.                         loc_TurnLeft(turtleVec)
  234.                     end
  235.                 end
  236.                 -- place up/down block if k starts
  237.                 if (k == 1 and modus > 1) then
  238.                     if rowCnt % 2 == 1 then
  239.                         fluidProofDown()
  240.                     else
  241.                         fluidProofUp()
  242.                     end
  243.                     if condition_3 and (not(j == 1)) then
  244.                         loc_TurnRight(turtleVec)
  245.                         fluidProofForward()
  246.                         loc_TurnLeft(turtleVec)
  247.                     elseif condition_4 then
  248.                         if i % 2 == 1 then
  249.                             if j == 1 then
  250.                                 loc_TurnRight(turtleVec)
  251.                                 fluidProofForward()
  252.                                 loc_TurnLeft(turtleVec)
  253.                             else
  254.                                 loc_TurnLeft(turtleVec)
  255.                                 fluidProofForward()
  256.                                 loc_TurnRight(turtleVec)
  257.                             end
  258.                         else
  259.                             if j == 1 then
  260.                                 loc_TurnLeft(turtleVec)
  261.                                 fluidProofForward()
  262.                                 loc_TurnRight(turtleVec)
  263.                             else
  264.                                 loc_TurnRight(turtleVec)
  265.                                 fluidProofForward()
  266.                                 loc_TurnLeft(turtleVec)
  267.                             end
  268.                         end
  269.                     end
  270.                 end
  271.                 if rowCnt % 2 == 1 then
  272.                     loc_MoveUp(turtlePos, turtleVec)
  273.                 else
  274.                     loc_MoveDown(turtlePos, turtleVec)
  275.                 end
  276.  
  277.                 -- places block if on side
  278.                 if (condition_1 or condition_2) then
  279.                     fluidProofForward()
  280.                     if condition_3 and condition_1 then
  281.                         if k > 1 then
  282.                             loc_TurnLeft(turtleVec)
  283.                             fluidProofForward()
  284.                             loc_TurnRight(turtleVec)
  285.                         end
  286.                     end
  287.                     if condition_3 and condition_2 then
  288.                         loc_TurnRight(turtleVec)
  289.                         fluidProofForward()
  290.                         loc_TurnLeft(turtleVec)
  291.                     end
  292.                     if condition_4 and condition_1 then
  293.                         if i % 2 == 1 then
  294.                             loc_TurnRight(turtleVec)
  295.                             fluidProofForward()
  296.                             loc_TurnLeft(turtleVec)
  297.                         else
  298.                             loc_TurnLeft(turtleVec)
  299.                             fluidProofForward()
  300.                             loc_TurnRight(turtleVec)
  301.                         end
  302.                     end
  303.                     if condition_4 and condition_2 then
  304.                         if i % 2 == 1 then
  305.                             loc_TurnLeft(turtleVec)
  306.                             fluidProofForward()
  307.                             loc_TurnRight(turtleVec)
  308.                         else
  309.                             loc_TurnRight(turtleVec)
  310.                             fluidProofForward()
  311.                             loc_TurnLeft(turtleVec)
  312.                         end
  313.                     end
  314.                 elseif  condition_3 then
  315.                     loc_TurnRight(turtleVec)
  316.                     fluidProofForward()
  317.                     loc_TurnLeft(turtleVec)
  318.                 elseif condition_4 then
  319.                     if i % 2 == 1 then
  320.                         loc_TurnLeft(turtleVec)
  321.                         fluidProofForward()
  322.                         loc_TurnRight(turtleVec)
  323.                     else
  324.                         loc_TurnRight(turtleVec)
  325.                         fluidProofForward()
  326.                         loc_TurnLeft(turtleVec)
  327.                     end
  328.                 end
  329.  
  330.                 -- place up/down block if k starts
  331.                 if (k == lenUp - 1 and modus > 1) then
  332.                     if rowCnt % 2 == 1 then
  333.                         fluidProofUp()
  334.                     else
  335.                         fluidProofDown()
  336.                     end
  337.                 end
  338.                 -- turns back in right direction
  339.                 if (k == lenUp - 1 and condition_1) then
  340.                     loc_TurnLeft(turtleVec)
  341.                     loc_TurnLeft(turtleVec)
  342.                 end
  343.                
  344.             end
  345.             -- After odd planes (y-z plane) turn left, after even ones right
  346.             if j == lenRight then
  347.                 if i % 2 == 1 then
  348.                     loc_TurnLeft(turtleVec)
  349.                 else
  350.                     loc_TurnRight(turtleVec)
  351.                 end
  352.             end
  353.             if not (j == lenRight and i == lenForward) then
  354.                 loc_MoveForward(turtlePos, turtleVec)
  355.                 rowCnt = rowCnt + 1
  356.             end
  357.         end
  358.     end
  359. end
  360.  
  361. digArea(mode, deltaForward, deltaRight, deltaUp)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement