forked from Wuzzy/realtest_mt5
183 lines
4.9 KiB
Lua
183 lines
4.9 KiB
Lua
buckets = {}
|
|
buckets.liquids = {}
|
|
buckets.replacements = {}
|
|
|
|
local function wood_name(o)
|
|
return o.name:remove_modname_prefix()
|
|
end
|
|
|
|
local function wood_desc(o)
|
|
return o.description
|
|
end
|
|
|
|
local function wood_image()
|
|
return "instruments_bucket_wood.png"
|
|
end
|
|
|
|
local function wood_craft(tree)
|
|
minetest.register_craft({
|
|
output = "instruments:bucket_"..wood_name(tree),
|
|
recipe = {
|
|
{tree.name.."_plank", "", tree.name.."_plank"},
|
|
{tree.name.."_plank", "", tree.name.."_plank"},
|
|
{"", tree.name.."_plank", ""},
|
|
},
|
|
})
|
|
end
|
|
|
|
buckets.types = {
|
|
{name = "metal", list = metals.list, desc_list = metals.desc_list},
|
|
{name = "wood", list = realtest.registered_trees, name_func = wood_name, desc_func = wood_desc, image_func = wood_image, craft_func = wood_craft}
|
|
}
|
|
|
|
realtest.registered_liquids = {}
|
|
|
|
local function bucket_name(material, liquid)
|
|
local s = "instruments:bucket_"..material
|
|
if liquid ~= nil then
|
|
s = s.."_with_"..liquid
|
|
end
|
|
return s
|
|
end
|
|
|
|
local function add_replacement(full, empty, liquid)
|
|
if buckets.replacements[liquid] == nil then
|
|
buckets.replacements[liquid] = {}
|
|
end
|
|
table.insert(buckets.replacements[liquid], {full, empty})
|
|
end
|
|
|
|
local function get_bucket_info(type, material, i)
|
|
local name = ""
|
|
if type.name_func then
|
|
name = type.name_func(material, i)
|
|
else
|
|
name = tostring(material)
|
|
end
|
|
|
|
local description = ""
|
|
if type.desc_func then
|
|
description = type.desc_func(material, i)
|
|
elseif type.desc_list then
|
|
description = type.desc_list[i]
|
|
end
|
|
|
|
local image = "instruments_bucket_"..name..".png"
|
|
if type.image_func then
|
|
image = type.image_func(material, i)
|
|
end
|
|
|
|
return name, description, image
|
|
end
|
|
|
|
function realtest.register_liquid(name, LiquidDef)
|
|
if name and LiquidDef.source and LiquidDef.flowing then
|
|
LiquidDef.name = name
|
|
realtest.registered_liquids[LiquidDef.source] = LiquidDef
|
|
realtest.registered_liquids[LiquidDef.flowing] = LiquidDef
|
|
end
|
|
|
|
for _, type in ipairs(buckets.types) do
|
|
if LiquidDef["image_for_"..type.name.."_bucket"] then
|
|
for i, material in pairs(type.list) do
|
|
local name, description, image = get_bucket_info(type, material, i)
|
|
|
|
local full_name = bucket_name(name, LiquidDef.name)
|
|
local empty_name = bucket_name(name)
|
|
local groups = {["bucket_with_"..LiquidDef.name]=1}
|
|
if LiquidDef.bucket_groups then
|
|
for k, v in pairs(LiquidDef.bucket_groups) do
|
|
groups[k] = v
|
|
end
|
|
end
|
|
local stack = 1
|
|
if LiquidDef.bucket_stack then
|
|
stack = LiquidDef.bucket_stack
|
|
end
|
|
|
|
add_replacement(full_name, empty_name, LiquidDef.name)
|
|
|
|
minetest.register_craftitem(":"..full_name, {
|
|
description = description .. " Bucket with " .. LiquidDef.description,
|
|
inventory_image = image.."^"..LiquidDef["image_for_"..type.name.."_bucket"],
|
|
groups = groups,
|
|
stack_max = stack,
|
|
liquids_pointable = true,
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
-- "virtual" buckets
|
|
if LiquidDef.source == "" then
|
|
return
|
|
end
|
|
-- Must be pointing to node
|
|
if pointed_thing.type ~= "node" then
|
|
return
|
|
end
|
|
n = minetest.get_node(pointed_thing.under)
|
|
if minetest.registered_nodes[n.name].buildable_to then
|
|
minetest.add_node(pointed_thing.under, {name=LiquidDef.source})
|
|
else
|
|
n = minetest.get_node(pointed_thing.above)
|
|
if minetest.registered_nodes[n.name].buildable_to then
|
|
minetest.add_node(pointed_thing.above, {name=LiquidDef.source})
|
|
else
|
|
return
|
|
end
|
|
end
|
|
return {name=empty_name}
|
|
end
|
|
})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
for _, type in ipairs(buckets.types) do
|
|
for i, material in pairs(type.list) do
|
|
local name, description, image = get_bucket_info(type, material, i)
|
|
local empty_name = bucket_name(name)
|
|
table.insert(buckets, empty_name)
|
|
|
|
minetest.register_craftitem(":"..bucket_name(name), {
|
|
description = "Empty " .. description .. " Bucket",
|
|
inventory_image = image,
|
|
groups = {bucket_empty = 1},
|
|
stack_max = 1,
|
|
liquids_pointable = true,
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.type ~= "node" then
|
|
return
|
|
end
|
|
local n = minetest.get_node(pointed_thing.under)
|
|
local liquiddef = realtest.registered_liquids[n.name]
|
|
if not liquiddef then
|
|
return
|
|
end
|
|
local full_name = empty_name.."_with_"..liquiddef.name
|
|
if liquiddef and n.name == liquiddef.source and minetest.registered_items[full_name] then
|
|
minetest.add_node(pointed_thing.under, {name="air"})
|
|
return {name=full_name}
|
|
end
|
|
end,
|
|
})
|
|
|
|
if type.craft_func then
|
|
type.craft_func(material, i)
|
|
end
|
|
end
|
|
end
|
|
|
|
realtest.register_liquid("water", {
|
|
description = "Water",
|
|
source = "default:water_source",
|
|
flowing = "default:water_flowing",
|
|
image_for_metal_bucket = "instruments_metal_water.png",
|
|
image_for_wood_bucket = "instruments_wood_water.png",
|
|
})
|
|
|
|
realtest.register_liquid("lava", {
|
|
description = "Lava",
|
|
source = "default:lava_source",
|
|
flowing = "default:lava_flowing",
|
|
image_for_metal_bucket = "instruments_lava.png",
|
|
})
|