203 lines
8.6 KiB
Java
203 lines
8.6 KiB
Java
|
|
package moe.sob;
|
||
|
|
|
||
|
|
import moe.sob.commands.InfoCommand;
|
||
|
|
import moe.sob.commands.PingCommand;
|
||
|
|
import moe.sob.commands.SendMessageCommand;
|
||
|
|
import moe.sob.commands.SetLoggingModeCommand;
|
||
|
|
import moe.sob.commands.SetGreetMessageCommand;
|
||
|
|
import moe.sob.events.player.*;
|
||
|
|
import moe.sob.events.server.ServerLoad;
|
||
|
|
import moe.sob.events.world.WorldLoad;
|
||
|
|
import moe.sob.events.world.WorldUnload;
|
||
|
|
import com.google.gson.JsonElement;
|
||
|
|
import com.google.gson.JsonParser;
|
||
|
|
import org.bukkit.Bukkit;
|
||
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
||
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||
|
|
import org.bukkit.entity.Player;
|
||
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
||
|
|
|
||
|
|
import java.awt.*;
|
||
|
|
import java.io.*;
|
||
|
|
import java.net.HttpURLConnection;
|
||
|
|
import java.net.URL;
|
||
|
|
import java.nio.file.Path;
|
||
|
|
import java.nio.file.Paths;
|
||
|
|
import java.util.Date;
|
||
|
|
import java.util.Objects;
|
||
|
|
|
||
|
|
public class Main extends JavaPlugin {
|
||
|
|
private static Main mainSmall;
|
||
|
|
private static boolean webhooksAreValidUrls;
|
||
|
|
public static boolean hdc;
|
||
|
|
public static File config;
|
||
|
|
public static FileConfiguration configR;
|
||
|
|
public static void main(String... args) {
|
||
|
|
System.out.printf("Initializing using server address: %s...%n", ServerUtils.address);
|
||
|
|
}
|
||
|
|
@Override
|
||
|
|
public void onDisable() {
|
||
|
|
if (Main.webhooksAreValidUrls) {
|
||
|
|
DiscordWebhook notify = new DiscordWebhook(Main.getNotifyWebhook());
|
||
|
|
DiscordWebhook.EmbedObject embedObject = new DiscordWebhook.EmbedObject().setTitle("The server has been disabled.").setDescription(String.format("The server at %s:%d is now shutting down.", Utils.getServerHostPublicIP(), Bukkit.getServer().getPort()))
|
||
|
|
.addField("Date occurred (as a local timestamp)", new Date().toString(), false)
|
||
|
|
.setColor(Color.DARK_GRAY);
|
||
|
|
notify.addEmbed(embedObject);
|
||
|
|
try {
|
||
|
|
notify.execute();
|
||
|
|
} catch (IOException e) {
|
||
|
|
throw new RuntimeException(e);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
@Override
|
||
|
|
public void onEnable() {
|
||
|
|
mainSmall = this;
|
||
|
|
config = new File(getDataFolder(), "config.yml");
|
||
|
|
/*if (!config.exists()) {
|
||
|
|
saveResource("config.yml", false);
|
||
|
|
}*/
|
||
|
|
configR = getConfig();
|
||
|
|
configR = YamlConfiguration.loadConfiguration(config);
|
||
|
|
if (!configR.contains("firstrun")) {
|
||
|
|
configR.set("server.name", "Minecraft Server");
|
||
|
|
configR.set("server.entry_message", "Welcome to @servername, @playername!");
|
||
|
|
configR.set("server.webhooks.notify", "default-ns");
|
||
|
|
configR.set("server.webhooks.broadcast", "default-ns");
|
||
|
|
|
||
|
|
configR.set("log", true);
|
||
|
|
configR.set("firstrun", 0);
|
||
|
|
|
||
|
|
try {
|
||
|
|
configR.save(config);
|
||
|
|
} catch (IOException e) {
|
||
|
|
throw new RuntimeException(e);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// such cap
|
||
|
|
//Bukkit.getConsoleSender().sendMessage("Note: This Spigot/Bukkit plugin is highly verbose, so it will log a lot of events...");
|
||
|
|
// register commands
|
||
|
|
try {
|
||
|
|
Objects.requireNonNull(this.getCommand("info")).setExecutor(new InfoCommand());
|
||
|
|
Objects.requireNonNull(this.getCommand("send-message")).setExecutor(new SendMessageCommand());
|
||
|
|
Objects.requireNonNull(this.getCommand("set-logging")).setExecutor(new SetLoggingModeCommand());
|
||
|
|
Objects.requireNonNull(this.getCommand("ping-server")).setExecutor(new PingCommand());
|
||
|
|
Objects.requireNonNull(this.getCommand("set-greet-message")).setExecutor(new SetGreetMessageCommand());
|
||
|
|
} catch (NullPointerException e) {
|
||
|
|
throw new RuntimeException(e);
|
||
|
|
}
|
||
|
|
webhooksAreValidUrls = validateWebhook_Ntfy();
|
||
|
|
hdc = validateWebhook_Pub();
|
||
|
|
// register events
|
||
|
|
if (webhooksAreValidUrls)
|
||
|
|
registerEvents();
|
||
|
|
if (webhooksAreValidUrls) {
|
||
|
|
ServerLoad serverStart = new ServerLoad();
|
||
|
|
getServer().getPluginManager().registerEvents(serverStart, this);
|
||
|
|
PlayerJoin playerJoin = new PlayerJoin();
|
||
|
|
PlayerQuit playerQuit = new PlayerQuit();
|
||
|
|
getServer().getPluginManager().registerEvents(playerJoin, this);
|
||
|
|
getServer().getPluginManager().registerEvents(playerQuit, this);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
public static boolean validateWebhook_Pub() {
|
||
|
|
try {
|
||
|
|
if (getPublicMessageWebhook().equals("default-ns")) {
|
||
|
|
mainSmall.getLogger().warning("There is no webhook set for the public messages function. The send-message command cannot be used.");
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
URL url = new URL(getPublicMessageWebhook());
|
||
|
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||
|
|
connection.setRequestMethod("GET");
|
||
|
|
int responseCode = connection.getResponseCode();
|
||
|
|
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
mainSmall.getLogger().warning("Invalid webhook URL provided for your public messages. Please provide the correct webhook and check for any typos.");
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
} catch (Exception e) {
|
||
|
|
mainSmall.getLogger().warning("Invalid webhook URL provide for your public messages. Please provide the correct webhook and check for any typos. (Caught exception)");
|
||
|
|
System.out.printf("Exception: %s%n", e);
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static boolean validateWebhook_Ntfy() {
|
||
|
|
try {
|
||
|
|
if (getNotifyWebhook().equals("default-ns")) {
|
||
|
|
mainSmall.getLogger().warning("There is no webhook set for the notify function. No events will be logged.");
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
URL url = new URL(getNotifyWebhook());
|
||
|
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||
|
|
connection.setRequestMethod("GET");
|
||
|
|
int responseCode = connection.getResponseCode();
|
||
|
|
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||
|
|
return true;
|
||
|
|
} else {
|
||
|
|
mainSmall.getLogger().warning("Invalid webhook URL provided for the event logs. Please provide the correct webhook and check for any typos.");
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
} catch (Exception e) {
|
||
|
|
mainSmall.getLogger().warning("Invalid webhook URL provided for the event logs. Please provide the correct webhook and check for any typos. (Caught exception)");
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
public static String getPublicMessageWebhook() {
|
||
|
|
String webhook = configR.getString("server.webhooks.broadcast");
|
||
|
|
if (webhook.startsWith("https://") || webhook.startsWith("http://")) {
|
||
|
|
webhooksAreValidUrls = true;
|
||
|
|
return webhook;
|
||
|
|
}
|
||
|
|
|
||
|
|
return "default-ns";
|
||
|
|
}
|
||
|
|
|
||
|
|
public static String getServerName() {
|
||
|
|
return configR.getString("server.name");
|
||
|
|
}
|
||
|
|
public static String getGreetMessage(Player player) {
|
||
|
|
try {
|
||
|
|
String entryMessage = configR.getString("server.entry_message");
|
||
|
|
String serverName = getServerName();
|
||
|
|
String playername = player.getName();
|
||
|
|
String finalOut = "";
|
||
|
|
finalOut = entryMessage.replaceAll("@servername", serverName).replaceAll("@playername", playername);
|
||
|
|
|
||
|
|
return finalOut;
|
||
|
|
} catch (Exception e) {
|
||
|
|
throw new RuntimeException(e);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static String getNotifyWebhook() {
|
||
|
|
String webhook = configR.getString("server.webhooks.notify");
|
||
|
|
if (webhook.startsWith("https://") || webhook.startsWith("http://")) {
|
||
|
|
webhooksAreValidUrls = true;
|
||
|
|
return webhook;
|
||
|
|
}
|
||
|
|
|
||
|
|
return "default-ns";
|
||
|
|
}
|
||
|
|
|
||
|
|
public void registerEvents() {
|
||
|
|
PlayerChat playerChat = new PlayerChat();
|
||
|
|
PlayerCommandPreprocess playerCommandPreprocess = new PlayerCommandPreprocess();
|
||
|
|
PlayerBedEnter playerBedEnter = new PlayerBedEnter();
|
||
|
|
PlayerBedLeave playerBedLeave = new PlayerBedLeave();
|
||
|
|
WorldLoad worldLoad = new WorldLoad();
|
||
|
|
WorldUnload worldUnload = new WorldUnload();
|
||
|
|
getServer().getPluginManager().registerEvents(playerChat, this);
|
||
|
|
getServer().getPluginManager().registerEvents(playerCommandPreprocess, this);
|
||
|
|
getServer().getPluginManager().registerEvents(playerBedEnter, this);
|
||
|
|
getServer().getPluginManager().registerEvents(playerBedLeave, this);
|
||
|
|
getServer().getPluginManager().registerEvents(worldLoad, this);
|
||
|
|
getServer().getPluginManager().registerEvents(worldUnload, this);
|
||
|
|
}
|
||
|
|
}
|