Add pillar-top brasiers
This commit is contained in:
parent
5f23ac2eb9
commit
6205b32384
224
brasier.lua
224
brasier.lua
@ -21,6 +21,13 @@ local brasier_nodebox = {
|
||||
{-0.125, -0.0625, -0.125, 0.125, 0, 0.125}, -- bottom_knob
|
||||
}
|
||||
}
|
||||
local brasier_selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.375, -0.5, -0.375, 0.375, 0.25, 0.375}, -- mid
|
||||
{-0.5, 0.25, -0.5, 0.5, 0.5, 0.5}, -- plat
|
||||
}
|
||||
}
|
||||
|
||||
local brasier_burn = function(pos)
|
||||
local inv = minetest.get_inventory({type="node", pos=pos})
|
||||
@ -46,8 +53,52 @@ local brasier_burn = function(pos)
|
||||
end
|
||||
end
|
||||
|
||||
local brasier_on_construct = function(pos)
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
inv:set_size("fuel", 1)
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec",
|
||||
"size[8,5.3]" ..
|
||||
default.gui_bg ..
|
||||
default.gui_bg_img ..
|
||||
default.gui_slots ..
|
||||
"list[current_name;fuel;3.5,0;1,1;]" ..
|
||||
"list[current_player;main;0,1.15;8,1;]" ..
|
||||
"list[current_player;main;0,2.38;8,3;8]" ..
|
||||
"listring[current_name;main]" ..
|
||||
"listring[current_player;main]" ..
|
||||
default.get_hotbar_bg(0,1.15)
|
||||
)
|
||||
end
|
||||
|
||||
local brasier_on_destruct = function(pos, oldnode)
|
||||
local pos_above = {x=pos.x, y=pos.y+1, z=pos.z}
|
||||
local node_above = minetest.get_node(pos_above)
|
||||
if node_above.name == "fire:permanent_flame" then
|
||||
minetest.set_node(pos_above, {name = "air"})
|
||||
end
|
||||
end
|
||||
|
||||
local brasier_can_dig = function(pos, player)
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
return inv:is_empty("fuel")
|
||||
end
|
||||
|
||||
-- Only allow fuel items to be placed in fuel
|
||||
local brasier_allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
if listname == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
minetest.register_node("castle_lighting:brasier_floor", {
|
||||
description = S("Brasier"),
|
||||
description = S("Floor Brasier"),
|
||||
tiles = {
|
||||
"castle_steel.png^(castle_coal_bed.png^[mask:castle_brasier_bed_mask.png)",
|
||||
"castle_steel.png",
|
||||
@ -60,65 +111,14 @@ minetest.register_node("castle_lighting:brasier_floor", {
|
||||
groups = {cracky=2},
|
||||
paramtype = "light",
|
||||
node_box = brasier_nodebox,
|
||||
selection_box ={
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.375, -0.5, -0.375, 0.375, 0.25, 0.375}, -- mid
|
||||
{-0.5, 0.25, -0.5, 0.5, 0.5, 0.5}, -- plat
|
||||
}
|
||||
},
|
||||
selection_box = brasier_selection_box,
|
||||
|
||||
on_construct = function(pos)
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
inv:set_size("fuel", 1)
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec",
|
||||
"size[8,5.3]" ..
|
||||
default.gui_bg ..
|
||||
default.gui_bg_img ..
|
||||
default.gui_slots ..
|
||||
"list[current_name;fuel;3.5,0;1,1;]" ..
|
||||
"list[current_player;main;0,1.15;8,1;]" ..
|
||||
"list[current_player;main;0,2.38;8,3;8]" ..
|
||||
"listring[current_name;main]" ..
|
||||
"listring[current_player;main]" ..
|
||||
default.get_hotbar_bg(0,1.15)
|
||||
)
|
||||
end,
|
||||
|
||||
on_destruct = function(pos, oldnode)
|
||||
local pos_above = {x=pos.x, y=pos.y+1, z=pos.z}
|
||||
local node_above = minetest.get_node(pos_above)
|
||||
if node_above.name == "fire:permanent_flame" then
|
||||
minetest.set_node(pos_above, {name = "air"})
|
||||
end
|
||||
end,
|
||||
|
||||
can_dig = function(pos, player)
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
return inv:is_empty("fuel")
|
||||
end,
|
||||
|
||||
-- Only allow fuel items to be placed in fuel
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
if listname == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end,
|
||||
|
||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
brasier_burn(pos)
|
||||
end,
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
brasier_burn(pos)
|
||||
end,
|
||||
on_construct = brasier_on_construct,
|
||||
on_destruct = brasier_on_destruct,
|
||||
can_dig = brasier_can_dig,
|
||||
allow_metadata_inventory_put = brasier_allow_metadata_inventory_put,
|
||||
on_metadata_inventory_put = brasier_burn,
|
||||
on_timer = brasier_burn,
|
||||
})
|
||||
|
||||
|
||||
@ -128,4 +128,108 @@ minetest.register_craft({
|
||||
{"default:steel_ingot", "default:torch", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
------------------------------------------------------------------------------------------------------
|
||||
-- Masonry brasiers
|
||||
|
||||
local materials
|
||||
if minetest.get_modpath("castle_masonry") then
|
||||
materials = castle_masonry.materials
|
||||
else
|
||||
materials = {{name="stonebrick", desc=S("Stonebrick"), tile="default_stone_brick.png", craft_material="default:stonebrick"}}
|
||||
end
|
||||
|
||||
local get_material_properties = function(material)
|
||||
local composition_def
|
||||
local burn_time
|
||||
if material.composition_material ~= nil then
|
||||
composition_def = minetest.registered_nodes[material.composition_material]
|
||||
burn_time = minetest.get_craft_result({method="fuel", width=1, items={ItemStack(material.composition_material)}}).time
|
||||
else
|
||||
composition_def = minetest.registered_nodes[material.craft_material]
|
||||
burn_time = minetest.get_craft_result({method="fuel", width=1, items={ItemStack(material.craft_materia)}}).time
|
||||
end
|
||||
|
||||
local tiles = material.tile
|
||||
if tiles == nil then
|
||||
tiles = composition_def.tile
|
||||
elseif type(tiles) == "string" then
|
||||
tiles = {tiles}
|
||||
end
|
||||
|
||||
-- Apply bed of coals to the texture.
|
||||
if table.getn(tiles) == 1 then
|
||||
tiles = {tiles[1].."^(castle_coal_bed.png^[mask:castle_brasier_bed_mask.png)", tiles[1], tiles[1], tiles[1], tiles[1], tiles[1]}
|
||||
else
|
||||
tiles[1] = tiles[1].."^(castle_coal_bed.png^[mask:castle_brasier_bed_mask.png)"
|
||||
end
|
||||
|
||||
local desc = material.desc
|
||||
if desc == nil then
|
||||
desc = composition_def.description
|
||||
end
|
||||
|
||||
return composition_def, burn_time, tiles, desc
|
||||
end
|
||||
|
||||
local pillar_brasier_nodebox = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.375, 0.125, -0.375, 0.375, 0.25, 0.375}, -- mid
|
||||
{-0.5, 0.25, -0.5, 0.5, 0.375, 0.5}, -- plat
|
||||
{-0.5, 0.375, 0.375, 0.5, 0.5, 0.5}, -- edge
|
||||
{-0.5, 0.375, -0.5, 0.5, 0.5, -0.375}, -- edge
|
||||
{0.375, 0.375, -0.375, 0.5, 0.5, 0.375}, -- edge
|
||||
{-0.5, 0.375, -0.375, -0.375, 0.5, 0.375}, -- edge
|
||||
{-0.25,-0.5,-0.25,0.25,0.125,0.25}, -- support
|
||||
}
|
||||
}
|
||||
|
||||
local pillar_brasier_selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.375, 0.125, -0.375, 0.375, 0.25, 0.375}, -- mid
|
||||
{-0.5, 0.25, -0.5, 0.5, 0.5, 0.5}, -- plat
|
||||
{-0.25,-0.5,-0.25,0.25,0.125,0.25}, -- support
|
||||
}
|
||||
}
|
||||
|
||||
castle_lighting.register_pillar_brasier = function(material)
|
||||
local composition_def, burn_time, tile, desc = get_material_properties(material)
|
||||
if burn_time > 0 or composition_def.groups.puts_out_fire then return end -- No wooden brasiers, snow brasiers, or ice brasiers, alas.
|
||||
|
||||
local mod_name = minetest.get_current_modname()
|
||||
|
||||
minetest.register_node(mod_name..":"..material.name.."_pillar_brasier", {
|
||||
drawtype = "nodebox",
|
||||
description = S("@1 Brasier", desc),
|
||||
tiles = tile,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = composition_def.groups,
|
||||
sounds = composition_def.sounds,
|
||||
|
||||
node_box = pillar_brasier_nodebox,
|
||||
selection_box = pillar_brasier_selection_box,
|
||||
|
||||
on_construct = brasier_on_construct,
|
||||
on_destruct = brasier_on_destruct,
|
||||
can_dig = brasier_can_dig,
|
||||
allow_metadata_inventory_put = brasier_allow_metadata_inventory_put,
|
||||
on_metadata_inventory_put = brasier_burn,
|
||||
on_timer = brasier_burn,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = mod_name..":"..material.name.."_pillar_brasier 5",
|
||||
recipe = {
|
||||
{material.craft_material,"default:torch",material.craft_material},
|
||||
{material.craft_material,material.craft_material,material.craft_material},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
for _, material in pairs(materials) do
|
||||
castle_lighting.register_pillar_brasier(material)
|
||||
end
|
||||
|
@ -1,3 +1,4 @@
|
||||
default
|
||||
intllib?
|
||||
fire?
|
||||
fire?
|
||||
castle_masonry?
|
2
init.lua
2
init.lua
@ -8,6 +8,8 @@ minetest.register_alias("castle:chandelier_chain", "castle_lighting:chandelier
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local S, NS = dofile(MP.."/intllib.lua")
|
||||
|
||||
castle_lighting = {}
|
||||
|
||||
dofile(MP.."/brasier.lua")
|
||||
|
||||
minetest.register_node("castle_lighting:light",{
|
||||
|
Loading…
x
Reference in New Issue
Block a user