geforkt von Mirrors/Paper
aa52bf9e33
Mojang made some changes to priorities in 1.17 and it seems that these changes conflict with the changes made in this patch, which in some cases appears to cause excessive rescheduling of tasks. This, however, is not confirmed as such but seems to be the behavior that we're seeing to cause this issue, if mojang has adopted the changes we suggested, then a good chunk of this patch may be unneeded, but, this needs a much better look than I'm currently able to do
86 Zeilen
4.1 KiB
Diff
86 Zeilen
4.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Professor Bloodstone <git@bloodstone.dev>
|
|
Date: Fri, 23 Jul 2021 02:32:04 +0200
|
|
Subject: [PATCH] Allow skipping writing of comments to server.properties
|
|
|
|
Makes less git noise, as it won't update the date every single time
|
|
|
|
Use -DPaper.skipServerPropertiesComments=true flag to disable writing it
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/dedicated/Settings.java b/src/main/java/net/minecraft/server/dedicated/Settings.java
|
|
index 745a6735fba8343329ec31723da914fad16ae134..232c305b63df19ea923772192c97de65411531dd 100644
|
|
--- a/src/main/java/net/minecraft/server/dedicated/Settings.java
|
|
+++ b/src/main/java/net/minecraft/server/dedicated/Settings.java
|
|
@@ -1,6 +1,8 @@
|
|
package net.minecraft.server.dedicated;
|
|
|
|
import com.google.common.base.MoreObjects;
|
|
+
|
|
+import java.io.BufferedOutputStream; // Paper
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
@@ -18,11 +20,13 @@ import org.apache.logging.log4j.Logger;
|
|
|
|
import joptsimple.OptionSet; // CraftBukkit
|
|
import net.minecraft.core.RegistryAccess;
|
|
+import org.jetbrains.annotations.NotNull; // Paper
|
|
|
|
public abstract class Settings<T extends Settings<T>> {
|
|
|
|
private static final Logger LOGGER = LogManager.getLogger();
|
|
public final Properties properties;
|
|
+ private static final boolean skipComments = Boolean.getBoolean("Paper.skipServerPropertiesComments"); // Paper - allow skipping server.properties comments
|
|
// CraftBukkit start
|
|
private OptionSet options = null;
|
|
|
|
@@ -79,9 +83,47 @@ public abstract class Settings<T extends Settings<T>> {
|
|
}
|
|
// CraftBukkit end
|
|
OutputStream outputstream = Files.newOutputStream(path);
|
|
+ // Paper start - disable writing comments to properties file
|
|
+ BufferedOutputStream bufferedOutputStream = !skipComments ? new BufferedOutputStream(outputstream) : new BufferedOutputStream(outputstream) {
|
|
+ private boolean isRightAfterNewline = true; // If last written char was newline
|
|
+ private boolean isComment = false; // Are we writing comment currently?
|
|
+
|
|
+ @Override
|
|
+ public void write(@NotNull byte[] b) throws IOException {
|
|
+ this.write(b, 0, b.length);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void write(@NotNull byte[] bbuf, int off, int len) throws IOException {
|
|
+ int latest_offset = off; // The latest offset, updated when comment ends
|
|
+ for (int index = off; index < off + len; ++index ) {
|
|
+ byte c = bbuf[index];
|
|
+ boolean isNewline = (c == '\n' || c == '\r');
|
|
+ if (isNewline && isComment) {
|
|
+ // Comment has ended
|
|
+ isComment = false;
|
|
+ latest_offset = index+1;
|
|
+ }
|
|
+ if (c == '#' && isRightAfterNewline) {
|
|
+ isComment = true;
|
|
+ if (index != latest_offset) {
|
|
+ // We got some non-comment data earlier
|
|
+ super.write(bbuf, latest_offset, index-latest_offset);
|
|
+ }
|
|
+ }
|
|
+ isRightAfterNewline = isNewline; // Store for next iteration
|
|
+
|
|
+ }
|
|
+ if (latest_offset < off+len && !isComment) {
|
|
+ // We have some unwritten data, that isn't part of a comment
|
|
+ super.write(bbuf, latest_offset, (off + len) - latest_offset);
|
|
+ }
|
|
+ }
|
|
+ };
|
|
+ // Paper end
|
|
|
|
try {
|
|
- this.properties.store(outputstream, "Minecraft server properties");
|
|
+ this.properties.store(bufferedOutputStream, "Minecraft server properties"); // Paper - use bufferedOutputStream
|
|
} catch (Throwable throwable) {
|
|
if (outputstream != null) {
|
|
try {
|