diff --git a/nodes_anvil.lua b/nodes_anvil.lua index e93cfc1..0470847 100755 --- a/nodes_anvil.lua +++ b/nodes_anvil.lua @@ -9,6 +9,12 @@ local S = cottages.S +-- disable repair with anvil by setting a message for the item in question +cottages.forbid_repair = {} +-- example for hammer no longer beeing able to repair the hammer +--cottages.forbid_repair["cottages:hammer"] = 'The hammer is too complex for repairing.' + + -- the hammer for the anvil minetest.register_tool("cottages:hammer", { description = S("Steel hammer for repairing tools on the anvil"), @@ -140,6 +146,12 @@ minetest.register_node("cottages:anvil", { S('The workpiece slot is for damaged tools only.')); return 0; end + if( listname=='input' + and cottages.forbid_repair[ stack:get_name() ]) then + minetest.chat_send_player( player:get_player_name(), + S(cottages.forbid_repair[ stack:get_name() ])); + return 0; + end return stack:get_count() end, @@ -183,6 +195,14 @@ minetest.register_node("cottages:anvil", { -- 65535 is max damage local damage_state = 40-math.floor(input:get_wear()/1638); + -- just to make sure that it really can't get repaired if it should not + -- (if the check of placing the item in the input slot failed somehow) + if( puncher and name and cottages.forbid_repair[ input:get_name() ]) then + minetest.chat_send_player( name, + S(cottages.forbid_repair[ input:get_name() ])); + return; + end + local tool_name = input:get_name(); local hud_image = ""; if( tool_name @@ -231,9 +251,9 @@ minetest.register_node("cottages:anvil", { end minetest.after(2, function() if( puncher ) then - puncher:hud_remove(hud1); - puncher:hud_remove(hud2); - puncher:hud_remove(hud3); + if(hud1) then puncher:hud_remove(hud1); end + if(hud2) then puncher:hud_remove(hud2); end + if(hud3) then puncher:hud_remove(hud3); end end end) diff --git a/nodes_furniture.lua b/nodes_furniture.lua index 65e229d..424764c 100755 --- a/nodes_furniture.lua +++ b/nodes_furniture.lua @@ -264,10 +264,13 @@ minetest.register_node("cottages:shelf", { local meta = minetest.get_meta(pos); + local spos = pos.x .. "," .. pos.y .. "," .. pos.z meta:set_string("formspec", "size[8,8]".. "list[current_name;main;0,0;8,3;]".. - "list[current_player;main;0,4;8,4;]") + "list[current_player;main;0,4;8,4;]".. + "listring[nodemeta:" .. spos .. ";main]" .. + "listring[current_player;main]") meta:set_string("infotext", S("open storage shelf")) local inv = meta:get_inventory(); inv:set_size("main", 24); diff --git a/nodes_straw.lua b/nodes_straw.lua index d26f6b8..2ac2747 100755 --- a/nodes_straw.lua +++ b/nodes_straw.lua @@ -333,13 +333,13 @@ minetest.register_node("cottages:threshing_floor", { minetest.after(2, function() if( puncher ) then - puncher:hud_remove(hud1); - puncher:hud_remove(hud2); - puncher:hud_remove(hud3); - puncher:hud_remove(hud4); - puncher:hud_remove(hud5); - puncher:hud_remove(hud6); - puncher:hud_remove(hud0); + if(hud1) then puncher:hud_remove(hud1); end + if(hud2) then puncher:hud_remove(hud2); end + if(hud3) then puncher:hud_remove(hud3); end + if(hud4) then puncher:hud_remove(hud4); end + if(hud5) then puncher:hud_remove(hud5); end + if(hud6) then puncher:hud_remove(hud6); end + if(hud0) then puncher:hud_remove(hud0); end end end) end, diff --git a/nodes_water.lua b/nodes_water.lua index 44e4119..1984779 100644 --- a/nodes_water.lua +++ b/nodes_water.lua @@ -117,7 +117,7 @@ minetest.register_node("cottages:water_gen", { paramtype = "light", paramtype2 = "facedir", is_ground_content = false, - groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + groups = {tree = 1, choppy = 2, cracky = 1, flammable = 2}, sounds = cottages.sounds.wood, node_box = { type = "fixed", @@ -178,8 +178,14 @@ minetest.register_node("cottages:water_gen", { can_dig = function(pos,player) local meta = minetest.get_meta(pos); local inv = meta:get_inventory() - return inv:is_empty("main") and - default.can_interact_with_node(player, pos) + local bucket = meta:get_string("bucket") + local start = meta:get_string("fillstarttime") + return inv:is_empty("main") + and default.can_interact_with_node(player, pos) + and (not(bucket) or bucket == "") + and ((not(start) or start == "" or + (minetest.get_us_time()/1000000) - tonumber(start) + >= cottages.water_fill_time -2)) end, -- no inventory move allowed allow_metadata_inventory_move = function(pos, from_list, from_index, @@ -213,7 +219,7 @@ minetest.register_node("cottages:water_gen", { cottages.switch_public(pos, formname, fields, sender, 'tree trunk well') end, -- punch to place and retrieve bucket - on_punch = function(pos, node, puncher) + on_punch = function(pos, node, puncher, pointed_thing) if( not( pos ) or not( node ) or not( puncher )) then return end @@ -223,7 +229,8 @@ minetest.register_node("cottages:water_gen", { local owner = meta:get_string("owner") local public = meta:get_string("public") if( name ~= owner and public~="public") then - minetest.chat_send_player( name, S("This tree trunk well is owned by %s. You can't use it."):format(name)) + minetest.chat_send_player( name, + S("This tree trunk well is owned by %s. You can't use it."):format(owner)) return end @@ -233,13 +240,18 @@ minetest.register_node("cottages:water_gen", { -- is the well working on something? (either empty or full bucket) local bucket = meta:get_string("bucket") -- there is a bucket loaded - either empty or full - if( bucket and bucket~="") then + if( bucket and bucket~="" and bucket ~= "bucket:bucket_empty") then if( not(pinv:room_for_item("main", bucket))) then minetest.chat_send_player( puncher:get_player_name(), S("Sorry. You have no room for the bucket. Please free some ".. "space in your inventory first!")) return end + elseif( bucket and bucket == "bucket:bucket_empty") then + minetest.chat_send_player( puncher:get_player_name(), + S("Please wait until your bucket has been filled.")) + -- do not give the empty bucket back immediately + return end -- remove the old entity (either a bucket will be placed now or a bucket taken) @@ -267,8 +279,6 @@ minetest.register_node("cottages:water_gen", { if( wielded and wielded:get_name() and wielded:get_name() == "bucket:bucket_empty") then - -- remove the bucket from the players inventory - pinv:remove_item( "main", "bucket:bucket_empty") -- remember that we got a bucket loaded meta:set_string("bucket", "bucket:bucket_empty") -- create the entity @@ -280,6 +290,8 @@ minetest.register_node("cottages:water_gen", { minetest.after(cottages.water_fill_time, cottages.water_gen_fill_bucket, pos) -- the bucket will only be filled if the water ran long enough meta:set_string("fillstarttime", tostring(minetest.get_us_time()/1000000)) + -- remove the bucket from the players inventory + pinv:remove_item( "main", "bucket:bucket_empty") return; end -- buckets can also be emptied here