# $ ██ [ [c]usage: # - ██ | [c]/skin help | Shows this list in-game # - ██ | [c]/skin set name | Sets a skin by the name you saved - # - ██ | if it doesn't exist, you'll get whatever that player's name's skin is! # - ██ | [c]/skin reset | Resets your skin to your default skin # - ██ | [c]/skin rename old_name new_name | Renames a skin from old_name to the new_name specified # - ██ | [c]/skin save player_name | Saves a skin by the player_name's skin # - ██ | [c]/skin save name url (slim) | Saves a skin by the URL pasted - optionally making # - ██ | it slim if specified - defaults to regular / nothing # - ██ | [c]/skin list | Lists the skins you've saved # - ██ | [c]/skin delete name | Deletes a skin by the name you saved skin_command: type: command name: skin debug: true description: Manages your player's skin. usage: /skin reset/set <<>name<>>/save <<>player_name<>>/save <<>name<>> <<>URL<>> (slim)/list/delete <<>name<>>/rename <<>old name<>> <<>new name<>> tab complete: - define commands - if : - determine <[commands]> - define arg_count - if "": - define arg_count:++ - if <[arg_count]> == 1: - determine <[commands].filter[starts_with[]]> - else if <[arg_count]> == 2 && && : - determine ]]> - else if <[arg_count]> == 4 && == save: - determine ]]> syntax: - narrate "<&[base]>Available skin commands: <&[emphasis]>, <&[emphasis]>]> <&b> <&[base]>or <&6>/<&[emphasis]>skin help<&[base]> for help!" - stop script: # @ ██ [ Check for args ] ██ - if : - inject skin_command.syntax - choose : # @ ██ [ /skin help - Shows the list of /skin commands ] ██ - case help: - narrate "<&b><&sp.repeat[20].strikethrough><&b>[ <&6>/<&[emphasis]>skin <&[base]>command help list <&b>]<&sp.repeat[20].strikethrough>" - narrate "<&[emphasis]>/skin help <&b> <&[base]> Shows this list!" - narrate "<&[emphasis]>/skin set <&6><<><&[emphasis]>name<&6><>> <&b> <&[base]> Sets a skin by the name you saved - if it doesn't exist, you'll get whatever that player's name's skin is!" - narrate "<&[emphasis]>/skin reset <&b> <&[base]> Resets your skin to your default skin" - narrate "<&[emphasis]>/skin rename <&6><<><&[emphasis]>old_name<&6><>> <<><&[emphasis]>new_name<&6><>> <&b> <&[base]> Renames a skin from old_name to the new_name specified" - narrate "<&[emphasis]>/skin save <&6><<><&[emphasis]>player_name<&6><>> <&b> <&[base]> Saves a skin of the player_name's skin" - narrate "<&[emphasis]>/skin save <&6><<><&[emphasis]>name<&6><>> <&6><<><&[emphasis]>url<&6><>> <&6>(<&[emphasis]>slim/regular<&6>) <&b> <&[base]> Saves a skin by the URL pasted - optionally making it slim if specified" - narrate "<&[emphasis]>/skin list <&b> <&[base]> Lists the skins you've saved" - narrate "<&[emphasis]>/skin delete <&6><<><&[emphasis]>name<&6><>> <&b> <&[base]> Deletes a skin by the name you saved" # @ ██ [ /skin reset - Resets the player's skin to their own ] ██ - case reset: - adjust skin: - narrate "<&[base]>Skin reset." # @ ██ [ /skin set - Sets the player's skin to the they save their skin as ] ██ - case set: - if == 1: - narrate "<&[error]>You have to specify a name to set your skin to." - stop - if != 2: - inject skin_command.syntax # @ ██ [ Check if player saved skin ] ██ - define skin_name - define original_skin - if ]>: # @ ██ [ Skin the owner player's skin if skin name not saved ] ██ - adjust skin_blob:]> - narrate "<&[base]>Skin set to: <&[emphasis]><[skin_name]><&[base]>." - stop - else if !<[skin_name].matches_character_set[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_]>: - narrate "<&[emphasis]><[skin_name]> <&[error]>is not a valid player name." - stop - adjust skin:<[skin_name]> - if <[original_skin]> == : - narrate "<&[error]>An unexpected error occured using the player name <&[emphasis]><[skin_name]><&[error]>. Is it a valid player with a skin?" - else: - narrate "<&[base]>Skin set to: <&[emphasis]><[skin_name]><&[base]>." # @ ██ [ /skin save - Saves a skin by the player_name's skin ] ██ # @ ██ [ /Skin save name URL (slim) | Saves a skin by the URL pasted - optionally making it slim if specified ] ██ - case save: - if == 1: - narrate "<&[error]>You must specify either a player's name or a name and a URL of the skin you want to save." - stop - if > 4: - inject skin_command.syntax - define skin_name # @ ██ [ Check if the player already has a skin saved as this name ] ██ - if ]>: - narrate "<&[error]>You already have a skin saved under the name <&[emphasis]><[skin_name]><&[error]>." - stop # @ ██ [ Check if specifying a player's name instead of name&URL ] ██ - if == 2: - if !<[skin_name].matches_character_set[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_]>: - narrate "<&[emphasis]><[skin_name]> <&[error]>is not a valid player name." - stop - define original_skin - adjust skin:<[skin_name]> - if <[original_skin]> == : - narrate "<&[error]>An unexpected error occured using the player name <&[emphasis]><[skin_name]><&[error]>. Is it a valid player with a skin?" - else: - flag player super_suit_saved_skins.<[skin_name]>: - narrate "<&[base]>Skin saved and set to: <&[emphasis]><[skin_name]><&[base]>." - stop - define skin_url - if <[skin_url]> == null: - narrate "<&[error]>You must specify a valid skin URL." - stop - define skin_model - if !<[skin_url].before[?].ends_with[.png]>: - narrate "<&[error]>That URL isn't likely to be valid. Make sure you have a direct image URL, ending with <&[emphasis]>'.png'<&[error]>." # @ ██ [ Validate skin model ] ██ - if !<[skin_model].advanced_matches_text[slim|regular]>: - narrate "<&[error]>You can only specify regular/nothing for the default model type, or the slim model type." - stop # @ ██ [ webget skin from api ] ██ - narrate "<&[base]>Retrieving the requested skin..." - run skin_url_task def:<[skin_url]>|<[skin_model]> save:new_queue - while == running: - if <[loop_index]> > 120: - queue clear - narrate "<&[error]>The request timed out. Is the url valid?" - stop - wait 5t - if == null: - narrate "<&[error]>Failed to retrieve the skin from the provided link. Is the url valid?" - stop - define result_data ]> - if !<[result_data].contains[data]>: - narrate "<&[error]>An unexpected error occurred while retrieving the skin data. Please try again." - stop # @ ██ [ Save & adjust the player's skin ] ██ - define original_skin - define skin_blob <[result_data].get[data.texture.value]>;<[result_data].get[data.texture.signature]> - adjust skin_blob:<[skin_blob]> - if <[original_skin]> == : - narrate "<&[error]>An unexpected error occured using the URL:<&[emphasis]><[skin_url]><&[error]>. Is it a valid URL?" - else: - flag player super_suit_saved_skins.<[skin_name]>:<[skin_blob]> - narrate "<&[base]>Skin saved and set to: <&[emphasis]><[skin_name]>" # @ ██ [ /delete - Deletes the player's saved skin by this name ] ██ - case delete: - if == 1: - if : - narrate "<&[error]>You have to specify a skin name to delete." - else: - narrate "<&[error]>You have to specify a skin name to delete, but have no skins to delete anyways!" - stop - if != 2: - inject skin_command.syntax # @ ██ [ Check if name to delete even exists ] ██ - define skin_name - if : - if !]>: - narrate "<&[error]>There's no skin saved under the name <&[emphasis]><[skin_name]><&[error]>." - stop - else: - narrate "<&[error]>You have no skins saved." - stop - define skin_blob ]> - flag player super_suit_saved_skins.<[skin_name]>:! - narrate "<&[base]>Deleted the skin saved under the name: <&[emphasis]><[skin_name]>" # @ ██ [ /skin list - Shows you the list of saved skins ] ██ - case list: - if != 1: - inject skin_command.syntax # @ ██ [ Check if player even has skins ] ██ - if !: - narrate "<&[error]>You have no saved skins." - stop - narrate "<&[base]>Available skins saved: <&[emphasis]>, <&[emphasis]>]>" # @ ██ [ /skin rename - Renames a skin from to ] ██ - case rename: - if != 3: - inject skin_command.syntax # @ ██ [ Check if player even has skins ] ██ - if !: - narrate "<&[error]>You have no saved skins." - stop # @ ██ [ Check if old skin name is valid ] ██ - define old_skin_name - if : - if !]>: - narrate "<&[error]>You don't have a skin saved under the name <&[emphasis]><[old_skin_name]><&[error]>" - stop # @ ██ [ Check if new skin name exists already ] ██ - define new_skin_name - if ]>: - narrate "<&[base]>The specified skin name already exists: <&[emphasis]><[new_skin_name]><&[base]>." - stop # @ ██ [ Swaperonies ] ██ - define skin_blob ]> - flag player super_suit_saved_skins.<[new_skin_name]>:<[skin_blob]> - flag player super_suit_saved_skins.<[old_skin_name]>:! - narrate "<&[base]>Renamed the skin: <&[emphasis]><[old_skin_name]> <&[base]>to: <&[emphasis]><[new_skin_name]><&[base]>." # @ ██ [ /skin - This is when a player types a skin command that doesn't exist, like /skin lasagna ] ██ - default: - inject skin_command.syntax # - Thanks mergu & mcmonkey skin_url_task: type: task debug: false definitions: url|model script: - define req https://api.mineskin.org/generate/url - if <[model]> == slim: - define req <[req]>?model=slim - ~webget <[req]> post:url=<[url]> timeout:30s save:web_result - determine