From ce3b474228d08cf7b9e3cadbde197f7c9a052988 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 24 Oct 2019 14:59:28 +0200 Subject: [PATCH] Restrict putting in furnace and jewelbench --- mods/default/furnace.lua | 39 +++++++++++++----- mods/jewels/init.lua | 40 +++++++++++++++---- mods/jewels/sounds/jewels_jewelling_fail.ogg | Bin 0 -> 6200 bytes 3 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 mods/jewels/sounds/jewels_jewelling_fail.ogg diff --git a/mods/default/furnace.lua b/mods/default/furnace.lua index 08eae78..bc58c48 100644 --- a/mods/default/furnace.lua +++ b/mods/default/furnace.lua @@ -61,16 +61,28 @@ form_furnace = form_furnace .. "image[3.25,1.75;1,1;ui_arrow_bg.png^[transformR2 default.ui.register_page("default_furnace_inactive", form_furnace) -local protection_check_move = function(pos, from_list, from_index, to_list, to_index, count, player) +local check_put = function(pos, listname, index, stack, player) if minetest.is_protected(pos, player:get_player_name()) and not minetest.check_player_privs(player, "protection_bypass") then minetest.record_protection_violation(pos, player:get_player_name()) return 0 - else - return count + end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if listname == "fuel" then + if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then + return stack:get_count() + else + return 0 + end + elseif listname == "src" then + return stack:get_count() + elseif listname == "dst" then + return 0 end end -local protection_check_put_take = function(pos, listname, index, stack, player) + +local check_take = function(pos, listname, index, stack, player) if minetest.is_protected(pos, player:get_player_name()) and not minetest.check_player_privs(player, "protection_bypass") then minetest.record_protection_violation(pos, player:get_player_name()) @@ -80,6 +92,13 @@ local protection_check_put_take = function(pos, listname, index, stack, player) end end +local check_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local stack = inv:get_stack(from_list, from_index) + return check_put(pos, to_list, to_index, stack, player) +end + minetest.register_node( "default:furnace", { @@ -100,9 +119,9 @@ minetest.register_node( inv:set_size("src", 1) inv:set_size("dst", 4) end, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_put = protection_check_put_take, - allow_metadata_inventory_take = protection_check_put_take, + allow_metadata_inventory_move = check_move, + allow_metadata_inventory_put = check_put, + allow_metadata_inventory_take = check_take, can_dig = function(pos,player) local meta = minetest.get_meta(pos); local inv = meta:get_inventory() @@ -139,9 +158,9 @@ minetest.register_node( inv:set_size("src", 1) inv:set_size("dst", 4) end, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_put = protection_check_put_take, - allow_metadata_inventory_take = protection_check_put_take, + allow_metadata_inventory_move = check_move, + allow_metadata_inventory_put = check_put, + allow_metadata_inventory_take = check_take, can_dig = function(pos,player) local meta = minetest.get_meta(pos); local inv = meta:get_inventory() diff --git a/mods/jewels/init.lua b/mods/jewels/init.lua index 3320e18..6f5edc0 100644 --- a/mods/jewels/init.lua +++ b/mods/jewels/init.lua @@ -189,16 +189,32 @@ minetest.register_craftitem( -- Nodes -local protection_check_move = function(pos, from_list, from_index, to_list, to_index, count, player) +local check_put = function(pos, listname, index, stack, player) if minetest.is_protected(pos, player:get_player_name()) and not minetest.check_player_privs(player, "protection_bypass") then minetest.record_protection_violation(pos, player:get_player_name()) return 0 - else - return count end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if listname == "main" then + local name = stack:get_name() + if minetest.registered_items[name] then + -- Disallow put for non-tools (unless it can be jeweled) + if (not jewels.can_jewel(name)) and minetest.registered_items[name].type ~= "tool" then + return 0 + end + end + end + return stack:get_count() end -local protection_check_put_take = function(pos, listname, index, stack, player) +local check_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local stack = inv:get_stack(from_list, from_index) + return check_take(pos, to_list, to_index, stack, player) +end +local check_take = function(pos, listname, index, stack, player) if minetest.is_protected(pos, player:get_player_name()) and not minetest.check_player_privs(player, "protection_bypass") then minetest.record_protection_violation(pos, player:get_player_name()) @@ -233,9 +249,9 @@ minetest.register_node( return inv:is_empty("main") end, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_put = protection_check_put_take, - allow_metadata_inventory_take = protection_check_put_take, + allow_metadata_inventory_move = check_move, + allow_metadata_inventory_put = check_put, + allow_metadata_inventory_take = check_take, on_punch = function(pos, node, player, pointed_thing) local itemstack = player:get_wielded_item() local itemstack_changed = false @@ -248,9 +264,14 @@ minetest.register_node( local meta = minetest.get_meta(pos) local inv = meta:get_inventory() - local itemname = inv:get_stack("main", 1):get_name() + local iitem = inv:get_stack("main", 1) + if iitem:is_empty() then + return + end + local itemname = iitem:get_name() if jewels.can_jewel(itemname) then + -- Success inv:set_stack("main", 1, ItemStack(jewels.get_jeweled(itemname))) if not minetest.settings:get_bool("creative_mode") then @@ -263,6 +284,9 @@ minetest.register_node( achievements.trigger_achievement(player, "jeweler") achievements.trigger_achievement(player, "master_jeweler") + else + -- Failure + minetest.sound_play({name="jewels_jewelling_fail"}, {gain=0.8, pos=pos, max_hear_distance=8}) end end diff --git a/mods/jewels/sounds/jewels_jewelling_fail.ogg b/mods/jewels/sounds/jewels_jewelling_fail.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0e283aa693092ee2bf0242e2a806e5a0ee07247d GIT binary patch literal 6200 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 literal 0 HcmV?d00001