minetest_bitumen/wells.lua

291 lines
6.1 KiB
Lua
Raw Normal View History

2018-06-18 19:42:02 -07:00
2018-06-18 23:52:09 -07:00
bitumen.register_fluid("bitumen", "drill_mud", {
desc = "Drilling Mud",
groups = {petroleum=1},
reflow_interval = 5,
reflow_chance = 1,
flow_interval = 1,
flow_chance = 1,
colorize = "^[colorize:brown:40",
post_effect_color = {a = 103, r = 80, g = 76, b = 90},
evap_chance = 0,
})
bitumen.register_fluid("bitumen", "drill_mud_dirty", {
desc = "Dirty Drilling Mud",
groups = {petroleum=1},
reflow_interval = 5,
reflow_chance = 1,
flow_interval = 1,
flow_chance = 1,
colorize = "^[colorize:brown:140",
post_effect_color = {a = 103, r = 80, g = 76, b = 90},
evap_chance = 0,
})
2018-06-18 19:42:02 -07:00
local function check_drill_stack(opos)
local pos = vector.new(opos)
pos.y = pos.y - 1
while 1 == 1 do
if minetest.get_node(pos).name == "bitumen:drill_pipe" then
-- noop
else
-- end of the stack
break
end
pos.y = pos.y - 1
end
2018-06-18 23:52:09 -07:00
print("check stack well depth: "..pos.y)
2018-06-18 19:42:02 -07:00
return {x=pos.x, y=pos.y, z=pos.z}
end
2018-06-18 23:52:09 -07:00
local function mul(t, x)
local o = {}
for n,i in ipairs(t) do
o[n] = i * x
end
o[2] = o[2] / x
o[5] = o[5] / x
return o
end
2018-06-18 19:42:02 -07:00
minetest.register_node("bitumen:drill_pipe", {
paramtype = "light",
description = "Drill Pipe",
tiles = {"default_copper_block.png", "default_copper_block.png", "default_copper_block.png",
"default_copper_block.png", "default_copper_block.png", "default_copper_block.png"},
node_box = {
type = "fixed",
fixed = {
--11.25
2018-06-18 23:52:09 -07:00
mul({-0.49, -0.5, -0.10, 0.49, 0.5, 0.10}, .3),
mul({-0.10, -0.5, -0.49, 0.10, 0.5, 0.49}, .3),
2018-06-18 19:42:02 -07:00
--22.5
2018-06-18 23:52:09 -07:00
mul({-0.46, -0.5, -0.19, 0.46, 0.5, 0.19}, .3),
mul({-0.19, -0.5, -0.46, 0.19, 0.5, 0.46}, .3),
2018-06-18 19:42:02 -07:00
-- 33.75
2018-06-18 23:52:09 -07:00
mul({-0.416, -0.5, -0.28, 0.416, 0.5, 0.28}, .3),
mul({-0.28, -0.5, -0.416, 0.28, 0.5, 0.416}, .3),
2018-06-18 19:42:02 -07:00
--45
2018-06-18 23:52:09 -07:00
mul({-0.35, -0.5, -0.35, 0.35, 0.5, 0.35}, .3),
2018-06-18 19:42:02 -07:00
},
},
selection_box = {
type = "fixed",
fixed = {
2018-06-18 23:52:09 -07:00
mul({-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, .3),
2018-06-18 19:42:02 -07:00
},
},
drawtype = "nodebox",
groups = {cracky=3,oddly_breakable_by_hand=3 },
legacy_facedir_simple = true,
sounds = default.node_sound_wood_defaults(),
on_punch = function(pos)
check_drill_stack(pos)
end,
})
2018-06-18 23:52:09 -07:00
minetest.register_craft({
output = 'bitumen:drill_pipe 12',
recipe = {
{'default:steel_ingot', '', 'default:steel_ingot'},
{'default:steel_ingot', '', 'default:steel_ingot'},
{'default:steel_ingot', '', 'default:steel_ingot'},
}
})
2018-06-18 19:42:02 -07:00
minetest.register_node("bitumen:well_siphon", {
paramtype = "light",
description = "Well Siphon",
tiles = {"default_bronze_block.png", "default_bronze_block.png", "default_bronze_block.png",
"default_bronze_block.png", "default_bronze_block.png", "default_bronze_block.png"},
node_box = {
type = "fixed",
fixed = {
--11.25
{-0.49, -0.5, -0.10, 0.49, 0.5, 0.10},
{-0.10, -0.5, -0.49, 0.10, 0.5, 0.49},
--22.5
{-0.46, -0.5, -0.19, 0.46, 0.5, 0.19},
{-0.19, -0.5, -0.46, 0.19, 0.5, 0.46},
-- 33.75
{-0.416, -0.5, -0.28, 0.416, 0.5, 0.28},
{-0.28, -0.5, -0.416, 0.28, 0.5, 0.416},
--45
{-0.35, -0.5, -0.35, 0.35, 0.5, 0.35},
},
},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},
},
drawtype = "nodebox",
groups = {cracky=3,oddly_breakable_by_hand=3 },
legacy_facedir_simple = true,
sounds = default.node_sound_wood_defaults(),
on_construct = function(pos)
end,
})
local function drill(pos)
2018-06-18 23:52:09 -07:00
local meta = minetest.get_meta(pos)
local dp = meta:get_string("drilldepth") or ""
--print("dp" .. dump(dp))
if dp == "" then
dp = check_drill_stack(pos)
else
dp = minetest.deserialize(dp)
--print("deserialized " .. dump(pos))
dp.y = dp.y - 1
end
2018-06-18 19:42:02 -07:00
local n = minetest.get_node(dp)
2018-06-18 23:52:09 -07:00
2018-06-18 19:42:02 -07:00
if n.name == "ignore" then
2018-06-18 23:52:09 -07:00
if minetest.forceload_block(dp, true) then
print("forceload successful: ".. minetest.pos_to_string(dp))
2018-06-18 19:42:02 -07:00
local n = minetest.get_node(dp)
else
2018-06-18 23:52:09 -07:00
--minetest.emerge_area(dp, {x=dp.x, y=dp.y - 20, z=dp.z})
-- print("forceload failed, emerging " .. minetest.pos_to_string(dp))
-- return
2018-06-18 19:42:02 -07:00
end
-- minetest.emerge_area(pos, pos)
end
2018-06-18 23:52:09 -07:00
if n.name == "ignore" then
minetest.emerge_area(dp, {x=dp.x, y=dp.y - 20, z=dp.z})
print("emerging " .. minetest.pos_to_string(dp))
return
elseif n.name == "bitumen:drill_pipe" then
dp = check_drill_stack(pos)
elseif n.name == "bitumen:crude_oil" or n.name == "bitumen:crude_oil_full" then
2018-06-18 19:42:02 -07:00
pos.y = pos.y + 2
minetest.set_node(pos, {name = "bitumen:crude_oil"})
minetest.set_node_level(pos, 64)
else
2018-06-18 23:52:09 -07:00
print("drilling at "..dp.y.." of "..n.name )
2018-06-18 19:42:02 -07:00
minetest.set_node(dp, {name = "bitumen:drill_pipe"})
end
2018-06-18 23:52:09 -07:00
meta:set_string("drilldepth", minetest.serialize(dp))
2018-06-18 19:42:02 -07:00
end
minetest.register_node("bitumen:drill_rig", {
description = "Drill Rig",
tiles = {"default_tin_block.png", "default_steel_block.png", "default_steel_block.png",
"default_tin_block.png", "default_tin_block.png", "default_steel_block.png"},
paramtype2 = "facedir",
groups = {cracky=2, petroleum_fixture=1},
sounds = default.node_sound_wood_defaults(),
can_dig = function(pos,player)
return true
end,
on_timer = dcb_node_timer,
on_punch = function(pos)
drill(pos)
end,
})
minetest.register_abm({
nodenames = {"bitumen:drill_rig"},
interval = 1,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
2018-06-18 23:52:09 -07:00
--print("trydrill")
2018-06-18 19:42:02 -07:00
drill(pos)
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_node("bitumen:well_pump", {
description = "Drill Rig",
tiles = {"default_gold_block.png", "default_steel_block.png", "default_copper_block.png",
"default_tin_block.png", "default_gold_block.png", "default_steel_block.png"},
paramtype2 = "facedir",
groups = {cracky=2, petroleum_fixture=1},
sounds = default.node_sound_wood_defaults(),
can_dig = function(pos,player)
return true
end,
on_timer = dcb_node_timer,
on_punch = function(pos)
pump_oil(pos)
end,
})