Date: 2015/08/11 03:53:43 UTC-07: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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# /doorkey tier reset
# /doorkey tier list
# /doorkey tier create hideflags
# /doorkey tier edit display|material|lore|recipe value
# /doorkey tier edit lore [#] value
# /doorkey tier give player
# /doorkey tier remove
# lore: 1|2|3|4
# Enter as many values as you want. However they must be separated by |
# Optionally specify a lore line and then the value.
# recipe: 1|2|3|4|5|6|7|8|9
# Items are set up as below; make sure to use the correct name. For example: diamond_sword
# Separation works as with lores.
# - i@1|i@2|i@3
# - i@4|i@5|i@6
# - i@7|i@8|i@9
# When creating an item use hideflags to remove the data shown on the item such as damage, splash effect or other. For example:
# /doorkey mykey create hideflags
DoorKeys:
type: world
events:
on player clicks block:
- if <context.location.material> !contains "door" {
- queue clear
}
- foreach <server.list_flags> {
- if <fl@%value%.as_list.contains[<context.location.block>]> {
- goto is_locked
}
- if <def[loop_index]> == <server.list_flags.size> {
- queue clear
}
}
- mark is_locked
- foreach <server.list_flags> {
- if <fl@%value%.as_list.contains[<context.location.block>]> {
- define tier <def[value].after[T]>
}
}
- if !<context.item.display.contains[<def[tier]>]> {
- narrate "<red>You need to use the tier <def[tier]> key to open this!"
- determine cancelled
} else {
- narrate "<green>You have used the tier <def[tier]> key!"
}
on doorkey command:
- determine fulfilled passively
- if <player.is_op> || <context.server> {
- goto pass
} else {
- narrate "<red>Must be Operator to use this command!"
- queue clear
}
- mark pass
- define tier <context.args.get[1]>
- choose <context.args.get[2]>:
- case "remove":
- narrate "<red>Removed <def[tier]> key!"
- yaml load:/scripts/doorkeys.dscript id:doorkeys
- yaml set <def[tier]>:! id:doorkeys
- queue clear
- case "give":
- narrate "<green>Giving <def[tier]> key!"
- give i@<def[tier]> to:<context.args.get[3]||<player>>
- queue clear
- case "list":
- narrate "<green>Tier <def[tier]> door keys are currently at<&co>"
- narrate "<green><server.flag[doorkeys_t<def[tier]>]>"
- queue clear
- case "reset":
- flag server doorkeys_t<def[tier]>:none
- narrate "<green>Tier <def[tier]> door keys reset!"
- queue clear
- case "create":
- if !<server.has_file[/scripts/doorkeys.dscript]> {
- yaml create id:doorkeys
- yaml savefile:/scripts/doorkeys.dscript id:doorkeys
}
- yaml load:/scripts/doorkeys.dscript id:doorkeys
- yaml set <def[tier]>.type:item id:doorkeys
- if <context.args.get[3]> == hideflags {
- yaml set "<def[tier]>.material:stone<proc[flags]>" id:doorkeys
- yaml set "<def[tier]>.useflags:true" id:doorkeys
} else {
- yaml set "<def[tier]>.material:stone" id:doorkeys
}
- yaml set "<def[tier]>.display name:<def[tier]>" id:doorkeys
- yaml set "<def[tier]>.lore:|:li@" id:doorkeys
- yaml set "<def[tier]>.recipe:->:recipe1" id:doorkeys
- yaml set "<def[tier]>.recipe:->:recipe2" id:doorkeys
- yaml set "<def[tier]>.recipe:->:recipe3" id:doorkeys
- narrate "<green><def[tier]> key created!"
- yaml savefile:/scripts/doorkeys.dscript id:doorkeys
- execute as_server "denizen reload scripts"
- queue clear
- case "edit":
- if !<yaml[doorkeys].contains[<def[tier]>]> {
- narrate "<red>Key not found!"
- queue clear
}
- if <context.args.get[4]> == null {
- narrate "<red>Please enter a value!"
- queue clear
}
- yaml load:/scripts/doorkeys.dscript id:doorkeys
- define value <context.args.get[4]>
- choose <context.args.get[3]>:
- case "display":
- yaml set "<def[tier]>.display name:<def[value]>" id:doorkeys
- yaml savefile:/scripts/doorkeys.dscript id:doorkeys
- narrate "<green>Display of Key <def[tier]> set to<&co> <def[value]>!"
- execute as_server "denizen reload scripts"
- case "material":
- if <def[tier].as_script.yaml_key[useflags]> == true {
- yaml set <def[tier]>.material:<def[value]><proc[flags]> id:doorkeys
} else {
- yaml set <def[tier]>.material:<def[value]> id:doorKeys
}
- yaml savefile:/scripts/doorkeys.dscript id:doorkeys
- narrate "<green>Material of Key <def[tier]> set to<&co> <def[value]>!"
- execute as_server "denizen reload scripts"
- case "lore":
- if <context.args.get[5]> !== null {
- define lore <context.args.get[5]>
- define line <def[value]>
- if <yaml[doorkeys].read[<def[tier]>.lore].as_list.size> < <def[line]> {
- repeat <def[value].sub[<yaml[doorkeys].read[<def[tier]>.lore].as_list.size>]> {
- yaml set "<def[tier]>.lore:->:<&sp>" id:doorkeys
}
}
- yaml set <def[tier]>.lore[<def[line]>]:<def[lore]> id:doorkeys
- yaml savefile:/scripts/doorkeys.dscript id:doorkeys
- execute as_server "denizen reload scripts"
- narrate "<green>Lore of Key <def[tier].lore> set to<&co> <def[value]>!"
- queue clear
}
- yaml set <def[tier]>.lore:|:li@<def[value]> id:doorkeys
- yaml savefile:/scripts/doorkeys.dscript id:doorkeys
- execute as_server "denizen reload scripts"
- narrate "<green>Lore of Key <def[tier].lore> set to<&co> <def[value]>!"
- case "recipe":
- if <def[value].as_list.size> > 9 {
- narrate "<red>Entered too many items!"
} else if <def[value].as_list.size> < 9 {
- narrate "<red>Not enough items entered!"
} else {
- define value <def[value].as_list>
- yaml set <def[tier]>.recipe[1]:i@<def[value].get[1]><&pipe>i@<def[value].get[2]><&pipe>i@<def[value].get[3]> id:doorkeys
- yaml set <def[tier]>.recipe[2]:i@<def[value].get[4]><&pipe>i@<def[value].get[5]><&pipe>i@<def[value].get[6]> id:doorkeys
- yaml set <def[tier]>.recipe[3]:i@<def[value].get[7]><&pipe>i@<def[value].get[8]><&pipe>i@<def[value].get[9]> id:doorkeys
- yaml savefile:/scripts/doorkeys.dscript id:doorkeys
- inventory open origin in@workbench[contents=li@i@stone]
- narrate "<green>Current crafting recipe<&co>"
- execute as_server "denizen reload scripts"
}
- queue clear
- if <player.location.cursor_on[10].above.material> contains "door" {
- define otherblock <player.location.cursor_on[10].above>
- define text "& <player.location.cursor_on[10].above>"
} else if <player.location.cursor_on[10].below.material> contains "door" {
- define otherblock <player.location.cursor_on[10].below>
- define text "& <player.location.cursor_on[10].below>"
} else {
- define otherblock none
}
- if <server.flag[doorkeys_t<def[tier]>].as_list> contains <player.location.cursor_on[10]> {
- flag server doorkeys_t<def[tier]>:<-:<player.location.cursor_on[10]>
- if <def[otherblock]> !== "none" {
- flag server doorkeys_t<def[tier]>:<-:<def[otherblock]>
}
- narrate "<red><player.location.cursor_on[10].simple> <def[otherblock].simple> removed from the Tier <def[tier]> Door list!"
} else {
- flag server doorkeys_t<def[tier]>:->:<player.location.cursor_on[10]>
- if <def[otherblock]> !== "none" {
- flag server doorkeys_t<def[tier]>:->:<def[otherblock]>
}
- narrate "<green><player.location.cursor_on[10].simple> & <def[otherblock].simple> added to the Tier <def[tier]> Door list!"
}
flags:
type: procedure
script:
- determine "[flags=li@HIDE_ATTRIBUTES|HIDE_DESTROYS|HIDE_ENCHANTS|HIDE_PLACED_ON|HIDE_POTION_EFFECTS|HIDE_UNBREAKABLE]"