beginning of well pumping and forceloading
parent
ac2b0f1b13
commit
c38e4ad1f6
|
@ -3,7 +3,7 @@
|
||||||
-- pipes
|
-- pipes
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "bitumen:pipe 6",
|
output = "bitumen:pipe 12",
|
||||||
recipe = {
|
recipe = {
|
||||||
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
|
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
|
||||||
{"", "", ""},
|
{"", "", ""},
|
||||||
|
@ -28,7 +28,7 @@ minetest.register_craft({
|
||||||
-- drilling
|
-- drilling
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'bitumen:drill_pipe 6',
|
output = 'bitumen:drill_pipe 12',
|
||||||
recipe = {
|
recipe = {
|
||||||
{'', 'default:steel_ingot', ''},
|
{'', 'default:steel_ingot', ''},
|
||||||
{'', 'default:steel_ingot', ''},
|
{'', 'default:steel_ingot', ''},
|
||||||
|
|
|
@ -460,7 +460,7 @@ minetest.register_node("bitumen:intake", {
|
||||||
if found_net == 0 then
|
if found_net == 0 then
|
||||||
local hash = minetest.hash_node_position(pos)
|
local hash = minetest.hash_node_position(pos)
|
||||||
local net = new_network(pos)
|
local net = new_network(pos)
|
||||||
net.in_pressure = pos.z
|
net.in_pressure = pos.y
|
||||||
net.inputs[hash] = 1
|
net.inputs[hash] = 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
331
wells.lua
331
wells.lua
|
@ -127,6 +127,106 @@ minetest.register_node("bitumen:well_siphon", {
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
local function pushpos(t, v, p)
|
||||||
|
local h = minetest.hash_node_position(p)
|
||||||
|
if v[h] == nil then
|
||||||
|
table.insert(t, p)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function find_blob_extent(startpos)
|
||||||
|
|
||||||
|
local blob = {}
|
||||||
|
local stack = {}
|
||||||
|
local visited = {}
|
||||||
|
local future = {}
|
||||||
|
-- local shell = {}
|
||||||
|
|
||||||
|
|
||||||
|
local node = minetest.get_node(startpos)
|
||||||
|
if node.name == "air" then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local bname = node.name
|
||||||
|
|
||||||
|
table.insert(stack, startpos)
|
||||||
|
|
||||||
|
while #stack > 0 do
|
||||||
|
|
||||||
|
local p = table.remove(stack)
|
||||||
|
local ph = minetest.hash_node_position(p)
|
||||||
|
|
||||||
|
--print("visiting "..minetest.pos_to_string(p))
|
||||||
|
if p.x < startpos.x - 50
|
||||||
|
or p.x > startpos.x + 50
|
||||||
|
or p.y < startpos.y - 50
|
||||||
|
or p.y > startpos.y + 50
|
||||||
|
or p.z < startpos.z - 50
|
||||||
|
or p.z > startpos.z + 50
|
||||||
|
then
|
||||||
|
print("got to extent")
|
||||||
|
visited[ph] = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if visited[ph] == nil then
|
||||||
|
|
||||||
|
print("visiting "..minetest.pos_to_string(p))
|
||||||
|
|
||||||
|
local pn = minetest.get_node(p)
|
||||||
|
if pn then
|
||||||
|
if pn.name == "bitumen:crude_oil" or pn.name == "bitumen:crude_oil_full" then
|
||||||
|
blob[ph] = {x=p.x, y=p.y, z=p.z}
|
||||||
|
|
||||||
|
pushpos(stack, visited, {x=p.x+1, y=p.y, z=p.z})
|
||||||
|
pushpos(stack, visited, {x=p.x-1, y=p.y, z=p.z})
|
||||||
|
pushpos(stack, visited, {x=p.x, y=p.y+1, z=p.z})
|
||||||
|
pushpos(stack, visited, {x=p.x, y=p.y-1, z=p.z})
|
||||||
|
pushpos(stack, visited, {x=p.x, y=p.y, z=p.z+1})
|
||||||
|
pushpos(stack, visited, {x=p.x, y=p.y, z=p.z-1})
|
||||||
|
|
||||||
|
visited[ph] = 1
|
||||||
|
elseif pn.name == "ignore" then
|
||||||
|
if minetest.forceload_block(p, false) then
|
||||||
|
print("forceload successful: ".. minetest.pos_to_string(p))
|
||||||
|
else
|
||||||
|
print("forceload failed: ".. minetest.pos_to_string(p))
|
||||||
|
end
|
||||||
|
|
||||||
|
table.insert(future, p)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
print("failed to get node")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
for _,p in pairs(blob) do
|
||||||
|
print("blob "..minetest.pos_to_string(p))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- for n,v in pairs(shell) do
|
||||||
|
-- print("shell "..n.." - ".. v)
|
||||||
|
-- end
|
||||||
|
|
||||||
|
|
||||||
|
return blob--, shell
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
local function forceload_deposit(pos)
|
||||||
|
-- minetest.emerge_area(dp, {x=dp.x, y=dp.y - 20, z=dp.z})
|
||||||
|
find_blob_extent(pos)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
local function drill(pos)
|
local function drill(pos)
|
||||||
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
@ -206,6 +306,8 @@ minetest.register_node("bitumen:drill_controls", {
|
||||||
cmd = "retract"
|
cmd = "retract"
|
||||||
elseif fields.stop then
|
elseif fields.stop then
|
||||||
cmd = "stop"
|
cmd = "stop"
|
||||||
|
elseif fields.pump then
|
||||||
|
cmd = "pump"
|
||||||
elseif fields.up then
|
elseif fields.up then
|
||||||
cmd = "up"
|
cmd = "up"
|
||||||
elseif fields.down then
|
elseif fields.down then
|
||||||
|
@ -400,7 +502,7 @@ minetest.register_node("bitumen:drill_rig", {
|
||||||
bitumen.magic.set_nodes(pos, "bitumen:drill_pipe_chest", {pipe_chest_delta})
|
bitumen.magic.set_nodes(pos, "bitumen:drill_pipe_chest", {pipe_chest_delta})
|
||||||
bitumen.magic.set_nodes(pos, "bitumen:drill_mud_injector", {mud_injector_delta})
|
bitumen.magic.set_nodes(pos, "bitumen:drill_mud_injector", {mud_injector_delta})
|
||||||
bitumen.magic.set_nodes(pos, "bitumen:drill_mud_extractor", {mud_extractor_delta})
|
bitumen.magic.set_nodes(pos, "bitumen:drill_mud_extractor", {mud_extractor_delta})
|
||||||
|
|
||||||
local function add(p, d)
|
local function add(p, d)
|
||||||
return {x=p.x + d[1], y=p.y + d[2], z=p.z + d[3]}
|
return {x=p.x + d[1], y=p.y + d[2], z=p.z + d[3]}
|
||||||
end
|
end
|
||||||
|
@ -413,6 +515,26 @@ minetest.register_node("bitumen:drill_rig", {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
local pcmeta = minetest.get_meta(altnodes.pipe_chest)
|
||||||
|
local pcinv = pcmeta:get_inventory()
|
||||||
|
pcinv:set_size("main", 8*32)
|
||||||
|
|
||||||
|
|
||||||
|
local pipe_chest_formspec =
|
||||||
|
"size[8,9;]" ..
|
||||||
|
default.gui_bg ..
|
||||||
|
default.gui_bg_img ..
|
||||||
|
default.gui_slots ..
|
||||||
|
"list[context;main;0,0.3;8,4;]" ..
|
||||||
|
"list[current_player;main;0,4.85;8,1;]" ..
|
||||||
|
"list[current_player;main;0,6.08;8,3;8]" ..
|
||||||
|
"listring[context;main]" ..
|
||||||
|
"listring[current_player;main]" ..
|
||||||
|
default.get_hotbar_bg(0, 4.85)
|
||||||
|
|
||||||
|
pcmeta:set_string("formspec", pipe_chest_formspec)
|
||||||
|
|
||||||
|
|
||||||
local state = {
|
local state = {
|
||||||
state = "idle",
|
state = "idle",
|
||||||
command = "none",
|
command = "none",
|
||||||
|
@ -440,29 +562,40 @@ local function get_controls_formspec(state)
|
||||||
|
|
||||||
local up_down = ""
|
local up_down = ""
|
||||||
if state.state == "idle" then
|
if state.state == "idle" then
|
||||||
up_down = "button[5,3;6,1;up;Up One]" ..
|
up_down = "button[5,3;4,1;up;Up One]" ..
|
||||||
"button[5,4;6,1;down;Down One]"
|
"button[5,4;4,1;down;Down One]"
|
||||||
end
|
end
|
||||||
|
|
||||||
local stop = ""
|
local stop = ""
|
||||||
if state.state ~= "idle" then
|
if state.state ~= "idle" then
|
||||||
stop = "button[5,0;5,1;stop;Stop]"
|
stop = "button[5,0;4,1;stop;Stop]"
|
||||||
end
|
end
|
||||||
|
|
||||||
local drill = ""
|
local drill = ""
|
||||||
if state.state ~= "drilling" then
|
if state.state ~= "drilling" then
|
||||||
drill = "button[5,1;5,1;drill;Drill]"
|
drill = "button[5,1;4,1;drill;Drill]"
|
||||||
end
|
end
|
||||||
|
|
||||||
local retract= ""
|
local retract= ""
|
||||||
if state.state ~= "retracting" then
|
if state.state ~= "retracting" then
|
||||||
retract = "button[5,2;6,1;retract;Retract Pipe]"
|
retract = "button[5,2;4,1;retract;Retract Pipe]"
|
||||||
|
end
|
||||||
|
|
||||||
|
local forceload= ""
|
||||||
|
if state.state ~= "forceload" then
|
||||||
|
forceload = "button[5,3;4,1;forceload;Forceload]"
|
||||||
|
end
|
||||||
|
|
||||||
|
local pump= ""
|
||||||
|
if state.state ~= "pump" then
|
||||||
|
pump = "button[5,4;4,1;pump;Pump]"
|
||||||
end
|
end
|
||||||
|
|
||||||
local state_strings = {
|
local state_strings = {
|
||||||
drilling = "Drilling",
|
drilling = "Drilling",
|
||||||
retracting = "Retracting",
|
retracting = "Retracting",
|
||||||
idle = "Idle",
|
idle = "Idle",
|
||||||
|
pump = "Pumping",
|
||||||
}
|
}
|
||||||
|
|
||||||
local state_str = state_strings[state.state] or "None"
|
local state_str = state_strings[state.state] or "None"
|
||||||
|
@ -480,6 +613,8 @@ local function get_controls_formspec(state)
|
||||||
drill ..
|
drill ..
|
||||||
retract ..
|
retract ..
|
||||||
up_down ..
|
up_down ..
|
||||||
|
forceload ..
|
||||||
|
pump ..
|
||||||
""
|
""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -533,6 +668,21 @@ local function retract(pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function pump_oil(pos)
|
||||||
|
|
||||||
|
local dp = check_drill_stack(pos)
|
||||||
|
|
||||||
|
local n = minetest.get_node(dp)
|
||||||
|
|
||||||
|
if n.name == "bitumen:crude_oil" then
|
||||||
|
minetest.set_node(dp, {name="air"})
|
||||||
|
|
||||||
|
pos.x = pos.x + 1
|
||||||
|
minetest.set_node(pos, {name="bitumen:crude_oil"})
|
||||||
|
minetest.set_node_level(pos, 64)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
nodenames = {"bitumen:drill_rig"},
|
nodenames = {"bitumen:drill_rig"},
|
||||||
interval = 2,
|
interval = 2,
|
||||||
|
@ -562,6 +712,7 @@ minetest.register_abm({
|
||||||
elseif state.command == "stop" then
|
elseif state.command == "stop" then
|
||||||
state.state = "idle"
|
state.state = "idle"
|
||||||
elseif state.command == "pump" then
|
elseif state.command == "pump" then
|
||||||
|
print("set to pump")
|
||||||
state.state = "pump"
|
state.state = "pump"
|
||||||
elseif state.command == "explore" then
|
elseif state.command == "explore" then
|
||||||
state.state = "idle"
|
state.state = "idle"
|
||||||
|
@ -570,6 +721,7 @@ minetest.register_abm({
|
||||||
elseif state.command == "forceload" then
|
elseif state.command == "forceload" then
|
||||||
state.state = "idle"
|
state.state = "idle"
|
||||||
|
|
||||||
|
forceload_deposit({x=pos.x, y = state.depth - 1, z=pos.z})
|
||||||
-- do forceload
|
-- do forceload
|
||||||
elseif state.command == "un_forceload" then
|
elseif state.command == "un_forceload" then
|
||||||
state.state = "idle"
|
state.state = "idle"
|
||||||
|
@ -595,15 +747,26 @@ minetest.register_abm({
|
||||||
|
|
||||||
|
|
||||||
if state.state == "drilling" or inch == -1 then
|
if state.state == "drilling" or inch == -1 then
|
||||||
local n, y, hit_oil = drill(pos)
|
local pcmeta = minetest.get_meta(alts.pipe_chest)
|
||||||
if n then
|
local pcinv = pcmeta:get_inventory()
|
||||||
state.last_drilled_node = n
|
|
||||||
state.depth = y
|
if pcinv:contains_item("main", "bitumen:drill_pipe 1") then
|
||||||
state.max_depth = math.min(y, state.max_depth or y)
|
|
||||||
|
local n, y, hit_oil = drill(pos)
|
||||||
if hit_oil and inch == 0 then
|
if n then
|
||||||
state.state = "idle"
|
state.last_drilled_node = n
|
||||||
|
state.depth = y
|
||||||
|
state.max_depth = math.min(y, state.max_depth or y)
|
||||||
|
|
||||||
|
pcinv:remove_item("main", "bitumen:drill_pipe 1")
|
||||||
|
|
||||||
|
if hit_oil and inch == 0 then
|
||||||
|
state.state = "idle"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
-- out of pipe
|
||||||
|
state.state = "idle"
|
||||||
end
|
end
|
||||||
elseif state.state == "retracting" or inch == 1 then
|
elseif state.state == "retracting" or inch == 1 then
|
||||||
local y, removed, ended
|
local y, removed, ended
|
||||||
|
@ -623,12 +786,27 @@ minetest.register_abm({
|
||||||
|
|
||||||
elseif state.state == "pump" then
|
elseif state.state == "pump" then
|
||||||
local expos = alts.mud_extractor
|
local expos = alts.mud_extractor
|
||||||
|
expos.x = expos.x + 1
|
||||||
local exnet = bitumen.pipes.get_net(expos)
|
local exnet = bitumen.pipes.get_net(expos)
|
||||||
if exnet.fluid == "bitumen:crude_oil" then
|
if exnet and (exnet.fluid == "bitumen:crude_oil" or exnet.fluid == "air") then
|
||||||
-- pump oil
|
-- pump oil
|
||||||
|
local dp = {x=pos.x, y = state.depth - 1, z=pos.z}
|
||||||
|
local n = minetest.get_node(dp)
|
||||||
|
|
||||||
|
if n.name == "bitumen:crude_oil" or n.name == "bitumen:crude_oil_full" then
|
||||||
|
-- minetest.set_node(dp, {name="air"})
|
||||||
|
|
||||||
|
-- local expos = alts.mud_extractor
|
||||||
|
-- expos.x = expos.x + 1
|
||||||
|
local p = bitumen.pipes.push_fluid(expos, "bitumen:crude_oil", 5, 20)
|
||||||
|
--print("pushed " .. p)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
else
|
else
|
||||||
-- must empty the mud out of the pipe first
|
-- must empty the mud out of the pipe first
|
||||||
|
|
||||||
|
print("well not connected " .. dump(exnet))
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -642,20 +820,7 @@ minetest.register_abm({
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
local function pump_oil(pos)
|
|
||||||
|
|
||||||
local dp = check_drill_stack(pos)
|
|
||||||
|
|
||||||
local n = minetest.get_node(dp)
|
|
||||||
|
|
||||||
if n.name == "bitumen:crude_oil" then
|
|
||||||
minetest.set_node(dp, {name="air"})
|
|
||||||
|
|
||||||
pos.x = pos.x + 1
|
|
||||||
minetest.set_node(pos, {name="bitumen:crude_oil"})
|
|
||||||
minetest.set_node_level(pos, 64)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -678,3 +843,111 @@ minetest.register_node("bitumen:well_pump", {
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
local rig_builder_formspec =
|
||||||
|
"size[10,8;]" ..
|
||||||
|
default.gui_bg ..
|
||||||
|
default.gui_bg_img ..
|
||||||
|
default.gui_slots ..
|
||||||
|
"list[context;main;0,0.3;4,3;]" ..
|
||||||
|
"button[5,1;1,4;build;Build]" ..
|
||||||
|
"list[current_player;main;0,3.85;8,1;]" ..
|
||||||
|
"list[current_player;main;0,5.08;8,3;8]" ..
|
||||||
|
"listring[context;main]" ..
|
||||||
|
"listring[current_player;main]" ..
|
||||||
|
default.get_hotbar_bg(0, 3.85)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_node("bitumen:oil_rig_constructor", {
|
||||||
|
description = "Oil Rig Constructor",
|
||||||
|
drawtype = "normal",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
on_rotate = screwdriver.rotate_simple,
|
||||||
|
groups = {cracky=1},
|
||||||
|
tiles = {
|
||||||
|
"default_copper_block.png","default_tin_block.png",
|
||||||
|
},
|
||||||
|
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
inv:set_size("main", 12)
|
||||||
|
|
||||||
|
meta:set_string("formspec", rig_builder_formspec);
|
||||||
|
end,
|
||||||
|
|
||||||
|
|
||||||
|
on_receive_fields = function(pos, form, fields, player)
|
||||||
|
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
|
||||||
|
if fields.build then
|
||||||
|
-- tanks can only be built on thick foundations
|
||||||
|
--[[
|
||||||
|
local ret = check_foundation(
|
||||||
|
{x = pos.x - 9, y = pos.y - 3, z = pos.z - 9},
|
||||||
|
{x = pos.x + 9, y = pos.y - 1, z = pos.z + 9},
|
||||||
|
{
|
||||||
|
["default:stone"] = 1,
|
||||||
|
["bitumen:concrete"] = 1,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
if ret == false then
|
||||||
|
minetest.chat_send_player(player:get_player_name(), "Foundation is incomplete: 10x10x3")
|
||||||
|
return
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(player:get_player_name(), "Foundation is complete.")
|
||||||
|
end
|
||||||
|
]]
|
||||||
|
-- local inv = meta:get_inventory();
|
||||||
|
--
|
||||||
|
-- if inv:contains_item("main", "default:steelblock 8") then
|
||||||
|
--
|
||||||
|
-- inv:remove_item("main", "default:steelblock 8")
|
||||||
|
-- else
|
||||||
|
-- minetest.chat_send_player(player:get_player_name(), "Not enough materials: 8x SteelBlock")
|
||||||
|
-- return
|
||||||
|
-- end
|
||||||
|
|
||||||
|
-- ready to go
|
||||||
|
minetest.chat_send_player(player:get_player_name(), "Clear area, construction starting...")
|
||||||
|
|
||||||
|
minetest.after(5, function()
|
||||||
|
minetest.set_node({x=pos.x, y=pos.y + 2, z=pos.z}, {name="bitumen:drill_rig"})
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
bitumen.register_blueprint({name="bitumen:drill_rig"})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'bitumen:oil_rig_constructor',
|
||||||
|
recipe = {
|
||||||
|
{'default:steelblock', 'default:steelblock', 'default:steelblock'},
|
||||||
|
{'default:steelblock', 'bitumen:drill_rig_blueprint', 'default:steelblock'},
|
||||||
|
{'default:steelblock', 'default:steelblock', 'default:steelblock'},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue