diff --git a/docs/docs/admin/configuration.md b/docs/docs/admin/configuration.md index 31bc351..ea4ec2a 100644 --- a/docs/docs/admin/configuration.md +++ b/docs/docs/admin/configuration.md @@ -50,9 +50,12 @@ Global settings affect all worlds on the server as well as the core server funct - **default**: 60 - **description**: The time during which inactive threads will remain in the pool until they are completed after downtime, specified in seconds. - #### optimizations - - ##### recipe-manager-optimization + - ##### optimized-dragon-respawn - **default**: true - - **description**: Enables or disables optimization of recipe manager from the CarpetFixes mod. Optimized by taking out streams & doing extra early checks to quickly remove unrelated recipes + - **description**: Enables or disables optimization of better dragon respawn (from Carpet-AMS-Addition mod) + - ##### optimize-noise-generation + - **default**: true + - **description**: Enables or disables optimization of better perlin noise generation - ##### biome-manager-optimization - **default**: true - **description**: Enables or disables optimization of biomes from the CarpetFixes mod. Makes getBiome() method faster by 25% - 75% @@ -60,10 +63,16 @@ Global settings affect all worlds on the server as well as the core server funct - **default**: true - **description**: Enables or disables optimization of sheep color choosing from the CarpetFixes mod. The game determines the child sheep's color by getting a wool block from the parents, putting them in a crafting recipe, getting the output wool and getting the color from that. + - ##### recipe-manager-optimization + - **default**: true + - **description**: Enables or disables optimization of recipe manager from the CarpetFixes mod. Optimized by taking out streams & doing extra early checks to quickly remove unrelated recipes - #### misc - ##### use-secure-seed - **default**: false - **description**: Enabling this, default 64-bit seed will be changed to a 1024-bit seed, making it almost impossible to crack the seed. + - ##### disable-non-editable-sign-warning + - **default**: true + - **description**: This setting disables warning when player tries to change the non-editable sign - #### region-format ##### linear - ###### flush-frequency diff --git a/gradle.properties b/gradle.properties index 24964df..304c33c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = space.bxteam.divinemc mcVersion = 1.20.6 version = 1.20.6-R0.1-SNAPSHOT -purpurRef = 248ba175af2e1e472aff4eb6bcaa7ea0f7741dd5 +purpurRef = ed1e0ec889ff251ee0b5946d52d21ab5cd96e468 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0042-Implement-Secure-Seed.patch b/patches/server/0042-Implement-Secure-Seed.patch index 8fa9385..d4ec8b1 100644 --- a/patches/server/0042-Implement-Secure-Seed.patch +++ b/patches/server/0042-Implement-Secure-Seed.patch @@ -572,7 +572,7 @@ index 82b4bd669c57b18fb0b443bcd94495023cd5a528..4cf13d10f24be20b2f9c8b0338b6af3d @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 9d3d7118bae9315b08291e3f5a2052e2100c0037..d91ba94cfda7458531ec5b5046d13351f9f82899 100644 +index 318cc15ec0a1a70d32e2637b08c48677d38d14a3..8d22256ad0d7a5f00af600179ef91d9bef704d34 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -265,6 +265,8 @@ import javax.annotation.Nonnull; // Paper @@ -594,7 +594,7 @@ index 9d3d7118bae9315b08291e3f5a2052e2100c0037..d91ba94cfda7458531ec5b5046d13351 DedicatedServerProperties.WorldDimensionData properties = new DedicatedServerProperties.WorldDimensionData(GsonHelper.parse((creator.generatorSettings().isEmpty()) ? "{}" : creator.generatorSettings()), creator.type().name().toLowerCase(Locale.ROOT)); diff --git a/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java b/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java -index 1934e6c1282c33f4f8e183a97fc67f2016593eb3..228703c008c1fd549c33af935c9b29e5587961f6 100644 +index 1934e6c1282c33f4f8e183a97fc67f2016593eb3..289361efbb049d9672974ac4f97b2b2b45e05ace 100644 --- a/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java +++ b/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java @@ -194,4 +194,9 @@ public class DivineConfig { @@ -603,7 +603,7 @@ index 1934e6c1282c33f4f8e183a97fc67f2016593eb3..228703c008c1fd549c33af935c9b29e5 } + + public static boolean useSecureSeed = false; -+ private static void secureSeedFeature() { ++ private static void miscSettings() { + useSecureSeed = getBoolean("settings.misc.use-secure-seed", useSecureSeed); + } } diff --git a/patches/server/0047-Block-Log4Shell-exploit.patch b/patches/server/0047-Block-Log4Shell-exploit.patch new file mode 100644 index 0000000..5be4390 --- /dev/null +++ b/patches/server/0047-Block-Log4Shell-exploit.patch @@ -0,0 +1,47 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> +Date: Thu, 23 May 2024 02:06:30 +0300 +Subject: [PATCH] Block Log4Shell exploit + + +diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index 0c3768bb183451e9dfe94bbc9b203bd79e474b99..1b760cf89327b82284d7528d87f4e3543f4c9154 100644 +--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -2409,6 +2409,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + } + + private void tryHandleChat(String s, Runnable runnable, boolean sync) { // CraftBukkit ++ if (ServerGamePacketListenerImpl.isLog4ShellExploit(s)) return; // DivineMC - Block Log4Shell exploit + if (ServerGamePacketListenerImpl.isChatMessageIllegal(s)) { + this.disconnect(Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper + } else if (this.player.isRemoved() || this.player.getChatVisibility() == ChatVisiblity.HIDDEN) { // CraftBukkit - dead men tell no tales +@@ -2439,6 +2440,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + return optional; + } + } ++ ++ // DivineMC start - Block Log4Shell exploit ++ public static boolean isLog4ShellExploit(String message) { ++ java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(".*\\$\\{[^}]*}.*"); ++ java.util.regex.Matcher matcher = pattern.matcher(message); ++ ++ return matcher.find(); ++ } ++ // DivineMC end + + public static boolean isChatMessageIllegal(String message) { + for (int i = 0; i < message.length(); ++i) { +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index 241340a6d66f17f2a31fb03ff0dfab121b856368..dc4bde8f94ee7a8b5a2ae8348c5796f1d803bd8e 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -749,6 +749,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + Preconditions.checkArgument(msg != null, "msg cannot be null"); + + if (this.getHandle().connection == null) return; ++ ++ if (ServerGamePacketListenerImpl.isLog4ShellExploit(msg)) return; // DivineMC - Block Log4Shell exploit + + // Paper start - Improve chat handling + if (ServerGamePacketListenerImpl.isChatMessageIllegal(msg)) { diff --git a/patches/server/0048-Option-to-disable-non-editable-sign-warning.patch b/patches/server/0048-Option-to-disable-non-editable-sign-warning.patch new file mode 100644 index 0000000..bc5c739 --- /dev/null +++ b/patches/server/0048-Option-to-disable-non-editable-sign-warning.patch @@ -0,0 +1,33 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> +Date: Thu, 23 May 2024 15:39:18 +0300 +Subject: [PATCH] Option to disable non editable sign warning + + +diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java +index 8cd812a25b1cc05ea14675658bf9c1503ebebd51..5cdfd35218c424ffb7a900ef66f9b1cfe1ff4293 100644 +--- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java ++++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java +@@ -189,7 +189,7 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C + this.setAllowedPlayerEditor((UUID) null); + this.level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), 3); + } else { +- SignBlockEntity.LOGGER.warn("Player {} just tried to change non-editable sign", player.getName().getString()); ++ if (!space.bxteam.divinemc.configuration.DivineConfig.disableNonEditableSignWarning) SignBlockEntity.LOGGER.warn("Player {} just tried to change non-editable sign", player.getName().getString()); // DivineMC - Option to disable warning + if (player.distanceToSqr(this.getBlockPos().getX(), this.getBlockPos().getY(), this.getBlockPos().getZ()) < 32 * 32) // Paper - Dont send far away sign update + ((ServerPlayer) player).connection.send(this.getUpdatePacket()); // CraftBukkit + } +diff --git a/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java b/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java +index 08c69524814f8581faa6dcf227f18500d4370e13..e40f472da48a10b2ca2bc0e9b976e15305bd7016 100644 +--- a/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java ++++ b/src/main/java/space/bxteam/divinemc/configuration/DivineConfig.java +@@ -200,7 +200,9 @@ public class DivineConfig { + } + + public static boolean useSecureSeed = false; ++ public static boolean disableNonEditableSignWarning = true; + private static void miscSettings() { + useSecureSeed = getBoolean("settings.misc.use-secure-seed", useSecureSeed); ++ disableNonEditableSignWarning = getBoolean("settings.misc.disable-non-editable-sign-warning", disableNonEditableSignWarning); + } + }