Date: 2015/01/10 05:12:05 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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
###############################################################################################
###############################################################################################
##### #####
##### ~-~-~dViewer API v1.00~-~-~ #####
##### -The scripted replacement for the Denizen Viewer command- #####
##### by Morphan1 #####
##### #####
###############################################################################################
##### #####
##### To create a new dViewer, use... #####
##### - run "s@dViewer Create" "def:ID|PLAYER|LOCATION|VIEWER_TYPE|SIGN_TYPE" #####
##### _________________________________________________________________________________ #####
##### | Definition | Description | Example | #####
##### |--------------|-----------------------------------------|------------------------| #####
##### | ID | The ID of the dViewer, used for saving. | MyViewer | #####
##### | PLAYER | The player to track on the dViewer. | p@Morphan1 | #####
##### | LOCATION | The location to create the sign at. | l@123,123,123,world | #####
##### | VIEWER_TYPE | The type of viewer to create. | location OR logged_in | #####
##### | SIGN_TYPE | The material of the sign. | sign_post OR wall_sign | #####
##### |_________________________________________________________________________________| #####
##### #####
##### To remove a dViewer, use... #####
##### - run "s@dViewer Remove" "def:ID" #####
##### _________________________________________________________________________________ #####
##### | Definition | Description | Example | #####
##### |--------------|-----------------------------------------|------------------------| #####
##### | ID | The ID of the dViewer to remove. | MyViewer | #####
##### |_________________________________________________________________________________| #####
##### #####
###############################################################################################
###############################################################################################
dViewer Events:
type: world
debug: false
events:
on server start:
- foreach <server.flag[viewer-ids].as_list> {
- run "s@dViewer Loop" "def:<def[value]>|<server.flag[viewers.<def[value]>.player]>|<server.flag[viewers.<def[value]>.location]>|<server.flag[viewers.<def[value]>.type]>|<server.flag[viewers.<def[value]>.sign]>"
}
on player breaks block:
- foreach <server.flag[viewer-ids].as_list> {
- if <context.location.block> == <server.flag[viewers.<def[value]>.location]> {
- narrate "<red>You're not allowed to break that sign."
- determine cancelled
}
}
dViewer Create:
type: task
debug: false
definitions: id|player|location|type|sign
script:
- flag global "viewer-ids:->:<def[id]>"
- flag global "viewers.<def[id]>.player:<def[player]>"
- flag global "viewers.<def[id]>.location:<def[location].block>"
- flag global "viewers.<def[id]>.type:<def[type]>"
- flag global "viewers.<def[id]>.sign:<def[sign]>"
- inject "s@dViewer Loop"
dViewer Remove:
type: task
debug: false
definitions: id
script:
- flag global "viewer-ids:<-:<def[id]>"
- queue "id:<server.flag[viewers.<def[id]>.queue]>" clear
- modifyblock <server.flag[viewers.<def[id]>.location]> m@air
- flag global "viewers.<def[id]>:!"
dViewer Loop:
type: task
debug: false
definitions: id|player|location|type|sign
script:
- flag global "viewers.<def[id]>.queue:<queue.id>"
- ^inject locally "path:<def[type]>" "player:<def[player]>"
location:
- wait 1t
- ^define lines "<tern[<player.is_online>]:li@<player.location.block.x>|<player.location.block.y>|<player.location.block.z>|<player.location.world.name>||li@|Player '<player.name>'|is offline>"
- ^sign "type:<def[sign]>" <def[lines]> <def[location]>
- ^inject locally "path:location"
logged_in:
- wait 1t
- ^sign "type:<def[sign]>" "li@|Player '<player.name>'|is <tern[<player.is_online>]:<green>online||<red>offline>" <def[location]>
- ^inject locally "path:logged_in"
dViewer Command:
type: command
debug: false
name: dviewer
description: Creates a custom dViewer at your location.
usage: /dviewer [create/remove] [<<>id<>>] [location/logged_in] (<<>player<>>)
allowed help:
- if <player> != null determine true
else determine false
script:
- define action <context.args.get[1]||>
- if <def[action]> == create {
- define id <context.args.get[2].escaped||>
- define type <context.args.get[3].escaped||>
- define player <context.args.get[4]||<player.name>>
- if <def[id].length> == 0 {
- narrate "Invalid ID given. Usage<&co> <script.yaml_key[usage]>"
- queue clear
}
else if <server.flag[viewer-ids].as_list.contains[<def[id]>]||false> {
- narrate "ID '<def[id]>' is already taken! Please remove it first."
- queue clear
}
else if <def[type].length> == 0 {
- narrate "Invalid type of dViewer given. Usage<&co> <script.yaml_key[usage]>"
- queue clear
}
- run "s@dViewer Create" "def:<def[id]>|<player>|<player.location>|<def[type]>|sign_post"
}
else if <def[action]> == remove {
- define id <context.args.get[2]||>
- if <def[id].length> == 0 {
- narrate "Invalid ID given. Usage<&co> <script.yaml_key[usage]>"
- queue clear
}
else if !<server.flag[viewer-ids].as_list.contains[<def[id]>]||false> {
- narrate "ID '<def[id]>' does not exist. Perhaps it has already been removed?"
- queue clear
}
- run "s@dViewer Remove" "def:<def[id]>"
- narrate "dViewer '<def[id].unescaped>' has been removed."
}