Simplify bucket code and move to separate file

This commit is contained in:
Wuzzy 2019-08-29 18:23:06 +02:00
parent 0aae257932
commit c0f4ce199d
2 changed files with 113 additions and 0 deletions

112
mods/default/bucket.lua Normal file
View File

@ -0,0 +1,112 @@
local S = minetest.get_translator("default")
local filled_buckets = {
{ "water", S("Water Bucket"), "default_bucket_water.png", "default:water_source" },
{ "river_water", S("River Water Bucket"), "default_bucket_river_water.png", "default:river_water_source" },
{ "swamp_water", S("Swamp Water Bucket"), "default_bucket_swamp_water.png", "default:swamp_water_source" },
}
for b=1, #filled_buckets do
local bucket = filled_buckets[b]
minetest.register_craftitem(
"default:"..bucket[1],
{
description = bucket[2],
inventory_image = bucket[3],
stack_max = 1,
wield_scale = {x=1,y=1,z=2},
liquids_pointable = true,
on_place = function(itemstack, user, pointed_thing)
if pointed_thing.type ~= "node" then return end
local pos_protected = minetest.get_pointed_thing_position(pointed_thing, true)
if minetest.is_protected(pos_protected, user) then return end
local inv=user:get_inventory()
if inv:room_for_item("main", {name="default:bucket"}) then
inv:add_item("main", "default:bucket")
else
local pos = user:get_pos()
pos.y = math.floor(pos.y + 0.5)
minetest.add_item(pos, "default:bucket")
end
local pos = pointed_thing.above
local above_nodedef = minetest.registered_nodes[minetest.get_node(pointed_thing.above).name]
local under_nodedef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name]
if under_nodedef.buildable_to then
pos=pointed_thing.under
end
if not above_nodedef.walkable then
minetest.add_node(pos, {name = bucket[4]})
end
return itemstack
end
})
end
minetest.register_craftitem(
"default:bucket",
{
description = S("Empty Bucket"),
inventory_image = "default_bucket.png",
stack_max = 10,
wield_scale = {x=1,y=1,z=2},
liquids_pointable = true,
on_use = function(itemstack, user, pointed_thing)
if pointed_thing.type ~= "node" then return end
local nodename=minetest.get_node(pointed_thing.under).name
if nodename == "default:water_source" then
itemstack:take_item()
local inv=user:get_inventory()
if inv:room_for_item("main", {name="default:bucket_water"}) then
inv:add_item("main", "default:bucket_water")
else
local pos = user:get_pos()
pos.y = math.floor(pos.y + 0.5)
minetest.add_item(pos, "default:bucket_water")
end
minetest.remove_node(pointed_thing.under)
elseif nodename == "default:river_water_source" then
itemstack:take_item()
local inv=user:get_inventory()
if inv:room_for_item("main", {name="default:bucket_river_water"}) then
inv:add_item("main", "default:bucket_river_water")
else
local pos = user:get_pos()
pos.y = math.floor(pos.y + 0.5)
minetest.add_item(pos, "default:bucket_river_water")
end
minetest.remove_node(pointed_thing.under)
elseif nodename == "default:swamp_water_source" then
itemstack:take_item()
local inv=user:get_inventory()
if inv:room_for_item("main", {name="default:bucket_swamp_water"}) then
inv:add_item("main", "default:bucket_swamp_water")
else
local pos = user:get_pos()
pos.y = math.floor(pos.y + 0.5)
minetest.add_item(pos, "default:bucket_swamp_water")
end
minetest.remove_node(pointed_thing.under)
end
return itemstack
end
})

View File

@ -36,6 +36,7 @@ dofile(minetest.get_modpath("default").."/functions.lua")
dofile(minetest.get_modpath("default").."/sounds.lua")
dofile(minetest.get_modpath("default").."/nodes.lua")
dofile(minetest.get_modpath("default").."/craftitems.lua")
dofile(minetest.get_modpath("default").."/bucket.lua")
dofile(minetest.get_modpath("default").."/crafting.lua")
dofile(minetest.get_modpath("default").."/tools.lua")
dofile(minetest.get_modpath("default").."/furnace.lua")