From 76fcea22e0aaf72cd63c4d0ae87bac3049ad0f82 Mon Sep 17 00:00:00 2001 From: Sokomine Date: Sat, 2 Oct 2021 14:46:15 +0200 Subject: [PATCH] removed deprecated functions get_/set_metadata and renamed metadata to pattern --- fs_history.lua | 42 ++++++++++++++++++++++-------------------- init.lua | 27 ++++++++++++++------------- 2 files changed, 36 insertions(+), 33 deletions(-) diff --git a/fs_history.lua b/fs_history.lua index 5bc35c5..149bb56 100644 --- a/fs_history.lua +++ b/fs_history.lua @@ -3,13 +3,13 @@ replacer.max_hist_size = 20 --- turn stored metadata string ( ) into something readable by human beeings -replacer.human_readable_metadata = function(metadata) - if(not(metadata)) then +-- turn stored pattern string ( ) into something readable by human beeings +replacer.human_readable_pattern = function(pattern) + if(not(pattern)) then return "(nothing)" end -- data is stored in the form " " - local parts = string.split(metadata, " ") + local parts = string.split(pattern, " ") if(not(parts) or #parts < 3) then return "(corrupted data)" end @@ -44,35 +44,37 @@ end -- set the replacer to a new pattern -replacer.set_to = function(player_name, metadata, player, itemstack) +replacer.set_to = function(player_name, pattern, player, itemstack) if(not(player_name) or not(player) or not(itemstack)) then return itemstack end -- fallback if nothing is given - if(not(metadata)) then - metadata = "default:dirt 0 0" + if(not(pattern)) then + pattern = "default:dirt 0 0" end - itemstack:set_metadata( metadata ) - local set_to = replacer.human_readable_metadata(metadata) + local set_to = replacer.human_readable_pattern(pattern) -- change the description of the tool so that it's easier to see which replacer (if you -- have more than one in your inv) is set to which node local meta = itemstack:get_meta() + -- actually store the new pattern + meta:set_string("pattern", pattern ) + meta:set_string("description", "Node replacement tool set to:\n"..set_to.. - "\n["..tostring(metadata).."]") + "\n["..tostring(pattern).."]") minetest.chat_send_player(player_name, "Node replacement tool set to: "..set_to.. - "["..tostring(metadata).."].") + "["..tostring(pattern).."].") - replacer.add_to_hist(player_name, metadata) + replacer.add_to_hist(player_name, pattern) return itemstack -- nothing consumed but data changed end -- keep a history of stored patterns for each player (not for each replacer); -- this history is not saved over server shutdown -replacer.add_to_hist = function(player_name, metadata ) - if(not(player_name) or not(metadata) or metadata == "") then +replacer.add_to_hist = function(player_name, pattern) + if(not(player_name) or not(pattern) or pattern == "") then return end if(not(replacer.history)) then @@ -81,7 +83,7 @@ replacer.add_to_hist = function(player_name, metadata ) if(not(replacer.history[ player_name ])) then replacer.history[ player_name ] = {} end - local index = table.indexof( replacer.history[ player_name ], metadata ) + local index = table.indexof(replacer.history[ player_name ], pattern) -- only add new entries; do not store duplicates if(index and index > -1) then return @@ -90,12 +92,12 @@ replacer.add_to_hist = function(player_name, metadata ) if(#replacer.history[ player_name ] >= replacer.max_hist_size) then table.remove(replacer.history[ player_name ], 1) end - table.insert(replacer.history[ player_name ], metadata) + table.insert(replacer.history[ player_name ], pattern) end -- show a formspec with a history of stored patterns to select from -replacer.get_formspec = function(player_name, current_metadata, player) +replacer.get_formspec = function(player_name, current_pattern, player) -- is the player in creative mode? local in_creative_mode = (minetest.settings:get_bool("creative_mode") or minetest.check_player_privs(player_name, {creative=true})) @@ -121,11 +123,11 @@ replacer.get_formspec = function(player_name, current_metadata, player) ";text,align=left,tooltip=Stored pattern:]".. "table[0.2,1.0;13,6;replacer_history;" -- make sure all variables exist and the current entry is stored - replacer.add_to_hist(player_name, current_metadata) + replacer.add_to_hist(player_name, current_pattern) local hist_entries = {} local selected = 1 for i, v in ipairs(replacer.history[ player_name ]) do - if(v == current_metadata) then + if(v == current_pattern) then selected = i end local amount_left = "#00FF00,infinite supply:" @@ -145,7 +147,7 @@ replacer.get_formspec = function(player_name, current_metadata, player) end end hist_entries[ i ] = tostring(amount_left)..",".. - minetest.formspec_escape(replacer.human_readable_metadata(v).." ["..v.."]") + minetest.formspec_escape(replacer.human_readable_pattern(v).." ["..v.."]") end return formspec..table.concat(hist_entries, ",")..";"..tostring(selected).."]" end diff --git a/init.lua b/init.lua index 71740bc..9371f4c 100644 --- a/init.lua +++ b/init.lua @@ -23,6 +23,7 @@ -- Changelog: -- 02.09.2021 * Added a history of stored patterns (not saved over server restart) -- * Added a menu to select a history entry. It is accessable via AUX1 + left click. +-- * Removed deprecated functions get/set_metadata(..) and renamed metadata to pattern -- 29.09.2021 * AUX1 key works now same as SNEAK key for storing new pattern (=easier when flying) -- * The description of the tool now shows which pattern is stored -- * The description of the stored pattern is more human readable @@ -89,7 +90,6 @@ minetest.register_tool( "replacer:replacer", }, --]] node_placement_prediction = nil, - metadata = "default:dirt", -- default replacement: common dirt on_place = function(itemstack, placer, pointed_thing) @@ -116,12 +116,12 @@ minetest.register_tool( "replacer:replacer", local node = minetest.get_node_or_nil( pos ); --minetest.chat_send_player( name, " Target node: "..minetest.serialize( node ).." at pos "..minetest.serialize( pos ).."."); - local metadata = "default:dirt 0 0"; + local pattern = "default:dirt 0 0"; if( node ~= nil and node.name ) then - metadata = node.name..' '..node.param1..' '..node.param2; + pattern = node.name..' '..node.param1..' '..node.param2; end - return replacer.set_to(name, metadata, placer, itemstack) -- nothing consumed but data changed + return replacer.set_to(name, pattern, placer, itemstack) -- nothing consumed but data changed end, @@ -159,21 +159,22 @@ replacer.replace = function( itemstack, user, pointed_thing, mode ) end - local item = itemstack:to_table(); + local meta = itemstack:get_meta() + local pattern = meta:get_string("pattern") -- make sure it is defined - if( not( item[ "metadata"] ) or item["metadata"]=="" ) then - item["metadata"] = "default:dirt 0 0"; + if(not(pattern) or pattern == "") then + pattern = "default:dirt 0 0"; end local keys=user:get_player_control(); if( keys["aux1"]) then - minetest.show_formspec(name, "replacer:menu", replacer.get_formspec(name, item["metadata"], user)) + minetest.show_formspec(name, "replacer:menu", replacer.get_formspec(name, pattern, user)) return nil end -- regain information about nodename, param1 and param2 - local daten = item[ "metadata"]:split( " " ); + local daten = pattern:split( " " ); -- the old format stored only the node name if( #daten < 3 ) then daten[2] = 0; @@ -218,7 +219,7 @@ replacer.replace = function( itemstack, user, pointed_thing, mode ) -- fortunately, dirt and dirt_with_grass does not make use of rotation if( daten[1] == "default:dirt_with_grass" ) then daten[1] = "default:dirt"; - item["metadata"] = "default:dirt 0 0"; + pattern = "default:dirt 0 0"; end -- does the player carry at least one of the desired nodes with him? @@ -244,7 +245,7 @@ replacer.replace = function( itemstack, user, pointed_thing, mode ) -- thus can be replaced local node_def = minetest.registered_nodes[node.name] if(not(node_def) or not(node_def.buildable_to)) then - minetest.chat_send_player( name, "Replacing '"..( node.name or "air" ).."' with '"..( item[ "metadata"] or "?" ).."' failed. Unable to remove old node."); + minetest.chat_send_player( name, "Replacing '"..( node.name or "air" ).."' with '"..( pattern or "?" ).."' failed. Unable to remove old node."); return nil; end end @@ -257,9 +258,9 @@ replacer.replace = function( itemstack, user, pointed_thing, mode ) --user:get_inventory():add_item( "main", node.name.." 1"); end - --minetest.chat_send_player( name, "Replacing node '"..( node.name or "air" ).."' with '"..( item[ "metadata"] or "?" ).."'."); + --minetest.chat_send_player( name, "Replacing node '"..( node.name or "air" ).."' with '"..( pattern or "?" ).."'."); - --minetest.place_node( pos, { name = item[ "metadata" ] } ); + --minetest.place_node( pos, { name = pattern } ); minetest.add_node( pos, { name = daten[1], param1 = daten[2], param2 = daten[3] } ); return nil; -- no item shall be removed from inventory end