minetest_bitumen/rock_crusher.lua

235 lines
4.4 KiB
Lua

local function swap_node(pos, name)
local node = minetest.get_node(pos)
if node.name == name then
return
end
node.name = name
minetest.swap_node(pos, node)
end
--[[
local function try_turn_on(pos)
local bpos = {x=pos.x, y=pos.y - 1, z=pos.z}
local bnode = minetest.get_node(bpos)
local bmeta = minetest.env:get_meta(bpos)
if not bmeta or bnode.name ~= "bitumen:oil_drum" then
swap_node(pos, "bitumen:kerosene_light")
destruct_light(pos)
return
end
local fluid = bmeta:get_string("fluid")
local fill = bmeta:get_int("fill")
local max_fill = bmeta:get_int("maxfill")
if not fill or fill == 0 then
swap_node(pos, "bitumen:kerosene_light")
destruct_light(pos)
return
end
local taken = 1
-- turn on
for _,v in ipairs(loffs) do
local p = vector.add(pos, v)
local n = minetest.get_node(p)
if n.name == "air" then
minetest.set_node(p, {name="bitumen:magic_light"})
-- else
end
end
bmeta:set_float("fill", math.max(fill - taken, 0))
bmeta:set_string("infotext", fluid .." (".. math.floor(((fill-taken)*100/max_fill)+0.5) .."%)")
end
]]
local rock_crusher_formspec =
"size[10,9;]" ..
default.gui_bg ..
default.gui_bg_img ..
default.gui_slots ..
"list[context;main;0,0.3;5,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)
local function take_gas(itemstack, amount)
if itemstack:get_name() ~= "bitumen:oil_drum_filled" then
return false
end
local smeta = itemstack:get_meta()
if smeta:get_string("fluid") ~= "bitumen:gasoline" then
return false
end
local fill = smeta:get_float("fill")
if fill < amount then
return false
end
smeta:set_float("fill", fill - amount)
return true
end
function crushtimer(pos, elapsed)
local meta = minetest.get_meta(pos)
local fuel = meta:get_float("fuel") or 0.0
if fuel <= 0 then
-- try to get some fuel
local inv = meta:get_inventory()
local st = inv:get_stack("main", 1)
if take_gas(st, 1) then
inv:set_stack("main", 1, st);
fuel = fuel + 1
else
-- out of fuel, turn off
return false
end
end
fuel = fuel - .1
meta:set_float("fuel", fuel)
-- try to grind some rocks
pos.y = pos.y + 1
-- local tnode = minetest.get_node(pos)
local tmeta = minetest.get_meta(pos)
local tinv = tmeta:get_inventory()
local cob = tinv:remove_item("main", "default:cobble 1")
if cob:get_count() <= 0 then
cob = tinv:remove_item("main", "default:desert_cobble 1")
end
if cob:get_count() > 0 then
pos.y = pos.y - 2
local bmeta = minetest.get_meta(pos)
local binv = bmeta:get_inventory()
binv:add_item("main", "default:gravel 1")
end
return true
end
minetest.register_node("bitumen:rock_crusher", {
description = "Small Gas Rock Crusher",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{ -.5, -.5, -.5, .5, .5, .5},
{ -.7, -.3, -.7, .7, .3, .7},
},
},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
},
},
paramtype = "light",
is_ground_content = false,
tiles = { "default_wood.png" },
walkable = true,
groups = { cracky = 3, },
on_construct = function(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("main", 1)
meta:set_string("formspec", rock_crusher_formspec);
end,
on_punch = function(pos)
swap_node(pos, "bitumen:rock_crusher_on")
minetest.get_node_timer(pos):start(2.0)
--try_turn_on(pos)
end,
on_timer = function(pos)
return false
end,
})
minetest.register_node("bitumen:rock_crusher_on", {
description = "Small Gas Rock Crusher",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{ -.5, -.5, -.5, .5, .5, .5},
{ -.7, -.3, -.7, .7, .3, .7},
},
},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
},
},
paramtype = "light",
is_ground_content = false,
tiles = { "default_meselamp.png" },
walkable = true,
groups = { cracky = 3, petroleum_fixture = 1 },
on_construct = function(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("main", 1)
meta:set_string("formspec", rock_crusher_formspec);
end,
on_punch = function(pos)
swap_node(pos, "bitumen:rock_crusher")
-- destruct_light(pos)
end,
on_timer = crushtimer,
})
bitumen.register_blueprint({
name="bitumen:rock_crusher",
no_constructor_craft = true,
})