From c0f4ce199d5c73d4dd2d89b8b7cabf7aea0c1027 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 29 Aug 2019 18:23:06 +0200 Subject: [PATCH] Simplify bucket code and move to separate file --- mods/default/bucket.lua | 112 ++++++++++++++++++++++++++++++++++++++++ mods/default/init.lua | 1 + 2 files changed, 113 insertions(+) create mode 100644 mods/default/bucket.lua diff --git a/mods/default/bucket.lua b/mods/default/bucket.lua new file mode 100644 index 0000000..8f5d981 --- /dev/null +++ b/mods/default/bucket.lua @@ -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 + +}) diff --git a/mods/default/init.lua b/mods/default/init.lua index 3b92863..da9de0b 100644 --- a/mods/default/init.lua +++ b/mods/default/init.lua @@ -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")