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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
|
package me.fatpigsarefat.quests.commands;
import me.fatpigsarefat.quests.Quests;
import me.fatpigsarefat.quests.obj.Messages;
import me.fatpigsarefat.quests.obj.Options;
import me.fatpigsarefat.quests.player.QPlayer;
import me.fatpigsarefat.quests.player.questprogressfile.QuestProgressFile;
import me.fatpigsarefat.quests.quests.Category;
import me.fatpigsarefat.quests.quests.Quest;
import me.fatpigsarefat.quests.quests.tasktypes.TaskType;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.UUID;
public class CommandQuests implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (Quests.getInstance().isBrokenConfig()) {
sender.sendMessage(ChatColor.RED + "You have a YAML error in your config and Quests cannot load. If this is your first time using Quests, please " +
"delete the Quests folder and RESTART (not reload!) the server. If you have modified the config, check for errors in a YAML parser.");
return true;
}
if (args.length >= 1 && args[0].equalsIgnoreCase("help")) {
showHelp(sender);
return true;
}
if (args.length == 0 && sender instanceof Player) {
Player player = (Player) sender;
QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId());
qPlayer.openQuests();
return true;
} else if (args.length >= 1) {
if ((args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("admin")) && sender.hasPermission("quests.admin")) {
if (args.length == 2) {
if (args[1].equalsIgnoreCase("opengui")) {
showAdminHelp(sender, "opengui");
return true;
} else if (args[1].equalsIgnoreCase("moddata")) {
showAdminHelp(sender, "moddata");
return true;
} else if (args[1].equalsIgnoreCase("reload")) {
Quests.getInstance().reloadConfig();
Quests.getInstance().reloadQuests();
sender.sendMessage(ChatColor.GRAY + "Quests was reloaded.");
return true;
} else if (args[1].equalsIgnoreCase("types")) {
sender.sendMessage(ChatColor.GRAY + "Registered task types:");
for (TaskType taskType : Quests.getTaskTypeManager().getTaskTypes()) {
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + taskType.getType());
}
sender.sendMessage(ChatColor.DARK_GRAY + "View info using /q a types [type].");
return true;
} else if (args[1].equalsIgnoreCase("update")) {
sender.sendMessage(ChatColor.GRAY + "Checking for updates...");
new BukkitRunnable() {
@Override
public void run() {
Quests.getUpdater().check();
if (Quests.getUpdater().isUpdateReady()) {
sender.sendMessage(Quests.getUpdater().getMessage());
} else {
sender.sendMessage(ChatColor.GRAY + "No updates were found.");
}
}
}.runTaskAsynchronously(Quests.getInstance());
return true;
}
} else if (args.length == 3) {
if (args[1].equalsIgnoreCase("opengui")) {
showAdminHelp(sender, "opengui");
return true;
} else if (args[1].equalsIgnoreCase("moddata")) {
showAdminHelp(sender, "moddata");
return true;
} else if (args[1].equalsIgnoreCase("types")) {
TaskType taskType = null;
for (TaskType task : Quests.getTaskTypeManager().getTaskTypes()) {
if (task.getType().equals(args[2])) {
taskType = task;
}
}
if (taskType == null) {
sender.sendMessage(Messages.COMMAND_TASKVIEW_ADMIN_FAIL.getMessage().replace("{task}", args[2]));
} else {
sender.sendMessage(ChatColor.RED + "Task type: " + ChatColor.GRAY + taskType.getType());
sender.sendMessage(ChatColor.RED + "Author: " + ChatColor.GRAY + taskType.getAuthor());
sender.sendMessage(ChatColor.RED + "Description: " + ChatColor.GRAY + taskType.getDescription());
}
return true;
}
} else if (args.length == 4) {
if (args[1].equalsIgnoreCase("opengui")) {
if (args[2].equalsIgnoreCase("q") || args[2].equalsIgnoreCase("quests")) {
Player player = Bukkit.getPlayer(args[3]);
if (player != null) {
QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer != null) {
qPlayer.openQuests();
sender.sendMessage(Messages.COMMAND_QUEST_OPENQUESTS_ADMIN_SUCCESS.getMessage().replace("{player}", player.getName()));
return true;
}
}
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3]));
return true;
}
showAdminHelp(sender, "opengui");
return true;
} else if (args[1].equalsIgnoreCase("moddata")) {
Player player;
OfflinePlayer ofp;
UUID uuid;
String name;
if ((player = Bukkit.getPlayer(args[3])) != null) {
uuid = player.getUniqueId();
name = player.getName();
} else if ((ofp = Bukkit.getOfflinePlayer(args[3])) != null) {
uuid = ofp.getUniqueId();
name = ofp.getName();
} else {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3]));
return true;
}
if (args[2].equalsIgnoreCase("fullreset")) {
if (Quests.getPlayerManager().getPlayer(uuid) == null) {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_LOADDATA.getMessage().replace("{player}", name));
Quests.getPlayerManager().loadPlayer(uuid, true);
}
if (Quests.getPlayerManager().getPlayer(uuid) == null) {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_NODATA.getMessage().replace("{player}", name));
return true;
}
QuestProgressFile questProgressFile = Quests.getPlayerManager().getPlayer(uuid).getQuestProgressFile();
questProgressFile.clear();
questProgressFile.saveToDisk();
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_FULLRESET.getMessage().replace("{player}", name));
return true;
}
if (Quests.getPlayerManager().getPlayer(uuid).isOnlyDataLoaded()) {
Quests.getPlayerManager().removePlayer(uuid);
}
showAdminHelp(sender, "moddata");
return true;
}
} else if (args.length == 5) {
if (args[1].equalsIgnoreCase("opengui")) {
if (args[2].equalsIgnoreCase("c") || args[2].equalsIgnoreCase("category")) {
if (!Options.CATEGORIES_ENABLED.getBooleanValue()) {
sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DISABLED.getMessage());
return true;
}
Category category = Quests.getQuestManager().getCategoryById(args[4]);
if (category == null) {
sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.getMessage().replace("{category}", args[4]));
return true;
}
Player player = Bukkit.getPlayer(args[3]);
if (player != null) {
QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer != null) {
qPlayer.openCategory(category);
sender.sendMessage(Messages.COMMAND_QUEST_OPENCATEGORY_ADMIN_SUCCESS.getMessage().replace("{player}", player.getName())
.replace("{category}", category.getId()));
return true;
}
}
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3]));
return true;
}
} else if (args[1].equalsIgnoreCase("moddata")) {
boolean success = false;
Player player;
OfflinePlayer ofp;
UUID uuid;
String name;
if ((player = Bukkit.getPlayer(args[3])) != null) {
uuid = player.getUniqueId();
name = player.getName();
} else if ((ofp = Bukkit.getOfflinePlayer(args[3])) != null) {
uuid = ofp.getUniqueId();
name = ofp.getName();
} else {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_PLAYERNOTFOUND.getMessage().replace("{player}", args[3]));
return true;
}
if (Quests.getPlayerManager().getPlayer(uuid) == null) {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_LOADDATA.getMessage().replace("{player}", name));
Quests.getPlayerManager().loadPlayer(uuid, true);
}
if (Quests.getPlayerManager().getPlayer(uuid) == null) {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_NODATA.getMessage().replace("{player}", name));
success = true;
}
QuestProgressFile questProgressFile = Quests.getPlayerManager().getPlayer(uuid).getQuestProgressFile();
Quest quest = Quests.getQuestManager().getQuestById(args[4]);
if (quest == null) {
sender.sendMessage(Messages.COMMAND_QUEST_START_DOESNTEXIST.getMessage().replace("{quest}", args[4]));
success = true;
return true;
}
if (args[2].equalsIgnoreCase("reset")) {
questProgressFile.generateBlankQuestProgress(quest.getId());
questProgressFile.saveToDisk();
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_RESET_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
success = true;
} else if (args[2].equalsIgnoreCase("start")) {
int response = questProgressFile.startQuest(quest);
if (response == 1) {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILLIMIT.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
return true;
} else if (response == 2) {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCOMPLETE.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
return true;
} else if (response == 3) {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCOOLDOWN.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
return true;
} else if (response == 4) {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILLOCKED.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
return true;
} else if (response == 5) {
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILSTARTED.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
return true;
}
questProgressFile.saveToDisk();
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
success = true;
} else if (args[2].equalsIgnoreCase("complete")) {
questProgressFile.completeQuest(quest);
questProgressFile.saveToDisk();
sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId()));
success = true;
}
if (Quests.getPlayerManager().getPlayer(uuid).isOnlyDataLoaded()) {
Quests.getPlayerManager().removePlayer(uuid);
}
if (!success) {
showAdminHelp(sender, "moddata");
}
return true;
}
}
showAdminHelp(sender, null);
return true;
}
if (sender instanceof Player && (args[0].equalsIgnoreCase("q") || args[0].equalsIgnoreCase("quests"))) {
Player player = (Player) sender;
if (args.length >= 2) {
Quest quest = Quests.getQuestManager().getQuestById(args[1]);
if (quest == null) {
sender.sendMessage(Messages.COMMAND_QUEST_START_DOESNTEXIST.getMessage().replace("{quest}", args[1]));
} else {
QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId());
if (qPlayer == null) {
// shit + fan
sender.sendMessage(ChatColor.RED + "An error occurred finding your player.");
} else {
qPlayer.getQuestProgressFile().startQuest(quest);
}
}
return true;
}
} else if (sender instanceof Player && (args[0].equalsIgnoreCase("c") || args[0].equalsIgnoreCase("category"))) {
if (!Options.CATEGORIES_ENABLED.getBooleanValue()) {
sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DISABLED.getMessage());
return true;
}
Player player = (Player) sender;
if (args.length >= 2) {
Category category = Quests.getQuestManager().getCategoryById(args[1]);
if (category == null) {
sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.getMessage().replace("{category}", args[1]));
} else {
QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId());
qPlayer.openCategory(category);
return true;
}
return true;
}
}
showHelp(sender);
return true;
} else {
sender.sendMessage(ChatColor.RED + "Only admin commands are available to non-player senders.");
}
return true;
}
private void showHelp(CommandSender sender) {
sender.sendMessage(ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "------------=[" + ChatColor.RED + " Quests v" + Quests.getInstance()
.getDescription().getVersion() + " " + ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "]=------------");
sender.sendMessage(ChatColor.GRAY + "The following commands are available: ");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests " + ChatColor.DARK_GRAY + ": show quests");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests c/category <categoryid> " + ChatColor.DARK_GRAY + ": open category by ID");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests q/quest <questid> " + ChatColor.DARK_GRAY + ": start quest by ID");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a/admin " + ChatColor.DARK_GRAY + ": view help for admins");
sender.sendMessage(ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "-----=[" + ChatColor.RED + " made with <3 by fatpigsarefat " + ChatColor
.GRAY.toString() + ChatColor.STRIKETHROUGH + "]=-----");
}
private void showAdminHelp(CommandSender sender, String command) {
if (command != null && command.equalsIgnoreCase("opengui")) {
sender.sendMessage(ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "------------=[" + ChatColor.RED + " Quests Admin: opengui " + ChatColor
.GRAY.toString() + ChatColor.STRIKETHROUGH + "]=------------");
sender.sendMessage(ChatColor.GRAY + "The following commands are available: ");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a opengui q/quest <player> " + ChatColor.DARK_GRAY + ": forcefully show" +
" quests for player");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a opengui c/category <player> <category> " + ChatColor.DARK_GRAY + ": " +
"forcefully " +
"open category by ID for player");
sender.sendMessage(ChatColor.GRAY + "These commands are useful for command NPCs. These will bypass the usual quests.command permission.");
} else if (command != null && command.equalsIgnoreCase("moddata")) {
sender.sendMessage(ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "------------=[" + ChatColor.RED + " Quests Admin: moddata " + ChatColor
.GRAY.toString() + ChatColor.STRIKETHROUGH + "]=------------");
sender.sendMessage(ChatColor.GRAY + "The following commands are available: ");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a moddata fullreset <player> " + ChatColor.DARK_GRAY + ": clear a " +
"players quest data file");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a moddata reset <player> <questid>" + ChatColor.DARK_GRAY + ": clear a " +
"players data for specifc quest");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a moddata start <player> <questid>" + ChatColor.DARK_GRAY + ": start a " +
"quest for a player");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a moddata complete <player> <questid>" + ChatColor.DARK_GRAY + ": " +
"complete a quest for a player");
sender.sendMessage(ChatColor.GRAY + "These commands modify quest progress for players. Use them cautiously. Changes are irreversible.");
} else {
sender.sendMessage(ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "------------=[" + ChatColor.RED + " Quests Admin " + ChatColor.GRAY
.toString() + ChatColor.STRIKETHROUGH + "]=------------");
sender.sendMessage(ChatColor.GRAY + "The following commands are available: ");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a opengui " + ChatColor.DARK_GRAY + ": view help for opengui");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a moddata " + ChatColor.DARK_GRAY + ": view help for quest progression");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a types [type]" + ChatColor.DARK_GRAY + ": view registered task types");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a reload " + ChatColor.DARK_GRAY + ": reload Quests configuration");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a update " + ChatColor.DARK_GRAY + ": check for updates");
}
sender.sendMessage(ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "-----=[" + ChatColor.RED + " requires permission: quests.admin " +
ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "]=-----");
}
}
|