diff --git a/fs_history.lua b/fs_history.lua index 2c9273f..d390cdd 100644 --- a/fs_history.lua +++ b/fs_history.lua @@ -73,6 +73,34 @@ replacer_setter.set_to = function(player_name, pattern, player, itemstack) end +replacer_setter.set_to_for_swissalps_fork = function(player, row) + if(not(player) or not(row)) then + return + end + local player_name = player:get_player_name() + if(not(replacer_setter.history[ player_name ]) + or not(replacer_setter.history[ player_name ][ row ])) then + return + end + local pattern = replacer_setter.history[ player_name ][ row ] + + local wield_index = player:get_wield_index() + local replacer_stack = nil + local inv = player:get_inventory() + if(wield_index > 1) then + replacer_stack = inv:get_stack("main", wield_index - 1) + end + if(replacer_stack and replacer_stack:get_name() == "replacer:replacer") then + -- for Swissalps' fork + local parts = pattern:split(" ") + local node = {name=parts[1], param1=0, param2=parts[3]} + local mode = "single" + replacer.set_data(replacer_stack, node, mode) + inv:set_stack("main", wield_index - 1, replacer_stack) + end +end + + -- keep a history of stored patterns for each player (not for each replacer); -- this history is not saved over server shutdown replacer_setter.add_to_hist = function(player_name, pattern) @@ -121,6 +149,9 @@ replacer_setter.get_formspec = function(player_name, current_pattern, player) or minetest.check_player_privs(player_name, {creative=true})) -- make sure all variables exist and the current entry is stored replacer_setter.add_to_hist(player_name, current_pattern) + -- set the replacer to the currently selected value + local idx = table.indexof(replacer_setter.history[ player_name ], current_pattern) + replacer_setter.set_to_for_swissalps_fork(player, idx) -- count how many blocks of each type the player has in his inventory local counted_inv = {} if(not(in_creative_mode)) then @@ -145,7 +176,7 @@ replacer_setter.get_formspec = function(player_name, current_pattern, player) local formspec = "size[18,10]".. "label[6,0;Node Replacement Tool Setup and History]".. - "button_exit[8,9.4;2,0.8;quit;Exit]".. + "button_exit[10,9.4;2,0.8;quit;Exit]".. "label[0.2,8.5;Note: Selected mode and history are reset on server restart.\n".. "Note: This selection is valid only for the replacer to the ".. "*left* of this tool here in your inventory.]".. @@ -185,16 +216,21 @@ replacer_setter.get_formspec = function(player_name, current_pattern, player) hist_entries[ i ] = tostring(amount_left)..",".. minetest.formspec_escape(replacer_setter.human_readable_pattern(v).." ["..v.."]") end - return formspec..table.concat(hist_entries, ",")..";"..tostring(selected).."]" + return formspec..table.concat(hist_entries, ",")..";"..tostring(selected).."]".. + "field[20,20;0,0;current_field;;"..tostring(selected).."]".. + "button_exit[6,9.4;2,0.8;set;Set]" end + + -- the player has interacted with our formspec minetest.register_on_player_receive_fields( function(player, formname, fields) if(not(formname) or formname ~= "replacer:menu") then return false end local player_name = player:get_player_name() + local row = -1 -- the player clicked on an entry in the history if(fields and fields.replacer_history and replacer_setter.history and replacer_setter.history[ player_name ]) then @@ -202,34 +238,10 @@ minetest.register_on_player_receive_fields( function(player, formname, fields) local selected = minetest.explode_table_event(fields.replacer_history) if(selected and (selected.type == "CHG" or selected.type == "DLC") and selected.row <= #replacer_setter.history[ player_name ]) then - - local pattern = replacer_setter.history[ player_name ][ selected.row ] - - local wield_index = player:get_wield_index() - local replacer_stack = nil - local inv = player:get_inventory() - if(wield_index > 1) then - replacer_stack = inv:get_stack("main", wield_index - 1) - end - if(replacer_stack and replacer_stack:get_name() == "replacer:replacer") then - -- for Swissalps' fork - replacer_setter.add_to_hist(player_name, pattern) - local parts = pattern:split(" ") - local node = {name=parts[1], param1=parts[2], param2=parts[3]} - local mode = "single" - replacer.set_data(replacer_stack, node, mode) - inv:set_stack("main", wield_index - 1, replacer_stack) - end - return true - end - end - -- the player selected a mode - if(fields and fields.select_mode) then - local index = table.indexof(replacer_setter.mode_descriptions, - minetest.formspec_escape(fields.select_mode)) - if(index and index > -1 and replacer_setter.mode_names[ index ]) then - replacer_setter.user_mode[ player_name ] = replacer_setter.mode_names[ index ] + row = selected.row end + replacer_setter.set_to_for_swissalps_fork(player, row) + return true end return true end)