From 56e1d4452d50c4a7a8087f01d229cb3a05394051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sirger=20T=C3=BCnde-Maria?= <161933192+sirgertunde@users.noreply.github.com> Date: Fri, 19 Dec 2025 00:34:00 +0200 Subject: [PATCH] Completed settings feature --- scripts/settings/settings_commands.dsc | 12 ++ scripts/settings/settings_config.dsc | 8 +- scripts/settings/settings_tasks.dsc | 226 ++++++++++++++++++++--- scripts/tabcomplete/tabcomplete_data.dsc | 1 + 4 files changed, 220 insertions(+), 27 deletions(-) create mode 100644 scripts/settings/settings_commands.dsc diff --git a/scripts/settings/settings_commands.dsc b/scripts/settings/settings_commands.dsc new file mode 100644 index 0000000..23c751d --- /dev/null +++ b/scripts/settings/settings_commands.dsc @@ -0,0 +1,12 @@ +settings_command_settings: + debug: false + type: command + name: settings + usage: /settings + description: Opens the settings menu. + permission: settings.command.settings + script: + - if != player: + - narrate "<&c>Please run this command as a player." + - stop + - run settings_menu def.player: \ No newline at end of file diff --git a/scripts/settings/settings_config.dsc b/scripts/settings/settings_config.dsc index 863fc9c..e1fdda6 100644 --- a/scripts/settings/settings_config.dsc +++ b/scripts/settings/settings_config.dsc @@ -37,7 +37,7 @@ settings_config: type: text default: text max-length: 64 - regex: [a-z] + regex: "[a-z]+" example5_key: tab: Miscellaneous name: example5 setting key @@ -45,7 +45,7 @@ settings_config: type: text default: text max-length: 64 - regex: [a-z] + regex: "[a-z]+" example6_key: tab: Miscellaneous name: example6 setting key @@ -53,7 +53,7 @@ settings_config: type: text default: text max-length: 64 - regex: [a-z] + regex: "[a-z]+" example7_key: tab: Miscellaneous name: example7 setting key @@ -61,4 +61,4 @@ settings_config: type: text default: text max-length: 64 - regex: [a-z] + regex: "[a-z]+" diff --git a/scripts/settings/settings_tasks.dsc b/scripts/settings/settings_tasks.dsc index ef051dc..e1be9fb 100644 --- a/scripts/settings/settings_tasks.dsc +++ b/scripts/settings/settings_tasks.dsc @@ -76,6 +76,43 @@ settings_menu_is_last_page: - define end_index <[page].add[1].mul[4]> - determine <[end_index].is_more_than_or_equal_to[<[keys_in_tab].size>]> +settings_menu_set_non_text: + debug: false + type: task + definitions: player|key|value|tab|page + script: + - run settings_set def.player:<[player]> def.key:<[key]> def.value:<[value]> save:result + - define error + - if <[error]> == null: + - run settings_menu def.player:<[player]> def.tab:<[tab]> def.page:<[page]> + - else: + - narrate targets:<[player]> <&c><[error]> + +settings_menu_set_text_callback: + debug: false + type: task + definitions: player|input + script: + - define temp_state <[player].flag[settings_menu_temp_state]> + - run settings_set def.player:<[player]> def.key:<[temp_state].get[key]> def.value:<[input]> save:result + - define error + - if <[error]> != null: + - narrate targets:<[player]> <&c><[error]> + - wait 1t + - run settings_menu def.player:<[player]> def.tab:<[temp_state].get[tab]> def.page:<[temp_state].get[page]> + +settings_menu_set_text_helper: + debug: false + type: task + definitions: player|key|tab|page + script: + - definemap temp_state: + key: <[key]> + tab: <[tab]> + page: <[page]> + - flag <[player]> settings_menu_temp_state:<[temp_state]> + - run anvil_input def.player:<[player]> "def.prompt:New value" def.callback:settings_menu_set_text_callback + settings_menu: debug: false type: task @@ -87,27 +124,47 @@ settings_menu: - define page <[page].if_null[0]> - define contents - if <[page]> > 0: - - define previous_button <<><<>]]> - - definemap content_entry: - 49: - item: <[previous_button]> - script: settings_menu - definitions: - player: <[player]> - tab: <[tab]> - page: <[page].sub[1]> - - define contents <[contents].include[<[content_entry]>]> + - inject settings_menu_previous_page - if !|<[page]>]>: - - define next_button <>><>>]]> - - definemap content_entry: - 51: - item: <[next_button]> - script: settings_menu - definitions: - player: <[player]> - tab: <[tab]> - page: <[page].add[1]> - - define contents <[contents].include[<[content_entry]>]> + - inject settings_menu_next_page + - inject settings_menu_render_tabs + - inject settings_menu_render_settings + - run menu_open def.player:<[player]> def.title:<&f>邑邑邑邑酕<&a><&sp><&b><&sp><&c><&sp> def.size:54 def.contents:<[contents]> + +settings_menu_previous_page: + debug: false + type: task + script: + - define previous_button <<><<>]]> + - definemap content_entry: + 49: + item: <[previous_button]> + script: settings_menu + definitions: + player: <[player]> + tab: <[tab]> + page: <[page].sub[1]> + - define contents <[contents].include[<[content_entry]>]> + +settings_menu_next_page: + debug: false + type: task + script: + - define next_button <>><>>]]> + - definemap content_entry: + 51: + item: <[next_button]> + script: settings_menu + definitions: + player: <[player]> + tab: <[tab]> + page: <[page].add[1]> + - define contents <[contents].include[<[content_entry]>]> + +settings_menu_render_tabs: + debug: false + type: task + script: - foreach <[tabs]> as:t: - define tab_button <[t]>]]> - definemap content_entry_value: @@ -119,10 +176,133 @@ settings_menu: page: 0 - define content_entry ].as[<[content_entry_value]>]> - define contents <[contents].include[<[content_entry]>]> + +settings_menu_render_settings: + debug: false + type: task + script: - foreach |<[page]>]> as:setting_key: - - define setting_item <[keys].get[<[setting_key]>].get[name]>]]> + - define setting_item <[keys].get[<[setting_key]>].get[name]>;lore=<[keys].get[<[setting_key]>].get[description].split_lines_by_width[128].split[<&nl>].parse_tag[<&7><[parse_value]>]>]]> - definemap content_entry_value: item: <[setting_item]> - - define content_entry ].as[<[content_entry_value]>]> + - define position <[loop_index].mul[9].add[1]> + - define content_entry ].as[<[content_entry_value]>]> + - define data <[keys].get[<[setting_key]>]> + - define type <[data].get[type]> + - choose <[type].to_lowercase>: + - case boolean: + - inject settings_menu_render_settings_boolean + - case number: + - inject settings_menu_render_settings_number + - case list: + - inject settings_menu_render_settings_list + - case text: + - inject settings_menu_render_settings_text + - default: + - debug error "Unknown setting type for <[setting_key]>" + - stop - define contents <[contents].include[<[content_entry]>]> - - run menu_open def.player:<[player]> def.title:Settings def.size:54 def.contents:<[contents]> + +settings_menu_render_settings_boolean: + debug: false + type: task + script: + - define value |<[setting_key]>]> + - define boolean_value_button ].pass[On]]>].fail[Off]]>]> + - definemap content_entry_value: + item: <[boolean_value_button]> + script: settings_menu_set_non_text + definitions: + player: <[player]> + key: <[setting_key]> + value: <[value].not> + tab: <[tab]> + page: <[page]> + - define content_entry <[content_entry].with[<[position].add[8]>].as[<[content_entry_value]>]> + +settings_menu_render_settings_number: + debug: false + type: task + script: + - define value |<[setting_key]>]> + - define increment <[data].get[increment]> + - define decrement_button -<[increment]>]]> + - define increment_button +<[increment]>]]> + - define value_item <[value]>]]> + - definemap content_entry_value: + item: <[decrement_button]> + script: settings_menu_set_non_text + definitions: + player: <[player]> + key: <[setting_key]> + value: <[value].sub[<[increment]>]> + tab: <[tab]> + page: <[page]> + - define content_entry <[content_entry].with[<[position].add[6]>].as[<[content_entry_value]>]> + - definemap content_entry_value: + item: <[increment_button]> + script: settings_menu_set_non_text + definitions: + player: <[player]> + key: <[setting_key]> + value: <[value].add[<[increment]>]> + tab: <[tab]> + page: <[page]> + - define content_entry <[content_entry].with[<[position].add[8]>].as[<[content_entry_value]>]> + - definemap content_entry_value: + item: <[value_item]> + - define content_entry <[content_entry].with[<[position].add[7]>].as[<[content_entry_value]>]> + +settings_menu_render_settings_list: + debug: false + type: task + script: + - define value |<[setting_key]>]> + - define values <[data].get[values]> + - define index <[values].find[<[value]>]> + - define previous_button Previous]]> + - define next_button Next]]> + - define value_item <[value]>]]> + - definemap content_entry_value: + item: <[previous_button]> + script: settings_menu_set_non_text + definitions: + player: <[player]> + key: <[setting_key]> + value: ].pass[<[values].get[-1]>].fail[<[values].get[<[index].sub[1]>]>]> + tab: <[tab]> + page: <[page]> + - define content_entry <[content_entry].with[<[position].add[6]>].as[<[content_entry_value]>]> + - definemap content_entry_value: + item: <[next_button]> + script: settings_menu_set_non_text + definitions: + player: <[player]> + key: <[setting_key]> + value: ]>].pass[<[values].get[1]>].fail[<[values].get[<[index].add[1]>]>]> + tab: <[tab]> + page: <[page]> + - define content_entry <[content_entry].with[<[position].add[8]>].as[<[content_entry_value]>]> + - definemap content_entry_value: + item: <[value_item]> + - define content_entry <[content_entry].with[<[position].add[7]>].as[<[content_entry_value]>]> + +settings_menu_render_settings_text: + debug: false + type: task + script: + - define value |<[setting_key]>]> + - define value_item <[value]>]]> + - define change_button Change]]> + - definemap content_entry_value: + item: <[change_button]> + script: settings_menu_set_text_helper + definitions: + player: <[player]> + key: <[setting_key]> + tab: <[tab]> + page: <[page]> + - define content_entry <[content_entry].with[<[position].add[8]>].as[<[content_entry_value]>]> + - definemap content_entry_value: + item: <[value_item]> + - define content_entry <[content_entry].with[<[position].add[7]>].as[<[content_entry_value]>]> \ No newline at end of file diff --git a/scripts/tabcomplete/tabcomplete_data.dsc b/scripts/tabcomplete/tabcomplete_data.dsc index 4fabf9e..2252cd3 100644 --- a/scripts/tabcomplete/tabcomplete_data.dsc +++ b/scripts/tabcomplete/tabcomplete_data.dsc @@ -76,3 +76,4 @@ tabcomplete_config: - chatcolor - spawn - profiles + - settings