Updated to latest changes from private repo
parent
e59f8f4d67
commit
0a7c12536a
13
pom.xml
13
pom.xml
|
@ -3,7 +3,7 @@
|
|||
<groupId>xyz.etztech</groupId>
|
||||
<artifactId>MinecraftManager</artifactId>
|
||||
<!-- Version is used in plugin.yml -->
|
||||
<version>1.1</version>
|
||||
<version>1.3</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<!-- Plugin Information -->
|
||||
|
@ -56,13 +56,18 @@
|
|||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.13-pre7-R0.1-SNAPSHOT</version>
|
||||
<version>1.13.1-R0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-lang</groupId>
|
||||
<artifactId>commons-lang</artifactId>
|
||||
<version>2.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>xyz.etztech</groupId>
|
||||
<artifactId>EtzCore</artifactId>
|
||||
<version>1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
|
@ -81,6 +86,10 @@
|
|||
<id>mvn-repo</id>
|
||||
<url>https://mvnrepository.com/artifact/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>etztech-repo</id>
|
||||
<url>http://repo.etztech.xyz</url>
|
||||
</repository>
|
||||
<repository> <!-- This repo fixes issues with transitive dependencies -->
|
||||
<id>jcenter</id>
|
||||
<url>http://jcenter.bintray.com</url>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package xyz.etztech.minecraftmanager;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
@ -15,11 +14,11 @@ import org.apache.http.client.methods.HttpPost;
|
|||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.message.BasicNameValuePair;
|
||||
import org.bukkit.Bukkit;
|
||||
import xyz.etztech.minecraftmanager.objects.Application;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
@ -40,6 +39,7 @@ public class MCMAPI {
|
|||
}
|
||||
|
||||
|
||||
|
||||
public static JsonArray queryModel(String model, Map<String, String> filters) {
|
||||
// Querying a model
|
||||
String djangoUrl = getDjangoUrl();
|
||||
|
@ -55,6 +55,8 @@ public class MCMAPI {
|
|||
return new JsonArray();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static JsonObject postApplication(Application application) {
|
||||
String djangoUrl = getDjangoUrl() + "plugin/application/";
|
||||
String post = POST(djangoUrl, application.getForm());
|
||||
|
@ -107,6 +109,18 @@ public class MCMAPI {
|
|||
return (JsonObject) jsonParser.parse(post);
|
||||
}
|
||||
|
||||
public static JsonObject postWarning(String player, String staff, String severity, String message) {
|
||||
String djangoUrl = getDjangoUrl() + "plugin/warning/";
|
||||
Map<String, String> data = new HashMap<>();
|
||||
data.put("player", player);
|
||||
data.put("staff", staff);
|
||||
data.put("severity", severity);
|
||||
data.put("message", message);
|
||||
String post = POST(djangoUrl, data);
|
||||
JsonParser jsonParser = new JsonParser();
|
||||
return (JsonObject) jsonParser.parse(post);
|
||||
}
|
||||
|
||||
public static JsonObject getPassword(String uuid) {
|
||||
String djangoUrl = getDjangoUrl() + "plugin/register/";
|
||||
Map<String, String> data = new HashMap<>();
|
||||
|
@ -124,10 +138,17 @@ public class MCMAPI {
|
|||
}
|
||||
}
|
||||
|
||||
private static String GET(String url) {
|
||||
return GET(url, new HashMap<String, String>());
|
||||
public static Map<String, String> setup() {
|
||||
Map<String, String> data = new HashMap<>();
|
||||
if (StringUtils.isNotEmpty(MCMAPI.api)) {
|
||||
data.put("api", MCMAPI.api);
|
||||
} else {
|
||||
data.put("api", MinecraftManager.config.getString("django.api"));
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
private static String GET(String url, Map<String, String> data) {
|
||||
if (StringUtils.isNotEmpty(MCMAPI.api)) {
|
||||
data.put("api", MCMAPI.api);
|
||||
|
@ -160,10 +181,6 @@ public class MCMAPI {
|
|||
return result.toString();
|
||||
}
|
||||
|
||||
private static String POST(String url) {
|
||||
return POST(url, new HashMap<String, String>());
|
||||
}
|
||||
|
||||
private static String POST(String url, Map<String, String> data) {
|
||||
StringBuffer result = new StringBuffer();
|
||||
if (StringUtils.isNotEmpty(MCMAPI.api)) {
|
||||
|
@ -199,7 +216,7 @@ public class MCMAPI {
|
|||
/**
|
||||
* @return The Django API URL ending with a slash
|
||||
*/
|
||||
private static String getDjangoUrl() {
|
||||
public static String getDjangoUrl() {
|
||||
if (StringUtils.isNotEmpty(MCMAPI.url)) {
|
||||
return MCMAPI.url;
|
||||
} else {
|
||||
|
@ -207,4 +224,8 @@ public class MCMAPI {
|
|||
return configUrl.endsWith("/") ? configUrl : configUrl + "/";
|
||||
}
|
||||
}
|
||||
|
||||
public static String getModelUrl(String model) {
|
||||
return getDjangoUrl() + "model/" + model + "/";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,58 +0,0 @@
|
|||
package xyz.etztech.minecraftmanager;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
public class MCMResponse {
|
||||
private Boolean status;
|
||||
private String message;
|
||||
private JsonElement extra;
|
||||
|
||||
public MCMResponse(JsonArray httpResponse) {
|
||||
JsonObject json = httpResponse.get(0).getAsJsonObject();
|
||||
setStatus(json.get("status").getAsBoolean());
|
||||
setMessage(json.get("message").getAsString());
|
||||
setExtra(json.get("extra"));
|
||||
}
|
||||
|
||||
public MCMResponse(JsonObject httpResponse) {
|
||||
setStatus(httpResponse.get("status").getAsBoolean());
|
||||
setMessage(httpResponse.get("message").getAsString());
|
||||
setExtra(httpResponse.get("extra"));
|
||||
}
|
||||
|
||||
public Boolean getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(Boolean status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public JsonElement getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
public void setExtra(JsonElement extra) {
|
||||
this.extra = extra;
|
||||
}
|
||||
|
||||
public String getMCMessage() {
|
||||
if (status) {
|
||||
return ChatColor.GREEN + message;
|
||||
} else {
|
||||
return ChatColor.RED + message;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package xyz.etztech.minecraftmanager;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.chat.HoverEvent;
|
||||
import net.md_5.bungee.api.chat.ClickEvent;
|
||||
|
@ -13,6 +14,8 @@ import java.io.FileWriter;
|
|||
import java.io.PrintWriter;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class MCMUtil {
|
||||
private static FileWriter globalFile;
|
||||
|
@ -45,19 +48,20 @@ public class MCMUtil {
|
|||
staffMessage(message, null);
|
||||
}
|
||||
|
||||
public static void staffMessage(String message, String command) {
|
||||
public static void staffMessage(String message, String hoverCommand) {
|
||||
log(staffLog, message);
|
||||
HoverEvent hover = new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Staff Chat").create());
|
||||
TextComponent text = new TextComponent(message);
|
||||
text.setHoverEvent(hover);
|
||||
if (StringUtils.isNotEmpty(command)) {
|
||||
text.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command));
|
||||
if (StringUtils.isNotEmpty(hoverCommand)) {
|
||||
text.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, hoverCommand));
|
||||
}
|
||||
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
|
||||
if (player.hasPermission("minecraftmanager.staff")) {
|
||||
player.spigot().sendMessage(text);
|
||||
}
|
||||
}
|
||||
Bukkit.getConsoleSender().sendMessage(message);
|
||||
}
|
||||
|
||||
public static void globalMessage(String message) {
|
||||
|
@ -67,6 +71,21 @@ public class MCMUtil {
|
|||
}
|
||||
}
|
||||
|
||||
public static String getUUID(String playerName) {
|
||||
String uuid = null;
|
||||
try {
|
||||
uuid = Bukkit.getPlayer(playerName).getUniqueId().toString();
|
||||
} catch(Exception ex) {
|
||||
Map<String, String> filters = new HashMap<>();
|
||||
filters.put("username__iexact", playerName);
|
||||
JsonArray players = MCMAPI.queryModel("player", filters);
|
||||
if (players.size() == 1) {
|
||||
uuid = players.get(0).getAsJsonObject().get("uuid").getAsString();
|
||||
}
|
||||
}
|
||||
return uuid;
|
||||
}
|
||||
|
||||
public static void log(PrintWriter logger, String message) {
|
||||
try {
|
||||
//[4/21/17 7:12 PM]
|
||||
|
|
|
@ -2,11 +2,17 @@ package xyz.etztech.minecraftmanager;
|
|||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import xyz.etztech.core.api.IMinecraftManager;
|
||||
import xyz.etztech.minecraftmanager.command.*;
|
||||
import xyz.etztech.minecraftmanager.listeners.AsyncPlayerChatListener;
|
||||
import xyz.etztech.minecraftmanager.listeners.BlockBreakListener;
|
||||
import xyz.etztech.minecraftmanager.listeners.CommandPreprocessListener;
|
||||
import xyz.etztech.minecraftmanager.listeners.SessionListener;
|
||||
import xyz.etztech.minecraftmanager.objects.Application;
|
||||
import xyz.etztech.minecraftmanager.objects.Question;
|
||||
import xyz.etztech.minecraftmanager.objects.Rules;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
@ -15,7 +21,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class MinecraftManager extends JavaPlugin {
|
||||
public class MinecraftManager extends JavaPlugin implements IMinecraftManager {
|
||||
|
||||
public static MinecraftManager instance;
|
||||
|
||||
|
@ -25,6 +31,15 @@ public class MinecraftManager extends JavaPlugin {
|
|||
private static Map<String, Question> applyQuestion = new HashMap<>();
|
||||
private static Map<String, Application> applications = new HashMap<>();
|
||||
private static List<String> diamonds = new ArrayList<>();
|
||||
private static Rules rules;
|
||||
private static List<String> banOptions;
|
||||
|
||||
// API
|
||||
private static boolean logOverride = false;
|
||||
|
||||
// Report
|
||||
private static boolean reportRunning = false;
|
||||
private static boolean reportStop = false;
|
||||
|
||||
// Objects that can be reloaded
|
||||
AsyncPlayerChatListener chatListener;
|
||||
|
@ -37,7 +52,7 @@ public class MinecraftManager extends JavaPlugin {
|
|||
|
||||
instance = this;
|
||||
saveDefaultConfig();
|
||||
loadConfig();
|
||||
reloadConfig();
|
||||
|
||||
// Create log directory if it doesn't exist
|
||||
new File(getDataFolder().getAbsolutePath() + "/logs/").mkdir();
|
||||
|
@ -54,6 +69,8 @@ public class MinecraftManager extends JavaPlugin {
|
|||
this.getCommand("apply").setExecutor(cmdApply);
|
||||
CommandTicket cmdTicket = new CommandTicket(this);
|
||||
this.getCommand("ticket").setExecutor(cmdTicket);
|
||||
CommandWarning cmdWarning = new CommandWarning(this);
|
||||
this.getCommand("warn").setExecutor(cmdWarning);
|
||||
|
||||
// Rules is optional
|
||||
if (getConfig().getBoolean("rules.enabled")) {
|
||||
|
@ -68,6 +85,8 @@ public class MinecraftManager extends JavaPlugin {
|
|||
getServer().getPluginManager().registerEvents(sessionListener, this);
|
||||
BlockBreakListener blockBreakListener = new BlockBreakListener(this);
|
||||
getServer().getPluginManager().registerEvents(blockBreakListener, this);
|
||||
CommandPreprocessListener commandPreprocessListener = new CommandPreprocessListener(this);
|
||||
getServer().getPluginManager().registerEvents(commandPreprocessListener, this);
|
||||
|
||||
Bukkit.getConsoleSender().sendMessage("MinecraftManager has started successfully.");
|
||||
}
|
||||
|
@ -89,9 +108,8 @@ public class MinecraftManager extends JavaPlugin {
|
|||
if (chatListener != null) {
|
||||
chatListener.reload();
|
||||
}
|
||||
if (cmdRules != null) {
|
||||
cmdRules.reload();
|
||||
}
|
||||
rules = new Rules(config);
|
||||
banOptions = config.getStringList("ban.options");
|
||||
}
|
||||
|
||||
|
||||
|
@ -144,5 +162,44 @@ public class MinecraftManager extends JavaPlugin {
|
|||
diamonds.add(location);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static Rules getRules() {
|
||||
return rules;
|
||||
}
|
||||
|
||||
public static List<String> getBanOptions() {
|
||||
return banOptions;
|
||||
}
|
||||
|
||||
public static boolean getReportRunning() {
|
||||
return reportRunning;
|
||||
}
|
||||
|
||||
public static void setReportRunning(boolean reportRunning) {
|
||||
MinecraftManager.reportRunning = reportRunning;
|
||||
}
|
||||
|
||||
public static boolean getReportStop() {
|
||||
return reportStop;
|
||||
}
|
||||
|
||||
public static void setReportStop(boolean reportStop) {
|
||||
MinecraftManager.reportStop = reportStop;
|
||||
}
|
||||
|
||||
public static boolean getLogOverride() {
|
||||
return logOverride;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logOverride(boolean override) {
|
||||
logOverride = override;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void globalLog(Player player, String message) {
|
||||
MCMUtil.log(MCMUtil.globalLog, player.getName() + " > " + message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -13,16 +13,15 @@ import org.bukkit.command.Command;
|
|||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import xyz.etztech.minecraftmanager.MCMAPI;
|
||||
import xyz.etztech.minecraftmanager.MCMResponse;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManager;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManagerThread;
|
||||
import xyz.etztech.core.web.CoreWeb;
|
||||
import xyz.etztech.core.web.ICallback;
|
||||
import xyz.etztech.minecraftmanager.*;
|
||||
import xyz.etztech.minecraftmanager.objects.MCMResponse;
|
||||
import xyz.etztech.minecraftmanager.objects.ModelResponse;
|
||||
|
||||
import javax.xml.soap.Text;
|
||||
import java.awt.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class CommandApplication implements CommandExecutor {
|
||||
|
||||
MinecraftManager plugin;
|
||||
|
@ -64,11 +63,17 @@ public class CommandApplication implements CommandExecutor {
|
|||
return true;
|
||||
}
|
||||
|
||||
private void search(CommandSender sender, String name) {
|
||||
if (sender.hasPermission("minecraftmanager.application.search")) {
|
||||
Map<String, String> filter = new HashMap<>();
|
||||
filter.put("username__icontains", name);
|
||||
JsonArray results = MCMAPI.queryModel("application", filter);
|
||||
private class SearchCallback implements ICallback {
|
||||
private CommandSender commandSender;
|
||||
|
||||
SearchCallback(CommandSender commandSender) {
|
||||
this.commandSender = commandSender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(String s) {
|
||||
ModelResponse modelResponse = new ModelResponse(s);
|
||||
JsonArray results = modelResponse.getResults();
|
||||
StringBuffer response = new StringBuffer();
|
||||
if (results.size() > 0) {
|
||||
response.append(ChatColor.GOLD).append("===== Results =====");
|
||||
|
@ -86,7 +91,15 @@ public class CommandApplication implements CommandExecutor {
|
|||
response.append(ChatColor.YELLOW).append("No results found...");
|
||||
}
|
||||
|
||||
sender.sendMessage(response.toString());
|
||||
commandSender.sendMessage(response.toString());
|
||||
}
|
||||
}
|
||||
|
||||
private void search(CommandSender sender, String name) {
|
||||
if (sender.hasPermission("minecraftmanager.application.search")) {
|
||||
Map<String, String> filter = MCMAPI.setup();
|
||||
filter.put("username__icontains", name);
|
||||
CoreWeb.asyncGetCallback(plugin, MCMAPI.getModelUrl("application"), filter, new SearchCallback(sender));
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + "You do not have permission to search applications.");
|
||||
}
|
||||
|
@ -100,16 +113,18 @@ public class CommandApplication implements CommandExecutor {
|
|||
}
|
||||
}
|
||||
|
||||
private void info(CommandSender sender, String key) {
|
||||
if (sender.hasPermission("minecraftmanager.application.search")) {
|
||||
Map<String, String> filter = new HashMap<>();
|
||||
if (StringUtils.isNumeric(key)) {
|
||||
filter.put("id__exact", key);
|
||||
} else {
|
||||
filter.put("username__iexact", key);
|
||||
}
|
||||
JsonArray results = MCMAPI.queryModel("application", filter);
|
||||
StringBuffer response = new StringBuffer();
|
||||
private class InfoCallback implements ICallback {
|
||||
private CommandSender commandSender;
|
||||
|
||||
InfoCallback(CommandSender commandSender) {
|
||||
this.commandSender = commandSender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(String s) {
|
||||
ModelResponse modelResponse = new ModelResponse(s);
|
||||
JsonArray results = modelResponse.getResults();
|
||||
StringBuilder response = new StringBuilder();
|
||||
TextComponent text = new TextComponent();
|
||||
if (results.size() == 1) {
|
||||
JsonObject result = results.get(0).getAsJsonObject();
|
||||
|
@ -156,12 +171,37 @@ public class CommandApplication implements CommandExecutor {
|
|||
text.setText(response.toString());
|
||||
}
|
||||
|
||||
sender.spigot().sendMessage(text);
|
||||
commandSender.spigot().sendMessage(text);
|
||||
}
|
||||
}
|
||||
|
||||
private void info(CommandSender sender, String key) {
|
||||
if (sender.hasPermission("minecraftmanager.application.search")) {
|
||||
Map<String, String> filter = MCMAPI.setup();
|
||||
if (StringUtils.isNumeric(key)) {
|
||||
filter.put("id__exact", key);
|
||||
} else {
|
||||
filter.put("username__iexact", key);
|
||||
}
|
||||
CoreWeb.asyncGetCallback(plugin, MCMAPI.getModelUrl("application"), filter, new InfoCallback(sender));
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + "You do not have permission to search applications.");
|
||||
}
|
||||
}
|
||||
|
||||
private class ActionCallback implements ICallback {
|
||||
private CommandSender commandSender;
|
||||
|
||||
ActionCallback(CommandSender commandSender) {
|
||||
this.commandSender = commandSender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(String s) {
|
||||
MCMResponse response = new MCMResponse(s);
|
||||
commandSender.sendMessage(response.getMCMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private void action(CommandSender sender, String id, boolean accepted) {
|
||||
if (sender.hasPermission("minecraftmanager.application.action")) {
|
||||
|
@ -172,8 +212,12 @@ public class CommandApplication implements CommandExecutor {
|
|||
username = "Console";
|
||||
}
|
||||
if (StringUtils.isNumeric(id)) {
|
||||
MCMResponse response = new MCMResponse(MCMAPI.postApplicationAction(id, accepted, username));
|
||||
sender.sendMessage(response.getMCMessage());
|
||||
String djangoUrl = MCMAPI.getDjangoUrl() + "plugin/application_action/";
|
||||
Map<String, String> data = MCMAPI.setup();
|
||||
data.put("application_id", id);
|
||||
data.put("action", accepted ? "True" : "False");
|
||||
data.put("username", username);
|
||||
CoreWeb.asyncPostCallback(plugin, djangoUrl, data, new ActionCallback(sender));
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + "You must use an application ID to ensure accuracy.");
|
||||
}
|
||||
|
@ -182,11 +226,27 @@ public class CommandApplication implements CommandExecutor {
|
|||
}
|
||||
}
|
||||
|
||||
private class ClearCallback implements ICallback {
|
||||
private CommandSender commandSender;
|
||||
|
||||
ClearCallback(CommandSender commandSender) {
|
||||
this.commandSender = commandSender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(String s) {
|
||||
MCMResponse response = new MCMResponse(s);
|
||||
commandSender.sendMessage(response.getMCMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private void clear(CommandSender sender, String id) {
|
||||
if (sender.hasPermission("minecraftmanager.application.action")) {
|
||||
if (StringUtils.isNumeric(id)) {
|
||||
MCMResponse response = new MCMResponse(MCMAPI.postApplicationClear(id));
|
||||
sender.sendMessage(ChatColor.GREEN + response.getMCMessage());
|
||||
String djangoUrl = MCMAPI.getDjangoUrl() + "plugin/application_clear/";
|
||||
Map<String, String> data = MCMAPI.setup();
|
||||
data.put("application_id", id);
|
||||
CoreWeb.asyncPostCallback(plugin, djangoUrl, data, new ClearCallback(sender));
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + "You must use an application ID to ensure accuracy.");
|
||||
}
|
||||
|
|
|
@ -1,17 +1,11 @@
|
|||
package xyz.etztech.minecraftmanager.command;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManager;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManagerThread;
|
||||
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
|
||||
public class CommandApply implements CommandExecutor {
|
||||
|
||||
|
|
|
@ -8,15 +8,18 @@ import org.bukkit.command.Command;
|
|||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import xyz.etztech.core.web.CoreWeb;
|
||||
import xyz.etztech.core.web.ICallback;
|
||||
import xyz.etztech.minecraftmanager.MCMAPI;
|
||||
import xyz.etztech.minecraftmanager.MCMResponse;
|
||||
import xyz.etztech.minecraftmanager.objects.MCMResponse;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManager;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManagerThread;
|
||||
import xyz.etztech.minecraftmanager.objects.MinecraftManagerThread;
|
||||
import xyz.etztech.minecraftmanager.tasks.ReportRunnable;
|
||||
|
||||
import javax.xml.soap.Text;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
import java.util.Map;
|
||||
|
||||
public class CommandMain implements CommandExecutor {
|
||||
|
||||
|
@ -53,6 +56,9 @@ public class CommandMain implements CommandExecutor {
|
|||
case "register":
|
||||
register(sender);
|
||||
break;
|
||||
case "report":
|
||||
report(sender);
|
||||
break;
|
||||
default:
|
||||
other(sender);
|
||||
}
|
||||
|
@ -94,6 +100,30 @@ public class CommandMain implements CommandExecutor {
|
|||
}
|
||||
}
|
||||
|
||||
private class RegisterCallback implements ICallback {
|
||||
private Player player;
|
||||
|
||||
RegisterCallback(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(String s) {
|
||||
MCMResponse response = new MCMResponse(s);
|
||||
if (response.getStatus()) {
|
||||
TextComponent password = new TextComponent(ChatColor.YELLOW + response.getMessage());
|
||||
password.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, response.getMessage()));
|
||||
TextComponent message = new TextComponent(ChatColor.GREEN + "Your password is ");
|
||||
message.addExtra(password);
|
||||
message.addExtra(new TextComponent(ChatColor.GREEN + "."));
|
||||
player.spigot().sendMessage(message);
|
||||
player.sendMessage(ChatColor.GREEN + "This password is not shown in Console, however you should consider changing it immediately from the web application.");
|
||||
player.sendMessage(ChatColor.GREEN + "You can click the password to bring it into your chat for easy copying.");
|
||||
} else {
|
||||
player.sendMessage(ChatColor.RED + response.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
private void register(CommandSender sender) {
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(ChatColor.RED + "Console cannot register for the web application.");
|
||||
|
@ -106,18 +136,26 @@ public class CommandMain implements CommandExecutor {
|
|||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
MCMResponse response = new MCMResponse(MCMAPI.getPassword(player.getUniqueId().toString()));
|
||||
if (response.getStatus()) {
|
||||
TextComponent password = new TextComponent(ChatColor.YELLOW + response.getMessage());
|
||||
password.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, response.getMessage()));
|
||||
TextComponent message = new TextComponent(ChatColor.GREEN + "Your password is ");
|
||||
message.addExtra(password);
|
||||
message.addExtra(new TextComponent(ChatColor.GREEN + "."));
|
||||
player.spigot().sendMessage(message);
|
||||
player.sendMessage(ChatColor.GREEN + "This password is not shown in Console, however you should consider changing it immediately from the web application.");
|
||||
player.sendMessage(ChatColor.GREEN + "You can click the password to bring it into your chat for easy copying.");
|
||||
String djangoUrl = MCMAPI.getDjangoUrl() + "plugin/register/";
|
||||
Map<String, String> data = MCMAPI.setup();
|
||||
data.put("uuid", player.getUniqueId().toString());
|
||||
|
||||
CoreWeb.asyncPostCallback(plugin, djangoUrl, data, new RegisterCallback(player));
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void report(CommandSender sender) {
|
||||
String name = sender instanceof Player ? sender.getName() : "Console";
|
||||
if (sender.hasPermission("minecraftmanager.report")) {
|
||||
if (MinecraftManager.getReportRunning()) {
|
||||
MinecraftManager.setReportStop(true);
|
||||
sender.sendMessage(ChatColor.GREEN + "Stopping report generation.");
|
||||
}
|
||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, new ReportRunnable(name));
|
||||
} else {
|
||||
player.sendMessage(ChatColor.RED + response.getMessage());
|
||||
sender.sendMessage(ChatColor.RED + "You do not have permission to generate a report.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,48 +1,25 @@
|
|||
package xyz.etztech.minecraftmanager.command;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManager;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManagerThread;
|
||||
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
import java.util.List;
|
||||
|
||||
public class CommandRules implements CommandExecutor {
|
||||
|
||||
MinecraftManager plugin;
|
||||
String rules;
|
||||
|
||||
|
||||
public CommandRules(MinecraftManager plugin) {
|
||||
this.plugin = plugin;
|
||||
|
||||
reload();
|
||||
}
|
||||
|
||||
public void reload() {
|
||||
List<String> rules = this.plugin.getConfig().getStringList("rules.rules");
|
||||
if (this.plugin.getConfig().getBoolean("rules.application.validate")) {
|
||||
String finalAnswer = this.plugin.getConfig().getString("rules.application.answer");
|
||||
rules.add("The answer for the final question is \"" + finalAnswer + "\"");
|
||||
}
|
||||
StringBuilder rulesMessage = new StringBuilder(ChatColor.GOLD + "===== Rules =====");
|
||||
for (int i = 0; i < rules.size(); i++) {
|
||||
rulesMessage.append("\n" + ChatColor.YELLOW + (i + 1) + ". " + rules.get(i));
|
||||
}
|
||||
this.rules = rulesMessage.toString();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String base, String[] args) {
|
||||
|
||||
sender.sendMessage(this.rules);
|
||||
sender.sendMessage(MinecraftManager.getRules().minecraft());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -8,10 +8,14 @@ import org.bukkit.command.Command;
|
|||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import xyz.etztech.core.web.CoreWeb;
|
||||
import xyz.etztech.core.web.ICallback;
|
||||
import xyz.etztech.minecraftmanager.MCMAPI;
|
||||
import xyz.etztech.minecraftmanager.MCMResponse;
|
||||
import xyz.etztech.minecraftmanager.objects.MCMResponse;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManager;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class CommandTicket implements CommandExecutor {
|
||||
|
||||
MinecraftManager plugin;
|
||||
|
@ -20,6 +24,20 @@ public class CommandTicket implements CommandExecutor {
|
|||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
private class TicketCallback implements ICallback {
|
||||
private Player player;
|
||||
|
||||
TicketCallback(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(String s) {
|
||||
MCMResponse response = new MCMResponse(s);
|
||||
player.sendMessage(response.getMCMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String base, String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
|
@ -45,12 +63,19 @@ public class CommandTicket implements CommandExecutor {
|
|||
} else if (World.Environment.THE_END == env) {
|
||||
world = "E";
|
||||
}
|
||||
MCMResponse response = new MCMResponse(MCMAPI.postTicket(player.getUniqueId().toString(),
|
||||
StringUtils.join(args, " "), x, y, z, world));
|
||||
sender.sendMessage(response.getMCMessage());
|
||||
String djangoUrl = MCMAPI.getDjangoUrl() + "plugin/ticket/";
|
||||
Map<String, String> data = MCMAPI.setup();
|
||||
data.put("uuid", player.getUniqueId().toString());
|
||||
data.put("message", StringUtils.join(args, " "));
|
||||
data.put("x", x);
|
||||
data.put("y", y);
|
||||
data.put("z", z);
|
||||
data.put("world", world);
|
||||
|
||||
CoreWeb.asyncPostCallback(plugin, djangoUrl, data, new TicketCallback(player));
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + "You do not have permission to submit a ticket.");
|
||||
sender.sendMessage(ChatColor.RED + "If you were submitting a ticket about not being able to submit a ticket, that is known as irony.");
|
||||
sender.sendMessage(ChatColor.RED + "If you were submitting a ticket about not being able to submit a ticket, that's called irony.");
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -0,0 +1,86 @@
|
|||
package xyz.etztech.minecraftmanager.command;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import xyz.etztech.core.web.CoreWeb;
|
||||
import xyz.etztech.core.web.ICallback;
|
||||
import xyz.etztech.minecraftmanager.MCMAPI;
|
||||
import xyz.etztech.minecraftmanager.objects.MCMResponse;
|
||||
import xyz.etztech.minecraftmanager.MCMUtil;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManager;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
|
||||
public class CommandWarning implements CommandExecutor {
|
||||
|
||||
MinecraftManager plugin;
|
||||
|
||||
public CommandWarning(MinecraftManager plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
private class WarningCallback implements ICallback {
|
||||
private Player player;
|
||||
|
||||
WarningCallback(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(String s) {
|
||||
MCMResponse response = new MCMResponse(s);
|
||||
player.sendMessage(response.getMCMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String base, String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(ChatColor.RED + "The console cannot issue warnings.");
|
||||
return true;
|
||||
}
|
||||
Player staff = (Player) sender;
|
||||
if (sender.hasPermission("minecraftmanager.warning")) {
|
||||
if (args.length < 3) {
|
||||
sender.sendMessage(ChatColor.RED + "/warning <player> <severity> <message>");
|
||||
return true;
|
||||
}
|
||||
|
||||
String uuid = MCMUtil.getUUID(args[0]);
|
||||
|
||||
if (uuid == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Could not issue warning, no player found.");
|
||||
return false;
|
||||
}
|
||||
|
||||
String djangoUrl = MCMAPI.getDjangoUrl() + "plugin/warning/";
|
||||
Map<String, String> data = MCMAPI.setup();
|
||||
data.put("player", uuid);
|
||||
data.put("staff", staff.getUniqueId().toString());
|
||||
data.put("severity", getSeverity(args[1]));
|
||||
data.put("message", StringUtils.join(Arrays.copyOfRange(args, 2, args.length), " "));
|
||||
|
||||
CoreWeb.asyncPostCallback(plugin, djangoUrl, data, new WarningCallback(staff));
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + "You do not have permission to issue a warning.");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private String getSeverity(String severity) {
|
||||
if (severity.equalsIgnoreCase("H") || severity.equalsIgnoreCase("HIGH")) {
|
||||
return "H";
|
||||
} else if (severity.equalsIgnoreCase("M") || severity.equalsIgnoreCase("MEDIUM")) {
|
||||
return "M";
|
||||
} else {
|
||||
return "L";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -6,20 +6,20 @@ import net.md_5.bungee.api.chat.HoverEvent;
|
|||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import xyz.etztech.core.web.CoreWeb;
|
||||
import xyz.etztech.core.web.ICallback;
|
||||
import xyz.etztech.minecraftmanager.*;
|
||||
import xyz.etztech.minecraftmanager.objects.Application;
|
||||
import xyz.etztech.minecraftmanager.objects.MCMResponse;
|
||||
import xyz.etztech.minecraftmanager.objects.Question;
|
||||
|
||||
import java.io.FileWriter;
|
||||
import java.io.PrintWriter;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class AsyncPlayerChatListener implements Listener {
|
||||
|
@ -38,17 +38,28 @@ public class AsyncPlayerChatListener implements Listener {
|
|||
this.staffPrefixes.addAll(trimmed(this.plugin.getConfig().getStringList("staff-chat.prefix")));
|
||||
}
|
||||
|
||||
@EventHandler(priority=EventPriority.HIGHEST, ignoreCancelled=true)
|
||||
@EventHandler
|
||||
public void onChat(AsyncPlayerChatEvent event) {
|
||||
|
||||
Player sender = event.getPlayer();
|
||||
String chat = event.getMessage();
|
||||
boolean staffChat = isStaffChat(sender, chat);
|
||||
boolean applyChat = MinecraftManager.inApplyMode(sender.getUniqueId().toString());
|
||||
|
||||
TextComponent pre = new TextComponent(ChatColor.GOLD + sender.getName() + " > ");
|
||||
if (!applyChat) {
|
||||
if (staffChat) {
|
||||
boolean hasPermission = sender.hasPermission("minecraftmanager.staff");
|
||||
boolean singlePrefix = false;
|
||||
for (String prefix : this.staffPrefixes) {
|
||||
if (chat.startsWith(prefix)) {
|
||||
chat = chat.substring(1);
|
||||
singlePrefix = true;
|
||||
if (chat.startsWith(prefix)) {
|
||||
singlePrefix = false;
|
||||
event.setMessage(chat);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasPermission && singlePrefix) {
|
||||
event.setCancelled(true);
|
||||
for (String prefix : this.staffPrefixes) {
|
||||
chat = chat.replaceFirst(Pattern.quote(prefix), "");
|
||||
|
@ -65,7 +76,9 @@ public class AsyncPlayerChatListener implements Listener {
|
|||
MCMUtil.log(MCMUtil.staffLog, componentText(pre, message));
|
||||
} else {
|
||||
TextComponent message = generateMessage(chat);
|
||||
MCMUtil.log(MCMUtil.globalLog, componentText(pre, message));
|
||||
if (!MinecraftManager.getLogOverride()) {
|
||||
MCMUtil.log(MCMUtil.globalLog, componentText(pre, message));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Applying
|
||||
|
@ -89,8 +102,10 @@ public class AsyncPlayerChatListener implements Listener {
|
|||
// Answering question
|
||||
boolean valid = Question.validate(applyQuestion, chat);
|
||||
boolean rules = this.plugin.getConfig().getBoolean("rules.application.validate");
|
||||
if (Question.FIVE == applyQuestion && !rules) {
|
||||
valid = true;
|
||||
String answer = this.plugin.getConfig().getString("rules.application.answer");
|
||||
if (Question.FIVE == applyQuestion && rules && !chat.equalsIgnoreCase(answer)) {
|
||||
sender.sendMessage(ChatColor.RED + Question.READ_RULES);
|
||||
return;
|
||||
}
|
||||
if (!valid) {
|
||||
sender.sendMessage(ChatColor.RED + applyQuestion.getError());
|
||||
|
@ -106,13 +121,11 @@ public class AsyncPlayerChatListener implements Listener {
|
|||
if (Question.COMPLETE == nextQuestion) {
|
||||
MinecraftManager.setApplyMode(sender.getUniqueId().toString(), false);
|
||||
Bukkit.getConsoleSender().sendMessage(app.getFormatted());
|
||||
MCMResponse response = new MCMResponse(MCMAPI.postApplication(app));
|
||||
if (response.getStatus()) {
|
||||
sender.sendMessage(ChatColor.GOLD + nextQuestion.getQuestion());
|
||||
MCMUtil.staffMessage(ChatColor.GREEN + "New application #" + response.getExtra().getAsString() + " from " + sender.getName(), "/app info " + response.getExtra().getAsString());
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + response.getMessage());
|
||||
}
|
||||
String djangoUrl = MCMAPI.getDjangoUrl() + "plugin/application/";
|
||||
Map<String, String> data = MCMAPI.setup();
|
||||
data.putAll(app.getForm());
|
||||
|
||||
CoreWeb.asyncPostCallback(plugin, djangoUrl, data, new ApplicationCallback(sender));
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.GREEN + nextQuestion.getQuestion());
|
||||
}
|
||||
|
@ -120,18 +133,26 @@ public class AsyncPlayerChatListener implements Listener {
|
|||
}
|
||||
}
|
||||
|
||||
private boolean isStaffChat(Player player, String message) {
|
||||
if (!player.hasPermission("minecraftmanager.staff")) {
|
||||
return false;
|
||||
private class ApplicationCallback implements ICallback {
|
||||
private Player player;
|
||||
|
||||
ApplicationCallback(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
for (String prefix : this.staffPrefixes) {
|
||||
if (message.startsWith(prefix) && !message.startsWith(prefix+prefix)) {
|
||||
return true;
|
||||
|
||||
@Override
|
||||
public void invoke(String s) {
|
||||
MCMResponse response = new MCMResponse(s);
|
||||
if (response.getStatus()) {
|
||||
player.sendMessage(ChatColor.GOLD + Question.COMPLETE.getQuestion());
|
||||
MCMUtil.staffMessage(ChatColor.GREEN + "New application #" + response.getExtra().getAsString() + " from " + player.getName(), "/app info " + response.getExtra().getAsString());
|
||||
} else {
|
||||
player.sendMessage(ChatColor.RED + response.getMessage());
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private TextComponent generateMessage(String message) {
|
||||
TextComponent text = new TextComponent();
|
||||
for (String part : message.split(" ")) {
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
package xyz.etztech.minecraftmanager.listeners;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import xyz.etztech.core.web.CoreWeb;
|
||||
import xyz.etztech.minecraftmanager.MCMAPI;
|
||||
import xyz.etztech.minecraftmanager.MCMUtil;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManager;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class CommandPreprocessListener implements Listener {
|
||||
|
||||
|
||||
MinecraftManager plugin;
|
||||
|
||||
public CommandPreprocessListener(MinecraftManager plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
|
||||
|
||||
String command = event.getMessage().substring(1); // Strip the slash
|
||||
String base = command.split(" ")[0];
|
||||
String[] args = command.trim().length() == base.trim().length() ? new String[0] : command.substring(base.length()+1).split(" ");
|
||||
Player sender = event.getPlayer();
|
||||
|
||||
if (sender.hasPermission("minecraftmanager.warn") && "ban".equalsIgnoreCase(base)) {
|
||||
if (args.length < 1) {
|
||||
return;
|
||||
}
|
||||
if (plugin.getConfig().getBoolean("ban.enabled")) {
|
||||
String uuid = MCMUtil.getUUID(args[0]);
|
||||
if (uuid != null) {
|
||||
String message = "";
|
||||
if (StringUtils.isNumeric(args[1])) {
|
||||
int option = Integer.parseInt(args[1]);
|
||||
List<String> options = MinecraftManager.getBanOptions();
|
||||
if (option <= options.size()) {
|
||||
message = options.get(option-1);
|
||||
Bukkit.getConsoleSender().sendMessage("Reformatting ban...");
|
||||
sender.chat("/ban " + args[0] + " " + message);
|
||||
} else {
|
||||
sender.sendMessage(ChatColor.RED + "Ban Option not recognized.");
|
||||
}
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
} else {
|
||||
message = StringUtils.join(Arrays.copyOfRange(args, 1, args.length), " ");
|
||||
}
|
||||
if (plugin.getConfig().getBoolean("ban.auto-warning")) {
|
||||
String djangoUrl = MCMAPI.getDjangoUrl() + "plugin/warning/";
|
||||
Map<String, String> data = MCMAPI.setup();
|
||||
data.put("player", uuid);
|
||||
data.put("staff", sender.getUniqueId().toString());
|
||||
data.put("severity", "H");
|
||||
data.put("message", message);
|
||||
CoreWeb.asyncPost(plugin, djangoUrl, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -2,19 +2,18 @@ package xyz.etztech.minecraftmanager.listeners;
|
|||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerLoginEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import xyz.etztech.minecraftmanager.MCMAPI;
|
||||
import xyz.etztech.minecraftmanager.MCMUtil;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManager;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManagerThread;
|
||||
import xyz.etztech.core.web.CoreWeb;
|
||||
import xyz.etztech.core.web.ICallback;
|
||||
import xyz.etztech.minecraftmanager.*;
|
||||
import xyz.etztech.minecraftmanager.objects.MinecraftManagerThread;
|
||||
import xyz.etztech.minecraftmanager.objects.ModelResponse;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class SessionListener implements Listener {
|
||||
|
@ -28,13 +27,24 @@ public class SessionListener implements Listener {
|
|||
@EventHandler
|
||||
public void onLogin(PlayerLoginEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
MCMAPI.postLogin(player.getName(), player.getUniqueId().toString(), event.getAddress().getHostAddress());
|
||||
String djangoUrl = MCMAPI.getDjangoUrl() + "plugin/login/";
|
||||
Map<String, String> data = MCMAPI.setup();
|
||||
data.put("username", player.getName());
|
||||
data.put("uuid", player.getUniqueId().toString());
|
||||
data.put("ip", event.getAddress().getHostAddress());
|
||||
CoreWeb.asyncPost(plugin, djangoUrl, data);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onJoin(PlayerJoinEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
MCMUtil.log(MCMUtil.globalLog, player.getName() + " logged in.");
|
||||
|
||||
// Check for guests
|
||||
if (player.hasPermission("minecraftmanager.guest")) {
|
||||
Map<String, String> filters = new HashMap<>();
|
||||
Map<String, String> filters = MCMAPI.setup();
|
||||
filters.put("username__iexact", player.getName());
|
||||
CoreWeb.asyncGetCallback(plugin, MCMAPI.getModelUrl("application"), filters, new JoinCallback(player.getName()));
|
||||
JsonArray query = MCMAPI.queryModel("application", filters);
|
||||
if (query.size() == 1) {
|
||||
JsonElement element = query.get(0).getAsJsonObject().get("accepted");
|
||||
|
@ -46,6 +56,27 @@ public class SessionListener implements Listener {
|
|||
}
|
||||
}
|
||||
|
||||
private class JoinCallback implements ICallback {
|
||||
private String name;
|
||||
|
||||
JoinCallback(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(String s) {
|
||||
ModelResponse response = new ModelResponse(s);
|
||||
JsonArray query = response.getResults();
|
||||
if (query.size() == 1) {
|
||||
JsonElement element = query.get(0).getAsJsonObject().get("accepted");
|
||||
boolean accepted = !element.isJsonNull() && element.getAsBoolean();
|
||||
if (accepted) {
|
||||
MinecraftManagerThread.action(name, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onLogout(PlayerQuitEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
package xyz.etztech.minecraftmanager;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
package xyz.etztech.minecraftmanager.objects;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
|
@ -0,0 +1,41 @@
|
|||
package xyz.etztech.minecraftmanager.objects;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import org.bukkit.ChatColor;
|
||||
import xyz.etztech.core.web.CoreResponse;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class MCMResponse extends CoreResponse {
|
||||
private JsonElement extra;
|
||||
|
||||
public MCMResponse(JsonArray httpResponse) {
|
||||
super(httpResponse);
|
||||
setExtra(json.get("extra"));
|
||||
}
|
||||
|
||||
public MCMResponse(JsonObject httpResponse) {
|
||||
super(httpResponse);
|
||||
setExtra(httpResponse.get("extra"));
|
||||
}
|
||||
|
||||
public MCMResponse(String rawReponse) {
|
||||
super(rawReponse);
|
||||
setExtra(json.get("extra"));
|
||||
}
|
||||
|
||||
|
||||
public JsonElement getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
public void setExtra(JsonElement extra) {
|
||||
this.extra = extra;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,10 +1,12 @@
|
|||
package xyz.etztech.minecraftmanager;
|
||||
package xyz.etztech.minecraftmanager.objects;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import xyz.etztech.minecraftmanager.MCMUtil;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManager;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
|
@ -99,13 +101,15 @@ public class MinecraftManagerThread extends Thread {
|
|||
}
|
||||
|
||||
if (online != null) {
|
||||
// Set their group
|
||||
String engine = MinecraftManager.config.getString("permissions.engine");
|
||||
String promote = MinecraftManager.config.getString("permissions.promote");
|
||||
if ("permissionsex".equalsIgnoreCase(engine)) {
|
||||
runTask("pex user <player> group set " + promote, username);
|
||||
} else if ("luckperms".equalsIgnoreCase(engine)) {
|
||||
runTask("lp user <player> group set " + promote, username);
|
||||
// Set their group if accepted
|
||||
if (accepted) {
|
||||
String engine = MinecraftManager.config.getString("permissions.engine");
|
||||
String promote = MinecraftManager.config.getString("permissions.promote");
|
||||
if ("permissionsex".equalsIgnoreCase(engine)) {
|
||||
runTask("pex user <player> group set " + promote, username);
|
||||
} else if ("luckperms".equalsIgnoreCase(engine)) {
|
||||
runTask("lp user <player> group set " + promote, username);
|
||||
}
|
||||
}
|
||||
|
||||
// Run misc commands
|
||||
|
@ -114,6 +118,9 @@ public class MinecraftManagerThread extends Thread {
|
|||
runTask(command, username);
|
||||
}
|
||||
}
|
||||
|
||||
// Message to staff
|
||||
MCMUtil.staffMessage(ChatColor.GREEN + username + " was " + (accepted ? "accepted" : "denied") + ".");
|
||||
}
|
||||
|
||||
private static void runTask(final String command, final String username) {
|
|
@ -0,0 +1,25 @@
|
|||
package xyz.etztech.minecraftmanager.objects;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonParser;
|
||||
|
||||
public class ModelResponse {
|
||||
private JsonArray results;
|
||||
|
||||
public ModelResponse(String results) {
|
||||
try {
|
||||
JsonParser parser = new JsonParser();
|
||||
this.results = (com.google.gson.JsonArray) parser.parse(results);
|
||||
} catch (Exception ex) {
|
||||
this.results = new JsonArray();
|
||||
}
|
||||
}
|
||||
|
||||
public JsonArray getResults() {
|
||||
return results;
|
||||
}
|
||||
|
||||
public void setResults(JsonArray results) {
|
||||
this.results = results;
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package xyz.etztech.minecraftmanager;
|
||||
package xyz.etztech.minecraftmanager.objects;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
|
@ -9,9 +9,11 @@ public enum Question {
|
|||
THREE1("Have you ever been banned? Please answer just 'yes' or 'no'.", "Your answer must be just 'yes' or 'no'."),
|
||||
THREE2("Oof. That's okay, it's happened to plenty of people. Do you mind letting us know why?", "Your answer must be under 300 characters long."),
|
||||
FOUR("Were you referred to our server by someone?", "Your answer must be under 50 characters long."),
|
||||
FIVE("Have you read the rules thoroughly?", "Are you sure? Maybe you should read them again..."),
|
||||
FIVE("Have you read the rules thoroughly?", "Your answer must be under 10 characters long."),
|
||||
COMPLETE("All done! Staff should be reviewing your application any second now!", "");
|
||||
|
||||
public static final String READ_RULES = "Are you sure? Maybe you should read them again...";
|
||||
|
||||
private String question;
|
||||
private String error;
|
||||
|
||||
|
@ -71,8 +73,7 @@ public enum Question {
|
|||
} else if (question == FOUR) {
|
||||
return answer.length() <= 50;
|
||||
} else if (question == FIVE) {
|
||||
String a = MinecraftManager.config.getString("rules.application.answer");
|
||||
return answer.equalsIgnoreCase(a);
|
||||
return answer.length() <= 10;
|
||||
}
|
||||
return false;
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
package xyz.etztech.minecraftmanager.objects;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class Rules {
|
||||
|
||||
private List<String> rules = new ArrayList<>();
|
||||
private Map<String, List<String>> subRules = new HashMap<>();
|
||||
|
||||
public Rules(FileConfiguration config) {
|
||||
List<String> configRules = config.getStringList("rules.rules");
|
||||
if (config.getBoolean("rules.application.validate")) {
|
||||
String finalAnswer = config.getString("rules.application.answer");
|
||||
configRules.add("The answer for the final question is \"" + finalAnswer + "\"");
|
||||
}
|
||||
for (String configRule : configRules) {
|
||||
if (configRule.startsWith("*")) {
|
||||
configRule = configRule.substring(1);
|
||||
List<String> subs = subRules.get(rules.get(rules.size()-1));
|
||||
if (subs != null) {
|
||||
subs.add(configRule);
|
||||
} else {
|
||||
subs = new ArrayList<>();
|
||||
subs.add(configRule);
|
||||
}
|
||||
subRules.put(rules.get(rules.size()-1), subs);
|
||||
} else {
|
||||
rules.add(configRule);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<String> getRules() {
|
||||
return rules;
|
||||
}
|
||||
|
||||
public void setRules(List<String> rules) {
|
||||
this.rules = rules;
|
||||
}
|
||||
|
||||
public Map<String, List<String>> getSubRules() {
|
||||
return subRules;
|
||||
}
|
||||
|
||||
public void setSubRules(Map<String, List<String>> subRules) {
|
||||
this.subRules = subRules;
|
||||
}
|
||||
|
||||
public String minecraft() {
|
||||
StringBuilder rulesMessage = new StringBuilder(ChatColor.GOLD + "===== Rules =====");
|
||||
int idx = 0;
|
||||
for (String rule : rules) {
|
||||
rulesMessage.append("\n" + ChatColor.YELLOW + (++idx) + ". " + rule);
|
||||
List<String> subs = subRules.get(rule);
|
||||
if (subs != null) {
|
||||
for (String sub : subs) {
|
||||
rulesMessage.append("\n" + ChatColor.YELLOW + "* " + sub);
|
||||
}
|
||||
}
|
||||
}
|
||||
return rulesMessage.toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,108 @@
|
|||
package xyz.etztech.minecraftmanager.tasks;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import xyz.etztech.minecraftmanager.MCMUtil;
|
||||
import xyz.etztech.minecraftmanager.MinecraftManager;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class ReportRunnable implements Runnable {
|
||||
private String calledBy;
|
||||
|
||||
public ReportRunnable(String calledBy) {
|
||||
this.calledBy = calledBy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
MCMUtil.staffMessage("A report has been started by " + calledBy + ".");
|
||||
MinecraftManager.setReportRunning(true);
|
||||
MinecraftManager.setReportStop(false);
|
||||
boolean interrupted = false;
|
||||
|
||||
JsonObject reportJson = new JsonObject();
|
||||
|
||||
dance: // Is it worth the joke? We may never know...
|
||||
for (World world : Bukkit.getServer().getWorlds()) {
|
||||
Map<String, Integer> countMap = new HashMap<>();
|
||||
if (MinecraftManager.getReportStop()) {
|
||||
interrupted = true;
|
||||
break;
|
||||
}
|
||||
Map<String, JsonArray> entitiesMap = new HashMap<>();
|
||||
JsonArray playersJson = new JsonArray();
|
||||
|
||||
for (Entity entity : world.getEntities()) {
|
||||
if (MinecraftManager.getReportStop()) {
|
||||
interrupted = true;
|
||||
break dance;
|
||||
}
|
||||
JsonObject entityJson = new JsonObject();
|
||||
Location location = entity.getLocation();
|
||||
entityJson.addProperty("x", location.getBlockX());
|
||||
entityJson.addProperty("y", location.getBlockY());
|
||||
entityJson.addProperty("z", location.getBlockZ());
|
||||
if (entity instanceof Player) {
|
||||
entityJson.addProperty("name", entity.getName());
|
||||
playersJson.add(entityJson);
|
||||
} else {
|
||||
String type = entity.getType().name();
|
||||
JsonArray jsonArray = entitiesMap.get(type);
|
||||
if (jsonArray == null) {
|
||||
jsonArray = new JsonArray();
|
||||
}
|
||||
jsonArray.add(entityJson);
|
||||
entitiesMap.put(type, jsonArray);
|
||||
if (countMap.containsKey(type)) {
|
||||
countMap.put(type, countMap.get(type) + 1);
|
||||
} else {
|
||||
countMap.put(type, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
JsonObject worldJson = new JsonObject();
|
||||
JsonObject entitiesJson = new JsonObject();
|
||||
for (String type : entitiesMap.keySet()) {
|
||||
entitiesJson.add(type, entitiesMap.get(type));
|
||||
}
|
||||
worldJson.add("entities", entitiesJson);
|
||||
worldJson.add("players", playersJson);
|
||||
JsonObject countJson = new JsonObject();
|
||||
for (String type : countMap.keySet()) {
|
||||
countJson.addProperty(type, countMap.get(type));
|
||||
}
|
||||
worldJson.add("counts", countJson);
|
||||
reportJson.add(world.getName(), worldJson);
|
||||
reportJson.addProperty("time", new Date().getTime()/1000);
|
||||
}
|
||||
File report = new File(Bukkit.getPluginManager().getPlugin("MinecraftManager").getDataFolder().getAbsolutePath() + "/report.json");
|
||||
try {
|
||||
if (!report.exists()) {
|
||||
report.createNewFile();
|
||||
}
|
||||
FileWriter writer = new FileWriter(report);
|
||||
writer.write(reportJson.toString());
|
||||
writer.close();
|
||||
} catch (Exception ex) {
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Could not generate a report...something went wrong.");
|
||||
}
|
||||
MinecraftManager.setReportStop(false);
|
||||
MinecraftManager.setReportRunning(false);
|
||||
if (interrupted) {
|
||||
MCMUtil.staffMessage("The report started by " + calledBy + " has been stopped.");
|
||||
} else {
|
||||
MCMUtil.staffMessage("The report started by " + calledBy + " has finished generating.");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,11 +2,10 @@ package xyz.etztech.minecraftmanager.test;
|
|||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import xyz.etztech.minecraftmanager.Application;
|
||||
import xyz.etztech.minecraftmanager.objects.Application;
|
||||
import xyz.etztech.minecraftmanager.MCMAPI;
|
||||
import xyz.etztech.minecraftmanager.MCMResponse;
|
||||
import xyz.etztech.minecraftmanager.objects.MCMResponse;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
@ -37,6 +36,7 @@ public class Test {
|
|||
System.out.println("5. Test Application Clear - Clear Testing2 application");
|
||||
System.out.println("6. Test Login - Spoof a login of user Etzelia with IP 127.0.0.1");
|
||||
System.out.println("7. Test Ticket - Send a test ticket");
|
||||
System.out.println("8. Test Warning - Send a test warning, medium importance, issued to Etzelia");
|
||||
System.out.println("99. Exit");
|
||||
System.out.print("Select Option: ");
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
|
@ -64,6 +64,9 @@ public class Test {
|
|||
case 7:
|
||||
option = 7;
|
||||
break;
|
||||
case 8:
|
||||
option = 8;
|
||||
break;
|
||||
case 99:
|
||||
option = 99;
|
||||
break;
|
||||
|
@ -148,6 +151,11 @@ public class Test {
|
|||
System.out.println("===== Ticket =====");
|
||||
System.out.println("Status: " + response.getStatus());
|
||||
System.out.println("Message: " + response.getMessage());
|
||||
} else if (option == 8) {
|
||||
MCMResponse response = new MCMResponse(MCMAPI.postWarning("bf0446a8-9695-4c41-aa4c-7ff45bfd1171", "bf0446a8-9695-4c41-aa4c-7ff45bfd1171", "M", "Test Warning"));
|
||||
System.out.println("===== Warning =====");
|
||||
System.out.println("Status: " + response.getStatus());
|
||||
System.out.println("Message: " + response.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,18 +8,37 @@ staff-chat:
|
|||
prefix:
|
||||
- "#"
|
||||
|
||||
# Override rules
|
||||
# A '*' before a rule will show as a sub-rule
|
||||
rules:
|
||||
enabled: true
|
||||
rules:
|
||||
- "Be respectful of other players and staff."
|
||||
- "Do not troll, harass, or ruin the game-play of other players. No PvP unless agreed upon."
|
||||
- "Respect the boundaries of other players and Spawn."
|
||||
- "No cheating. (X-ray, Duping, etc.)"
|
||||
- "Don't steal. All chests are private unless marked otherwise."
|
||||
- "Respect public and private builds, spaces and boundaries"
|
||||
- "*No griefing, no altering of other player's builds without consent. Respect builds and boundaries of spawn, nether hub and public tunnels."
|
||||
- "*Repair damage caused by mobs"
|
||||
- "*No PvP unless agreed upon"
|
||||
- "Do not cheat"
|
||||
- "*Don't try to get ahead of other players by cheating. No X-RAY, duping, flying, etc."
|
||||
- "*Some mods for enhancing gameplay are allowed, ask staff about them."
|
||||
- "Do not steal"
|
||||
- "*Don't take anything from other players without permission. All chests are private unless marked otherwise. Be sure to pay for what you buy!"
|
||||
application:
|
||||
validate: true
|
||||
answer: "24karrot"
|
||||
|
||||
# Ban options
|
||||
# Bans can auto-generate a warning (High severity)
|
||||
# Ban options are shortcuts: Instead of /ban Etzelia Do not steal
|
||||
# You could instead type /ban Etzelia 1
|
||||
ban:
|
||||
enabled: true
|
||||
auto-warning: true
|
||||
options:
|
||||
- "Do not grief and/or PvP without consent"
|
||||
- "Do not xray and/or use a hacked client"
|
||||
- "Do not steal"
|
||||
- "Do not use an alt to evade a ban"
|
||||
|
||||
permissions:
|
||||
# Can be PermissionsEX or LuckPerms
|
||||
engine: "PermissionsEX"
|
||||
|
@ -40,7 +59,6 @@ deny:
|
|||
commands:
|
||||
- "mute <player>"
|
||||
|
||||
|
||||
django:
|
||||
# URL to the base MCM API
|
||||
url: "http://localhost:8000/api/"
|
||||
|
|
|
@ -17,6 +17,9 @@ commands:
|
|||
ticket:
|
||||
description: Submit a help ticket
|
||||
aliases: []
|
||||
warning:
|
||||
description: Issue a warning
|
||||
aliases: [warn]
|
||||
application:
|
||||
description: Application commands. Accept, Deny, Search, Info
|
||||
aliases: [app]
|
||||
|
@ -33,6 +36,9 @@ permissions:
|
|||
minecraftmanager.ticket:
|
||||
description: Allows use of the Ticket command.
|
||||
default: op
|
||||
minecraftmanager.warning:
|
||||
description: Allows use of the Warning command.
|
||||
default: op
|
||||
minecraftmanager.application.search:
|
||||
description: Allows a player to search through applications
|
||||
default: op
|
||||
|
@ -45,6 +51,9 @@ permissions:
|
|||
minecraftmanager.register:
|
||||
description: Who is allowed to register for the MCM web application
|
||||
default: op
|
||||
minecraftmanager.report:
|
||||
description: Who is allowed to generate an entity report.
|
||||
default: op
|
||||
minecraftmanager.application.*:
|
||||
description: Wildcard permission for MCM applications
|
||||
default: op
|
||||
|
@ -58,6 +67,8 @@ permissions:
|
|||
minecraftmanager.use: true
|
||||
minecraftmanager.apply: true
|
||||
minecraftmanager.ticket: true
|
||||
minecraftmanager.warning: true
|
||||
minecraftmanager.application.*: true
|
||||
minecraftmanager.staff: true
|
||||
minecraftmanager.register: true
|
||||
minecraftmanager.register: true
|
||||
minecraftmanager.report: true
|
Loading…
Reference in New Issue