fix railbot
[waspsaliva.git] / clientmods / scaffold / railscaffold.lua
blob151efddf9eacb5a7c890c9a097ed5a1755861a6c
1 -- CC0/Unlicense Emilia/cora 2020
3 local ground = {
4 "mesecons_torch:redstoneblock"
7 local rails = {
8 "mcl_minecarts:golden_rail",
9 "mcl_minecarts:rail"
12 local tunnelmaterial = {
13 'mcl_core:glass_light_blue',
14 'mcl_core:cobble',
15 'mcl_nether:netherrack',
16 'mcl_core:dirt',
17 'mcl_core:andesite',
18 'mcl_core:diorite',
19 'mcl_core:granite',
20 "mesecons_torch:redstoneblock"
26 minetest.register_cheat("RailT",'Bots','scaffold_railtunnel')
27 local function checknode(pos)
28 local node = minetest.get_node_or_nil(pos)
29 if node and node.name ~="mesecons_torch:redstoneblock" and not node.name:find("_rail") then return true end
30 return false
31 end
32 local function dignodes(poss)
33 for k,v in pairs(poss) do
34 if checknode(v) then ws.dig(v) end
35 end
36 end
37 local function blockliquids()
38 local lp=ws.lp:get_pos()
39 local liquids={'mcl_core:lava_source','mcl_core:water_source','mcl_core:lava_flowing','mcl_core:water_flowing'}
40 local bn=minetest.find_nodes_near(lp, 5, liquids, true)
41 for kk,vv in pairs(bn) do
42 scaffold.place_if_needed(tunnelmaterial,vv)
43 end
44 end
46 local function invcheck(item)
47 if mintetest.switch_to_item(item) then return true end
48 refill.refill_at(ws.dircoord(1,1,0),'railkit')
49 end
51 ws.rg("RailBot","Bots", "scaffold_rails", function()
52 local lp = ws.dircoord(0,0,0)
53 local below = ws.dircoord(0,-1,0)
54 blockliquids()
55 local dpos= {
56 ws.dircoord(0,1,0),
57 ws.dircoord(0,0,0),
58 ws.dircoord(0,-1,0),
59 ws.dircoord(1,1,0),
60 ws.dircoord(1,0,0),
61 ws.dircoord(1,-1,0),
62 ws.dircoord(2,1,0),
63 ws.dircoord(2,0,0),
64 ws.dircoord(2,-1,0)
66 dignodes(dpos)
67 local bln=minetest.get_node_or_nil(below)
68 local lpn=minetest.get_node_or_nil(lp)
70 if bln and lpn and lpn.name == "mcl_minecarts:golden_rail_on" then
71 minetest.settings:set_bool('continuous_forward',true)
72 else
73 minetest.settings:set_bool('continuous_forward',false)
74 end
76 minetest.after("0",function()
77 local frpos=ws.dircoord(1,0,0)
78 local fgpos=ws.dircoord(1,-1,0)
79 local rpos=ws.dircoord(0,0,0)
80 local gpos=ws.dircoord(0,-1,0)
81 scaffold.place_if_needed(ground, gpos)
82 scaffold.place_if_needed(rails, rpos)
83 scaffold.place_if_needed(ground, fgpos)
84 scaffold.place_if_needed(rails, frpos)
86 end)
87 if minetest.settings:get_bool('scaffold_railtunnel') then
88 scaffold.place_if_needed(tunnelmaterial, ws.dircoord(0,2,0))
89 scaffold.place_if_needed(tunnelmaterial, ws.dircoord(0,1,1))
90 scaffold.place_if_needed(tunnelmaterial, ws.dircoord(0,0,1))
91 scaffold.place_if_needed(tunnelmaterial, ws.dircoord(0,1,-1))
92 scaffold.place_if_needed(tunnelmaterial, ws.dircoord(0,0,-1))
93 end
94 end,
95 function()--startfunc
97 end,function() --stopfunc
99 end,{'scaffold_ltbm','snapyaw','continuous_forward'})
101 scaffold.register_template_scaffold("LanternTBM", "scaffold_ltbm", function()
102 local dir=ws.getdir()
103 local lp=vector.round(ws.dircoord(0,0,0))
104 local pl=false
105 if dir == "north" or dir == "south" then
106 if lp.z % 8 < 1 then
107 pl=true
109 else
110 if lp.x % 8 < 1 then
111 pl=true
114 if pl then
115 local lpos=ws.dircoord(0,2,0)
116 local nd=minetest.get_node_or_nil(lpos)
117 if nd and nd.name ~= 'mcl_ocean:sea_lantern' then
118 ws.dig(lpos)
119 minetest.after("0",function() ws.place(lpos,'mcl_ocean:sea_lantern') end)
122 end)