settings_set: debug: false type: task definitions: player|key|value script: - define keys - if !<[keys].contains[<[key]>]>: - determine "Key not found: <[key]>" - if <[value]> == null: - determine "Value cannot be null" - define data <[keys].get[<[key]>]> - define type <[data].get[type]> - choose <[type].to_lowercase>: - case boolean: - if <[value]> != true && <[value]> != false: - determine "Value must be true or false" - case number: - define min <[data].get[min]> - define max <[data].get[max]> - if <[value]> < <[min]> || <[value]> > <[max]>: - determine "Value must be between <[min]> and <[max]>" - case list: - define values <[data].get[values]> - if !<[values].contains[<[value]>]>: - determine "Value must be one of the following: <[values].formatted>" - case text: - define max_length <[data].get[max-length]> - define regex <[data].get[regex]> - if <[value].length> > <[max_length]>: - determine "Value must be shorter than <[max_length]> characters" - if !<[value].regex_matches[<[regex]>]>: - determine "Value should match the regex <[regex]>" - default: - determine "Unknown type <[type]>" - define settings <[player].flag[settings].if_null[]> - define settings <[settings].with[<[key]>].as[<[value]>]> - flag <[player]> settings:<[settings]> settings_get: debug: false type: procedure definitions: player|key script: - define keys - if !<[keys].contains[<[key]>]>: - determine null - define settings <[player].flag[settings].if_null[]> - define value <[settings].get[<[key]>].if_null[<[keys].get[<[key]>].get[default]>]> - determine <[value]> settings_all_settings_from_tab: debug: false type: procedure definitions: tab script: - define keys - define keys_in_tab <[keys].keys.filter_tag[<[keys].get[<[filter_value]>].get[tab].equals[<[tab]>]>]> - determine <[keys_in_tab]> settings_all_settings_from_page_from_tab: debug: false type: procedure definitions: tab|page script: - define keys_in_tab ]> - define start_index <[page].mul[4].add[1]> - define end_index <[page].add[1].mul[4]> - determine <[keys_in_tab].get[<[start_index]>].to[<[end_index]>]> settings_menu_is_last_page: debug: false type: procedure definitions: tab|page script: - define keys_in_tab ]> - define end_index <[page].add[1].mul[4]> - determine <[end_index].is_more_than_or_equal_to[<[keys_in_tab].size>]> settings_menu: debug: false type: task definitions: player|tab|page script: - define keys - define tabs - define tab <[tab].if_null[<[tabs].get[1]>]> - 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]>]> - 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]>]> - foreach <[tabs]> as:t: - define tab_button <[t]>]]> - definemap content_entry_value: item: <[tab_button]> script: settings_menu definitions: player: <[player]> tab: <[t]> page: 0 - define content_entry ].as[<[content_entry_value]>]> - define contents <[contents].include[<[content_entry]>]> - foreach |<[page]>]> as:setting_key: - define setting_item <[keys].get[<[setting_key]>].get[name]>]]> - definemap content_entry_value: item: <[setting_item]> - define content_entry ].as[<[content_entry_value]>]> - define contents <[contents].include[<[content_entry]>]> - run menu_open def.player:<[player]> def.title:Settings def.size:54 def.contents:<[contents]>