Files
denizen-scripts/scripts/wardrobe/wardrobe_tasks.dsc
2025-11-29 22:53:32 +02:00

128 lines
4.9 KiB
Plaintext

####
## TARGET LIBRARY UTILITY FOR FILLING HEADS IN GUI ASYNC
####
# asynchronously and slowly updates all player skulls in any inventory
# each skull you want to change has to be flagged with wardrobe_skull_texture:<[target].uuid>
wardrobe_skull_texture_update:
debug: false
type: task
definitions: player
speed: 2t
script:
- define inventory <[player].open_inventory>
- foreach <[inventory].map_slots> key:slot as:item:
- if <[item].has_flag[wardrobe_skull_texture]>:
- if <[inventory].viewers.if_null[<list[]>].is_empty>:
- stop
- define texture <[item].flag[wardrobe_skull_texture]>
- run wardrobe_skull_texture_update_single def.inventory:<[inventory]> def.slot:<[slot]> def.texture:<[texture]>
# dont use by itself - always use wardrobe_skull_texture_update
# creates a new queue to prevent overloading the main task
wardrobe_skull_texture_update_single:
debug: false
type: task
definitions: inventory|slot|texture
script:
- inventory adjust slot:<[slot]> skull_skin:<[texture]> destination:<[inventory]>
##
wardrobe_max_skins:
debug: false
type: procedure
definitions: player
script:
- define max 9
- while <[max]> > 3:
- if <[player].has_permission[wardrobe.skins.<[max]>]>:
- determine <[max]>
- define max <[max].sub[1]>
- determine <[max]>
wardrobe_texture_decode:
debug: false
type: procedure
definitions: skin_blob
script:
- determine <[skin_blob].split[;].get[1].base64_decode.substring[197,298]>
wardrobe_save_latest:
debug: false
type: task
definitions: player
script:
- define latest_texture <proc[wardrobe_texture_decode].context[<[player].flag[wardrobe_latest]>]>
- define textures <[player].flag[wardrobe_all].values.if_null[<list[]>]>
- if <[textures].contains[<[latest_texture]>]>:
- narrate targets:<[player]> "<&c>You already have your latest Minecraft skin saved in your wardrobe."
- stop
- flag <[player]> wardrobe_all:<[player].flag[wardrobe_all].if_null[<map[]>].with[<[player].flag[wardrobe_latest]>].as[<[latest_texture]>]>
- narrate format:formats_prefix "Saved latest Minecraft skin in your wardrobe."
wardrobe_delete:
debug: false
type: task
definitions: player|skin_blob
script:
- flag <[player]> wardrobe_all:<[player].flag[wardrobe_all].exclude[<[skin_blob]>]>
- narrate format:formats_prefix "Deleted saved skin."
wardrobe_apply:
debug: false
type: task
definitions: player|skin_blob
script:
- adjust <[player]> skin_blob:<[skin_blob]>
- flag <[player]> wardrobe_current:<[skin_blob]>
- narrate format:formats_prefix "Applied saved skin from wardrobe."
wardrobe_clear:
debug: false
type: task
definitions: player
script:
- adjust <[player]> skin:<[player].name>
- flag <[player]> wardrobe_current:!
- narrate format:formats_prefix "Cleared current skin. You are now using your latest Minecraft skin instead."
wardrobe_menu:
debug: false
type: task
definitions: player
script:
- define inventory <inventory[generic[size=54;title=<&f>邑邑邑邑鄇]]>
#
- define max <proc[wardrobe_max_skins].context[<[player]>]>
- define position 31
- define i 0
- foreach <[player].flag[wardrobe_all].if_null[<map[]>]> key:skin_blob as:texture:
- define skinitem <item[player_head]>
- adjust def:skinitem "display:<&e>Skin #<[loop_index]>"
- adjust def:skinitem lore:<list[<&7>Left click to <&a>apply|<&7>Right click to <&c>delete]>
- flag <[skinitem]> wardrobe:<[skin_blob]>
- flag <[skinitem]> wardrobe_skull_texture:<[skin_blob].split[;].get[1]>
- inventory set slot:<[position]> origin:<[skinitem]> destination:<[inventory]>
- define position <[position].add[1]>
- define i <[i].add[1]>
- if <[i].mod[3]> == 0:
- define position <[position].add[6]>
- repeat <element[<[max]>].sub[<[i]>]>:
- define unusedskin <item[wither_skeleton_skull]>
- adjust def:unusedskin "display:<&7>Unused Skin Slot"
- adjust def:unusedskin lore:<list[<&7>Click to <&e>save <&7>your latest Minecraft skin.]>
- inventory set slot:<[position]> origin:<[unusedskin]> destination:<[inventory]>
- define position <[position].add[1]>
- define i <[i].add[1]>
- if <[i].mod[3]> == 0:
- define position <[position].add[6]>
#
- define clearitem <item[warped_trapdoor]>
- adjust def:clearitem "display:<&f>Clear Skin"
- run gui_restore_set_later def.player:<[player]> def.slot:13 def.item:<[clearitem]>
- run gui_restore_set_later def.player:<[player]> def.slot:14 def.item:<[clearitem]>
- run gui_restore_set_later def.player:<[player]> def.slot:15 def.item:<[clearitem]>
#
- inventory open destination:<[inventory]>
- run wardrobe_skull_texture_update def.player:<[player]>