forked from VoxeLibre/VoxeLibre
Allow to wash off top layer off banners
This commit is contained in:
parent
d2632ab7ec
commit
2c9d1da73a
|
@ -1,3 +1,4 @@
|
||||||
mcl_sounds?
|
mcl_sounds?
|
||||||
mcl_core?
|
mcl_core?
|
||||||
mcl_wool?
|
mcl_wool?
|
||||||
|
mcl_cauldrons?
|
||||||
|
|
|
@ -136,13 +136,44 @@ for colorid, colortab in pairs(mcl_banners.colors) do
|
||||||
local above = pointed_thing.above
|
local above = pointed_thing.above
|
||||||
local under = pointed_thing.under
|
local under = pointed_thing.under
|
||||||
|
|
||||||
-- Use pointed node's on_rightclick function first, if present
|
|
||||||
local node_under = minetest.get_node(under)
|
local node_under = minetest.get_node(under)
|
||||||
if placer and not placer:get_player_control().sneak then
|
if placer and not placer:get_player_control().sneak then
|
||||||
|
-- Use pointed node's on_rightclick function first, if present
|
||||||
if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then
|
if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then
|
||||||
return minetest.registered_nodes[node_under.name].on_rightclick(under, node_under, placer, itemstack) or itemstack
|
return minetest.registered_nodes[node_under.name].on_rightclick(under, node_under, placer, itemstack) or itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if minetest.get_modpath("mcl_cauldrons") then
|
||||||
|
-- Use banner on cauldron to remove the top-most layer. This reduces the water level by 1.
|
||||||
|
local new_node
|
||||||
|
if node_under.name == "mcl_cauldrons:cauldron_3" then
|
||||||
|
new_node = "mcl_cauldrons:cauldron_2"
|
||||||
|
elseif node_under.name == "mcl_cauldrons:cauldron_2" then
|
||||||
|
new_node = "mcl_cauldrons:cauldron_1"
|
||||||
|
elseif node_under.name == "mcl_cauldrons:cauldron_1" then
|
||||||
|
new_node = "mcl_cauldrons:cauldron"
|
||||||
end
|
end
|
||||||
|
if new_node then
|
||||||
|
local imeta = itemstack:get_meta()
|
||||||
|
local layers_raw = imeta:get_string("layers")
|
||||||
|
local layers = minetest.deserialize(layers_raw)
|
||||||
|
if type(layers) == "table" and #layers > 0 then
|
||||||
|
minetest.log("error", dump(layers))
|
||||||
|
table.remove(layers)
|
||||||
|
imeta:set_string("layers", minetest.serialize(layers))
|
||||||
|
local newdesc = mcl_banners.make_advanced_banner_description(itemstack:get_definition().description, layers)
|
||||||
|
imeta:set_string("description", newdesc)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Washing off reduces the water level by 1.
|
||||||
|
-- (It is possible to waste water if the banner had 0 layers.)
|
||||||
|
minetest.set_node(pointed_thing.under, {name=new_node})
|
||||||
|
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Place the node!
|
-- Place the node!
|
||||||
local _, success = minetest.item_place_node(ItemStack("mcl_banners:standing_banner"), placer, pointed_thing)
|
local _, success = minetest.item_place_node(ItemStack("mcl_banners:standing_banner"), placer, pointed_thing)
|
||||||
|
|
|
@ -248,7 +248,7 @@ for colorid, colortab in pairs(mcl_banners.colors) do
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Create a banner description containing all the layer names
|
-- Create a banner description containing all the layer names
|
||||||
local make_advanced_banner_description = function(description, layers)
|
mcl_banners.make_advanced_banner_description = function(description, layers)
|
||||||
if layers == nil or #layers == 0 then
|
if layers == nil or #layers == 0 then
|
||||||
-- No layers, revert to default
|
-- No layers, revert to default
|
||||||
return ""
|
return ""
|
||||||
|
@ -393,7 +393,7 @@ local banner_pattern_craft = function(itemstack, player, old_craft_grid, craft_i
|
||||||
imeta:set_string("layers", minetest.serialize(layers))
|
imeta:set_string("layers", minetest.serialize(layers))
|
||||||
|
|
||||||
local odesc = itemstack:get_definition().description
|
local odesc = itemstack:get_definition().description
|
||||||
local description = make_advanced_banner_description(odesc, layers)
|
local description = mcl_banners.make_advanced_banner_description(odesc, layers)
|
||||||
imeta:set_string("description", description)
|
imeta:set_string("description", description)
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue