diff --git a/DeepslateMC/build.gradle b/DeepslateMC/build.gradle new file mode 100644 index 0000000..43d8d8b --- /dev/null +++ b/DeepslateMC/build.gradle @@ -0,0 +1,55 @@ +plugins { + id 'java' + id("xyz.jpenilla.run-paper") version "2.3.1" +} + +group = 'de.pascalpex' +version = '1.21.8' + +repositories { + mavenCentral() + maven { + name = "spigotmc-repo" + url = "https://hub.spigotmc.org/nexus/content/repositories/snapshots/" + } +} + +dependencies { + compileOnly("org.spigotmc:spigot-api:1.21.8-R0.1-SNAPSHOT") +} + +tasks { + runServer { + // Configure the Minecraft version for our task. + // This is the only required configuration besides applying the plugin. + // Your plugin's jar (or shadowJar if present) will be used automatically. + minecraftVersion("1.21") + } +} + +def targetJavaVersion = 21 +java { + def javaVersion = JavaVersion.toVersion(targetJavaVersion) + sourceCompatibility = javaVersion + targetCompatibility = javaVersion + if (JavaVersion.current() < javaVersion) { + toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) + } +} + +tasks.withType(JavaCompile).configureEach { + options.encoding = 'UTF-8' + + if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { + options.release.set(targetJavaVersion) + } +} + +processResources { + def props = [version: version] + inputs.properties props + filteringCharset 'UTF-8' + filesMatching('plugin.yml') { + expand props + } +} diff --git a/DeepslateMC/gradle.properties b/DeepslateMC/gradle.properties new file mode 100644 index 0000000..e69de29 diff --git a/DeepslateMC/gradle/wrapper/gradle-wrapper.properties b/DeepslateMC/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..0d8ab51 --- /dev/null +++ b/DeepslateMC/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip diff --git a/DeepslateMC/settings.gradle b/DeepslateMC/settings.gradle new file mode 100644 index 0000000..81b109a --- /dev/null +++ b/DeepslateMC/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'DeepslateMC' diff --git a/DeepslateMC/src/main/java/de/pascalpex/deepslateMC/DeepslateMC.java b/DeepslateMC/src/main/java/de/pascalpex/deepslateMC/DeepslateMC.java new file mode 100644 index 0000000..27e8b8d --- /dev/null +++ b/DeepslateMC/src/main/java/de/pascalpex/deepslateMC/DeepslateMC.java @@ -0,0 +1,17 @@ +package de.pascalpex.deepslateMC; + +import org.bukkit.plugin.java.JavaPlugin; + +public final class DeepslateMC extends JavaPlugin { + + @Override + public void onEnable() { + // Plugin startup logic + + } + + @Override + public void onDisable() { + // Plugin shutdown logic + } +} diff --git a/DeepslateMC/src/main/resources/plugin.yml b/DeepslateMC/src/main/resources/plugin.yml new file mode 100644 index 0000000..39bbdee --- /dev/null +++ b/DeepslateMC/src/main/resources/plugin.yml @@ -0,0 +1,4 @@ +name: DeepslateMC +version: '1.21.8' +main: de.pascalpex.deepslateMC.DeepslateMC +api-version: '1.21' diff --git a/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/commands/ServerPingListener.java b/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/commands/ServerPingListener.java new file mode 100644 index 0000000..4d35d06 --- /dev/null +++ b/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/commands/ServerPingListener.java @@ -0,0 +1,35 @@ +package de.pascalpex.deepslatemc.listeners; + +import de.pascalpex.deepslatemc.files.Config; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.server.ServerListPingEvent; +import org.jetbrains.annotations.NotNull; + +public class ServerPingListener implements Listener { + + private final MiniMessage miniMessage = MiniMessage.miniMessage(); + + @EventHandler + public void onServerPing(@NotNull ServerListPingEvent event) { + if (Config.getMaintenanceMode()) { + String motdString = Config.getMaintenanceMotd(); + event.motd(deserializeMotd(motdString)); + event.setMaxPlayers(0); + } else { + String motdString = Config.getNormalMotd(); + event.motd(deserializeMotd(motdString)); + } + } + + private Component deserializeMotd(String motdString) { + if (Config.getMinimessageMotd()) { + return miniMessage.deserialize(motdString); + } else { + return LegacyComponentSerializer.legacyAmpersand().deserialize(motdString); + } + } +} diff --git a/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/files/Config.java b/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/files/Config.java index eec076d..8692013 100644 --- a/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/files/Config.java +++ b/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/files/Config.java @@ -94,12 +94,18 @@ public static void setBuildworld(String worldName) { save(); } public static boolean getMaintenanceMode() { - return config.getBoolean(MAINTENANCE_MODE.key); + return config.getBoolean(MAINTENANCE_ENABLED.key); } public static void toggleMaintenanceMode() { - config.set(MAINTENANCE_MODE.key, !getMaintenanceMode()); + config.set(MAINTENANCE_ENABLED.key, !getMaintenanceMode()); save(); } + public static List getMaintenanceMotd() { + return config.getStringList(MAINTENANCE_MOTD.key); + } + public static boolean useCustomMaintenanceMotd() { + return config.getBoolean(MAINTENANCE_USE_CUSTOM_MOTD.key); + } public static boolean getSpawnOnJoin() { return config.getBoolean(SPAWN_ON_JOIN.key); } @@ -183,5 +189,4 @@ public static Map getServerLinks() { config.getConfigurationSection(SERVER_LINKS.key).getKeys(false).forEach(key -> serverLinks.put(key, config.getString(SERVER_LINKS.key + "." + key))); return serverLinks; } - } diff --git a/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/files/ConfigEntry.java b/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/files/ConfigEntry.java index cdbb8e7..b4e4603 100644 --- a/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/files/ConfigEntry.java +++ b/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/files/ConfigEntry.java @@ -1,13 +1,14 @@ package de.pascalpex.deepslatemc.files; import net.kyori.adventure.bossbar.BossBar; - import java.util.List; enum ConfigEntry { DISCORD_LINK("discordLink", "https://discord.gg/BGrhNnVczp"), BUILDWORLD("buildworld", null), - MAINTENANCE_MODE("maintenance", false), + MAINTENANCE_ENABLED("maintenance.enabled", false), + MAINTENANCE_MOTD("maintenance.motd", List.of("&cThe server is currently under maintenance.", "&7We will be back soon!")), + MAINTENANCE_USE_CUSTOM_MOTD("maintenance.useCustomMotd", true), OP_COMMAND_ACTIVE("opCommandActive", true), SPAWN_ON_JOIN("spawnOnJoin", false), SPAWN_WORLD("spawn" + ".world", null), diff --git a/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/util/MaintenanceUtil.java b/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/util/MaintenanceUtil.java new file mode 100644 index 0000000..a4484db --- /dev/null +++ b/deepslateMC-server/src/main/java/de/pascalpex/deepslatemc/util/MaintenanceUtil.java @@ -0,0 +1,31 @@ +package de.pascalpex.deepslatemc.util; // oder ein anderer passender package-Name + +import de.pascalpex.deepslatemc.files.Config; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.server.ServerListPingEvent; + +import java.util.List; + +public class MaintenanceUtil implements Listener { + + @EventHandler + public void onServerPing(ServerListPingEvent event) { + if (Config.getMaintenanceMode() && Config.useCustomMaintenanceMotd()) { + List motdLines = Config.getMaintenanceMotd(); + String motdString = String.join("\n", motdLines); + + Component motd; + if (Config.getMinimessageMotd()) { + motd = MiniMessage.miniMessage().deserialize(motdString); + } else { + motd = LegacyComponentSerializer.legacyAmpersand().deserialize(motdString); + } + + event.motd(motd); + } + } +}