291 lines
6.1 KiB
Lua
291 lines
6.1 KiB
Lua
|
|
||
|
|
||
|
|
||
|
|
||
|
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,
|
||
|
})
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
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
|
||
|
|
||
|
|
||
|
print("check stack well depth: "..pos.y)
|
||
|
|
||
|
return {x=pos.x, y=pos.y, z=pos.z}
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
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
|
||
|
|
||
|
|
||
|
|
||
|
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
|
||
|
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),
|
||
|
--22.5
|
||
|
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),
|
||
|
-- 33.75
|
||
|
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),
|
||
|
--45
|
||
|
mul({-0.35, -0.5, -0.35, 0.35, 0.5, 0.35}, .3),
|
||
|
},
|
||
|
},
|
||
|
selection_box = {
|
||
|
type = "fixed",
|
||
|
fixed = {
|
||
|
mul({-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, .3),
|
||
|
},
|
||
|
},
|
||
|
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,
|
||
|
})
|
||
|
|
||
|
|
||
|
|
||
|
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'},
|
||
|
}
|
||
|
})
|
||
|
|
||
|
|
||
|
|
||
|
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)
|
||
|
|
||
|
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
|
||
|
|
||
|
local n = minetest.get_node(dp)
|
||
|
|
||
|
|
||
|
if n.name == "ignore" then
|
||
|
if minetest.forceload_block(dp, true) then
|
||
|
print("forceload successful: ".. minetest.pos_to_string(dp))
|
||
|
|
||
|
local n = minetest.get_node(dp)
|
||
|
else
|
||
|
--minetest.emerge_area(dp, {x=dp.x, y=dp.y - 20, z=dp.z})
|
||
|
-- print("forceload failed, emerging " .. minetest.pos_to_string(dp))
|
||
|
-- return
|
||
|
end
|
||
|
-- minetest.emerge_area(pos, pos)
|
||
|
end
|
||
|
|
||
|
|
||
|
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
|
||
|
pos.y = pos.y + 2
|
||
|
minetest.set_node(pos, {name = "bitumen:crude_oil"})
|
||
|
minetest.set_node_level(pos, 64)
|
||
|
else
|
||
|
print("drilling at "..dp.y.." of "..n.name )
|
||
|
minetest.set_node(dp, {name = "bitumen:drill_pipe"})
|
||
|
end
|
||
|
|
||
|
meta:set_string("drilldepth", minetest.serialize(dp))
|
||
|
|
||
|
|
||
|
|
||
|
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)
|
||
|
--print("trydrill")
|
||
|
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,
|
||
|
|
||
|
})
|
||
|
|