Simplify bucket code and move to separate file
This commit is contained in:
parent
0aae257932
commit
c0f4ce199d
112
mods/default/bucket.lua
Normal file
112
mods/default/bucket.lua
Normal 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
|
||||
|
||||
})
|
@ -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")
|
||||
|
Loading…
Reference in New Issue
Block a user