Date: 2018/11/24 21:35:46 UTC-08:00
Type: Denizen Script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Allows a player to set an npc's skin with a url using /npc skin [-u/--url] <url>
# Just drop this file into the Denizen/scripts folder and you're done!
skin_handler:
type: world
debug: false
events:
on npc command:
- if <c.args.get[1]||null> != skin:
- queue clear
- if !<li@-u|--url.contains[<c.args.get[2]||null>]>:
- queue clear
- determine passively fulfilled
- define url <c.args.get[3]||null>
- if <c.server>:
- define npc <server.selected_npc||null>
- else:
- define npc <player.selected_npc||null>
- if <def[npc]> == null:
- narrate "<&a>You must have an NPC selected to execute that command."
- queue clear
- if <def[npc].entity_type> != PLAYER:
- narrate "<&a>You must have a player-type NPC selected."
- queue clear
- if <def[url]> == null:
- narrate "<&a>You must specify a valid skin URL."
- queue clear
- narrate "<&a>Retrieving the requested skin..."
- define key <util.random.uuid>
- define file "tmp-<def[key]>.yml"
# Our own custom ~5s timeout since the builtin doesn't always work
- run skin_url_task def:<def[key]>|<def[url]> id:<def[key]> instantly
- while <queue.exists[<def[key]>]>:
- if <def[loop_index]> > 20:
- queue q@<def[key]> clear
- narrate "<&a>The request timed out. Is the url valid?"
- queue clear
- wait 5t
# Quick sanity check - ideally this should never be true
- if !<server.has_flag[<def[key]>]>:
- queue clear
- if <server.flag[<def[key]>]> == null:
- narrate "<&a>Failed to retrieve the skin from the provided link. Is the url valid?"
- flag server <def[key]>:!
- queue clear
- log <server.flag[<def[key]>]> type:clear file:<def[file]>
- yaml load:../../<def[file]> id:response
- if !<yaml[response].contains[data.texture]>:
- narrate "<&a>An unexpected error occurred while retrieving the skin data. Please try again."
- else:
- narrate "<&e><def[npc].name><&a>'s skin set to <&e><def[url]><&a>."
- adjust <def[npc]> skin_blob:<yaml[response].read[data.texture.value]>;<yaml[response].read[data.texture.signature]>
- flag server <def[key]>:!
- yaml unload id:response
- adjust server delete_file:../../<def[file]>
skin_url_task:
type: task
debug: false
definitions: key|url
script:
- ~webget "https://api.mineskin.org/generate/url" "post:url=<def[url]>" timeout:5s save:res
- flag server <def[key]>:<entry[res].result||null>