diff --git a/build.gradle.kts b/build.gradle.kts index 3234bf8..7a1c4a4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,8 +20,8 @@ repositories { } val jdkVersion = property("jdkVersion").toString().toInt() -val projectName = property("projectName").toString() -val projectRepo = property("projectRepo").toString() +val projectName = property("brandName").toString() +val projectRepo = property("providerRepo").toString() val upstreamRef = property("plazmaRef").toString() val upstreamCommitValue = property("plazmaCommit").toString() diff --git a/gradle.properties b/gradle.properties index 6854ac3..79948db 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,8 +10,10 @@ paper.runDisableWatchdog = true # Volt - Change below values group = org.plazmamc.thunderbolt -projectName = Thunderbolt -projectRepo = PlazmaMC/Thunderbolt +brandKey = plazmamc:thunderbolt +brandName = Thunderbolt +providerName = PlazmaMC +providerRepo = PlazmaMC/Thunderbolt # Volt - You must change below values when you upgrade the Minecraft. version = 1.20.6-R0.1-SNAPSHOT @@ -20,4 +22,4 @@ plazmaRef = dev/1.20.6 jdkVersion = 21 # Volt - Use ./gradlew updateUpstream to update this value -plazmaCommit = 7ef7531cd345914732d6b9abe6155cc7aa387217 +plazmaCommit = 6d70d2180fe263147292d9375deef321dc40eb05 diff --git a/patches/api/0001-Rebrand.patch b/patches/api/0001-Rebrand.patch new file mode 100644 index 0000000..99a6132 --- /dev/null +++ b/patches/api/0001-Rebrand.patch @@ -0,0 +1,37 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Mon, 27 May 2024 12:39:34 +0900 +Subject: [PATCH] Rebrand + + +diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java +index 098125a57409b480f045c3a8c3b58db74a6605f3..eb4f5e0724fd1782ed91fff302c244e399383a9e 100644 +--- a/src/main/java/io/papermc/paper/ServerBuildInfo.java ++++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java +@@ -32,11 +32,17 @@ public interface ServerBuildInfo { + Key BRAND_PLAZMA_ID = Key.key("plazmamc", "plazma"); + + // For those who fork Plazma - please add the new branding key here ++ // Thunderbolt start - Rebranding ++ /** ++ * The brand id for Thunderbolt. ++ */ ++ Key BRAND_THUNDERBOLT_ID = Key.key("plazmamc", "thunderbolt"); ++ // Thunderbolt end - Rebranding + + /** + * The brand id of the server. + */ +- Key BRAND_ID = BRAND_PLAZMA_ID; ++ Key BRAND_ID = BRAND_THUNDERBOLT_ID; // Thunderbolt - Rebranding + + /** + * Supported brands of the server. +@@ -45,6 +51,7 @@ public interface ServerBuildInfo { + BRAND_PAPER_ID, + BRAND_PURPUR_ID, + BRAND_PLAZMA_ID ++ ,BRAND_THUNDERBOLT_ID // Thunderbolt - Rebranding + ); + // Plazma end - Rebranding + diff --git a/patches/api/0001-Configuration-API.patch b/patches/api/0002-Configuration-API.patch similarity index 100% rename from patches/api/0001-Configuration-API.patch rename to patches/api/0002-Configuration-API.patch diff --git a/patches/patches/server/0001-Rebrand.patch b/patches/patches/server/0001-Rebrand.patch new file mode 100644 index 0000000..9426b1d --- /dev/null +++ b/patches/patches/server/0001-Rebrand.patch @@ -0,0 +1,62 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Mon, 27 May 2024 13:09:01 +0900 +Subject: [PATCH] Rebrand + + +diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +index 6995627310de4911d87a2f93a723d6b93dc0612f..cff534a7c6d0ecaed919aefc9323a3afda23fc1a 100644 +--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java ++++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +@@ -52,7 +52,7 @@ public class PaperVersionFetcher implements VersionFetcher { + if (build.buildNumber().isEmpty() && build.gitCommit().isEmpty()) { + updateMessage = text("You are running a development version without access to version information", color(0xFF5300)); + } else { +- updateMessage = getUpdateStatusMessage("PlazmaMC/Plazma", build); // Purpur // Plazma - Fork-friendly Rebranding ++ updateMessage = getUpdateStatusMessage("PlazmaMC/Volt", build); // Purpur // Plazma - Fork-friendly Rebranding // Volt - Rebranding + } + final @Nullable Component history = this.getHistory(); + +diff --git a/src/main/java/io/papermc/paper/ServerBrandConstants.java b/src/main/java/io/papermc/paper/ServerBrandConstants.java +index b085cb9b49f2b6b1ad72448959d57a5a7b1f1f21..b03a3d9646fc020749215f9afb5a4d66882be48c 100644 +--- a/src/main/java/io/papermc/paper/ServerBrandConstants.java ++++ b/src/main/java/io/papermc/paper/ServerBrandConstants.java +@@ -2,32 +2,26 @@ package io.papermc.paper; + + import org.jetbrains.annotations.Nullable; + ++// Volt start - Rebranding + public enum ServerBrandConstants {; + + // Basic brand informations +- protected static final String BRAND_NAME = "Plazma"; +- public static final String RESOURCE_PATH = "META-INF/maven/org.plazmamc.plazma/plazma-api/pom.properties"; ++ protected static final String BRAND_NAME = "Volt"; ++ public static final String RESOURCE_PATH = "META-INF/maven/org.plazmamc.volt/volt-api/pom.properties"; + + @Nullable +- public static final String ASCII_LOGO = """ +- +- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╗\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m╗\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m \033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m╗\033[38;2;142;54;148m \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m╗\033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m╗ \033[38;2;78;81;161m \033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m╗\033[38;2;56;91;166m\s +- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m█\033[38;2;196;31;137m█\033[38;2;193;33;138m╗ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m╗ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m╔\033[38;2;116;65;153m╝ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m█\033[38;2;101;72;157m╗\033[38;2;97;73;157m \033[38;2;94;75;158m█\033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m╗ +- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╔\033[38;2;193;33;138m╝ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m \033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m╔\033[38;2;120;64;153m╝\033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m╔\033[38;2;104;71;156m█\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m█\033[38;2;91;76;159m╔\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ +- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m═\033[38;2;196;31;137m╝\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m╔\033[38;2;123;62;152m╝\033[38;2;120;64;153m \033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m╚\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m╔\033[38;2;91;76;159m╝\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ +- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m║\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m█\033[38;2;180;38;140m█\033[38;2;177;39;141m█\033[38;2;174;41;142m█\033[38;2;170;42;142m█\033[38;2;167;43;143m╗ \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m║\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m \033[38;2;101;72;157m╚\033[38;2;97;73;157m═\033[38;2;94;75;158m╝\033[38;2;91;76;159m \033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m║\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ +- \033[38;2;215;23;133m╚\033[38;2;212;24;134m═\033[38;2;209;26;134m╝\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m╚\033[38;2;186;35;139m═\033[38;2;183;37;140m═\033[38;2;180;38;140m═\033[38;2;177;39;141m═\033[38;2;174;41;142m═\033[38;2;170;42;142m═\033[38;2;167;43;143m╝ \033[38;2;164;45;144m╚\033[38;2;161;46;144m═\033[38;2;158;47;145m╝\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m╚\033[38;2;145;53;148m═\033[38;2;142;54;148m╝ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m═\033[38;2;126;61;151m═\033[38;2;123;62;152m═\033[38;2;120;64;153m═\033[38;2;116;65;153m╝ \033[38;2;113;67;154m╚\033[38;2;110;68;155m═\033[38;2;107;69;155m╝\033[38;2;104;71;156m \033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m \033[38;2;88;77;159m╚\033[38;2;85;79;160m═\033[38;2;81;80;161m╝ \033[38;2;78;81;161m╚\033[38;2;75;83;162m═\033[38;2;72;84;163m╝\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m╚\033[38;2;59;90;165m═\033[38;2;56;91;166m╝\033[0m +- """; ++ public static final String ASCII_LOGO = null; + + // Support URLs + public static final String DOWNLOAD_PAGE = "https://plazmamc.org/downloads"; + public static final String CONFIG_REFERENCE = "https://docs.plazmamc.org/plazma/administration/reference/configurations"; + public static final String START_GUIDE = "https://docs.plazmamc.org/plazma/administration/getting-started"; + public static final String USAGE_GUIDE = "https://docs.plazmamc.org/plazma/administration/getting-started/next-step"; +- public static final String SUPPORT_PAGE = "https://github.com/PlazmaMC/Plazma/issues"; ++ public static final String SUPPORT_PAGE = "https://github.com/PlazmaMC/Volt/issues"; + + // DO NOT MODIFY BELOW + public static final String BRAND_LCASE = BRAND_NAME.toLowerCase(); + public static final String BRAND_UCASE = BRAND_NAME.toUpperCase(); + + } ++// Volt end - Rebranding diff --git a/patches/patches/server/0002-Throw-on-startup.patch b/patches/patches/server/0002-Throw-on-startup.patch new file mode 100644 index 0000000..eeefd3d --- /dev/null +++ b/patches/patches/server/0002-Throw-on-startup.patch @@ -0,0 +1,29 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Thu, 9 May 2024 12:53:31 +0900 +Subject: [PATCH] Throw on startup + + +diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +index b6c9e81249bba59856d96ff71610b687fd9c4396..d1b3ede396d89c0056194ff41e6bf2d9603e5d79 100644 +--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java ++++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +@@ -286,6 +286,18 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + } + // Paper end - Unix domain socket support + ++ // Volt start - Throw exception when the server is running on template ++ LOGGER.error("*********************** CAUTION ***********************"); ++ LOGGER.error("This version is an unmodified Volt template."); ++ LOGGER.error("The template cannot be started unless you modify it."); ++ LOGGER.error("If you want to use a typical server implementation, use Plazma."); ++ LOGGER.error("*******************************************************"); ++ if (!Boolean.getBoolean("Volt.iKnowWhatIAmDoing")) { ++ throw new IllegalStateException("Cannot start the server on the template."); ++ return false; ++ } ++ // Volt end - Throw exception when the server is running on template ++ + this.initializeKeyPair(); + DedicatedServer.LOGGER.info("Starting Minecraft server on {}:{}", this.getLocalIp().isEmpty() ? "*" : this.getLocalIp(), this.getPort()); + diff --git a/patches/patches/server/0003-Volt-Configurations.patch b/patches/patches/server/0003-Volt-Configurations.patch new file mode 100644 index 0000000..bb94d7f --- /dev/null +++ b/patches/patches/server/0003-Volt-Configurations.patch @@ -0,0 +1,749 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Alpha +Date: Sun, 25 Feb 2024 19:13:15 +0900 +Subject: [PATCH] Volt Configurations + + +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index cf13166d1fdd663f1f99fd6d00a5296631276511..a8b99e47440ea27be80c3db1c824f681bdf7337c 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -315,6 +315,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess(), iworlddataserver.getGameRules())), + spigotConfig -> minecraftserver.plazmaConfigurations.createWorldConfig(org.plazmamc.plazma.configurations.PlazmaConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess(), iworlddataserver.getGameRules())), ++ spigotConfig -> minecraftserver.voltConfigurations.createWorldConfig(org.plazmamc.volt.configurations.VoltConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess(), iworlddataserver.getGameRules())), // Volt - Add Example Configurations patch + executor + ); + // Plazma end - Configurable Plazma +diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java +index 16531bcbdfe80c7e3d553aa6fce576588e2e3b0e..edb3a943a3a34e221af533cb6fca2a19a5bd2dcc 100644 +--- a/src/main/java/net/minecraft/world/level/Level.java ++++ b/src/main/java/net/minecraft/world/level/Level.java +@@ -174,6 +174,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + return this.plazmaConfig; + } + // Plazma end - Configurable Plazma ++ // Volt start - Add Example Configurations patch ++ private final org.plazmamc.volt.configurations.WorldConfigurations voltConfig; ++ public org.plazmamc.volt.configurations.WorldConfigurations voltConfig() { ++ return this.voltConfig; ++ } ++ // Volt end - Add Example Configurations patch + + public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray + public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur +@@ -272,12 +278,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + org.bukkit.World.Environment env, + java.util.function.Function paperWorldConfigCreator, + java.util.function.Function plazmaWorldConfigurationCreator, ++ java.util.function.Function voltWorldConfigurationCreator, // Volt - Add Example Configurations patch + java.util.concurrent.Executor executor + ) { + // Plazma end - Configurable Plazma + this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot + this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config + this.plazmaConfig = plazmaWorldConfigurationCreator.apply(this.spigotConfig); // Plazma - Configurable Plazma ++ this.voltConfig = voltWorldConfigurationCreator.apply(this.spigotConfig); // Volt - Add Example Configurations patch + this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur + this.playerBreedingCooldowns = this.getNewBreedingCooldownCache(); // Purpur + this.generator = gen; +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +index 24b8c2dfb41e97adee90849d56f13583b6cafcc0..a430daedae66716ebff850a7f4c927c799f29640 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +@@ -1060,6 +1060,7 @@ public final class CraftServer implements Server { + org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot + this.console.paperConfigurations.reloadConfigs(this.console); + this.console.plazmaConfigurations.reloadConfigs(this.console); // Plazma - Configurable Plazma ++ this.console.voltConfigurations.reloadConfigs(this.console); // Volt - Add Volt Configurations + org.purpurmc.purpur.PurpurConfig.init((File) console.options.valueOf("purpur-settings")); // Purpur + for (ServerLevel world : this.console.getAllLevels()) { + // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty +@@ -3132,6 +3133,13 @@ public final class CraftServer implements Server { + } + // Plazma end - Configurable Plazma + ++ // Volt start - Add Example Configurations patch ++ @Override @org.jetbrains.annotations.NotNull ++ public YamlConfiguration getVoltConfig() { ++ return CraftServer.this.console.voltConfigurations.createLegacyObject(CraftServer.this.console); ++ } ++ // Volt end - Add Example Configurations patch ++ + @Override + public void restart() { + org.spigotmc.RestartCommand.restart(); +diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java +index f84266bca823be3fe7d26ac59b181424e1e307ef..57d7c2a310c000c39e0c44ec54d19cc123db312f 100644 +--- a/src/main/java/org/bukkit/craftbukkit/Main.java ++++ b/src/main/java/org/bukkit/craftbukkit/Main.java +@@ -205,6 +205,14 @@ public class Main { + .defaultsTo(new File(org.plazmamc.plazma.configurations.PlazmaConfigurations.CONFIG_DIR)) + .describedAs("Configuration Directory"); + // Plazma end - Configurable Plazma ++ ++ // Volt start - Add Example Configurations patch ++ acceptsAll(asList("volt-dir", "volt-settings-directory"), "Directory for Volt settings") ++ .withRequiredArg() ++ .ofType(File.class) ++ .defaultsTo(new File(org.plazmamc.volt.configurations.VoltConfigurations.CONFIG_DIR)) ++ .describedAs("Configuration Directory"); ++ // Volt end - Add Example Configurations patch + } + }; + +diff --git a/src/main/java/org/plazmamc/volt/commands/Commands.java b/src/main/java/org/plazmamc/volt/commands/Commands.java +new file mode 100644 +index 0000000000000000000000000000000000000000..3ca79a5091494d06fd2985a8ab27f097383d44de +--- /dev/null ++++ b/src/main/java/org/plazmamc/volt/commands/Commands.java +@@ -0,0 +1,23 @@ ++package org.plazmamc.volt.commands; ++ ++import net.minecraft.server.MinecraftServer; ++import org.bukkit.command.Command; ++import org.checkerframework.framework.qual.DefaultQualifier; ++import org.jetbrains.annotations.NotNull; ++import org.plazmamc.volt.commands.volt.VoltCommand; ++ ++import java.util.HashMap; ++import java.util.Map; ++ ++@DefaultQualifier(NotNull.class) ++public class Commands { ++ ++ private static final Map COMMANDS = new HashMap<>() {{ ++ put("volt", new VoltCommand("volt")); ++ }}; ++ ++ public static void register(final MinecraftServer server) { ++ COMMANDS.forEach((name, command) -> server.server.getCommandMap().register(name, "Volt", command)); ++ } ++ ++} +diff --git a/src/main/java/org/plazmamc/volt/commands/VoltSubCommand.java b/src/main/java/org/plazmamc/volt/commands/VoltSubCommand.java +new file mode 100644 +index 0000000000000000000000000000000000000000..28832f22527ffd770506fbdc27b32eea70ee3817 +--- /dev/null ++++ b/src/main/java/org/plazmamc/volt/commands/VoltSubCommand.java +@@ -0,0 +1,19 @@ ++package org.plazmamc.volt.commands; ++ ++import org.bukkit.command.CommandSender; ++import org.checkerframework.framework.qual.DefaultQualifier; ++import org.jetbrains.annotations.NotNull; ++ ++import java.util.Collections; ++import java.util.List; ++ ++@DefaultQualifier(NotNull.class) ++public interface VoltSubCommand { ++ ++ boolean execute(final CommandSender sender, final String subCommand, final String[] args); ++ ++ default List tabComplete(final CommandSender sender, final String subCommand, final String[] args) { ++ return Collections.emptyList(); ++ } ++ ++} +diff --git a/src/main/java/org/plazmamc/volt/commands/volt/VoltCommand.java b/src/main/java/org/plazmamc/volt/commands/volt/VoltCommand.java +new file mode 100644 +index 0000000000000000000000000000000000000000..92de73a92e936a54451585d3e82dee008deb271a +--- /dev/null ++++ b/src/main/java/org/plazmamc/volt/commands/volt/VoltCommand.java +@@ -0,0 +1,119 @@ ++package org.plazmamc.volt.commands.volt; ++ ++import io.papermc.paper.command.CommandUtil; ++import net.kyori.adventure.text.format.NamedTextColor; ++import it.unimi.dsi.fastutil.Pair; ++import net.minecraft.Util; ++import org.bukkit.Bukkit; ++import org.bukkit.command.Command; ++import org.bukkit.command.CommandSender; ++import org.bukkit.permissions.Permission; ++import org.bukkit.permissions.PermissionDefault; ++import org.checkerframework.framework.qual.DefaultQualifier; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; ++import org.plazmamc.volt.commands.VoltSubCommand; ++import org.plazmamc.volt.commands.volt.subcommand.ReloadCommand; ++import org.plazmamc.volt.commands.volt.subcommand.VersionCommand; ++ ++import java.util.*; ++import java.util.stream.Collectors; ++ ++import static net.kyori.adventure.text.Component.text; ++ ++@DefaultQualifier(NotNull.class) ++public class VoltCommand extends Command { ++ ++ private static final String PERMISSION = "bukkit.command.volt"; ++ ++ private static final Map SUB_COMMANDS = Util.make(() -> { ++ final Map, VoltSubCommand> commands = new HashMap<>() {{ ++ put(Set.of("reload"), new ReloadCommand()); ++ put(Set.of("version"), new VersionCommand()); ++ }}; ++ ++ return commands.entrySet().stream() ++ .flatMap(entry -> entry.getKey().stream().map(key -> Map.entry(key, entry.getValue()))) ++ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); ++ }); ++ ++ private static final Map ALIASES = Util.make(() -> { ++ final Map> aliases = new HashMap<>() {{ ++ put("reload", Set.of("rl")); ++ put("version", Set.of("ver")); ++ }}; ++ ++ return aliases.entrySet().stream() ++ .flatMap(entry -> entry.getValue().stream().map(val -> Map.entry(val, entry.getKey()))) ++ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); ++ }); ++ ++ public VoltCommand(final String name) { ++ super(name); ++ ++ final List permissions = new ArrayList<>() {{ ++ add(PERMISSION); ++ addAll(SUB_COMMANDS.keySet().stream().map(key -> PERMISSION + "." + key).toList()); ++ }}; ++ ++ this.description = "Volt related commands"; ++ this.usageMessage = String.format("/volt [%s]", String.join("|", SUB_COMMANDS.keySet())); ++ this.setPermission(String.join(";", permissions)); ++ ++ permissions.forEach(perm -> Bukkit.getServer().getPluginManager().addPermission(new Permission(perm, PermissionDefault.OP))); ++ } ++ ++ @Override ++ public boolean execute(final CommandSender sender, final String commandLabel, final String[] args) { ++ if (!testPermission(sender)) return true; ++ ++ if (args.length == 0) { ++ sender.sendMessage(text("Usage: " + this.usageMessage, NamedTextColor.RED)); ++ return false; ++ } ++ ++ final @Nullable Pair subCommand = resolveSubCommand(args[0]); ++ ++ if (subCommand == null) { ++ sender.sendMessage(text("Usage: " + this.usageMessage, NamedTextColor.RED)); ++ return false; ++ } ++ ++ if (!testPermission(sender, subCommand.first())) return true; ++ ++ return subCommand.second().execute(sender, subCommand.first(), Arrays.copyOfRange(args, 1, args.length)); ++ } ++ ++ @Override ++ public List tabComplete(final CommandSender sender, final String aliases, final String[] args) throws IllegalArgumentException { ++ if (args.length <= 1) return CommandUtil.getListMatchingLast(sender, args, SUB_COMMANDS.keySet()); ++ ++ final @Nullable Pair subCommand = resolveSubCommand(args[0]); ++ ++ if (subCommand != null) return subCommand.second().tabComplete(sender, subCommand.first(), Arrays.copyOfRange(args, 1, args.length)); ++ return Collections.emptyList(); ++ } ++ ++ private static boolean testPermission(final CommandSender sender, final String permission) { ++ if (sender.hasPermission(PERMISSION + "." + permission) || sender.hasPermission(PERMISSION)) return true; ++ sender.sendMessage(Bukkit.permissionMessage()); ++ return false; ++ } ++ ++ private static @Nullable Pair resolveSubCommand(String label) { ++ label = label.toLowerCase(); ++ @Nullable VoltSubCommand subCommand = SUB_COMMANDS.get(label); ++ ++ if (subCommand == null) { ++ final @Nullable String command = ALIASES.get(label); ++ if (command != null) { ++ label = command; ++ subCommand = SUB_COMMANDS.get(label); ++ } ++ } ++ ++ if (subCommand != null) return Pair.of(label, subCommand); ++ return null; ++ } ++ ++} +diff --git a/src/main/java/org/plazmamc/volt/commands/volt/subcommand/ReloadCommand.java b/src/main/java/org/plazmamc/volt/commands/volt/subcommand/ReloadCommand.java +new file mode 100644 +index 0000000000000000000000000000000000000000..849d337d2d48a945ee382eaeb51e29768a2b82dd +--- /dev/null ++++ b/src/main/java/org/plazmamc/volt/commands/volt/subcommand/ReloadCommand.java +@@ -0,0 +1,34 @@ ++package org.plazmamc.volt.commands.volt.subcommand; ++ ++import net.kyori.adventure.text.format.NamedTextColor; ++import net.minecraft.server.MinecraftServer; ++import org.bukkit.command.Command; ++import org.bukkit.command.CommandSender; ++import org.bukkit.craftbukkit.CraftServer; ++import org.checkerframework.framework.qual.DefaultQualifier; ++import org.jetbrains.annotations.NotNull; ++import org.plazmamc.volt.commands.VoltSubCommand; ++ ++import static net.kyori.adventure.text.Component.text; ++ ++@DefaultQualifier(NotNull.class) ++public class ReloadCommand implements VoltSubCommand { ++ ++ @Override ++ public boolean execute(final CommandSender sender, final String subCommand, final String[] args) { ++ reload(sender); ++ return true; ++ } ++ ++ private static void reload(final CommandSender sender) { ++ Command.broadcastCommandMessage(sender, text("Please note that this command is not supported and may cause issues.", NamedTextColor.RED)); ++ Command.broadcastCommandMessage(sender, text("If you encounter any issues please use the /stop command to restart your server.", NamedTextColor.RED)); ++ ++ MinecraftServer server = ((CraftServer) sender.getServer()).getServer(); ++ server.voltConfigurations.reloadConfigs(server); ++ server.server.reloadCount++; ++ ++ Command.broadcastCommandMessage(sender, text("Successfully reloaded Plazma configuration files.", NamedTextColor.GREEN)); ++ } ++ ++} +diff --git a/src/main/java/org/plazmamc/volt/commands/volt/subcommand/VersionCommand.java b/src/main/java/org/plazmamc/volt/commands/volt/subcommand/VersionCommand.java +new file mode 100644 +index 0000000000000000000000000000000000000000..633127d196bdbfd0d98c78046fb2c7b1cca2aefa +--- /dev/null ++++ b/src/main/java/org/plazmamc/volt/commands/volt/subcommand/VersionCommand.java +@@ -0,0 +1,21 @@ ++package org.plazmamc.volt.commands.volt.subcommand; ++ ++import net.minecraft.server.MinecraftServer; ++import org.bukkit.command.Command; ++import org.bukkit.command.CommandSender; ++import org.checkerframework.framework.qual.DefaultQualifier; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; ++import org.plazmamc.volt.commands.VoltSubCommand; ++ ++@DefaultQualifier(NotNull.class) ++public class VersionCommand implements VoltSubCommand { ++ ++ @Override ++ public boolean execute(final CommandSender sender, final String subCommand, final String[] args) { ++ final @Nullable Command ver = MinecraftServer.getServer().server.getCommandMap().getCommand("version"); ++ if (ver != null) return ver.execute(sender, "plazma", new String[0]); ++ return false; ++ } ++ ++} +diff --git a/src/main/java/org/plazmamc/volt/configurations/GlobalConfiguration.java b/src/main/java/org/plazmamc/volt/configurations/GlobalConfiguration.java +new file mode 100644 +index 0000000000000000000000000000000000000000..6f3cf61b85b92c8b9783323a98140e8d2fbc3307 +--- /dev/null ++++ b/src/main/java/org/plazmamc/volt/configurations/GlobalConfiguration.java +@@ -0,0 +1,26 @@ ++package org.plazmamc.volt.configurations; ++ ++import io.papermc.paper.configuration.Configuration; ++import io.papermc.paper.configuration.ConfigurationPart; ++import org.jetbrains.annotations.NotNull; ++import org.spongepowered.configurate.objectmapping.meta.Setting; ++import org.spongepowered.configurate.objectmapping.meta.PostProcess; ++ ++@SuppressWarnings({"CanBeFinal", "FieldCanBeLocal", "FieldMayBeFinal", "InnerClassMayBeStatic"}) ++public class GlobalConfiguration extends ConfigurationPart { ++ ++ private static GlobalConfiguration INSTANCE; ++ static final int VERSION = 1; ++ ++ public static GlobalConfiguration get() { ++ return INSTANCE; ++ } ++ ++ static void set(final @NotNull GlobalConfiguration instance) { ++ GlobalConfiguration.INSTANCE = instance; ++ } ++ ++ @Setting(Configuration.VERSION_FIELD) ++ int version = VERSION; ++ ++} +diff --git a/src/main/java/org/plazmamc/volt/configurations/RemovedConfigurations.java b/src/main/java/org/plazmamc/volt/configurations/RemovedConfigurations.java +new file mode 100644 +index 0000000000000000000000000000000000000000..4dd948fe3c71675e6bbe95f412d265af484028df +--- /dev/null ++++ b/src/main/java/org/plazmamc/volt/configurations/RemovedConfigurations.java +@@ -0,0 +1,13 @@ ++package org.plazmamc.volt.configurations; ++ ++import org.spongepowered.configurate.NodePath; ++ ++interface RemovedConfigurations { ++ ++ NodePath[] WORLD_PATHS = { ++ }; ++ ++ NodePath[] GLOBAL_PATHS = { ++ }; ++ ++} +diff --git a/src/main/java/org/plazmamc/volt/configurations/VoltConfigurations.java b/src/main/java/org/plazmamc/volt/configurations/VoltConfigurations.java +new file mode 100644 +index 0000000000000000000000000000000000000000..3ee9f9ba02e410907a9df6abddc64cad68a4383e +--- /dev/null ++++ b/src/main/java/org/plazmamc/volt/configurations/VoltConfigurations.java +@@ -0,0 +1,208 @@ ++package org.plazmamc.volt.configurations; ++ ++import com.mojang.logging.LogUtils; ++import io.papermc.paper.configuration.ConfigurationPart; ++import io.papermc.paper.configuration.Configurations; ++import joptsimple.OptionSet; ++import net.minecraft.core.RegistryAccess; ++import net.minecraft.server.level.ServerLevel; ++import org.checkerframework.framework.qual.DefaultQualifier; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.VisibleForTesting; ++import org.slf4j.Logger; ++import org.spongepowered.configurate.ConfigurationOptions; ++import org.spongepowered.configurate.yaml.YamlConfigurationLoader; ++import org.spongepowered.configurate.ConfigurateException; ++import org.spongepowered.configurate.BasicConfigurationNode; ++import org.spongepowered.configurate.ConfigurationNode; ++import org.spongepowered.configurate.objectmapping.ObjectMapper; ++import org.spongepowered.configurate.NodePath; ++ ++import java.io.File; ++import java.nio.file.Path; ++import java.util.function.Function; ++ ++import static io.leangen.geantyref.GenericTypeReflector.erase; ++ ++@DefaultQualifier(NotNull.class) ++public class VoltConfigurations extends Configurations { ++ ++ public static final String CONFIG_DIR = "config"; ++ static final Logger LOGGER = LogUtils.getLogger(); ++ static final String GLOBAL_CONFIG_FILE_NAME = "volt_global.yaml"; ++ static final String WORLD_DEFAULT_CONFIG_FILE_NAME = "volt_worlds.yaml"; ++ static final String WORLD_CONFIG_FILE_NAME = "volt_configurations.yaml"; ++ ++ private static final String HEADER_START = """ ++ ### ENGLISH ### ++ Volt is a template project that helps you fork your Plazma easily. ++ This software is not suitable for use as a regular server. If you ++ are not a fork developer, and you just want to run a server, ++ please use Plazma. ++ ++ %s ++ ++ ### KOREAN ### ++ Volt는 Plazma를 쉽게 포크할 수 있도록 도와주는 템플릿 프로젝트입니다. ++ 이 소프트웨어는 일반 서버로 사용하기 적합하지 않습니다. 당신이 포크 ++ 개발자가 아니고, 단지 서버를 운영하고 싶다면, Plazma를 사용해 주십시오. ++ ++ %s ++ ++ GitHub: https://github.com/PlazmaMC/Volt ++ Development Guide: https://github.com/PlazmaMC/Volt/wiki ++ ++ Download Plazma: https://github.com/PlazmaMC/PlazmaBukkit?tab=readme-ov-file#️-downloads ++ Discord: https://plazmamc.org/discord ++ """; ++ ++ private static final String GLOBAL_HEADER = HEADER_START.formatted(""" ++ Below are several template values set in GlobalConfiguration.java. ++ Refer to the class for more information on how the configuration applies. ++ These are values that apply to the **entire server** regardless of ++ the world. However, you must take advantage of the system properties ++ in order for the server to be able to modify the values before ++ loading the configuration. See org.plazmamc.volt.Options class for ++ development of system properties. ++ """, """ ++ 아래에는 GlobalConfiguration.java에 설정된 여러 템플릿 값들이 있습니다. ++ 구성이 적용되는 여러 방법은 해당 클래스를 참고하세요. ++ 이 값들은 월드에 관계 없이 **서버 전체**에 적용되는 값들입니다. 다만, 서버가 구성을 ++ 로드하기 전의 값을 수정할 수 있게 만드려면, 시스템 속성을 이용해야 합니다. ++ 시스템 속성에 대한 개발은 org.plazmamc.volt.Options 클래스를 참고하세요. ++ """ ++ ); ++ ++ private static final String WORLD_DEFAULT_HEADER = HEADER_START.formatted(""" ++ Below are several template values that are set in WorldConfigurations.java. ++ Refer to the class for more information on how the configuration applies. ++ These are values that apply to the **entire game (world)** regardless ++ of the world. However, these world configurations can be set to ++ override values that apply only to that world through the ++ %WORLD_CONFIG_FILE_NAME% file in the world folder. ++ """, """ ++ 아래에는 WorldConfigurations.java에 설정된 여러 템플릿 값들이 있습니다. ++ 구성이 적용되는 여러 방법은 해당 클래스를 참고하세요. ++ 이 값들은 월드에 관계 없이 **게임(월드) 전체**에 적용되는 값들입니다. 다만, ++ 이러한 월드 구성은 월드 폴더 내에 있는 %WORLD_CONFIG_FILE_NAME% 파일을 통해 ++ 해당 월드에만 적용되는 덮어쓰기 값을 설정할 수 있습니다. ++ """ ++ ).replace("%WORLD_CONFIG_FILE_NAME%", WORLD_CONFIG_FILE_NAME); ++ ++ private static final Function WORLD_HEADER = map -> """ ++ ### ENGLISH ### ++ This file is a Volt configuration file for %s (%s) world only. ++ This file is empty in its initial state, but you can populate the ++ values set in the %s file to override them. ++ ++ ### KOREAN ### ++ 본 파일은 %s (%s) 월드 전용 Volt 구성 파일입니다. ++ 이 파일은 초기 상태에는 비어있지만, %s 파일에 설정된 값을 덮어쓰기 위해 값을 채워 ++ 넣을 수 있습니다. ++ """.formatted( ++ map.require(WORLD_NAME), map.require(WORLD_KEY), WORLD_CONFIG_FILE_NAME, ++ map.require(WORLD_NAME), map.require(WORLD_KEY), WORLD_CONFIG_FILE_NAME ++ ); ++ ++ public VoltConfigurations(final OptionSet optionSet) { ++ super(((File) optionSet.valueOf("volt-settings-directory")).toPath()); ++ } ++ ++ @Override ++ protected Class globalConfigClass() { ++ return GlobalConfiguration.class; ++ } ++ ++ @Override ++ protected String globalConfigFileName() { ++ return GLOBAL_CONFIG_FILE_NAME; ++ } ++ ++ @Override ++ protected NodePath[] removedGlobalPaths() { ++ return RemovedConfigurations.GLOBAL_PATHS; ++ } ++ ++ @Override ++ protected GlobalConfiguration getGlobalConfiguration() { ++ return GlobalConfiguration.get(); ++ } ++ ++ @Override ++ protected int globalConfigVersion() { ++ return GlobalConfiguration.VERSION; ++ } ++ ++ @Override ++ protected Class worldConfigClass() { ++ return WorldConfigurations.class; ++ } ++ ++ @Override ++ protected String defaultWorldConfigFileName() { ++ return WORLD_DEFAULT_CONFIG_FILE_NAME; ++ } ++ ++ @Override ++ protected String worldConfigFileName() { ++ return WORLD_CONFIG_FILE_NAME; ++ } ++ ++ @Override ++ protected String worldDefaultHeader() { ++ return WORLD_DEFAULT_HEADER; ++ } ++ ++ @Override ++ protected NodePath[] removedWorldPaths() { ++ return RemovedConfigurations.WORLD_PATHS; ++ } ++ ++ @Override ++ protected WorldConfigurations getWorldConfiguration(ServerLevel level) { ++ return level.voltConfig(); ++ } ++ ++ @Override ++ protected int worldConfigVersion() { ++ return WorldConfigurations.VERSION; ++ } ++ ++ @Override ++ protected String buildWorldHeader(ContextMap contextMap) { ++ return WORLD_HEADER.apply(contextMap); ++ } ++ ++ @Override ++ protected YamlConfigurationLoader.Builder createGlobalLoaderBuilder() { ++ return super.createGlobalLoaderBuilder() ++ .defaultOptions(VoltConfigurations::defaultGlobalOptions); ++ } ++ ++ @Override ++ public GlobalConfiguration initializeGlobalConfiguration(final RegistryAccess registryAccess) throws ConfigurateException { ++ GlobalConfiguration configuration = super.initializeGlobalConfiguration(registryAccess); ++ GlobalConfiguration.set(configuration); ++ return configuration; ++ } ++ ++ @Override ++ protected WorldConfigurations createWorldConfigInstance(ContextMap contextMap) { ++ return new WorldConfigurations(contextMap.require(WORLD_KEY)); ++ } ++ ++ private static ConfigurationOptions defaultGlobalOptions( ++ final ConfigurationOptions options ++ ) { ++ return options.header(GLOBAL_HEADER); ++ } ++ ++ @VisibleForTesting ++ static ConfigurationNode createForTesting() { ++ ObjectMapper.Factory factory = defaultGlobalFactoryBuilder(ObjectMapper.factoryBuilder()).build(); ++ ConfigurationOptions options = defaultGlobalOptions(defaultOptions(ConfigurationOptions.defaults())) ++ .serializers(builder -> builder.register(type -> ConfigurationPart.class.isAssignableFrom(erase(type)), factory.asTypeSerializer())); ++ return BasicConfigurationNode.root(options); ++ } ++ ++} +diff --git a/src/main/java/org/plazmamc/volt/configurations/WorldConfigurations.java b/src/main/java/org/plazmamc/volt/configurations/WorldConfigurations.java +new file mode 100644 +index 0000000000000000000000000000000000000000..ecbc1118b7c7fe6463f612a7a9f0f699af959122 +--- /dev/null ++++ b/src/main/java/org/plazmamc/volt/configurations/WorldConfigurations.java +@@ -0,0 +1,23 @@ ++package org.plazmamc.volt.configurations; ++ ++import io.papermc.paper.configuration.Configuration; ++import io.papermc.paper.configuration.ConfigurationPart; ++import org.jetbrains.annotations.NotNull; ++import net.minecraft.resources.ResourceLocation; ++import org.spongepowered.configurate.objectmapping.meta.PostProcess; ++import org.spongepowered.configurate.objectmapping.meta.Setting; ++ ++@SuppressWarnings({"CanBeFinal", "FieldCanBeLocal", "FieldMayBeFinal", "InnerClassMayBeStatic"}) ++public class WorldConfigurations extends ConfigurationPart { ++ ++ static final int VERSION = 1; ++ ++ private transient final ResourceLocation worldKey; ++ public WorldConfigurations(final @NotNull ResourceLocation worldKey) { ++ this.worldKey = worldKey; ++ } ++ ++ @Setting(Configuration.VERSION_FIELD) ++ int version = VERSION; ++ ++} +diff --git a/src/test/java/org/bukkit/support/AbstractTestingBase.java b/src/test/java/org/bukkit/support/AbstractTestingBase.java +index 74af3501397bfd89d637ad5ce72bb8f2c2bbdc8a..1393fb567b7804c620faf699789f87866c27482a 100644 +--- a/src/test/java/org/bukkit/support/AbstractTestingBase.java ++++ b/src/test/java/org/bukkit/support/AbstractTestingBase.java +@@ -65,6 +65,7 @@ public abstract class AbstractTestingBase { + DummyServer.setup(); + io.papermc.paper.configuration.GlobalConfigTestingBase.setupGlobalConfigForTest(); // Paper + org.plazmamc.plazma.configurations.GlobalConfigurationTestingBase.setupGlobalConfigForTest(); // Plazma - Configurable Plazma ++ org.plazmamc.volt.configurations.GlobalConfigurationTestingBase.setupGlobalConfigurationForTesting(); // Volt - Add Example Configurations patch + + CraftRegistry.setMinecraftRegistry(REGISTRY_CUSTOM); + +diff --git a/src/test/java/org/plazmamc/volt/configurations/GlobalConfigurationTestingBase.java b/src/test/java/org/plazmamc/volt/configurations/GlobalConfigurationTestingBase.java +new file mode 100644 +index 0000000000000000000000000000000000000000..71d8bf545a3e83955eb9d4aef493a4b81c92fc17 +--- /dev/null ++++ b/src/test/java/org/plazmamc/volt/configurations/GlobalConfigurationTestingBase.java +@@ -0,0 +1,17 @@ ++package org.plazmamc.volt.configurations; ++ ++import org.spongepowered.configurate.ConfigurationNode; ++ ++public class GlobalConfigurationTestingBase { ++ ++ public static void setupGlobalConfigurationForTesting() { ++ if (GlobalConfiguration.get() != null) return; ++ ConfigurationNode node = VoltConfigurations.createForTesting(); ++ try { ++ GlobalConfiguration.set(node.require(GlobalConfiguration.class)); ++ } catch (Exception e) { ++ throw new RuntimeException(e); ++ } ++ } ++ ++} diff --git a/patches/patches/server/0004-Add-example-configuration-fields.patch b/patches/patches/server/0004-Add-example-configuration-fields.patch new file mode 100644 index 0000000..57719ad --- /dev/null +++ b/patches/patches/server/0004-Add-example-configuration-fields.patch @@ -0,0 +1,89 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Alpha +Date: Sun, 25 Feb 2024 18:41:14 +0900 +Subject: [PATCH] Add example configuration fields + + +diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +index 9de2a76a6af711b4992d3c7cc9200e5183e012fe..6a73be4235e64106371056ea8ba2279c18c781bc 100644 +--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java ++++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +@@ -91,6 +91,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + private RemoteSampleLogger tickTimeLogger; + @Nullable + private DebugSampleSubscriptionTracker debugSampleSubscriptionTracker; ++ public static String helloWorldMessage = "Hello, world!"; // Volt - Example configuration + + // CraftBukkit start - Signature changed + public DedicatedServer(joptsimple.OptionSet options, WorldLoader.DataLoadContext worldLoader, Thread thread, LevelStorageSource.LevelStorageAccess convertable_conversionsession, PackRepository resourcepackrepository, WorldStem worldstem, DedicatedServerSettings dedicatedserversettings, DataFixer datafixer, Services services, ChunkProgressListenerFactory worldloadlistenerfactory) { +@@ -414,6 +415,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) mobSpawnExecutor.start(); // Pufferfish + org.purpurmc.purpur.task.BossBarTask.startAll(); // Purpur + if (org.purpurmc.purpur.PurpurConfig.beeCountPayload) org.purpurmc.purpur.task.BeehiveTask.instance().register(); // Purpur ++ if (org.plazmamc.volt.configurations.GlobalConfiguration.get().example.helloWorld) logger.info(helloWorldMessage); // Volt - Example Configuration - Use the get() function to import fields in GlobalConfiguration. + return true; + } + } +diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java +index fdfe8f5bc5ad0e5f5ded41d87756a5866d041df1..569b0b8cae88aa0353f0bf9f87c2a8c89ab589e0 100644 +--- a/src/main/java/net/minecraft/server/players/PlayerList.java ++++ b/src/main/java/net/minecraft/server/players/PlayerList.java +@@ -426,6 +426,7 @@ public abstract class PlayerList { + ); + } + // Paper end - Send empty chunk ++ player.sendMessage(net.kyori.adventure.text.Component.text(player.level().voltConfig().playerWelcome.welcomeMessage)); // Volt - Example Config - The WorldConfigurations fetches fields through the getter of the level instance. + } + private void mountSavedVehicle(ServerPlayer player, ServerLevel worldserver1, Optional optional) { + // Paper end - Fire PlayerJoinEvent when Player is actually ready +diff --git a/src/main/java/org/plazmamc/volt/configurations/GlobalConfiguration.java b/src/main/java/org/plazmamc/volt/configurations/GlobalConfiguration.java +index 6f3cf61b85b92c8b9783323a98140e8d2fbc3307..c1172de50863e2fb7f1185d2a49aeccdac59bec2 100644 +--- a/src/main/java/org/plazmamc/volt/configurations/GlobalConfiguration.java ++++ b/src/main/java/org/plazmamc/volt/configurations/GlobalConfiguration.java +@@ -23,4 +23,29 @@ public class GlobalConfiguration extends ConfigurationPart { + @Setting(Configuration.VERSION_FIELD) + int version = VERSION; + ++ /* ++ @Settings(String) annotation is used to set the name of a field in a configuration file. ++ Not required; use the name of the variable if annotation is not used. ++ */ ++ @Setting("example-config") ++ public ExampleConfiguration example; // You must create a class instance to obtain fields through the configuration getter. ++ public class ExampleConfiguration extends ConfigurationPart { ++ ++ public boolean helloWorld = true; // The configuration fields are automatically created when you create variables without any settings. ++ ++ // This allows you to create a node tree. (In this case example.welcome) ++ public HelloWorld welcome; ++ public class HelloWorld extends ConfigurationPart { ++ ++ public String message = "Hello, world!"; ++ ++ @PostProcess // @PostProcess annotation allows you to set variables in a class immediately without using getter. ++ void postProcess() { ++ net.minecraft.server.dedicated.DedicatedServer.helloWorldMessage = this.message; ++ } ++ ++ } ++ ++ } ++ + } +diff --git a/src/main/java/org/plazmamc/volt/configurations/WorldConfigurations.java b/src/main/java/org/plazmamc/volt/configurations/WorldConfigurations.java +index ecbc1118b7c7fe6463f612a7a9f0f699af959122..16e26702d185b32f8e85971d7e30bafc0fde0f9b 100644 +--- a/src/main/java/org/plazmamc/volt/configurations/WorldConfigurations.java ++++ b/src/main/java/org/plazmamc/volt/configurations/WorldConfigurations.java +@@ -20,4 +20,12 @@ public class WorldConfigurations extends ConfigurationPart { + @Setting(Configuration.VERSION_FIELD) + int version = VERSION; + ++ // For basic information about configuration development, see GlobalConfiguration.java. ++ public PlayerWelcome playerWelcome; ++ public class PlayerWelcome extends ConfigurationPart { ++ ++ public String welcomeMessage = "Welcome to the server!"; ++ ++ } ++ + } diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch new file mode 100644 index 0000000..fda06df --- /dev/null +++ b/patches/server/0001-Rebrand.patch @@ -0,0 +1,70 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Mon, 27 May 2024 13:09:01 +0900 +Subject: [PATCH] Rebrand + + +diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +index 6995627310de4911d87a2f93a723d6b93dc0612f..c75488ea327d72a47a08693c252b0acc5e0a4e61 100644 +--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java ++++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +@@ -52,7 +52,7 @@ public class PaperVersionFetcher implements VersionFetcher { + if (build.buildNumber().isEmpty() && build.gitCommit().isEmpty()) { + updateMessage = text("You are running a development version without access to version information", color(0xFF5300)); + } else { +- updateMessage = getUpdateStatusMessage("PlazmaMC/Plazma", build); // Purpur // Plazma - Fork-friendly Rebranding ++ updateMessage = getUpdateStatusMessage("PlazmaMC/Thunderbolt", build); // Purpur // Plazma - Fork-friendly Rebranding // Thunderbolt - Rebranding + } + final @Nullable Component history = this.getHistory(); + +diff --git a/src/main/java/io/papermc/paper/ServerBrandConstants.java b/src/main/java/io/papermc/paper/ServerBrandConstants.java +index b085cb9b49f2b6b1ad72448959d57a5a7b1f1f21..c4e9f8590b2acc0cd223810ed5ade7b660d3dbb1 100644 +--- a/src/main/java/io/papermc/paper/ServerBrandConstants.java ++++ b/src/main/java/io/papermc/paper/ServerBrandConstants.java +@@ -2,21 +2,24 @@ package io.papermc.paper; + + import org.jetbrains.annotations.Nullable; + ++// Thunderbolt start - Rebranding + public enum ServerBrandConstants {; + + // Basic brand informations +- protected static final String BRAND_NAME = "Plazma"; +- public static final String RESOURCE_PATH = "META-INF/maven/org.plazmamc.plazma/plazma-api/pom.properties"; ++ protected static final String BRAND_NAME = "Thunderbolt"; ++ public static final String RESOURCE_PATH = "META-INF/maven/org.plazmamc.thunderbolt/thunderbolt-api/pom.properties"; + + @Nullable + public static final String ASCII_LOGO = """ +- +- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╗\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m╗\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m \033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m╗\033[38;2;142;54;148m \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m╗\033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m╗ \033[38;2;78;81;161m \033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m╗\033[38;2;56;91;166m\s +- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m█\033[38;2;196;31;137m█\033[38;2;193;33;138m╗ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m╗ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m╔\033[38;2;116;65;153m╝ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m█\033[38;2;101;72;157m╗\033[38;2;97;73;157m \033[38;2;94;75;158m█\033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m╗ +- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╔\033[38;2;193;33;138m╝ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m \033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m╔\033[38;2;120;64;153m╝\033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m╔\033[38;2;104;71;156m█\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m█\033[38;2;91;76;159m╔\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ +- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m═\033[38;2;196;31;137m╝\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m╔\033[38;2;123;62;152m╝\033[38;2;120;64;153m \033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m╚\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m╔\033[38;2;91;76;159m╝\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ +- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m║\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m█\033[38;2;180;38;140m█\033[38;2;177;39;141m█\033[38;2;174;41;142m█\033[38;2;170;42;142m█\033[38;2;167;43;143m╗ \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m║\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m \033[38;2;101;72;157m╚\033[38;2;97;73;157m═\033[38;2;94;75;158m╝\033[38;2;91;76;159m \033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m║\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ +- \033[38;2;215;23;133m╚\033[38;2;212;24;134m═\033[38;2;209;26;134m╝\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m╚\033[38;2;186;35;139m═\033[38;2;183;37;140m═\033[38;2;180;38;140m═\033[38;2;177;39;141m═\033[38;2;174;41;142m═\033[38;2;170;42;142m═\033[38;2;167;43;143m╝ \033[38;2;164;45;144m╚\033[38;2;161;46;144m═\033[38;2;158;47;145m╝\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m╚\033[38;2;145;53;148m═\033[38;2;142;54;148m╝ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m═\033[38;2;126;61;151m═\033[38;2;123;62;152m═\033[38;2;120;64;153m═\033[38;2;116;65;153m╝ \033[38;2;113;67;154m╚\033[38;2;110;68;155m═\033[38;2;107;69;155m╝\033[38;2;104;71;156m \033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m \033[38;2;88;77;159m╚\033[38;2;85;79;160m═\033[38;2;81;80;161m╝ \033[38;2;78;81;161m╚\033[38;2;75;83;162m═\033[38;2;72;84;163m╝\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m╚\033[38;2;59;90;165m═\033[38;2;56;91;166m╝\033[0m ++ \033[95m ++ ********** ** ** ** ** ** \s ++ /////**/// /** /** /** /** /** \s ++ /** /** ** ** ******* /** ***** ****** /** ****** /** ****** ++ /** /****** /** /** //**///** ****** **///** //**//* /****** **////** /** ///**/\s ++ /** /**///** /** /** /** /** **///** /******* /** / /**///** /** /** /** /** \s ++ /** /** /** /** /** /** /** /** /** /**//// /** /** /** /** /** /** /** \s ++ /** /** /** //****** *** /** //****** //****** /*** /****** //****** *** //**\s ++ // // // ////// /// // ////// ////// /// ///// ////// /// // \s\033[0m + """; + + // Support URLs +@@ -24,10 +27,11 @@ public enum ServerBrandConstants {; + public static final String CONFIG_REFERENCE = "https://docs.plazmamc.org/plazma/administration/reference/configurations"; + public static final String START_GUIDE = "https://docs.plazmamc.org/plazma/administration/getting-started"; + public static final String USAGE_GUIDE = "https://docs.plazmamc.org/plazma/administration/getting-started/next-step"; +- public static final String SUPPORT_PAGE = "https://github.com/PlazmaMC/Plazma/issues"; ++ public static final String SUPPORT_PAGE = "https://github.com/PlazmaMC/Thunderbolt/issues"; + + // DO NOT MODIFY BELOW + public static final String BRAND_LCASE = BRAND_NAME.toLowerCase(); + public static final String BRAND_UCASE = BRAND_NAME.toUpperCase(); + + } ++// Thunderbolt end - Rebranding diff --git a/patches/server/0001-Rebranding.patch b/patches/server/0001-Rebranding.patch deleted file mode 100644 index ba74e03..0000000 --- a/patches/server/0001-Rebranding.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Thu, 9 May 2024 12:47:04 +0900 -Subject: [PATCH] Rebranding - - -diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index d2215f5293c568b4ae525f4a63996bac6edf787b..fcd474949f1a5b4108d635e659bfe0a0ba551583 100644 ---- a/src/main/java/net/minecraft/server/Main.java -+++ b/src/main/java/net/minecraft/server/Main.java -@@ -117,15 +117,19 @@ public class Main { - // \033[38;2;236;61;151m┃\033[38;2;236;61;157m \033[38;2;237;62;163m┃\033[38;2;237;62;169m \033[38;2;238;62;175m \033[38;2;238;63;181m \033[38;2;239;63;187m \033[38;2;239;63;193m \033[38;2;239;64;200m┃\033[38;2;240;64;206m \033[38;2;240;64;212m┗\033[38;2;241;65;218m━\033[38;2;241;65;224m━\033[38;2;242;65;230m━\033[38;2;242;66;236m━\033[38;2;242;66;242m┓\033[38;2;237;66;243m┃\033[38;2;232;67;243m \033[38;2;227;67;244m┃\033[38;2;221;67;244m \033[38;2;216;68;244m \033[38;2;211;68;245m┃\033[38;2;205;69;245m \033[38;2;200;69;246m┃\033[38;2;195;69;246m┏\033[38;2;189;70;246m┛\033[38;2;184;70;247m \033[38;2;179;70;247m \033[38;2;173;71;247m┗\033[38;2;168;71;248m━\033[38;2;163;72;248m━\033[38;2;157;72;249m┓\033[38;2;152;72;249m┃\033[38;2;147;73;249m \033[38;2;141;73;250m┃\033[38;2;136;74;250m \033[38;2;131;74;250m┗\033[38;2;125;74;251m━\033[38;2;120;75;251m┛\033[38;2;115;75;251m \033[38;2;109;76;252m┃\033[38;2;104;76;252m \033[38;2;99;77;252m┃\033[38;2;94;77;253m┃\033[38;2;88;77;253m \033[38;2;83;78;253m┃\033[38;2;78;79;254m \033[38;2;79;85;254m \033[38;2;79;91;254m┃\033[38;2;80;97;255m \033[38;2;80;103;255m┃ - // \033[38;2;236;61;151m┗\033[38;2;236;61;157m━\033[38;2;237;62;163m┛\033[38;2;237;62;169m \033[38;2;238;62;175m \033[38;2;238;63;181m \033[38;2;239;63;187m \033[38;2;239;63;193m \033[38;2;239;64;200m┗\033[38;2;240;64;206m━\033[38;2;240;64;212m━\033[38;2;241;65;218m━\033[38;2;241;65;224m━\033[38;2;242;65;230m━\033[38;2;242;66;236m━\033[38;2;242;66;242m┛\033[38;2;237;66;243m┗\033[38;2;232;67;243m━\033[38;2;227;67;244m┛\033[38;2;221;67;244m \033[38;2;216;68;244m \033[38;2;211;68;245m┗\033[38;2;205;69;245m━\033[38;2;200;69;246m┛\033[38;2;195;69;246m┗\033[38;2;189;70;246m━\033[38;2;184;70;247m━\033[38;2;179;70;247m━\033[38;2;173;71;247m━\033[38;2;168;71;248m━\033[38;2;163;72;248m━\033[38;2;157;72;249m┛\033[38;2;152;72;249m┗\033[38;2;147;73;249m━\033[38;2;141;73;250m┛\033[38;2;136;74;250m \033[38;2;131;74;250m \033[38;2;125;74;251m \033[38;2;120;75;251m \033[38;2;115;75;251m \033[38;2;109;76;252m┗\033[38;2;104;76;252m━\033[38;2;99;77;252m┛\033[38;2;94;77;253m┗\033[38;2;88;77;253m━\033[38;2;83;78;253m┛\033[38;2;78;79;254m \033[38;2;79;85;254m \033[38;2;79;91;254m┗\033[38;2;80;97;255m━\033[38;2;80;103;255m┛\033[0m - // """); -+ // Thunderbolt start - Branding - System.out.println(""" -- -- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╗\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m╗\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m \033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m╗\033[38;2;142;54;148m \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m╗\033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m╗ \033[38;2;78;81;161m \033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m╗\033[38;2;56;91;166m\s -- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m█\033[38;2;196;31;137m█\033[38;2;193;33;138m╗ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m╗ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m╔\033[38;2;116;65;153m╝ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m█\033[38;2;104;71;156m█\033[38;2;101;72;157m╗\033[38;2;97;73;157m \033[38;2;94;75;158m█\033[38;2;91;76;159m█\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m╗ -- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m█\033[38;2;205;27;135m█\033[38;2;202;28;136m█\033[38;2;199;30;136m█\033[38;2;196;31;137m╔\033[38;2;193;33;138m╝ \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m█\033[38;2;155;49;146m█\033[38;2;151;50;146m█\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m \033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m╔\033[38;2;120;64;153m╝\033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m╔\033[38;2;104;71;156m█\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m█\033[38;2;91;76;159m╔\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m█\033[38;2;69;86;163m█\033[38;2;66;87;164m█\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ -- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m╔\033[38;2;205;27;135m═\033[38;2;202;28;136m═\033[38;2;199;30;136m═\033[38;2;196;31;137m╝\033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m║\033[38;2;180;38;140m \033[38;2;177;39;141m \033[38;2;174;41;142m \033[38;2;170;42;142m \033[38;2;167;43;143m \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m╔\033[38;2;155;49;146m═\033[38;2;151;50;146m═\033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m \033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m╔\033[38;2;123;62;152m╝\033[38;2;120;64;153m \033[38;2;116;65;153m \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m╚\033[38;2;101;72;157m█\033[38;2;97;73;157m█\033[38;2;94;75;158m╔\033[38;2;91;76;159m╝\033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m╔\033[38;2;69;86;163m═\033[38;2;66;87;164m═\033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ -- \033[38;2;215;23;133m█\033[38;2;212;24;134m█\033[38;2;209;26;134m║\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m█\033[38;2;186;35;139m█\033[38;2;183;37;140m█\033[38;2;180;38;140m█\033[38;2;177;39;141m█\033[38;2;174;41;142m█\033[38;2;170;42;142m█\033[38;2;167;43;143m╗ \033[38;2;164;45;144m█\033[38;2;161;46;144m█\033[38;2;158;47;145m║\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m█\033[38;2;145;53;148m█\033[38;2;142;54;148m║ \033[38;2;139;56;149m█\033[38;2;135;57;149m█\033[38;2;132;58;150m█\033[38;2;129;60;151m█\033[38;2;126;61;151m█\033[38;2;123;62;152m█\033[38;2;120;64;153m█\033[38;2;116;65;153m╗ \033[38;2;113;67;154m█\033[38;2;110;68;155m█\033[38;2;107;69;155m║\033[38;2;104;71;156m \033[38;2;101;72;157m╚\033[38;2;97;73;157m═\033[38;2;94;75;158m╝\033[38;2;91;76;159m \033[38;2;88;77;159m█\033[38;2;85;79;160m█\033[38;2;81;80;161m║ \033[38;2;78;81;161m█\033[38;2;75;83;162m█\033[38;2;72;84;163m║\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m█\033[38;2;59;90;165m█\033[38;2;56;91;166m║ -- \033[38;2;215;23;133m╚\033[38;2;212;24;134m═\033[38;2;209;26;134m╝\033[38;2;205;27;135m \033[38;2;202;28;136m \033[38;2;199;30;136m \033[38;2;196;31;137m \033[38;2;193;33;138m \033[38;2;190;34;138m╚\033[38;2;186;35;139m═\033[38;2;183;37;140m═\033[38;2;180;38;140m═\033[38;2;177;39;141m═\033[38;2;174;41;142m═\033[38;2;170;42;142m═\033[38;2;167;43;143m╝ \033[38;2;164;45;144m╚\033[38;2;161;46;144m═\033[38;2;158;47;145m╝\033[38;2;155;49;146m \033[38;2;151;50;146m \033[38;2;148;52;147m╚\033[38;2;145;53;148m═\033[38;2;142;54;148m╝ \033[38;2;139;56;149m╚\033[38;2;135;57;149m═\033[38;2;132;58;150m═\033[38;2;129;60;151m═\033[38;2;126;61;151m═\033[38;2;123;62;152m═\033[38;2;120;64;153m═\033[38;2;116;65;153m╝ \033[38;2;113;67;154m╚\033[38;2;110;68;155m═\033[38;2;107;69;155m╝\033[38;2;104;71;156m \033[38;2;101;72;157m \033[38;2;97;73;157m \033[38;2;94;75;158m \033[38;2;91;76;159m \033[38;2;88;77;159m╚\033[38;2;85;79;160m═\033[38;2;81;80;161m╝ \033[38;2;78;81;161m╚\033[38;2;75;83;162m═\033[38;2;72;84;163m╝\033[38;2;69;86;163m \033[38;2;66;87;164m \033[38;2;62;88;165m╚\033[38;2;59;90;165m═\033[38;2;56;91;166m╝\033[0m -- """); -+ \033[95m -+ ********** ** ** ** ** ** \s -+ /////**/// /** /** /** /** /** \s -+ /** /** ** ** ******* /** ***** ****** /** ****** /** ****** -+ /** /****** /** /** //**///** ****** **///** //**//* /****** **////** /** ///**/\s -+ /** /**///** /** /** /** /** **///** /******* /** / /**///** /** /** /** /** \s -+ /** /** /** /** /** /** /** /** /** /**//// /** /** /** /** /** /** /** \s -+ /** /** /** //****** *** /** //****** //****** /*** /****** //****** *** //**\s -+ // // // ////// /// // ////// ////// /// ///// ////// /// // \s\033[0m -+ """); -+ // Thunderbolt end - Branding - // Plazma end - // Plazma start - Warn on startup - if (!org.plazmamc.plazma.Options.NO_WARN) { -diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 2612df0680800e8c4644599b1885230778c812b7..c87390df0aa77d7d1399096a62c109aab6736d82 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -@@ -11,16 +11,18 @@ import org.bukkit.Bukkit; - public final class Versioning { - // Plazma start - Rebrand; Branding utils - private static String version = "Unknown-Version"; -- public static final String BRANDING = "Plazma"; -+ // Thunderbolt start - Rebranding -+ public static final String BRANDING = "Thunderbolt"; - public static final String BRAND_L = BRANDING.toLowerCase(Locale.ROOT); - public static final String BRAND_U = BRANDING.toUpperCase(Locale.ROOT); -- public static final String REPOSITORY = "PlazmaMC/PlazmaBukkit"; -- public static final String DOWNLOAD = "https://plazmamc.org/downloads"; -+ public static final String REPOSITORY = "PlazmaMC/Thunderbolt"; -+ public static final String DOWNLOAD = "https://github.com/PlazmaMC/Thunderbolt/releases"; // TODO: Move to docs -+ // Thunderbolt end - Rebranding - public static final String DOCUMENT = "https://docs.plazmamc.org/plazma/administration/getting-started"; - public static final String STEP_UP = "https://docs.plazmamc.org/plazma/administration/getting-started/next-step"; - public static final boolean DEVELOPMENT = true; // Plazma - Development build - static { -- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.plazmamc.plazma/plazma-api/pom.properties"); -+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.plazmamc.thunderbolt/thunderbolt-api/pom.properties"); // Thunderbolt - Rebranding - Properties properties = new Properties(); - - if (stream != null) { diff --git a/patches/server/0002-Configurable-Thunderbolt.patch b/patches/server/0002-Configurable-Thunderbolt.patch index cab5e74..cf9a3de 100644 --- a/patches/server/0002-Configurable-Thunderbolt.patch +++ b/patches/server/0002-Configurable-Thunderbolt.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable Thunderbolt diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f388a07678ef253b19da814f6d90c4d787204517..72a8033f7a0f4c1564e05da31c7015ef2a6694c5 100644 +index cf13166d1fdd663f1f99fd6d00a5296631276511..cffcbc5db9593f69748d1c2d5a5687fa31f9ada5 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -318,6 +318,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop paperWorldConfigCreator, java.util.function.Function plazmaWorldConfigurationCreator, @@ -127,10 +127,10 @@ index 00d58b6f8b94457b2a7418a74027181fdeda3db9..349fb7a53ac5752b60e5167c5e9dc459 this.playerBreedingCooldowns = this.getNewBreedingCooldownCache(); // Purpur this.generator = gen; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index a9141a1f71c2dc31c6530b00ba0a69c0d1016797..65c2a14d07b559e4ce519758ccf8cf205dbffdce 100644 +index 24b8c2dfb41e97adee90849d56f13583b6cafcc0..8f08c22b93367b5d330356e727d4ab2406863e70 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1065,6 +1065,7 @@ public final class CraftServer implements Server { +@@ -1060,6 +1060,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); this.console.plazmaConfigurations.reloadConfigs(this.console); // Plazma - Configurable Plazma @@ -138,7 +138,7 @@ index a9141a1f71c2dc31c6530b00ba0a69c0d1016797..65c2a14d07b559e4ce519758ccf8cf20 org.purpurmc.purpur.PurpurConfig.init((File) console.options.valueOf("purpur-settings")); // Purpur for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty -@@ -3142,6 +3143,13 @@ public final class CraftServer implements Server { +@@ -3132,6 +3133,13 @@ public final class CraftServer implements Server { } // Plazma end - Configurable Plazma @@ -153,10 +153,10 @@ index a9141a1f71c2dc31c6530b00ba0a69c0d1016797..65c2a14d07b559e4ce519758ccf8cf20 public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 3187d9fdfe32aa38a979406e798f6a6bcc1158a0..529064c9ac5880233cfd82d3bb02fd8ee4bd8ced 100644 +index f84266bca823be3fe7d26ac59b181424e1e307ef..58123df202b28de77a9e733e062ee4f201d4d305 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -204,6 +204,14 @@ public class Main { +@@ -205,6 +205,14 @@ public class Main { .defaultsTo(new File(org.plazmamc.plazma.configurations.PlazmaConfigurations.CONFIG_DIR)) .describedAs("Configuration Directory"); // Plazma end - Configurable Plazma @@ -470,7 +470,7 @@ index 0000000000000000000000000000000000000000..1d4afff273484b08d340e7b8d80e0313 +} diff --git a/src/main/java/org/plazmamc/thunderbolt/configurations/ThunderboltConfigurations.java b/src/main/java/org/plazmamc/thunderbolt/configurations/ThunderboltConfigurations.java new file mode 100644 -index 0000000000000000000000000000000000000000..2b6653148b6a3586373efffa7a74caf2dd5e560c +index 0000000000000000000000000000000000000000..417c8dbbd5e54e90685f956660b9e9213ff3f1fd --- /dev/null +++ b/src/main/java/org/plazmamc/thunderbolt/configurations/ThunderboltConfigurations.java @@ -0,0 +1,209 @@ @@ -504,7 +504,7 @@ index 0000000000000000000000000000000000000000..2b6653148b6a3586373efffa7a74caf2 + + public static final String CONFIG_DIR = "config"; + static final Logger LOGGER = LogUtils.getClassLogger(); -+ static final String GLOBAL_CONFIG_FILE_NAME = "thudnerbolt_global.yaml"; ++ static final String GLOBAL_CONFIG_FILE_NAME = "thunderbolt_global.yaml"; + static final String WORLD_DEFAULT_CONFIG_FILE_NAME = "thunderbolt_world_defaults.yaml"; + static final String WORLD_CONFIG_FILE_NAME = "thunderbolt.yaml"; + static boolean GLOBAL_LOADED = false; diff --git a/patches/server/0004-Implement-Noisium.patch b/patches/server/0004-Implement-Noisium.patch index a4b4cd7..e34aeb4 100644 --- a/patches/server/0004-Implement-Noisium.patch +++ b/patches/server/0004-Implement-Noisium.patch @@ -68,7 +68,7 @@ index 81368bf186365878db2e1ed305bb7bf36c26f61f..c1d31b9f37472364d08b07958787410a for (int i = 0; i < storage.getSize(); i++) { T object = palette.valueFor(storage.get(i)); diff --git a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java -index e3990d5f5a49aca501289e92f7462a5f2709db9b..03cf6ea4091d40cb65d5ecba139e2c0275074cc1 100644 +index 6650f74b01285c1dba8243ca11dbde06419a90e7..a1e38e3bd4b4c3ef2806a5eafc1fc9f17d523898 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java @@ -52,6 +52,7 @@ import org.apache.commons.lang3.mutable.MutableObject; @@ -79,7 +79,7 @@ index e3990d5f5a49aca501289e92f7462a5f2709db9b..03cf6ea4091d40cb65d5ecba139e2c02 public static final MapCodec CODEC = RecordCodecBuilder.mapCodec((instance) -> { return instance.group(BiomeSource.CODEC.fieldOf("biome_source").forGetter((chunkgeneratorabstract) -> { return chunkgeneratorabstract.biomeSource; -@@ -274,38 +275,45 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { +@@ -265,38 +266,45 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { @Override public CompletableFuture fillFromNoise(Executor executor, Blender blender, RandomState noiseConfig, StructureManager structureAccessor, ChunkAccess chunk) { @@ -153,7 +153,7 @@ index e3990d5f5a49aca501289e92f7462a5f2709db9b..03cf6ea4091d40cb65d5ecba139e2c02 } private ChunkAccess doFill(Blender blender, StructureManager structureAccessor, RandomState noiseConfig, ChunkAccess chunk, int minimumCellY, int cellHeight) { -@@ -371,6 +379,20 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { +@@ -362,6 +370,20 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { iblockdata = this.debugPreliminarySurfaceLevel(noisechunk, j4, j3, i5, iblockdata); if (iblockdata != NoiseBasedChunkGenerator.AIR && !SharedConstants.debugVoidTerrain(chunk.getPos())) {