// Emoticons by CommandLeo global_emoticons = { 'Raised Eyebrow' -> 'd12e74a1194e731ffcd4dff02570009f5b4a947de30df5cd220c04d326f0eb87', 'Neutral' -> 'cb80600254ae8a6b65e2c26dca71d1fea5cf01679232d26ae658e64d6c3a0212', 'Expressionless' -> '1b497d21df087f4092ae3ef9249452dfc126bf3e7f295583910b19381ae9eb85', 'No Mouth' -> 'bf1e03da7e1e1eb2a12a4f991b06dffb3be4a7fcc7ab33fe7dbe7ebf9283a65a', 'Smirking' -> 'b62bbc5f291b1968b86155444f4961e9b963506d7f25c9af3de7d871fdb50f0f', 'Unamused' -> '574aee6e8726947c4a9355e5897585f48ae8bf00e261d78e5769c975eddb9462', 'Rolling Eyes' -> 'd7255504f5d9a4aa26ce89b28428e72cc6d9459c100ba22fc4ccc3a1b169b8a0', 'Grimacing' -> '3ebc1c39e87166f4507459a61f2fba2c62ef03b8ecdfa30db09345525745f199', 'Exhaling' -> '40da627f52be9536c1ba7daf722bd51db585343689a4627f5fba95712a35693e', 'Lying' -> '82e2063d7470ab811cc9073d9d0cb270f0a760db01fcbb87b1908d5e395070ed', 'Relieved' -> 'bc8277af4e7f965b17c4369fe680d3fe88b94269b52496c09a1cf5016f7f516e', 'Pensive' -> '6910b22b5f29eef94ab4207484281bb69c5286c161753a154510342a114d718c', 'Sleepy' -> 'f8ce9f566b2431e19ce39f933e32b914d45cd9c5afeea254b0e4ea2afd869101', 'Drooling' -> 'd8e2d0d0c4f1191899edb2403959b5b60842ce39ba3664a9303205fdeacb34bd', 'Sleeping' -> '5c819a42c0b1c25b9e2e0bc1ebb574b4d6690777d3e831d82d3c932116c02bdc', 'Facemask' -> '7f2893e2621986135b4129ed01237b8327e75a56824c57d881c3d22071d2b074', 'Thermometer' -> '7fda21825065916df7cec47e54b9db9c91ae56404d7e274863acbac013042c7c', 'Bandaged' -> '44753c60cb0bb0c30ad2ff73a2329a7d9d9e4f209a833cfbe17dfcafec0cef3c', 'Sick' -> '23b14109b80edcc51c4f1081d765bbc48003159dce6cb6b7c9655687a5e3db87', 'Vomiting' -> '7b2818b6f378acb1cfabbb11cc4f9ac697af8faaf00c36a601b849fa2c1d9f5c', 'Sneezing' -> 'ab03827d1f029ddb4d0932508b375b72c04afac8c4ad60ad87b15c9dc60ba3b6', 'Woozy' -> '1fc76918a21955820153cae8aa1cf163890eca79be5276264f2321bfef4c1a3b', 'Dead' -> '326bd2c90a58da1068eeae185e190b72437dd361fd6d39943b23a29a72fdac8d', 'Spiral Eyes' -> 'e94c1a01bc1210f874c81efe756208fa2e69987838fa5e77f45db1eeddbaf172', 'Exploding Head' -> 'f4367b9220c7c0df371e4ea05b86e771c8be2643b39513513f5407146e16e2a3', 'Cowboy' -> 'ffd39646e24e6a4e62d0cc8a22b6a8f952bef8ce9bae274bf2d11a82c2e7cd3a', 'Sad Cowboy' -> '4476b4bead71e84d080cebd405dc31d8b4aea740feac1b7224814052f260dd4d', 'Partying' -> '525eed8fb447e481c011511062da8b77a228d8fc59a68213f84d63af10e7b53a', 'Disguised' -> 'b9c9e8d96f11220d5f30c91941317c0b22b566f823243af6f91b169d5ce7b4', 'Sunglasses' -> '71a11a03d6bc75b144be85848556a15f358ee6a65e0466f6c8b706e7f9bcf14', 'Nerd' -> '8d394fec5275b584ce6877a273600d04e06c4abbd480bbabb655c81a6ddb1723', 'Monocle' -> '858f5b1fbfe7395787fcf833b0b5832e74368fe539c9e59e494ede1536794fc2', 'Confused' -> '8c16b33a589f8881a65222e1c52f32dc7bca335a7c7305b41ae33cd5925f973d', 'Diagonal' -> 'e8eb9bf1de3e37b5fd9fd5f92dfaa0603de9f0bafcdee0348b2729be71cc0141', 'Worried' -> '4e3075b6e592e42e3007d4325a51aa593d91f46dc23f1059aa2c319cf385a605', 'Frowning' -> '72484eaa4b947825efe87c14d752aa64604a94c08b238f29d6f384ac5fc08186', 'Slightly Frowning' -> '3c26d4e12e8955339e719aebddd23b1d1cc7367426e7be8c1cd0f073f3eeb51d', 'Open Mouth' -> '35732e461f5e51c7b2b8ff1a853fdfdb833b3992d3985b0aade74d0c724a8596', 'Hushed' -> 'bcca0b9961e7806d0d3aa0d0a26b29952ca2638d9949b40df641d99eaf7eb66', 'Astonished' -> 'f40eb7298cd58a0e9edd8595ca3fcf9f0095c4c645d77d234f050c274f0ac4cf', 'Flushed' -> '679d722bf836318fd11eec260fa9fd32e28f19f503d669f2591877d8285eb6c3', 'Pleading' -> '7fe4be5ac79baaf26ef02af0ec84096271b807d5b04f139693455e1843ff60f0', 'Holding Back Tears' -> 'f4f5c69169f5d651abd27d624e0d02065a8d9e9a0dfffdaec323a3f2c6800327', 'Open Mouth Frowning' -> '93904f070fcf4a954f74fd3a1bc2ef8fa72aef00b2eee31dd0326bf9d4418de6', 'Anguished' -> 'f90ae4ea93ce6f81fc0920ebefc18d296b8137943a9a1fbbbe8c51c982425f0d', 'Fearful' -> 'd437661731132e87dbf5358920ea1925fa7f526e52c37ffc3090a183450826d6', 'Anxious' -> 'a81a2c7af057ee78544aa5a81657dfc05f20834eb8c76fd8b7f7a77a6a8b5bc6', 'Sad but Relieved' -> '9c140c1baabf29fb5de4a620d5dbf79fa877f584e3ef93919e91ff91b3642441', 'Crying' -> '150fc33f30791ec06a52f19869e051f32bab183787a34fdc1ff038b9946c9f7f', 'Sobbing' -> 'e8feeca56cc0aabaac46ad4036690cdc66da3c9f2c85c371b67952fe73898f04', 'Screaming' -> '8ac2472f011785092152071e82150269a16633b907bd100fc7fe30cd431c63a0', 'Confounded' -> '87ef8f9f9bcf8352127276eab45a050ea5850a9698c05f140cf57cbd60c5cc95', 'Persevering' -> '470a5739f9030a9b5657755c3ec121d636949113304d3974a45c6b9272c728ed', 'Disappointed' -> '63fb3a62ec6bf481aa35e7d2450afe9e7cf80a039854a97ac655e7a5ed76dd55', 'Downcast Sweat' -> '4ce58fe0e6aa494a202df3446f03d3b9c85febcb73ed4935949b15e1adf45363', 'Weary' -> 'fd60200a52687fc8af137c6b969cbf894abf240b942a2f4967155afa413afc6b', 'Tired' -> '5751e703b33e7d90a553e59011cf341ca71ad50bc35a4f9c5afe59ebebc77140', 'Triumph' -> '3a4bd22473a17eb832feaf8ace8f7461b56a597848b134c8af1b8d521dc3e4f0', 'Angry' -> 'a79812621484cd2f0b0158d83ca39fef48024f0be588a5a5d23238b3afe90d99', 'Grinning' -> '551c8e23ddf916cf15e69615dea1dce20e697b9bbf9f28840c42ab929745128e', 'Grinning Big Eyes' -> 'd1207ffe69f06f7b8173bf5b924c4d8f7976383c7e59dce538ffa63af84d7595', 'Smiling Closed Eyes' -> '408ffac078376cfd47de892904d014a8e0c56f4924575d400264a7c62607df65', 'Laughing' -> '72cdc8bc85e0bd034de2b0ebc4f207afd82c782665460412da98e6deeafc254f', 'Beaming' -> '2d0613b34b6bd90a7192eba424d38a55bfa6dbde44501c1fffe25c7ce3a2ba11', 'Sweating Smiling' -> '2274eec9cab2710eb225f53d6053a0913b143fa42dbec24e7c99ed0008124daf', 'ROFL' -> 'b003750d959cd5685ce4697ff6d3ff6b1d8f2f40afbf1ff625393fa071b4681a', 'Laughing Crying' -> 'f6f9ac4d15c7905e1f96d14e86d53dad89e690d1dcb1072f4e1d987c2d88bfd3', 'Laughing Crying (Open Eyes)' -> '67bf4532a532c2933d61dc02cc72386829716893441a47330d8258f3046a713a', 'Slight Smile' -> '3c5aca29950e5b05ea81932f90bc52e8d14757b7e0eeb3909ab79ad98151ba7e', 'Smile' -> 'a9d977c57ba7543990ed289aa2d0e0e9aca846056d52491079c63c5dc756d0b0', 'Upside Down' -> '39fee8acaee2e327c0077d6c0a44b4817575f370ea0c41844d04af213aba4916', 'Melting' -> 'ad88eb70318eb7fb8f486674014d4ccd1c27ffc37e804c0f6e23ead81a561dd7', 'Winking' -> 'bbdaf6d8469dd476db3c2a7e66e7bd511d852d4a242e3c9e5a2256b4498bf84b', 'Smiling Blush' -> 'dfeb3f8484e811d40b57e1463b14bde0ae5e1fcfc4153d61e1f7ee813252c7da', 'Angel' -> 'c48d16aaea9214641cc69a0d2d26367ac3ef75a47decfdfff7c7db5864e6c14f', 'Smiling Hearts' -> 'b0bd22c2f95b648fee0003241f4eb5f22b5779f99eefc847e984916a4be99ace', 'Heart Eyes' -> '1d0f2925df37fbd5f80829cafb3e9e9ac00f75a991b2131c26e0b2198e300018', 'Starstruck' -> 'e9e30866ea82f30b0c15691deacfc6311fdd4cb8740fc4aa8f4302ffe0e8dc5a', 'Blowing Kiss' -> '47b7a9c64f7aa04c46a596003b145113494877ecbf656ea97320e624d25680f', 'Kissing' -> 'fc16c51ef7bd2c1a558a941d46a19b8e2a91a53817603de382ac8462da46d13f', 'Smiling' -> '1d0018edadc58ee8dbd120a17f1e9a985bd52fb45998a6a6479eff8ff767b768', 'Kissing Blush' -> '4595e2302700452dc1ac990ba61bcdf89331998a896989dd659e3a6039aabae2', 'Kissing Closed Eyes' -> '3c4ef82732d8d8b1824436227fce10fbb57e6faa1ba976ad0cb8e369ef52ff74', 'Smiling Tear' -> '624711f6b9792b104d29992e93d1431d90e804026cdb52234d4463f05db0123b', 'Yummy' -> '7a63d49d8a9f0f03e6a6a2296ceb6f45c740dfcee71f236705b8b6409253a9f7', 'Tongue' -> 'b044971538922eff82349882517b334ffbefb86480e7f65a73c15d2738d998f9', 'Winking Tongue' -> '9cef234b3fe6b492ee9b8f1e26341e30036f8a51dd89cdc86e8173481eac8003', 'Tongue Closed Eyes' -> '79d064dfa577d2b0661b24499fb3b2d8f6cab50571fcc61c79ee5532f00e1e1e', 'Zany' -> 'ca5ed182bd9cec8ad7c0797cab7c3776d3d7f4fa800a89359fc6f3fffa9c1255', 'Money Mouth' -> '406ac74d3270e4813efc3d4bd235ce4daeb790d02b1e61a7c29768fcb96890ea', 'Shushing' -> 'cf78f252cec21eb4e6ae8d70b89faf617d1e9fc92eb6949050542c500028ffd', 'Thinking' -> 'd070b22e255702d3252ff57aadb7432c2f41fd516f500e3715567f8e0d6618af', 'Zipper' -> '92ebe9ade5c6640f84c38dba4690d21d05a169efce52792a4e97d2fdfb4f0bbc', }; global_emoticons = sort(pairs(global_emoticons)); __config() -> { 'commands' -> { '' -> 'emoticonMenu', '' -> 'equipEmoticon', 'random' -> 'randomEmoticon' }, 'arguments' -> { 'emoticon' -> { 'type' -> 'term', 'options' -> map(global_emoticons, lower(replace(replace(_:0, '\\(|\\)', ''), ' ', '_'))), 'case_sensitive' -> false } }, 'requires' -> { 'carpet' -> '>=1.4.57' }, 'scope' -> 'player' }; _getHeadNbt(name, hash) -> ( head_name = str('{"text":"%s","italic":false}', name); value = encode_b64(encode_json({'textures' -> {'SKIN' -> {'url' -> str('http://textures.minecraft.net/texture/%s', hash)}}})); return(if(system_info('game_pack_version') >= 33, { 'custom_name' -> head_name, 'profile' -> {'properties' -> [{'name' -> 'textures', 'value' -> value}]} }, { 'display' -> {'Name' -> head_name}, 'SkullOwner' -> {'Properties' -> {'textures' -> [{'Value' -> value}]}} } ); )); emoticonMenu() -> ( pages = map(range(length(global_emoticons) / 45), slice(global_emoticons, _i * 45, min(length(global_emoticons), (_i + 1) * 45))); _setMenuInfo(screen, pages_length) -> ( name = str('\'{"text":"Page %d/%d","color":"gold","italic":false}\'', global_page % pages_length + 1, pages_length); lore = [str('\'{"text":"%s entries","color":"gray","italic":false}\'', length(global_emoticons))]; inventory_set(screen, 49, 1, 'paper', if(system_info('game_pack_version') >= 33, {'components' -> {'custom_name' -> name, 'lore' -> lore}, 'id' -> 'paper'}, {'display' -> {'Name' -> name, 'Lore' -> lore}})); ); _setMenuItems(screen, page) -> ( loop(45, inventory_set(screen, _, , if(_ < length(page), 1, 0), 'player_head', if(system_info('game_pack_version') >= 33, {'components' -> encode_nbt(_getHeadNbt(...page:_)), 'id' -> 'player_head'}, encode_nbt(_getHeadNbt(...page:_))))); ); global_page = 0; screen = create_screen(player(), 'generic_9x6', 'Emoticons', _(screen, player, action, data, outer(pages)) -> ( if(length(pages) > 1 && action == 'pickup' && (data:'slot' == 48 || data:'slot' == 50), page = if(data:'slot' == 48, pages:(global_page += -1), data:'slot' == 50, pages:(global_page += 1)); _setMenuInfo(screen, length(pages)); _setMenuItems(screen, page); ); if(action == 'pickup' && data:'slot' == 53, randomEmoticon()); if(action == 'pickup' && 0 <= data:'slot' <= 45, i = inventory_get(screen, data:'slot'); if(i, inventory_set(player, 39, 1, 'player_head', i:2); run('playsound block.note_block.pling master @s'); ); ); if(action == 'pickup_all' || action == 'quick_move' || (action != 'clone' && data:'slot' != null && 0 <= data:'slot' <= 44) || (45 <= data:'slot' <= 53), return('cancel')); )); _setMenuItems(screen, pages:0); for(range(45, 54), inventory_set(screen, _, 1, 'gray_stained_glass_pane', if(system_info('game_pack_version') >= 33, {'components' -> {'hide_tooltip' -> {}}, 'id' -> 'gray_stained_glass_pane'}, {'display' -> {'Name' -> '\'{"text":""}\''}}))); _setMenuInfo(screen, length(pages)); random_emoticon_head_nbt = _getHeadNbt('Random Emoticon', 'da99b05b9a1db4d29b5e673d77ae54a77eab66818586035c8a2005aeb810602a'); inventory_set(screen, 53, 1, 'player_head', if(system_info('game_pack_version') >= 33, {'components' -> encode_nbt(random_emoticon_head_nbt), 'id' -> 'player_head'}, encode_nbt(random_emoticon_head_nbt))); if(length(pages) > 1, previous_page_name = '\'{"text":"Previous page","color":"gold","italic":false}\''; next_page_name = '\'{"text":"Next page","color":"gold","italic":false}\''; inventory_set(screen, 48, 1, 'arrow', if(system_info('game_pack_version') >= 33, {'components' -> {'custom_name' -> previous_page_name}, 'id' -> 'arrow'}, {'display' -> {'Name' -> previous_page_name}})); inventory_set(screen, 50, 1, 'arrow', if(system_info('game_pack_version') >= 33, {'components' -> {'custom_name' -> next_page_name}, 'id' -> 'arrow'}, {'display' -> {'Name' -> next_page_name}})); ); ); equipEmoticon(name) -> ( emoticon = first(global_emoticons, lower(replace(replace(_:0, '\\(|\\)', ''), ' ', '_')) == name); if(!emoticon, exit(print(format('r No emoticon found')))); inventory_set(player(), 39, 1, 'player_head', if(system_info('game_pack_version') >= 33, {'components' -> encode_nbt(_getHeadNbt(...emoticon)), 'id' -> 'player_head'}, encode_nbt(_getHeadNbt(...emoticon)))); run('playsound block.note_block.pling master @s'); ); randomEmoticon() -> ( head_nbt = _getHeadNbt(...rand(global_emoticons)); inventory_set(player(), 39, 1, 'player_head', if(system_info('game_pack_version') >= 33, {'components' -> encode_nbt(head_nbt), 'id' -> 'player_head'}, encode_nbt(head_nbt))); run('playsound block.note_block.pling master @s'); );