Branch develop/1.19.3 backup
2023/1/14
This commit is contained in:
31
README.md
31
README.md
@@ -1,10 +1,11 @@
|
||||
<img src="https://user-images.githubusercontent.com/83630775/196994084-2c53ac23-f4be-4b90-b6fc-1b0ba65ea1b8.png" alt="KeYi's logo" align="right" width="400">
|
||||
|
||||
<div align="left">
|
||||
<h4>Also available in: <a href="https://github.com/KeYiMC/KeYi/blob/develop/1.19.3/README_ZH.md">中文</a></h4>
|
||||
<h4>Also available in <a href="https://github.com/KeYiMC/KeYi/blob/develop/1.19.3/README_ZH.md">中文</a></h4>
|
||||
<h1>KeYi</h1>
|
||||
<h3>⚡ The next generation Minecraft server software aims to the balance of performance and stability.</h3>
|
||||
<h3>⚡ The next generation Minecraft server software that aims to keep the balance between performance and stability.</h3>
|
||||
<h5>This project is still under heavy development, use it at your own risk!</h5>
|
||||
<i><h5>KeYi, is the Chinese word "可以", means some thing is very OK!</h5></i>
|
||||
<i><h5>KeYi, which is from a Chinese word "可以", means some thing is very OK!</h5></i>
|
||||
|
||||
[](https://discord.gg/Sm2NsY5dpV)
|
||||
[](https://jq.qq.com/?_wv=1027&k=tNDYZa7z)
|
||||
@@ -14,27 +15,27 @@
|
||||
|
||||
The answer is quite simple.
|
||||
|
||||
The existing forks doesn't meet up what our requires, so we made up a small team and created this fork.
|
||||
The existing forks don't meet up what we requires, so we made up a small team and created this fork.
|
||||
|
||||
# Roadmap
|
||||
|
||||
As you can see, this fork is designed to be stable and well supported Purpur fork, but also gain some performance improvements.
|
||||
As you can see, this fork is designed to be stable and well supported Purpur fork, but it also gain some performance improvements.
|
||||
|
||||
The improvements of the API is also being valued, so we will try our best to work on it.
|
||||
|
||||
# Versioning
|
||||
|
||||
| Version | Support Status | Download |
|
||||
| ------- | ------------------------------- | ------------------------------------------------------------ |
|
||||
| ------- | ------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| 1.18.2 | ❌ | Not exists. |
|
||||
| 1.19.2 | ✔️ LTS version, will be end at 2023-2-1. | [main](https://github.com/KeYiMC/KeYi/releases/tag/main-1.19.2), [develop](https://github.com/KeYiMC/KeYi/releases/tag/develop-1.19.2). |
|
||||
| 1.19.2 | ✔️ LTS version, will end being supported at 2023-02-01. | [main](https://github.com/KeYiMC/KeYi/releases/tag/main-1.19.2), [develop](https://github.com/KeYiMC/KeYi/releases/tag/develop-1.19.2). |
|
||||
| 1.19.3 | ✔️ | [main](https://github.com/KeYiMC/KeYi/releases/tag/main-1.19.3), [develop](https://github.com/KeYiMC/KeYi/releases/tag/develop-1.19.3). |
|
||||
|
||||
# API
|
||||
|
||||
### Maven
|
||||
|
||||
#### Adding repository
|
||||
#### Add repository
|
||||
|
||||
```xml
|
||||
<repository>
|
||||
@@ -43,7 +44,7 @@ The improvements of the API is also being valued, so we will try our best to wor
|
||||
</repository>
|
||||
```
|
||||
|
||||
#### Adding dependency
|
||||
#### Add dependency
|
||||
|
||||
```xml
|
||||
<dependency>
|
||||
@@ -56,7 +57,7 @@ The improvements of the API is also being valued, so we will try our best to wor
|
||||
|
||||
### Gradle
|
||||
|
||||
#### Adding repository
|
||||
#### Add repository
|
||||
|
||||
```groovy
|
||||
repositories {
|
||||
@@ -64,7 +65,7 @@ repositories {
|
||||
}
|
||||
```
|
||||
|
||||
#### Adding dependency
|
||||
#### Add dependency
|
||||
|
||||
```groovy
|
||||
dependencies {
|
||||
@@ -76,4 +77,10 @@ dependencies {
|
||||
|
||||
Unfortunately, the rules of our community haven't been finished yet.
|
||||
|
||||
So at this time, if you want to contribute, you need to talk with us on Discord or Tencent QQ.
|
||||
So at this time, if you want to contribute, you have to communicate with us on Discord or Tencent QQ.
|
||||
|
||||
# Special Thanks To
|
||||
|
||||
[<img src="https://user-images.githubusercontent.com/21148213/121807008-8ffc6700-cc52-11eb-96a7-2f6f260f8fda.png" alt="" width="150">](https://www.jetbrains.com)
|
||||
|
||||
[JetBrains](https://www.jetbrains.com/), creators of the IntelliJ IDEA, supports KeYi with one of their [Open Source Licenses](https://www.jetbrains.com/opensource/). IntelliJ IDEA is the recommended IDE for working with KeYi, and most of the KeYi team uses it.
|
||||
|
||||
@@ -4,7 +4,7 @@ plugins {
|
||||
java
|
||||
`maven-publish`
|
||||
id("com.github.johnrengelman.shadow") version "7.1.2" apply false
|
||||
id("io.papermc.paperweight.patcher") version "1.3.11"
|
||||
id("io.papermc.paperweight.patcher") version "1.4.1"
|
||||
}
|
||||
|
||||
val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
group = cc.keyimc.keyi
|
||||
version = 1.19.3-R0.1-SNAPSHOT
|
||||
|
||||
purpurCommit = 78e9a806d3fb2e17bf85f5457e2004a2478ed747
|
||||
purpurCommit = 970670bb08755a49371efc6b0c917b64175917ed
|
||||
|
||||
org.gradle.caching = true
|
||||
org.gradle.parallel = true
|
||||
|
||||
@@ -7,7 +7,7 @@ Original code by lynxplay, licensed under GNU General Public License v3.0
|
||||
You can find the original code on https://github.com/lynxplay/ktp
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/plugin/RegisteredListener.java b/src/main/java/org/bukkit/plugin/RegisteredListener.java
|
||||
index 419aec56b0e3fa8bcec2ea7f340caa3456b57d00..8530d926931a54ed1300c40cd1e0908b2d9b594d 100644
|
||||
index 3b3d9642a8d63798dc28f2f8df77f0466451cbff..8d3605f25e97a375971705c737bc7bacbac045cd 100644
|
||||
--- a/src/main/java/org/bukkit/plugin/RegisteredListener.java
|
||||
+++ b/src/main/java/org/bukkit/plugin/RegisteredListener.java
|
||||
@@ -62,8 +62,10 @@ public class RegisteredListener {
|
||||
@@ -24,10 +24,10 @@ index 419aec56b0e3fa8bcec2ea7f340caa3456b57d00..8530d926931a54ed1300c40cd1e0908b
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
||||
index 6bb115923767c4bd65b18e67eeff5408f2894ab0..b0e11ed48e06abd585bd9dded52945562a8c6830 100644
|
||||
index 75be5cdfeb30732975bbc38dc7aab52a0cdead9c..37b42f155f7e1f743ea49d957123f2dc05f3b3fd 100644
|
||||
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
||||
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
||||
@@ -660,11 +660,15 @@ public final class SimplePluginManager implements PluginManager {
|
||||
@@ -662,11 +662,15 @@ public final class SimplePluginManager implements PluginManager {
|
||||
@Override
|
||||
public void callEvent(@NotNull Event event) {
|
||||
// Paper - replace callEvent by merging to below method
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalgic853 <yuu8583@proton.me>
|
||||
Date: Mon, 24 Oct 2022 23:28:31 +0800
|
||||
Subject: [PATCH] Revert purpur "Remove Timings"
|
||||
Subject: [PATCH] Revert purpur "Remove Profilers"
|
||||
|
||||
This reverts commit 0004242a19885c29a4cf68c510411ed70cf6e439.
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Maven publishing
|
||||
|
||||
|
||||
diff --git a/build.gradle.kts b/build.gradle.kts
|
||||
index 051b2db3548d1b24f591f05eece0c8241475e9bf..85e30cd20f0f8534724ce4e309e28ef0031f683c 100644
|
||||
index 5c8dd4d3313a791d1fee00ec5d4bc595b76b7d6d..4d09fbd6e8205469cc438e922088e293a5dc6851 100644
|
||||
--- a/build.gradle.kts
|
||||
+++ b/build.gradle.kts
|
||||
@@ -145,3 +145,24 @@ tasks.check {
|
||||
@@ -153,3 +153,24 @@ tasks.check {
|
||||
dependsOn(scanJar)
|
||||
}
|
||||
// Paper end
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Player Skull API
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
|
||||
index d13f8f7f5afb772514804ef78e2c704964c3cbd8..52dc40bc7cea12e657885b011a002cb89db00f33 100644
|
||||
index f65a860d09d9f1d5045b2af63a80109e7c1c4ddf..0b275a9d5a3977d44fc79011de8a5c98bdc0cbef 100644
|
||||
--- a/src/main/java/org/bukkit/entity/Player.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Player.java
|
||||
@@ -3,6 +3,9 @@ package org.bukkit.entity;
|
||||
@@ -18,7 +18,7 @@ index d13f8f7f5afb772514804ef78e2c704964c3cbd8..52dc40bc7cea12e657885b011a002cb8
|
||||
import com.destroystokyo.paper.ClientOption; // Paper
|
||||
import com.destroystokyo.paper.Title; // Paper
|
||||
import net.kyori.adventure.text.Component;
|
||||
@@ -3071,4 +3074,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||
@@ -3063,4 +3066,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||
*/
|
||||
void sendDeathScreen(@NotNull Component message, @Nullable Entity killer);
|
||||
// Purpur end
|
||||
@@ -1,12 +1,12 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalgic853 <yuu8583@proton.me>
|
||||
Date: Fri, 9 Dec 2022 23:13:43 +0800
|
||||
Subject: [PATCH] Revert "Spark Profiler"
|
||||
Subject: [PATCH] Remove "Spark Profiler"
|
||||
|
||||
This reverts commit 2f3f630834d34ee625be79fac6bc429d0e10d929.
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
||||
index 2843545c6281da1f47e24431023c56e9592cef16..08f5892f175b898e3aa5cfc7de6639b818330927 100644
|
||||
index 37b42f155f7e1f743ea49d957123f2dc05f3b3fd..ba869354adc59db2fc547c481c1ed4d5d0af23b7 100644
|
||||
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
||||
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
||||
@@ -167,12 +167,6 @@ public final class SimplePluginManager implements PluginManager {
|
||||
@@ -1,116 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: MartijnMuijsers <martijnmuijsers@live.nl>
|
||||
Date: Tue, 29 Nov 2022 12:35:35 +0100
|
||||
Subject: [PATCH] Add centralized AsyncExecutor
|
||||
|
||||
This patch was taken from Gale.
|
||||
|
||||
diff --git a/src/main/java/org/galemc/gale/concurrent/AsyncExecutor.java b/src/main/java/org/galemc/gale/concurrent/AsyncExecutor.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..de182b9473963b95085fa612f70884a56765ae43
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/galemc/gale/concurrent/AsyncExecutor.java
|
||||
@@ -0,0 +1,103 @@
|
||||
+// Gale - centralized async execution
|
||||
+
|
||||
+package org.galemc.gale.concurrent;
|
||||
+
|
||||
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
+import net.minecraft.Util;
|
||||
+import org.galemc.gale.util.CPUCoresEstimation;
|
||||
+
|
||||
+import java.util.concurrent.BlockingQueue;
|
||||
+import java.util.concurrent.LinkedBlockingQueue;
|
||||
+import java.util.concurrent.ThreadPoolExecutor;
|
||||
+import java.util.concurrent.TimeUnit;
|
||||
+import java.util.concurrent.locks.Condition;
|
||||
+import java.util.concurrent.locks.ReentrantLock;
|
||||
+
|
||||
+/**
|
||||
+ * An executor for tasks that can run asynchronously. This executor uses a fixed thread pool, and as such
|
||||
+ * is not appropriate for tasks that block.
|
||||
+ * <br>
|
||||
+ * It can be paused when all CPU cores may be needed for something else.
|
||||
+ *
|
||||
+ * @author Martijn Muijsers
|
||||
+ */
|
||||
+public final class AsyncExecutor extends ThreadPoolExecutor {
|
||||
+
|
||||
+ /**
|
||||
+ * The fixed number of threads that will be used by this {@link AsyncExecutor}.
|
||||
+ * <br>
|
||||
+ * By default, we do not use two cores, so that there is always a core for the main thread that we do not use,
|
||||
+ * and another core that we do not use to run other important threads such as garbage collection on.
|
||||
+ * <br>
|
||||
+ * This value is at least 1.
|
||||
+ */
|
||||
+ public static final int parallelism;
|
||||
+ static {
|
||||
+ int parallelismByEnvironmentVariable = Integer.getInteger("gale.threads.async", -1);
|
||||
+ parallelism = Math.max(1, parallelismByEnvironmentVariable > 0 ? parallelismByEnvironmentVariable : CPUCoresEstimation.get() - 2);
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * The queue of tasks in the {@link AsyncExecutor} singleton instance.
|
||||
+ * This queue can be accessed externally to steal work from the executor.
|
||||
+ */
|
||||
+ public static final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
|
||||
+
|
||||
+ /**
|
||||
+ * Singleton {@link AsyncExecutor} instance.
|
||||
+ */
|
||||
+ public static final AsyncExecutor instance = new AsyncExecutor();
|
||||
+
|
||||
+ private static volatile boolean isPaused = false;
|
||||
+ private static final ReentrantLock pauseLock = new ReentrantLock();
|
||||
+ private static final Condition pauseCondition = pauseLock.newCondition();
|
||||
+
|
||||
+ private AsyncExecutor() {
|
||||
+ super(parallelism, parallelism, 0L, TimeUnit.MILLISECONDS, queue, new ThreadFactoryBuilder()
|
||||
+ .setNameFormat("Async Executor Thread - %1$d")
|
||||
+ .setPriority(Thread.NORM_PRIORITY - 1) // Deprioritize over main
|
||||
+ .setUncaughtExceptionHandler(Util::onThreadException)
|
||||
+ .build());
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ protected void beforeExecute(Thread t, Runnable r) {
|
||||
+ super.beforeExecute(t, r);
|
||||
+ pauseLock.lock();
|
||||
+ try {
|
||||
+ while (isPaused) pauseCondition.await();
|
||||
+ } catch (InterruptedException ie) {
|
||||
+ t.interrupt();
|
||||
+ } finally {
|
||||
+ pauseLock.unlock();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Pauses the {@link AsyncExecutor} from starting to run any new task until {@link #resume()} is called.
|
||||
+ * <br>
|
||||
+ * This does not affect execution of tasks that are already being performed when this method is called.
|
||||
+ */
|
||||
+ public static void pause() {
|
||||
+ pauseLock.lock();
|
||||
+ try {
|
||||
+ isPaused = true;
|
||||
+ } finally {
|
||||
+ pauseLock.unlock();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Resumes the {@link AsyncExecutor} singleton instance after it has been paused using {@link #pause()}.
|
||||
+ */
|
||||
+ public static void resume() {
|
||||
+ pauseLock.lock();
|
||||
+ try {
|
||||
+ isPaused = false;
|
||||
+ pauseCondition.signalAll();
|
||||
+ } finally {
|
||||
+ pauseLock.unlock();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
@@ -1,70 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: MartijnMuijsers <martijnmuijsers@live.nl>
|
||||
Date: Tue, 29 Nov 2022 13:10:20 +0100
|
||||
Subject: [PATCH] Remove Paper async executor
|
||||
|
||||
License: AGPL-3.0 (https://www.gnu.org/licenses/agpl-3.0.html)
|
||||
|
||||
This patch was taken from Gale.
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java
|
||||
index b5d4c53bf1046fa52da5398491258b94f1e0fcd0..d5f6fc421bea74b711f99fc14ff916643bfe071a 100644
|
||||
--- a/src/main/java/io/papermc/paper/util/MCUtil.java
|
||||
+++ b/src/main/java/io/papermc/paper/util/MCUtil.java
|
||||
@@ -34,6 +34,7 @@ import org.bukkit.Location;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.craftbukkit.CraftWorld;
|
||||
import org.bukkit.craftbukkit.util.Waitable;
|
||||
+import org.galemc.gale.concurrent.AsyncExecutor;
|
||||
import org.spigotmc.AsyncCatcher;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@@ -45,6 +46,7 @@ import java.util.Queue;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
+import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -55,14 +57,7 @@ import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public final class MCUtil {
|
||||
- public static final ThreadPoolExecutor asyncExecutor = new ThreadPoolExecutor(
|
||||
- 0, 2, 60L, TimeUnit.SECONDS,
|
||||
- new LinkedBlockingQueue<>(),
|
||||
- new ThreadFactoryBuilder()
|
||||
- .setNameFormat("Paper Async Task Handler Thread - %1$d")
|
||||
- .setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(MinecraftServer.LOGGER))
|
||||
- .build()
|
||||
- );
|
||||
+ public static final Executor asyncExecutor = AsyncExecutor.instance; // Gale - centralized async execution - remove Paper async executor
|
||||
public static final ThreadPoolExecutor cleanerExecutor = new ThreadPoolExecutor(
|
||||
1, 1, 0L, TimeUnit.SECONDS,
|
||||
new LinkedBlockingQueue<>(),
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index ae95e3af64811f6f149a01b9715d8fdd2c2583fa..462689f5c35c5379a0281fe61ad91ae3288d279d 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -155,6 +155,7 @@ import net.minecraft.world.phys.Vec2;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.slf4j.Logger;
|
||||
+import org.galemc.gale.concurrent.AsyncExecutor; // Gale
|
||||
|
||||
// CraftBukkit start
|
||||
import com.mojang.serialization.DynamicOps;
|
||||
@@ -993,8 +994,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
MinecraftServer.LOGGER.error("Failed to unlock level {}", this.storageSource.getLevelId(), ioexception1);
|
||||
}
|
||||
// Spigot start
|
||||
- io.papermc.paper.util.MCUtil.asyncExecutor.shutdown(); // Paper
|
||||
- try { io.papermc.paper.util.MCUtil.asyncExecutor.awaitTermination(30, java.util.concurrent.TimeUnit.SECONDS); // Paper
|
||||
+ // Gale start - centralized async execution - remove Paper async executor
|
||||
+ AsyncExecutor.instance.shutdown(); // Paper
|
||||
+ try { AsyncExecutor.instance.awaitTermination(30, java.util.concurrent.TimeUnit.SECONDS); // Paper
|
||||
+ // Gale end - centralized async execution - remove Paper async executor
|
||||
} catch (java.lang.InterruptedException ignored) {} // Paper
|
||||
if (org.spigotmc.SpigotConfig.saveUserCacheOnStopOnly) {
|
||||
MinecraftServer.LOGGER.info("Saving usercache.json");
|
||||
@@ -1,29 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: MartijnMuijsers <martijnmuijsers@live.nl>
|
||||
Date: Tue, 29 Nov 2022 13:11:58 +0100
|
||||
Subject: [PATCH] Remove Paper cleaner executor
|
||||
|
||||
License: AGPL-3.0 (https://www.gnu.org/licenses/agpl-3.0.html)
|
||||
|
||||
This patch was taken from Gale.
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java
|
||||
index d5f6fc421bea74b711f99fc14ff916643bfe071a..c6c1b194fdee8841a7745b5ee3ef14e416df02d3 100644
|
||||
--- a/src/main/java/io/papermc/paper/util/MCUtil.java
|
||||
+++ b/src/main/java/io/papermc/paper/util/MCUtil.java
|
||||
@@ -58,14 +58,7 @@ import java.util.function.Supplier;
|
||||
|
||||
public final class MCUtil {
|
||||
public static final Executor asyncExecutor = AsyncExecutor.instance; // Gale - centralized async execution - remove Paper async executor
|
||||
- public static final ThreadPoolExecutor cleanerExecutor = new ThreadPoolExecutor(
|
||||
- 1, 1, 0L, TimeUnit.SECONDS,
|
||||
- new LinkedBlockingQueue<>(),
|
||||
- new ThreadFactoryBuilder()
|
||||
- .setNameFormat("Paper Object Cleaner")
|
||||
- .setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(MinecraftServer.LOGGER))
|
||||
- .build()
|
||||
- );
|
||||
+ public static final Executor cleanerExecutor = AsyncExecutor.instance; // Gale - centralized async execution - remove Paper cleaner executor
|
||||
|
||||
public static final long INVALID_CHUNK_KEY = getCoordinateKey(Integer.MAX_VALUE, Integer.MAX_VALUE);
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: MartijnMuijsers <martijnmuijsers@live.nl>
|
||||
Date: Tue, 29 Nov 2022 14:21:44 +0100
|
||||
Subject: [PATCH] Remove background executor
|
||||
|
||||
License: AGPL-3.0 (https://www.gnu.org/licenses/agpl-3.0.html)
|
||||
|
||||
This patch was taken from Gale.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/Util.java b/src/main/java/net/minecraft/Util.java
|
||||
index 6b7943e8348b0a41ca69fb56ccfd5f1c1484eb07..e14245a77b40fca4bacf82295ad390339aba08a9 100644
|
||||
--- a/src/main/java/net/minecraft/Util.java
|
||||
+++ b/src/main/java/net/minecraft/Util.java
|
||||
@@ -72,6 +72,7 @@ import net.minecraft.util.RandomSource;
|
||||
import net.minecraft.util.TimeSource;
|
||||
import net.minecraft.util.datafix.DataFixers;
|
||||
import net.minecraft.world.level.block.state.properties.Property;
|
||||
+import org.galemc.gale.concurrent.AsyncExecutor;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
public class Util {
|
||||
@@ -80,7 +81,7 @@ public class Util {
|
||||
private static final String MAX_THREADS_SYSTEM_PROPERTY = "max.bg.threads";
|
||||
private static final AtomicInteger WORKER_COUNT = new AtomicInteger(1);
|
||||
private static final ExecutorService BOOTSTRAP_EXECUTOR = makeExecutor("Bootstrap", -2); // Paper - add -2 priority
|
||||
- private static final ExecutorService BACKGROUND_EXECUTOR = makeExecutor("Main", -1); // Paper - add -1 priority
|
||||
+ private static final ExecutorService BACKGROUND_EXECUTOR = AsyncExecutor.instance; // Gale - centralized async execution - remove background executor
|
||||
// Paper start - don't submit BLOCKING PROFILE LOOKUPS to the world gen thread
|
||||
public static final ExecutorService PROFILE_EXECUTOR = Executors.newFixedThreadPool(2, new java.util.concurrent.ThreadFactory() {
|
||||
|
||||
@@ -219,7 +220,6 @@ public class Util {
|
||||
}
|
||||
|
||||
public static void shutdownExecutors() {
|
||||
- shutdownExecutor(BACKGROUND_EXECUTOR);
|
||||
shutdownExecutor(IO_POOL);
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 462689f5c35c5379a0281fe61ad91ae3288d279d..b77b1bc9a5ce1373ff5c5aacc3f4c68c1c735849 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -994,11 +994,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
MinecraftServer.LOGGER.error("Failed to unlock level {}", this.storageSource.getLevelId(), ioexception1);
|
||||
}
|
||||
// Spigot start
|
||||
- // Gale start - centralized async execution - remove Paper async executor
|
||||
- AsyncExecutor.instance.shutdown(); // Paper
|
||||
- try { AsyncExecutor.instance.awaitTermination(30, java.util.concurrent.TimeUnit.SECONDS); // Paper
|
||||
- // Gale end - centralized async execution - remove Paper async executor
|
||||
- } catch (java.lang.InterruptedException ignored) {} // Paper
|
||||
if (org.spigotmc.SpigotConfig.saveUserCacheOnStopOnly) {
|
||||
MinecraftServer.LOGGER.info("Saving usercache.json");
|
||||
this.getProfileCache().save(false); // Paper
|
||||
@@ -1008,6 +1003,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
LOGGER.info("Flushing Chunk IO");
|
||||
io.papermc.paper.chunk.system.io.RegionFileIOThread.close(true); // Paper // Paper - rewrite chunk system
|
||||
LOGGER.info("Closing Thread Pool");
|
||||
+ // Gale start - centralized async execution - remove Paper async executor, remove background executor
|
||||
+ AsyncExecutor.instance.shutdown(); // Paper
|
||||
+ try {
|
||||
+ AsyncExecutor.instance.awaitTermination(30, java.util.concurrent.TimeUnit.SECONDS); // Paper
|
||||
+ // Gale end - centralized async execution - remove Paper async executor
|
||||
+ } catch (java.lang.InterruptedException ignored) {} // Paper
|
||||
+ // Gale start - centralized async execution - remove background executor
|
||||
Util.shutdownExecutors(); // Paper
|
||||
LOGGER.info("Closing Server");
|
||||
try {
|
||||
diff --git a/src/main/java/org/galemc/gale/concurrent/AsyncExecutor.java b/src/main/java/org/galemc/gale/concurrent/AsyncExecutor.java
|
||||
index de182b9473963b95085fa612f70884a56765ae43..fff4549d86e672dc7b9959ac5dd51fd04d4d62c3 100644
|
||||
--- a/src/main/java/org/galemc/gale/concurrent/AsyncExecutor.java
|
||||
+++ b/src/main/java/org/galemc/gale/concurrent/AsyncExecutor.java
|
||||
@@ -34,6 +34,7 @@ public final class AsyncExecutor extends ThreadPoolExecutor {
|
||||
public static final int parallelism;
|
||||
static {
|
||||
int parallelismByEnvironmentVariable = Integer.getInteger("gale.threads.async", -1);
|
||||
+ parallelismByEnvironmentVariable = Math.max(parallelismByEnvironmentVariable, Integer.getInteger("Paper.WorkerThreadCount", -1)); // Gale - centralized async execution - remove background executor
|
||||
parallelism = Math.max(1, parallelismByEnvironmentVariable > 0 ? parallelismByEnvironmentVariable : CPUCoresEstimation.get() - 2);
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: MartijnMuijsers <martijnmuijsers@live.nl>
|
||||
Date: Tue, 29 Nov 2022 01:23:49 +0100
|
||||
Subject: [PATCH] Remove bootstrap executor
|
||||
|
||||
License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
|
||||
|
||||
This patch was taken from Gale.
|
||||
|
||||
This patch is based on the following patch:
|
||||
"completely remove bootstrapExecutor"
|
||||
By: foss-mc <69294560+foss-mc@users.noreply.github.com>
|
||||
As part of: Patina (https://github.com/PatinaMC/Patina)
|
||||
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/Util.java b/src/main/java/net/minecraft/Util.java
|
||||
index e14245a77b40fca4bacf82295ad390339aba08a9..d84c721ed64cf927ccc9884235b22414298ce3ed 100644
|
||||
--- a/src/main/java/net/minecraft/Util.java
|
||||
+++ b/src/main/java/net/minecraft/Util.java
|
||||
@@ -80,8 +80,8 @@ public class Util {
|
||||
private static final int DEFAULT_MAX_THREADS = 255;
|
||||
private static final String MAX_THREADS_SYSTEM_PROPERTY = "max.bg.threads";
|
||||
private static final AtomicInteger WORKER_COUNT = new AtomicInteger(1);
|
||||
- private static final ExecutorService BOOTSTRAP_EXECUTOR = makeExecutor("Bootstrap", -2); // Paper - add -2 priority
|
||||
private static final ExecutorService BACKGROUND_EXECUTOR = AsyncExecutor.instance; // Gale - centralized async execution - remove background executor
|
||||
+ private static final ExecutorService BOOTSTRAP_EXECUTOR = BACKGROUND_EXECUTOR; // Gale - Patina - remove bootstrap executor
|
||||
// Paper start - don't submit BLOCKING PROFILE LOOKUPS to the world gen thread
|
||||
public static final ExecutorService PROFILE_EXECUTOR = Executors.newFixedThreadPool(2, new java.util.concurrent.ThreadFactory() {
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: MartijnMuijsers <martijnmuijsers@live.nl>
|
||||
Date: Tue, 29 Nov 2022 14:44:23 +0100
|
||||
Subject: [PATCH] Remove world upgrade executors
|
||||
|
||||
License: AGPL-3.0 (https://www.gnu.org/licenses/agpl-3.0.html)
|
||||
|
||||
This patch was taken from Gale.
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/world/ThreadedWorldUpgrader.java b/src/main/java/io/papermc/paper/world/ThreadedWorldUpgrader.java
|
||||
index 95cac7edae8ac64811fc6a2f6b97dd4a0fceb0b0..29a33ec067b9f47a7a86cce90316e1837d7d8612 100644
|
||||
--- a/src/main/java/io/papermc/paper/world/ThreadedWorldUpgrader.java
|
||||
+++ b/src/main/java/io/papermc/paper/world/ThreadedWorldUpgrader.java
|
||||
@@ -18,6 +18,8 @@ import net.minecraft.world.level.storage.DimensionDataStorage;
|
||||
import net.minecraft.world.level.storage.LevelStorageSource;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
+import org.galemc.gale.concurrent.AsyncExecutor;
|
||||
+
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.text.DecimalFormat;
|
||||
@@ -46,6 +48,10 @@ public class ThreadedWorldUpgrader {
|
||||
this.dimensionType = dimensionType;
|
||||
this.worldName = worldName;
|
||||
this.worldDir = worldDir;
|
||||
+ // Gale start - centralized async execution - remove world upgrade executors
|
||||
+ this.threadPool = AsyncExecutor.instance;
|
||||
+ /*
|
||||
+ // Gale end - centralized async execution - remove world upgrade executors
|
||||
this.threadPool = Executors.newFixedThreadPool(Math.max(1, threads), new ThreadFactory() {
|
||||
private final AtomicInteger threadCounter = new AtomicInteger();
|
||||
|
||||
@@ -61,6 +67,7 @@ public class ThreadedWorldUpgrader {
|
||||
return ret;
|
||||
}
|
||||
});
|
||||
+ */ // Gale - centralized async execution - remove world upgrade executors
|
||||
this.dataFixer = dataFixer;
|
||||
this.generatorKey = generatorKey;
|
||||
this.removeCaches = removeCaches;
|
||||
@@ -1,31 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: MartijnMuijsers <martijnmuijsers@live.nl>
|
||||
Date: Tue, 29 Nov 2022 14:58:26 +0100
|
||||
Subject: [PATCH] Remove tab complete executor
|
||||
|
||||
License: AGPL-3.0 (https://www.gnu.org/licenses/agpl-3.0.html)
|
||||
|
||||
This patch was taken from Gale.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index 103616e0dd5f7a5517eb20529263ac3ca06dd786..5a5d3b810f259725329dd90112d74c7f2d093c47 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -186,6 +186,7 @@ import net.minecraft.world.phys.shapes.Shapes;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
+import org.galemc.gale.concurrent.AsyncExecutor; // Gale
|
||||
|
||||
// CraftBukkit start
|
||||
import io.papermc.paper.adventure.ChatProcessor; // Paper
|
||||
@@ -907,8 +908,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
}
|
||||
|
||||
// Paper start
|
||||
- private static final java.util.concurrent.ExecutorService TAB_COMPLETE_EXECUTOR = java.util.concurrent.Executors.newFixedThreadPool(4,
|
||||
- new com.google.common.util.concurrent.ThreadFactoryBuilder().setDaemon(true).setNameFormat("Async Tab Complete Thread - #%d").setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(net.minecraft.server.MinecraftServer.LOGGER)).build());
|
||||
+ private static final java.util.concurrent.ExecutorService TAB_COMPLETE_EXECUTOR = AsyncExecutor.instance; // Gale - centralized async execution - remove tab complete executor
|
||||
// Paper end
|
||||
@Override
|
||||
public void handleCustomCommandSuggestions(ServerboundCommandSuggestionPacket packet) {
|
||||
@@ -1,30 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: MartijnMuijsers <martijnmuijsers@live.nl>
|
||||
Date: Tue, 29 Nov 2022 15:15:10 +0100
|
||||
Subject: [PATCH] Remove text filter executor
|
||||
|
||||
License: AGPL-3.0 (https://www.gnu.org/licenses/agpl-3.0.html)
|
||||
|
||||
This patch was taken from Gale.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/network/TextFilterClient.java b/src/main/java/net/minecraft/server/network/TextFilterClient.java
|
||||
index 92a60fc35145b7dd5fe17ea9b6823a919f483945..5922f569dcb6ecdacc9862749b393386a82c69fb 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/TextFilterClient.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/TextFilterClient.java
|
||||
@@ -32,6 +32,7 @@ import net.minecraft.Util;
|
||||
import net.minecraft.network.chat.FilterMask;
|
||||
import net.minecraft.util.GsonHelper;
|
||||
import net.minecraft.util.thread.ProcessorMailbox;
|
||||
+import org.galemc.gale.concurrent.AsyncExecutor;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
public class TextFilterClient implements AutoCloseable {
|
||||
@@ -62,7 +63,7 @@ public class TextFilterClient implements AutoCloseable {
|
||||
this.joinEncoder = joinEncoder;
|
||||
this.leaveEndpoint = leaveEndpoint;
|
||||
this.leaveEncoder = leaveEncoder;
|
||||
- this.workerPool = Executors.newFixedThreadPool(parallelism, THREAD_FACTORY);
|
||||
+ this.workerPool = AsyncExecutor.instance; // Gale - centralized async execution - remove text filter executor
|
||||
}
|
||||
|
||||
private static URL getEndpoint(URI root, @Nullable JsonObject endpoints, String key, String fallback) throws MalformedURLException {
|
||||
@@ -1,417 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalgic853 <yuu8583@proton.me>
|
||||
Date: Thu, 20 Oct 2022 14:43:33 +0800
|
||||
Subject: [PATCH] Use our logo instead of Purpur's
|
||||
|
||||
|
||||
diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png
|
||||
index 35ae7a94cebd4a9a16fc9112ccc248fa3cac5f32..91b436cf7e6e17b8e64edfe858034d068ac63a4f 100644
|
||||
GIT binary patch
|
||||
literal 3948
|
||||
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
|
||||
JIe%fnzW@s>?*RY+
|
||||
|
||||
literal 17292
|
||||
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
|
||||
SDfV^%0000<MNUMnLSTXhlS0b?
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand
|
||||
|
||||
|
||||
diff --git a/build.gradle.kts b/build.gradle.kts
|
||||
index 7de4b51cb4afdcbdfb8d1dc32f56252d997e23a8..3ffa404efaac294d60c8430266f47dcbfb6d1592 100644
|
||||
index d5b7458f6b79addf1a12eb82443ba5bdbe2ea5d3..0cc1db1138e2d34eaee62ec60c506d03497d3613 100644
|
||||
--- a/build.gradle.kts
|
||||
+++ b/build.gradle.kts
|
||||
@@ -7,7 +7,7 @@ plugins {
|
||||
@@ -14,10 +14,10 @@ index 7de4b51cb4afdcbdfb8d1dc32f56252d997e23a8..3ffa404efaac294d60c8430266f47dcb
|
||||
dependencies {
|
||||
- implementation(project(":purpur-api")) // Purpur
|
||||
+ implementation(project(":keyi-api")) // Purpur // KeYi
|
||||
// Pufferfish start
|
||||
implementation("io.papermc.paper:paper-mojangapi:1.19.3-R0.1-SNAPSHOT") {
|
||||
exclude("io.papermc.paper", "paper-api")
|
||||
}
|
||||
@@ -60,13 +60,13 @@ tasks.jar {
|
||||
@@ -77,13 +77,13 @@ tasks.jar {
|
||||
manifest {
|
||||
val git = Git(rootProject.layout.projectDirectory.path)
|
||||
val gitHash = git("rev-parse", "--short=7", "HEAD").getText().trim()
|
||||
@@ -34,7 +34,7 @@ index 7de4b51cb4afdcbdfb8d1dc32f56252d997e23a8..3ffa404efaac294d60c8430266f47dcb
|
||||
"Specification-Title" to "Bukkit",
|
||||
"Specification-Version" to project.version,
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java
|
||||
index acd95cf1dc7f009b63e44e4404e1736283fd458e..3436a377f9c11d8f2a39af65c3370861fedb1b87 100644
|
||||
index 9713263c3bd34ab8a3bfc0a8797ba0b1b88ed733..16a2186222209876785d53ce7dcf6d601bf2f746 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/Metrics.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/Metrics.java
|
||||
@@ -593,7 +593,7 @@ public class Metrics {
|
||||
@@ -50,8 +50,8 @@ index acd95cf1dc7f009b63e44e4404e1736283fd458e..3436a377f9c11d8f2a39af65c3370861
|
||||
|
||||
metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size()));
|
||||
metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur
|
||||
- metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); // Purpur
|
||||
+ metrics.addCustomChart(new Metrics.SimplePie("keyi_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); // Purpur // KeYi
|
||||
- metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur
|
||||
+ metrics.addCustomChart(new Metrics.SimplePie("keyi_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur // KeYi
|
||||
|
||||
metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> {
|
||||
Map<String, Map<String, Integer>> map = new HashMap<>();
|
||||
@@ -166,7 +166,7 @@ index fba5dbdb7bcbb55400ef18342c9b54612972a718..005983d56b283e54e2cf450f1e9f985a
|
||||
|
||||
private static int fetchDistanceFromSiteApi(int jenkinsBuild, @Nullable String siteApiVersion) {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 80d4167edd7c87240ce02ae122153976015d548a..120b798742b1a4524eefa4b5387a8ffc203e523c 100644
|
||||
index b69634a5cf57e4086e644819f68638d6a2ab897c..4af2cc1f0df04cb4e1b44ac5a9f6391da0641d07 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -262,7 +262,7 @@ import javax.annotation.Nullable; // Paper
|
||||
@@ -192,11 +192,11 @@ index fb87620c742ff7912f5e8ccd2a7930dd605576d9..d779212cbb719a1d923a24823135c5d3
|
||||
|
||||
if (stream != null) {
|
||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
||||
index 76cbfb7e900bf2698776f54cfe498f4b42965221..cd60f79acdd2307bdae48a11d4f5ec3ff3fa225a 100644
|
||||
index c7c0ed8dfe58c841faf684a1fe228eeda6cd57b7..0675f0633006c6e76294b7bb7e73c589510c97dd 100644
|
||||
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
||||
@@ -244,7 +244,7 @@ public class PurpurConfig {
|
||||
if (!TimingsManager.hiddenConfigs.contains("settings.seed")) TimingsManager.hiddenConfigs.add("settings.seed");
|
||||
@@ -227,7 +227,7 @@ public class PurpurConfig {
|
||||
deathMessageOnlyBroadcastToAffectedPlayer = getBoolean("settings.broadcasts.death.only-broadcast-to-affected-player", deathMessageOnlyBroadcastToAffectedPlayer);
|
||||
}
|
||||
|
||||
- public static String serverModName = "Purpur";
|
||||
|
||||
@@ -240,12 +240,12 @@ index 0000000000000000000000000000000000000000..510eea6066fb0743a9c561eb577de9d9
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
index 5b44f7512f21dba3f3306c7f42fa2d78e600847a..8fe0a9c2989016821ff673838c0041b38aff8fb2 100644
|
||||
index 46858fb57f122033a68aeb4ad3943132a677fb46..5dde53bd71e7768ea898acca02fb18ce66ea2dff 100644
|
||||
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
@@ -232,6 +232,16 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
// Paper end
|
||||
// gg.pufferfish.pufferfish.PufferfishConfig.pufferfishFile = (java.io.File) options.valueOf("pufferfish-settings"); // Purpur
|
||||
@@ -234,6 +234,16 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
gg.pufferfish.pufferfish.PufferfishConfig.load(); // Pufferfish
|
||||
gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish
|
||||
|
||||
+ // KeYi start - init config
|
||||
+ try {
|
||||
@@ -261,7 +261,7 @@ index 5b44f7512f21dba3f3306c7f42fa2d78e600847a..8fe0a9c2989016821ff673838c0041b3
|
||||
this.setFlightAllowed(dedicatedserverproperties.allowFlight);
|
||||
this.setMotd(dedicatedserverproperties.motd);
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
index 72810905cc50af204161a02872d599af4aba8dbb..175d75a929d219f24c78cabe1558b4ebd22e1235 100644
|
||||
index 082d0516c80cf231dd7ceb454508bb77407c499b..9cf35ea1393ba68a2e6d1bb808d6be6497bc48f5 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
@@ -180,6 +180,14 @@ public class Main {
|
||||
|
||||
@@ -14,10 +14,10 @@ doing questionable/buggy ones, and claiming breathtaking performance improvement
|
||||
any of those Spigot forks!
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
index 64b91d72fca05f2e74bcaf83bccf061a25a0c868..b0bb07c57e6219a21003bfce72b6909680ac78e5 100644
|
||||
index 6b0e44f77c11e51a570de71b537f75c0dd942006..5d0f23a49658f3a260511f25d91c6c9180fef589 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -1163,7 +1163,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
@@ -1196,7 +1196,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
}
|
||||
|
||||
this.tryCheckInsideBlocks();
|
||||
|
||||
@@ -30,7 +30,7 @@ index bc9403d002ef24e71be67a962d099f5d73db9540..5582c15a37fbbf74d2039ba15d67684f
|
||||
}
|
||||
\ No newline at end of file
|
||||
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
index 8fe0a9c2989016821ff673838c0041b38aff8fb2..c2dab0da201010395b9367c8812115b34176fa36 100644
|
||||
index 5dde53bd71e7768ea898acca02fb18ce66ea2dff..9f4a087c6b75e00a14e15dd23d0ce13b7cb2eb56 100644
|
||||
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
@@ -180,7 +180,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
@@ -42,7 +42,7 @@ index 8fe0a9c2989016821ff673838c0041b38aff8fb2..c2dab0da201010395b9367c8812115b3
|
||||
DedicatedServer.LOGGER.warn("****************************");
|
||||
DedicatedServer.LOGGER.warn("YOU ARE RUNNING THIS SERVER AS AN ADMINISTRATIVE OR ROOT USER. THIS IS NOT ADVISED.");
|
||||
DedicatedServer.LOGGER.warn("YOU ARE OPENING YOURSELF UP TO POTENTIAL RISKS WHEN DOING THIS.");
|
||||
@@ -319,10 +319,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
@@ -321,10 +321,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
// CraftBukkit end
|
||||
|
||||
if (!this.usesAuthentication()) {
|
||||
@@ -61,7 +61,7 @@ index 8fe0a9c2989016821ff673838c0041b38aff8fb2..c2dab0da201010395b9367c8812115b3
|
||||
DedicatedServer.LOGGER.warn("Whilst this makes it possible to use BungeeCord or Velocity, unless access to your server is properly restricted, it also opens up the ability for hackers to connect with any username they choose."); // Purpur
|
||||
DedicatedServer.LOGGER.warn("Please see http://www.spigotmc.org/wiki/firewall-guide/ for further information.");
|
||||
} else {
|
||||
@@ -330,7 +335,6 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
@@ -332,7 +337,6 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
DedicatedServer.LOGGER.warn("You will not be offered any support as long as the server allows offline-mode players to join."); // Purpur
|
||||
}
|
||||
// Spigot end
|
||||
|
||||
@@ -21,10 +21,10 @@ index 8884a2471b4b7c5cabf1c0c767710ba69c7ae4ec..4f08f2e40f5bc3bc5a87bf3a34945afd
|
||||
}
|
||||
\ No newline at end of file
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
|
||||
index ee5ec376cf7495ed99ee822a7b26978c3c107098..a85cef2b26cf876025c9436606eee24a3354f4da 100644
|
||||
index 9c3db8f774e5c11df18d2c317c874e8ac26e7f8e..2bcdd7232377784c548c228e4768697ef6918f2b 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
|
||||
@@ -288,7 +288,7 @@ public class ItemEntity extends Entity {
|
||||
@@ -294,7 +294,7 @@ public class ItemEntity extends Entity {
|
||||
ItemStack itemstack1 = other.getItem();
|
||||
|
||||
if (Objects.equals(this.getOwner(), other.getOwner()) && ItemEntity.areMergable(itemstack, itemstack1)) {
|
||||
|
||||
@@ -7,10 +7,10 @@ Original code by PatinaMC, licensed under GNU General Public License v3.0
|
||||
You can find the original code on https://github.com/PatinaMC/Patina
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
index 7f2a811505c2aeaad6e1a91a0719613a6694f77a..6890e3598d769d6dbfb5b665153b17cb5493a84a 100644
|
||||
index d62bf95fb067c2e2a4fc9b2757c636bd4ee75bea..c6d03c97bb12a74b2e46600019ba6feb10ceb66b 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
||||
@@ -398,7 +398,7 @@ public class ServerPlayer extends Player {
|
||||
@@ -396,7 +396,7 @@ public class ServerPlayer extends Player {
|
||||
long l = k * k;
|
||||
int i1 = l > 2147483647L ? Integer.MAX_VALUE : (int) l;
|
||||
int j1 = this.getCoprime(i1);
|
||||
@@ -19,7 +19,7 @@ index 7f2a811505c2aeaad6e1a91a0719613a6694f77a..6890e3598d769d6dbfb5b665153b17cb
|
||||
|
||||
for (int l1 = 0; l1 < i1; ++l1) {
|
||||
int i2 = (k1 + j1 * l1) % i1;
|
||||
@@ -435,7 +435,7 @@ public class ServerPlayer extends Player {
|
||||
@@ -433,7 +433,7 @@ public class ServerPlayer extends Player {
|
||||
long l = k * k;
|
||||
int i1 = l > 2147483647L ? Integer.MAX_VALUE : (int) l;
|
||||
int j1 = this.getCoprime(i1);
|
||||
|
||||
@@ -9,18 +9,18 @@ Original code by RelativityMC, licensed under MIT
|
||||
You can find the original code on https://github.com/RelativityMC/VMP-fabric (Yarn mappings)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
index b0bb07c57e6219a21003bfce72b6909680ac78e5..6f9c8bfea4ef60aec040064ce976bb1f03770d04 100644
|
||||
index 73325488e138c8dca81d06c5d8759401f376d273..85542015ef7376baf0cfaa090265c1286459788b 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -399,6 +399,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
private UUID originWorld;
|
||||
public boolean freezeLocked = false; // Paper - Freeze Tick Lock API
|
||||
public boolean collidingWithWorldBorder; // Paper
|
||||
public @Nullable Boolean immuneToFire = null; // Purpur - Fire immune API
|
||||
+ private boolean boundingBoxChanged = false; // KeYi
|
||||
|
||||
public void setOrigin(@javax.annotation.Nonnull Location location) {
|
||||
this.origin = location.toVector();
|
||||
@@ -1003,6 +1004,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
@@ -1036,6 +1037,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
// Paper end - detailed watchdog information
|
||||
|
||||
public void move(MoverType movementType, Vec3 movement) {
|
||||
@@ -34,7 +34,7 @@ index b0bb07c57e6219a21003bfce72b6909680ac78e5..6f9c8bfea4ef60aec040064ce976bb1f
|
||||
// Paper start - detailed watchdog information
|
||||
io.papermc.paper.util.TickThread.ensureTickThread("Cannot move an entity off-main");
|
||||
synchronized (this.posLock) {
|
||||
@@ -3804,6 +3812,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
@@ -3853,6 +3861,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
}
|
||||
|
||||
public final void setBoundingBox(AABB boundingBox) {
|
||||
|
||||
@@ -424,7 +424,7 @@ index e5ea9f27a1936ed9e329e74317c91c5df89b9fbd..89a41d396162a1c2eb2df5192b0d888b
|
||||
private long lastFill = -1;
|
||||
private long nextRefill = -1;
|
||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
|
||||
index 09e357833f9bbe26da7fa7142875daf2733d6420..2850b4fac2bf28b751cd6412e2effb99c60a3d74 100644
|
||||
index 79bf9c277fe98df176113de39360fb34ad917577..9168e70d7d478254ad45e913885d79391a2338ae 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
|
||||
@@ -53,6 +53,10 @@ import net.minecraft.world.level.material.Fluids;
|
||||
@@ -438,7 +438,7 @@ index 09e357833f9bbe26da7fa7142875daf2733d6420..2850b4fac2bf28b751cd6412e2effb99
|
||||
|
||||
public class LevelChunk extends ChunkAccess {
|
||||
|
||||
@@ -919,7 +923,7 @@ public class LevelChunk extends ChunkAccess {
|
||||
@@ -932,7 +936,7 @@ public class LevelChunk extends ChunkAccess {
|
||||
if (this.needsDecoration) {
|
||||
//try (co.aikar.timings.Timing ignored = this.level.timings.chunkLoadPopulate.startTiming()) { // Paper // Purpur
|
||||
this.needsDecoration = false;
|
||||
@@ -469,7 +469,7 @@ index dcfe090c269d4cbcc2eb1b6f85392848bb34656c..ef8909c9c13c8f46ec6d452f0d14c9a1
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 069bb67d1f79e63dce85cba347a1fd67a4781043..840657e9fa7adaa20753b54d86a68d83e5b0eaf1 100644
|
||||
index 804f81c478c09a5b6d0b10a78dc2b7ae0b88cc18..278bda4058462ac331b67bc9ea297a30b296ce11 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -134,6 +134,7 @@ import org.bukkit.util.Consumer;
|
||||
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Player Skull API
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 82697576db752e3dad908e389035ec66c728f0ec..d41d91914b8e7b29b7f92692faa9f7a5a5cbd080 100644
|
||||
index ed5ee1f76aad6c27e742cb421a8e94990ebb7c59..ec0a9488f3f81977eed17f0abc6f4fd1b4dbe5a6 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -26,6 +26,9 @@ import java.util.Optional;
|
||||
@@ -26,7 +26,7 @@ index 82697576db752e3dad908e389035ec66c728f0ec..d41d91914b8e7b29b7f92692faa9f7a5
|
||||
import org.bukkit.map.MapCursor;
|
||||
import org.bukkit.map.MapView;
|
||||
import org.bukkit.metadata.MetadataValue;
|
||||
@@ -3138,4 +3142,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@@ -3147,4 +3151,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
this.getHandle().connection.send(packet);
|
||||
}
|
||||
// Purpur end
|
||||
|
||||
@@ -10,10 +10,10 @@ this patch is focused around the sensors used for ai
|
||||
delete the line of sight cache less often and use a faster nearby comparison
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
index ee87227269b36ff758dceb8dcf20b9367470d6df..01168bb3727399cac73fbf8aa9ae2316a702586d 100644
|
||||
index 3fd8e115319e24d31f0b81e88633b83969a41b4b..3b21adfec2ad31a23cc317c973a93af2f2dd0d05 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
@@ -1027,23 +1027,25 @@ public abstract class LivingEntity extends Entity {
|
||||
@@ -1026,23 +1026,25 @@ public abstract class LivingEntity extends Entity {
|
||||
}
|
||||
|
||||
if (entity != null) {
|
||||
@@ -45,10 +45,10 @@ index ee87227269b36ff758dceb8dcf20b9367470d6df..01168bb3727399cac73fbf8aa9ae2316
|
||||
// Purpur start
|
||||
if (entity instanceof LivingEntity entityliving) {
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
index db23506c44de328c74eb509caf6cc4d8d91cbc52..caf2fc594bc5143e8ead8c574963224f63b3bc7a 100644
|
||||
index 7bd4e95fcaf3855a4fe412b5898a97d7992caad3..f6891970aebfe0095e37cca532fd6b971f5d1ee7 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
|
||||
@@ -900,10 +900,10 @@ public abstract class Mob extends LivingEntity {
|
||||
@@ -902,10 +902,10 @@ public abstract class Mob extends LivingEntity {
|
||||
return;
|
||||
}
|
||||
// Paper end
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalgic853 <yuu8583@proton.me>
|
||||
Date: Fri, 9 Dec 2022 23:09:09 +0800
|
||||
Subject: [PATCH] Revert "Spark Profiler"
|
||||
Subject: [PATCH] Remove "Spark Profiler"
|
||||
|
||||
This reverts commit 00657e75cfec6d86bbdcb1126aabcf7177bec31a.
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 120b798742b1a4524eefa4b5387a8ffc203e523c..5e56cc967f09fc29f1fa4976765a8a837e3087cf 100644
|
||||
index e35453e1b105489db6715c3885cee88097ef4e97..973d40c8c25856f093f11a9c986e0325b4b48fff 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -448,38 +448,7 @@ public final class CraftServer implements Server {
|
||||
@@ -1,7 +1,7 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalgic853 <yuu8583@proton.me>
|
||||
Date: Fri, 9 Dec 2022 23:13:01 +0800
|
||||
Subject: [PATCH] Remove Timings
|
||||
Subject: [PATCH] Revert purpur "Remove Profilers"
|
||||
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java
|
||||
@@ -43,46 +43,44 @@ index e42eb93fd9f6f51ff5bb4b14a2304d4ffcdd8441..8013dd333e27aa5fd0beb431fa32491e
|
||||
return executedUnloadTask | canSaveChunk | canSaveEntities | canSavePOI ? new SaveStat(executedUnloadTask || canSaveChunk, canSaveEntities, canSavePOI): null;
|
||||
}
|
||||
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
||||
index 6d6be46b30e518f9b9483100583ef318b30ee3f7..63ec2ebb71aa0e0dbb64bbce7cd3c9494e9ce2e7 100644
|
||||
index 6bf14183a3fcd2b3d166752ce33240d2ff1ffa7c..01bdf134fc21220ab7ecca51f2dcd51c0b466bba 100644
|
||||
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
||||
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
||||
@@ -64,7 +64,6 @@ public class GlobalConfiguration extends ConfigurationPart {
|
||||
@@ -67,14 +67,14 @@ public class GlobalConfiguration extends ConfigurationPart {
|
||||
|
||||
@Override
|
||||
public void postProcess() {
|
||||
- // Purpur - diff on change
|
||||
- /*// Pufferfish start // Purpur
|
||||
+ // Pufferfish start
|
||||
if (enabled && !reallyEnabled) {
|
||||
Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] To improve performance, timings have been disabled by default");
|
||||
Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] You can still use timings by using /timings on, but they will not start on server startup unless you set timings.really-enabled to true in paper.yml");
|
||||
Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] If you would like to disable this message, either set timings.really-enabled to true or timings.enabled to false.");
|
||||
}
|
||||
enabled = reallyEnabled;
|
||||
- */// Pufferfish end // Purpur
|
||||
+ // Pufferfish end
|
||||
MinecraftTimings.processConfig(this);
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/network/protocol/PacketUtils.java b/src/main/java/net/minecraft/network/protocol/PacketUtils.java
|
||||
index 767623a35dda71d77c65602e10ef2b3f0ae743f1..27d4aa45e585842c04491839826d405d6f447f0e 100644
|
||||
index b693a26ac6a5729bf91aca9ca0ae332b904d436f..27d4aa45e585842c04491839826d405d6f447f0e 100644
|
||||
--- a/src/main/java/net/minecraft/network/protocol/PacketUtils.java
|
||||
+++ b/src/main/java/net/minecraft/network/protocol/PacketUtils.java
|
||||
@@ -47,9 +47,8 @@ public class PacketUtils {
|
||||
@@ -47,7 +47,7 @@ public class PacketUtils {
|
||||
if (MinecraftServer.getServer().hasStopped() || (listener instanceof ServerGamePacketListenerImpl && ((ServerGamePacketListenerImpl) listener).processedDisconnect)) return; // CraftBukkit, MC-142590
|
||||
if (listener.getConnection().isConnected()) {
|
||||
co.aikar.timings.Timing timing = co.aikar.timings.MinecraftTimings.getPacketTiming(packet); // Paper - timings
|
||||
- //try (co.aikar.timings.Timing ignored = timing.startTiming()) { // Paper - timings // Purpur
|
||||
- try { // Paper - timings // Purpur
|
||||
+ try (co.aikar.timings.Timing ignored = timing.startTiming()) { // Paper - timings
|
||||
packet.handle(listener);
|
||||
- /* // Purpur
|
||||
} catch (Exception exception) {
|
||||
net.minecraft.network.Connection networkmanager = listener.getConnection();
|
||||
String playerIP = io.papermc.paper.configuration.GlobalConfiguration.get().logging.logPlayerIpAddresses ? String.valueOf(networkmanager.getRemoteAddress()) : "<ip address withheld>"; // Paper
|
||||
@@ -61,7 +60,7 @@ public class PacketUtils {
|
||||
net.minecraft.network.chat.Component error = net.minecraft.network.chat.Component.literal("Packet processing error");
|
||||
networkmanager.send(new net.minecraft.network.protocol.game.ClientboundDisconnectPacket(error), net.minecraft.network.PacketSendListener.thenRun(() -> networkmanager.disconnect(error)));
|
||||
networkmanager.setReadOnly();
|
||||
- } */ // Purpur
|
||||
+ }
|
||||
} else {
|
||||
PacketUtils.LOGGER.debug("Ignoring packet due to disconnection: {}", packet);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b6c2fb750 100644
|
||||
index cea4447aad2d64db56a76e4ba180dc7326d2e13b..8adb0f0c5ff56e578786437afdb07668955fe7c0 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -337,13 +337,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -339,13 +339,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
public MinecraftServer(OptionSet options, WorldLoader.DataLoadContext worldLoader, Thread thread, LevelStorageSource.LevelStorageAccess convertable_conversionsession, PackRepository resourcepackrepository, WorldStem worldstem, Proxy proxy, DataFixer datafixer, Services services, ChunkProgressListenerFactory worldloadlistenerfactory) {
|
||||
super("Server");
|
||||
SERVER = this; // Paper - better singleton
|
||||
@@ -102,7 +100,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
this.status = new ServerStatus();
|
||||
this.random = RandomSource.create();
|
||||
this.port = -1;
|
||||
@@ -935,9 +935,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -937,9 +937,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
}
|
||||
// Paper end
|
||||
// CraftBukkit end
|
||||
@@ -114,7 +112,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
|
||||
MinecraftServer.LOGGER.info("Stopping server");
|
||||
Commands.COMMAND_SENDING_POOL.shutdownNow(); // Paper - Shutdown and don't bother finishing
|
||||
@@ -1179,18 +1179,18 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -1181,18 +1181,18 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
}
|
||||
// Spigot end
|
||||
|
||||
@@ -138,7 +136,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
this.mayHaveDelayedTasks = true;
|
||||
// Purpur start - tps catchup
|
||||
if (org.purpurmc.purpur.PurpurConfig.tpsCatchup) {
|
||||
@@ -1200,8 +1200,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -1202,8 +1202,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
}
|
||||
// Purpur end - tps catchup
|
||||
this.waitUntilNextTick();
|
||||
@@ -149,7 +147,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
this.isReady = true;
|
||||
JvmProfiler.INSTANCE.onServerTick(this.averageTickTime);
|
||||
}
|
||||
@@ -1362,7 +1362,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -1364,7 +1364,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
}
|
||||
|
||||
public void doRunTask(TickTask ticktask) { // CraftBukkit - decompile error
|
||||
@@ -158,7 +156,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
super.doRunTask(ticktask);
|
||||
}
|
||||
|
||||
@@ -1406,15 +1406,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -1408,15 +1408,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
public void onServerExit() {}
|
||||
|
||||
public void tickServer(BooleanSupplier shouldKeepTicking) {
|
||||
@@ -177,7 +175,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
// Paper end
|
||||
new com.destroystokyo.paper.event.server.ServerTickStartEvent(this.tickCount+1).callEvent(); // Paper
|
||||
|
||||
@@ -1447,7 +1447,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -1449,7 +1449,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
if (playerSaveInterval < 0) {
|
||||
playerSaveInterval = autosavePeriod;
|
||||
}
|
||||
@@ -186,7 +184,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
final boolean fullSave = autosavePeriod > 0 && this.tickCount % autosavePeriod == 0;
|
||||
try {
|
||||
this.isSaving = true;
|
||||
@@ -1462,20 +1462,20 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -1464,20 +1464,20 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
} finally {
|
||||
this.isSaving = false;
|
||||
}
|
||||
@@ -211,7 +209,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
long l = this.tickTimes[this.tickCount % 100] = Util.getNanos() - i;
|
||||
|
||||
this.averageTickTime = this.averageTickTime * 0.8F + (float) l / 1000000.0F * 0.19999999F;
|
||||
@@ -1488,31 +1488,31 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -1490,31 +1490,31 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
// Paper end
|
||||
|
||||
this.frameTimer.logFrameDuration(i1 - i);
|
||||
@@ -254,7 +252,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
// Send time updates to everyone, it will get the right time from the world the player is in.
|
||||
// Paper start - optimize time updates
|
||||
for (final ServerLevel world : this.getAllLevels()) {
|
||||
@@ -1532,10 +1532,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -1534,10 +1534,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
}
|
||||
}
|
||||
// Paper end
|
||||
@@ -266,7 +264,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
Iterator iterator = this.getAllLevels().iterator(); // Paper - move down
|
||||
while (iterator.hasNext()) {
|
||||
ServerLevel worldserver = (ServerLevel) iterator.next();
|
||||
@@ -1544,28 +1543,28 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -1546,28 +1545,28 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
worldserver.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur
|
||||
net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper
|
||||
|
||||
@@ -302,7 +300,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
} catch (Throwable throwable) {
|
||||
// Spigot Start
|
||||
CrashReport crashreport;
|
||||
@@ -1581,33 +1580,33 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -1583,33 +1582,33 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
throw new ReportedException(crashreport);
|
||||
}
|
||||
|
||||
@@ -348,15 +346,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
}
|
||||
|
||||
public boolean isNetherEnabled() {
|
||||
@@ -2261,7 +2260,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
}
|
||||
|
||||
public ProfilerFiller getProfiler() {
|
||||
- // Purpur - diff on change
|
||||
return this.profiler;
|
||||
}
|
||||
|
||||
@@ -2501,7 +2499,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -2503,7 +2502,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
// CraftBukkit end
|
||||
|
||||
private void startMetricsRecordingTick() {
|
||||
@@ -365,7 +355,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
this.metricsRecorder = ActiveMetricsRecorder.createStarted(new ServerMetricsSamplersProvider(Util.timeSource, this.isDedicatedServer()), Util.timeSource, Util.ioPool(), new MetricsPersister("server"), this.onMetricsRecordingStopped, (path) -> {
|
||||
this.executeBlocking(() -> {
|
||||
this.saveDebugReport(path.resolve("server"));
|
||||
@@ -2511,40 +2509,40 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -2513,40 +2512,40 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
this.willStartRecordingMetrics = false;
|
||||
}
|
||||
|
||||
@@ -418,7 +408,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
}
|
||||
|
||||
public Path getWorldPath(LevelResource worldSavePath) {
|
||||
@@ -2593,15 +2591,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -2595,15 +2594,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
}
|
||||
|
||||
public boolean isTimeProfilerRunning() {
|
||||
@@ -437,7 +427,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
return EmptyProfileResults.EMPTY;
|
||||
} else {
|
||||
ProfileResults methodprofilerresults = this.debugCommandProfiler.stop(Util.getNanos(), this.tickCount);
|
||||
@@ -2774,7 +2772,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -2776,7 +2775,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -446,7 +436,7 @@ index b915e6a13a518f05d109c707142efa3946892f0c..029f4bf955e690621e3862e078f7474b
|
||||
try {
|
||||
for (;;) {
|
||||
boolean moreTasks = this.tickMidTickTasks();
|
||||
@@ -2801,7 +2799,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -2803,7 +2802,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
@@ -469,10 +459,10 @@ index 8645313e646e6d5278e285f7449447761d7aae29..848f2ff87ff7ae87143ed30da7abf491
|
||||
i = this.context.runTopCommand(function, source);
|
||||
} finally {
|
||||
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
index c2dab0da201010395b9367c8812115b34176fa36..f664f4e5a49ade081cd53c71e0760e344a39468a 100644
|
||||
index 9f4a087c6b75e00a14e15dd23d0ce13b7cb2eb56..8aeb2aa9ccba986163441cc428c2804de438288c 100644
|
||||
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
@@ -529,7 +529,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
@@ -534,7 +534,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
}
|
||||
|
||||
public void handleConsoleInputs() {
|
||||
@@ -481,7 +471,7 @@ index c2dab0da201010395b9367c8812115b34176fa36..f664f4e5a49ade081cd53c71e0760e34
|
||||
// Paper start - use proper queue
|
||||
ConsoleInput servercommand;
|
||||
while ((servercommand = this.serverCommandQueue.poll()) != null) {
|
||||
@@ -546,7 +546,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
@@ -551,7 +551,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
// CraftBukkit end
|
||||
}
|
||||
|
||||
@@ -491,7 +481,7 @@ index c2dab0da201010395b9367c8812115b34176fa36..f664f4e5a49ade081cd53c71e0760e34
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
index 7276a5b8d22924240d78f732d53d678c7468bcb9..b3516a1b13b325385c4cfddb481c6e3eb6805ae1 100644
|
||||
index 75965afd7b4bed23a5ecf618c7f91ff5e7ffd92f..3d78c10a5442bfa5d4beae2546378b3822f0465d 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
@@ -618,20 +618,20 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
@@ -583,10 +573,10 @@ index 7276a5b8d22924240d78f732d53d678c7468bcb9..b3516a1b13b325385c4cfddb481c6e3e
|
||||
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
index 105cdab3a1c912299dbcfb670ace810b9202731c..ca84eddbdb1e198b899750e5f6b3eafd25ce970f 100644
|
||||
index 0ae45cf5a084fd412305e8b2f5dabe608b4eb1c1..c6f5d6756fa0e068a462d9c0ded12e0771abba37 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||
@@ -428,16 +428,16 @@ public class ServerChunkCache extends ChunkSource {
|
||||
@@ -431,16 +431,16 @@ public class ServerChunkCache extends ChunkSource {
|
||||
return ifLoaded;
|
||||
}
|
||||
// Paper end
|
||||
@@ -606,7 +596,7 @@ index 105cdab3a1c912299dbcfb670ace810b9202731c..ca84eddbdb1e198b899750e5f6b3eafd
|
||||
CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>> completablefuture = this.getChunkFutureMainThread(x, z, leastStatus, create, true); // Paper
|
||||
ServerChunkCache.MainThreadExecutor chunkproviderserver_b = this.mainThreadProcessor;
|
||||
|
||||
@@ -447,10 +447,10 @@ public class ServerChunkCache extends ChunkSource {
|
||||
@@ -450,10 +450,10 @@ public class ServerChunkCache extends ChunkSource {
|
||||
io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.pushChunkWait(this.level, x1, z1); // Paper - rewrite chunk system
|
||||
// Paper end
|
||||
com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x1, z1); // Paper - sync load info
|
||||
@@ -619,7 +609,7 @@ index 105cdab3a1c912299dbcfb670ace810b9202731c..ca84eddbdb1e198b899750e5f6b3eafd
|
||||
} // Paper
|
||||
ichunkaccess = (ChunkAccess) ((Either) completablefuture.join()).map((ichunkaccess1) -> {
|
||||
return ichunkaccess1;
|
||||
@@ -598,17 +598,17 @@ public class ServerChunkCache extends ChunkSource {
|
||||
@@ -601,17 +601,17 @@ public class ServerChunkCache extends ChunkSource {
|
||||
|
||||
public void save(boolean flush) {
|
||||
this.runDistanceManagerUpdates();
|
||||
@@ -641,7 +631,7 @@ index 105cdab3a1c912299dbcfb670ace810b9202731c..ca84eddbdb1e198b899750e5f6b3eafd
|
||||
}
|
||||
// Paper end
|
||||
|
||||
@@ -625,36 +625,36 @@ public class ServerChunkCache extends ChunkSource {
|
||||
@@ -628,36 +628,36 @@ public class ServerChunkCache extends ChunkSource {
|
||||
// CraftBukkit start - modelled on below
|
||||
public void purgeUnload() {
|
||||
if (true) return; // Paper - tickets will be removed later, this behavior isn't really well accounted for by the chunk system
|
||||
@@ -691,7 +681,7 @@ index 105cdab3a1c912299dbcfb670ace810b9202731c..ca84eddbdb1e198b899750e5f6b3eafd
|
||||
this.clearCache();
|
||||
}
|
||||
|
||||
@@ -700,14 +700,14 @@ public class ServerChunkCache extends ChunkSource {
|
||||
@@ -703,15 +703,15 @@ public class ServerChunkCache extends ChunkSource {
|
||||
}
|
||||
// Paper end - optimize isOutisdeRange
|
||||
LevelData worlddata = this.level.getLevelData();
|
||||
@@ -700,6 +690,7 @@ index 105cdab3a1c912299dbcfb670ace810b9202731c..ca84eddbdb1e198b899750e5f6b3eafd
|
||||
|
||||
- //gameprofilerfiller.push("pollingChunks"); // Purpur
|
||||
+ gameprofilerfiller.push("pollingChunks");
|
||||
this.level.resetIceAndSnowTick(); // Pufferfish - reset ice & snow tick random
|
||||
int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING);
|
||||
boolean flag1 = level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && worlddata.getGameTime() % level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit
|
||||
|
||||
@@ -710,14 +701,14 @@ index 105cdab3a1c912299dbcfb670ace810b9202731c..ca84eddbdb1e198b899750e5f6b3eafd
|
||||
int l = this.distanceManager.getNaturalSpawnChunkCount();
|
||||
// Paper start - per player mob spawning
|
||||
NaturalSpawner.SpawnState spawnercreature_d; // moved down
|
||||
@@ -721,16 +721,16 @@ public class ServerChunkCache extends ChunkSource {
|
||||
spawnercreature_d = NaturalSpawner.createState(l, this.level.getAllEntities(), this::getFullChunk, this.chunkMap.playerMobDistanceMap == null ? new LocalMobCapCalculator(this.chunkMap) : null, false);
|
||||
@@ -732,16 +732,16 @@ public class ServerChunkCache extends ChunkSource {
|
||||
// Pufferfish end
|
||||
}
|
||||
// Paper end
|
||||
- //this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur
|
||||
+ this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings
|
||||
|
||||
this.lastSpawnState = spawnercreature_d;
|
||||
//this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously
|
||||
- //gameprofilerfiller.popPush("filteringLoadedChunks"); // Purpur
|
||||
+ gameprofilerfiller.popPush("filteringLoadedChunks");
|
||||
// Paper - moved down
|
||||
@@ -731,7 +722,7 @@ index 105cdab3a1c912299dbcfb670ace810b9202731c..ca84eddbdb1e198b899750e5f6b3eafd
|
||||
boolean flag2 = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit
|
||||
|
||||
// Paper - only shuffle if per-player mob spawning is disabled
|
||||
@@ -780,17 +780,17 @@ public class ServerChunkCache extends ChunkSource {
|
||||
@@ -791,17 +791,17 @@ public class ServerChunkCache extends ChunkSource {
|
||||
}
|
||||
}
|
||||
// Paper end - optimise chunk tick iteration
|
||||
@@ -756,7 +747,7 @@ index 105cdab3a1c912299dbcfb670ace810b9202731c..ca84eddbdb1e198b899750e5f6b3eafd
|
||||
if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) {
|
||||
ReferenceOpenHashSet<ChunkHolder> copy = this.chunkMap.needsChangeBroadcasting.clone();
|
||||
this.chunkMap.needsChangeBroadcasting.clear();
|
||||
@@ -802,8 +802,8 @@ public class ServerChunkCache extends ChunkSource {
|
||||
@@ -813,8 +813,8 @@ public class ServerChunkCache extends ChunkSource {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -767,7 +758,7 @@ index 105cdab3a1c912299dbcfb670ace810b9202731c..ca84eddbdb1e198b899750e5f6b3eafd
|
||||
// Paper end - use set of chunks requiring updates, rather than iterating every single one loaded
|
||||
// Paper start - controlled flush for entity tracker packets
|
||||
List<net.minecraft.network.Connection> disabledFlushes = new java.util.ArrayList<>(this.level.players.size());
|
||||
@@ -994,7 +994,7 @@ public class ServerChunkCache extends ChunkSource {
|
||||
@@ -1029,7 +1029,7 @@ public class ServerChunkCache extends ChunkSource {
|
||||
|
||||
@Override
|
||||
protected void doRunTask(Runnable task) {
|
||||
@@ -777,10 +768,10 @@ index 105cdab3a1c912299dbcfb670ace810b9202731c..ca84eddbdb1e198b899750e5f6b3eafd
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84effcd1f1 100644
|
||||
index b396a329e753f42b3878736b6b14bafda02d3744..077ff3d7620e3c48aca59a92014dbdb7de15e79a 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
@@ -656,12 +656,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -654,12 +654,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
}
|
||||
}
|
||||
// Paper end - optimise checkDespawn
|
||||
@@ -796,7 +787,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
this.advanceWeatherCycle();
|
||||
int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
|
||||
long j;
|
||||
@@ -688,32 +688,32 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -686,32 +686,32 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
|
||||
this.updateSkyBrightness();
|
||||
this.tickTime();
|
||||
@@ -845,7 +836,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
boolean flag = true || !this.players.isEmpty() || !this.getForcedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players
|
||||
|
||||
if (flag) {
|
||||
@@ -721,24 +721,24 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -719,25 +719,25 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
}
|
||||
|
||||
if (flag || this.emptyTime++ < 300) {
|
||||
@@ -865,6 +856,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
- //timings.entityTick.startTiming(); // Spigot // Purpur
|
||||
+ timings.entityTick.startTiming(); // Spigot
|
||||
this.entityTickList.forEach((entity) -> {
|
||||
entity.activatedPriorityReset = false; // Pufferfish - DAB
|
||||
if (!entity.isRemoved()) {
|
||||
if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed
|
||||
entity.discard();
|
||||
@@ -877,13 +869,19 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
if (true || this.chunkSource.chunkMap.getDistanceManager().inEntityTickingRange(entity.chunkPosition().toLong())) { // Paper - now always true if in the ticking list
|
||||
Entity entity1 = entity.getVehicle();
|
||||
|
||||
@@ -750,21 +750,22 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -749,7 +749,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
entity.stopRiding();
|
||||
}
|
||||
|
||||
- //gameprofilerfiller.push("tick"); // Purpur
|
||||
+ gameprofilerfiller.push("tick");
|
||||
this.guardEntityTick(this::tickNonPassenger, entity);
|
||||
// Pufferfish start - copied from this.guardEntityTick
|
||||
try {
|
||||
this.tickNonPassenger(entity); // Pufferfish - changed
|
||||
@@ -764,19 +764,20 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
// Paper end
|
||||
}
|
||||
// Pufferfish end
|
||||
- //gameprofilerfiller.pop(); // Purpur
|
||||
+ gameprofilerfiller.pop();
|
||||
}
|
||||
@@ -906,7 +904,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -844,9 +845,9 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -858,9 +859,9 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
boolean flag = this.isRaining();
|
||||
int j = chunkcoordintpair.getMinBlockX();
|
||||
int k = chunkcoordintpair.getMinBlockZ();
|
||||
@@ -917,8 +915,8 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
+ gameprofilerfiller.push("thunder");
|
||||
final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change
|
||||
|
||||
if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - disable thunder
|
||||
@@ -884,7 +885,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - disable thunder // Pufferfish - replace random with shouldDoLightning
|
||||
@@ -898,7 +899,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -926,8 +924,8 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
+ gameprofilerfiller.popPush("iceandsnow");
|
||||
int l;
|
||||
|
||||
if (!this.paperConfig().environment.disableIceAndSnow && this.random.nextInt(16) == 0) { // Paper - Disable ice and snow
|
||||
@@ -936,8 +937,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
if (!this.paperConfig().environment.disableIceAndSnow && (this.currentIceAndSnowTick++ & 15) == 0) { // Paper - Disable ice and snow // Paper - optimise random ticking // Pufferfish - optimize further random ticking
|
||||
@@ -950,8 +951,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
}
|
||||
|
||||
// Paper start - optimise random block ticking
|
||||
@@ -938,7 +936,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
if (randomTickSpeed > 0) {
|
||||
LevelChunkSection[] sections = chunk.getSections();
|
||||
int minSection = io.papermc.paper.util.WorldUtil.getMinSection(this);
|
||||
@@ -971,8 +972,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -985,8 +986,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
}
|
||||
}
|
||||
// Paper end - optimise random block ticking
|
||||
@@ -949,7 +947,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
}
|
||||
|
||||
public Optional<BlockPos> findLightningRod(BlockPos pos) {
|
||||
@@ -1264,24 +1265,24 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -1278,24 +1279,24 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
// Spigot end
|
||||
// Paper start- timings
|
||||
final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(entity);
|
||||
@@ -982,7 +980,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
Iterator iterator = entity.getPassengers().iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
@@ -1304,17 +1305,17 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -1318,17 +1319,17 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
if (passenger instanceof Player || this.entityTickList.contains(passenger)) {
|
||||
// Paper - EAR 2
|
||||
final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(passenger);
|
||||
@@ -1006,7 +1004,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
// Paper start - EAR 2
|
||||
if (isActive) {
|
||||
passenger.rideTick();
|
||||
@@ -1326,7 +1327,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -1340,7 +1341,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
vehicle.positionRider(passenger);
|
||||
}
|
||||
// Paper end - EAR 2
|
||||
@@ -1015,7 +1013,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
Iterator iterator = passenger.getPassengers().iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
@@ -1335,7 +1336,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -1349,7 +1350,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
this.tickPassenger(passenger, entity2);
|
||||
}
|
||||
|
||||
@@ -1024,7 +1022,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
}
|
||||
} else {
|
||||
passenger.stopRiding();
|
||||
@@ -1355,14 +1356,14 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -1369,14 +1370,14 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld()));
|
||||
}
|
||||
|
||||
@@ -1042,7 +1040,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
|
||||
// Copied from save()
|
||||
// CraftBukkit start - moved from MinecraftServer.saveChunks
|
||||
@@ -1374,7 +1375,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -1388,7 +1389,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
this.convertable.saveDataTag(this.server.registryAccess(), this.serverLevelData, this.server.getPlayerList().getSingleplayerData());
|
||||
}
|
||||
// CraftBukkit end
|
||||
@@ -1051,7 +1049,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
}
|
||||
// Paper end
|
||||
|
||||
@@ -1388,7 +1389,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -1402,7 +1403,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
|
||||
if (!savingDisabled) {
|
||||
org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); // CraftBukkit
|
||||
@@ -1060,7 +1058,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
if (progressListener != null) {
|
||||
progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel"));
|
||||
}
|
||||
@@ -1398,11 +1399,11 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
@@ -1412,11 +1413,11 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||
progressListener.progressStage(Component.translatable("menu.savingChunks"));
|
||||
}
|
||||
|
||||
@@ -1076,7 +1074,7 @@ index e21559ebc4d5ffcf10fc50f5bcc31ccff3b8394f..8fd3511d484cfd2b56238530aea95c84
|
||||
|
||||
} else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index e69348724dc1b98a91f93af18dde6e6231068b61..45bdc5afa8b51ef381ac3c41c57cf0ad271658d0 100644
|
||||
index a8e205af936efe0909c94575e3b7f8ca50cead2f..25bb1b1938c260d531f21037507122c85c440ddf 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -2586,7 +2586,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -1107,10 +1105,10 @@ index e69348724dc1b98a91f93af18dde6e6231068b61..45bdc5afa8b51ef381ac3c41c57cf0ad
|
||||
}
|
||||
// CraftBukkit end
|
||||
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||
index 9cfe4f2ab57f6d17a64eda2c48fb59ab7aa14367..23cea7dd67dd1890a8fd34c294d140b30e89f59c 100644
|
||||
index b0fa557e756d1e30097ad5a72e679d8844b34cd9..47a2c5eb799580501f5b31c85a569fa342646d8b 100644
|
||||
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||
@@ -1297,7 +1297,7 @@ public abstract class PlayerList {
|
||||
@@ -1226,7 +1226,7 @@ public abstract class PlayerList {
|
||||
|
||||
public void saveAll(int interval) {
|
||||
io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main
|
||||
@@ -1119,7 +1117,7 @@ index 9cfe4f2ab57f6d17a64eda2c48fb59ab7aa14367..23cea7dd67dd1890a8fd34c294d140b3
|
||||
int numSaved = 0;
|
||||
long now = MinecraftServer.currentTick;
|
||||
for (int i = 0; i < this.players.size(); ++i) {
|
||||
@@ -1308,7 +1308,7 @@ public abstract class PlayerList {
|
||||
@@ -1237,7 +1237,7 @@ public abstract class PlayerList {
|
||||
}
|
||||
// Paper end
|
||||
}
|
||||
@@ -1178,10 +1176,10 @@ index 7094701d213c73ba47ace806962244c10fdf4dda..fcdb9bde8e1605e30dde3e580491522d
|
||||
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
|
||||
index 3778ad438b3a5f6cdbc465c7356bf9e11340753e..730a6e8bac4436a62c4ef5a122f55fc92432ae6a 100644
|
||||
index a9289072b048095330ea32d7c965e8dda61a36fc..7a3640ee04db1d90e2672019f6b3660271718440 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/Level.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/Level.java
|
||||
@@ -608,9 +608,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -711,9 +711,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
BlockState iblockdata2 = this.getBlockState(pos);
|
||||
|
||||
if ((flags & 128) == 0 && iblockdata2 != iblockdata1 && (iblockdata2.getLightBlock(this, pos) != iblockdata1.getLightBlock(this, pos) || iblockdata2.getLightEmission() != iblockdata1.getLightEmission() || iblockdata2.useShapeForLightOcclusion() || iblockdata1.useShapeForLightOcclusion())) {
|
||||
@@ -1193,7 +1191,7 @@ index 3778ad438b3a5f6cdbc465c7356bf9e11340753e..730a6e8bac4436a62c4ef5a122f55fc9
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -909,18 +909,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -1012,18 +1012,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
}
|
||||
|
||||
protected void tickBlockEntities() {
|
||||
@@ -1217,7 +1215,7 @@ index 3778ad438b3a5f6cdbc465c7356bf9e11340753e..730a6e8bac4436a62c4ef5a122f55fc9
|
||||
// Spigot start
|
||||
// Iterator iterator = this.blockEntityTickers.iterator();
|
||||
int tilesThisCycle = 0;
|
||||
@@ -953,10 +953,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -1056,10 +1056,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
}
|
||||
this.blockEntityTickers.removeAll(toRemove);
|
||||
|
||||
@@ -1230,7 +1228,7 @@ index 3778ad438b3a5f6cdbc465c7356bf9e11340753e..730a6e8bac4436a62c4ef5a122f55fc9
|
||||
spigotConfig.currentPrimedTnt = 0; // Spigot
|
||||
}
|
||||
|
||||
@@ -1149,7 +1149,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -1252,7 +1252,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
|
||||
@Override
|
||||
public List<Entity> getEntities(@Nullable Entity except, AABB box, Predicate<? super Entity> predicate) {
|
||||
@@ -1239,7 +1237,7 @@ index 3778ad438b3a5f6cdbc465c7356bf9e11340753e..730a6e8bac4436a62c4ef5a122f55fc9
|
||||
List<Entity> list = Lists.newArrayList();
|
||||
((ServerLevel)this).getEntityLookup().getEntities(except, box, list, predicate); // Paper - optimise this call
|
||||
return list;
|
||||
@@ -1168,7 +1168,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -1271,7 +1271,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
}
|
||||
|
||||
public <T extends Entity> void getEntities(EntityTypeTest<Entity, T> filter, AABB box, Predicate<? super T> predicate, List<? super T> result, int limit) {
|
||||
@@ -1248,16 +1246,8 @@ index 3778ad438b3a5f6cdbc465c7356bf9e11340753e..730a6e8bac4436a62c4ef5a122f55fc9
|
||||
// Paper start - optimise this call
|
||||
//TODO use limit
|
||||
if (filter instanceof net.minecraft.world.entity.EntityType entityTypeTest) {
|
||||
@@ -1497,7 +1497,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
}
|
||||
|
||||
public ProfilerFiller getProfiler() {
|
||||
- // Purpur - diff on change
|
||||
return (ProfilerFiller) this.profiler.get();
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
|
||||
index decf30b590658a627d47cb688531ec1cc24ba001..01b21f520ef1c834b9bafc3de85c1fa4fcf539d6 100644
|
||||
index 81ba3c4fa9502cdd2a5c58b0ff51fea6b7553f4a..5521418fa307b3eeb4f02a10c39f05b360d1d06e 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
|
||||
@@ -132,8 +132,8 @@ public final class NaturalSpawner {
|
||||
@@ -1292,7 +1282,7 @@ index decf30b590658a627d47cb688531ec1cc24ba001..01b21f520ef1c834b9bafc3de85c1fa4
|
||||
if (entityhuman != null) {
|
||||
double d2 = entityhuman.distanceToSqr(d0, (double) i, d1);
|
||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
|
||||
index 2850b4fac2bf28b751cd6412e2effb99c60a3d74..28e4b302284f955a73e75d0f4276d55fb51826f5 100644
|
||||
index 9168e70d7d478254ad45e913885d79391a2338ae..aa327e549949052b5babf4101cc2fc9a37868fa8 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
|
||||
@@ -53,10 +53,6 @@ import net.minecraft.world.level.material.Fluids;
|
||||
@@ -1306,7 +1296,7 @@ index 2850b4fac2bf28b751cd6412e2effb99c60a3d74..28e4b302284f955a73e75d0f4276d55f
|
||||
|
||||
public class LevelChunk extends ChunkAccess {
|
||||
|
||||
@@ -921,9 +917,9 @@ public class LevelChunk extends ChunkAccess {
|
||||
@@ -934,9 +930,9 @@ public class LevelChunk extends ChunkAccess {
|
||||
this.chunkHolder.getEntityChunk().callEntitiesLoadEvent(); // Paper - rewrite chunk system
|
||||
|
||||
if (this.needsDecoration) {
|
||||
@@ -1318,7 +1308,7 @@ index 2850b4fac2bf28b751cd6412e2effb99c60a3d74..28e4b302284f955a73e75d0f4276d55f
|
||||
random.setSeed(this.level.getSeed());
|
||||
long xRand = random.nextLong() / 2L * 2L + 1L;
|
||||
long zRand = random.nextLong() / 2L * 2L + 1L;
|
||||
@@ -941,7 +937,7 @@ public class LevelChunk extends ChunkAccess {
|
||||
@@ -954,7 +950,7 @@ public class LevelChunk extends ChunkAccess {
|
||||
}
|
||||
}
|
||||
server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkPopulateEvent(this.bukkitChunk));
|
||||
@@ -1327,7 +1317,7 @@ index 2850b4fac2bf28b751cd6412e2effb99c60a3d74..28e4b302284f955a73e75d0f4276d55f
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1298,10 +1294,10 @@ public class LevelChunk extends ChunkAccess {
|
||||
@@ -1311,10 +1307,10 @@ public class LevelChunk extends ChunkAccess {
|
||||
|
||||
if (LevelChunk.this.isTicking(blockposition)) {
|
||||
try {
|
||||
@@ -1341,7 +1331,7 @@ index 2850b4fac2bf28b751cd6412e2effb99c60a3d74..28e4b302284f955a73e75d0f4276d55f
|
||||
BlockState iblockdata = LevelChunk.this.getBlockState(blockposition);
|
||||
|
||||
if (this.blockEntity.getType().isValid(iblockdata)) {
|
||||
@@ -1312,7 +1308,7 @@ public class LevelChunk extends ChunkAccess {
|
||||
@@ -1325,7 +1321,7 @@ public class LevelChunk extends ChunkAccess {
|
||||
LevelChunk.LOGGER.warn("Block entity {} @ {} state {} invalid for ticking:", new Object[]{LogUtils.defer(this::getType), LogUtils.defer(this::getPos), iblockdata});
|
||||
}
|
||||
|
||||
@@ -1350,7 +1340,7 @@ index 2850b4fac2bf28b751cd6412e2effb99c60a3d74..28e4b302284f955a73e75d0f4276d55f
|
||||
} catch (Throwable throwable) {
|
||||
if (throwable instanceof ThreadDeath) throw throwable; // Paper
|
||||
// Paper start - Prevent tile entity and entity crashes
|
||||
@@ -1323,7 +1319,7 @@ public class LevelChunk extends ChunkAccess {
|
||||
@@ -1336,7 +1332,7 @@ public class LevelChunk extends ChunkAccess {
|
||||
// Paper end
|
||||
// Spigot start
|
||||
} finally {
|
||||
@@ -1437,10 +1427,10 @@ index a6e9e503a496c18e2501b03ec84f4600c134a50c..138407c2d4b0bc55ddb9aac5d2aa3eda
|
||||
// Paper end - add timings for scoreboard search
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
index 43d962f634c25da159c4935a3c5c8994a3a4930e..3783186d0c3f2f7b241d38f8ee011e8a5c172980 100644
|
||||
index 665625c69b93a2568b1f2218a0db39da435d8c99..00744aceb25ddc689b8c5ed90ae27e1ea28057ad 100644
|
||||
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
||||
+++ b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
@@ -166,7 +166,7 @@ public class ActivationRange
|
||||
@@ -170,7 +170,7 @@ public class ActivationRange
|
||||
*/
|
||||
public static void activateEntities(Level world)
|
||||
{
|
||||
@@ -1449,7 +1439,7 @@ index 43d962f634c25da159c4935a3c5c8994a3a4930e..3783186d0c3f2f7b241d38f8ee011e8a
|
||||
final int miscActivationRange = world.spigotConfig.miscActivationRange;
|
||||
final int raiderActivationRange = world.spigotConfig.raiderActivationRange;
|
||||
final int animalActivationRange = world.spigotConfig.animalActivationRange;
|
||||
@@ -221,7 +221,7 @@ public class ActivationRange
|
||||
@@ -244,7 +244,7 @@ public class ActivationRange
|
||||
}
|
||||
// Paper end
|
||||
}
|
||||
338
patches/server/0020-Use-our-logo-instead-of-Paper-s.patch
Normal file
338
patches/server/0020-Use-our-logo-instead-of-Paper-s.patch
Normal file
@@ -0,0 +1,338 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalgic853 <yuu8583@proton.me>
|
||||
Date: Sat, 17 Dec 2022 21:08:21 +0800
|
||||
Subject: [PATCH] Use our logo instead of Paper's
|
||||
|
||||
|
||||
diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png
|
||||
index a7d785f60c884ee4ee487cc364402d66c3dc2ecc..a2ea1098539e494d2482a7e814e4e9a76173ded2 100644
|
||||
GIT binary patch
|
||||
literal 2638
|
||||
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
|
||||
|
||||
literal 14310
|
||||
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%0ABLt+m?son?j
|
||||
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
|
||||
WX&3$!%>|s_1IbA#OV)^+1pg1OmmZn`
|
||||
|
||||
269
patches/server/0021-New-KeYi-config-system.patch
Normal file
269
patches/server/0021-New-KeYi-config-system.patch
Normal file
@@ -0,0 +1,269 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalgic853 <yuu8583@proton.me>
|
||||
Date: Sat, 17 Dec 2022 22:12:03 +0800
|
||||
Subject: [PATCH] New KeYi config system
|
||||
|
||||
|
||||
diff --git a/build.gradle.kts b/build.gradle.kts
|
||||
index 0cc1db1138e2d34eaee62ec60c506d03497d3613..5491526aa4728a253cbb4000336bed131456f1ce 100644
|
||||
--- a/build.gradle.kts
|
||||
+++ b/build.gradle.kts
|
||||
@@ -60,6 +60,8 @@ dependencies {
|
||||
testImplementation("org.hamcrest:hamcrest-library:1.3")
|
||||
|
||||
implementation("io.netty:netty-all:4.1.77.Final"); // Paper - Bump netty
|
||||
+
|
||||
+ implementation("com.electronwill.night-config:toml:3.6.0") // KeYi - nightconfig
|
||||
}
|
||||
|
||||
val craftbukkitPackageVersion = "1_19_R2" // Paper
|
||||
diff --git a/src/main/java/cc/keyimc/keyi/KeyiCommand.java b/src/main/java/cc/keyimc/keyi/KeyiCommand.java
|
||||
index 5ec7a427abba42de2fdcb480586cc17e74bc5c52..09290d8a7d846be5645e27eecce261a1f4172e01 100644
|
||||
--- a/src/main/java/cc/keyimc/keyi/KeyiCommand.java
|
||||
+++ b/src/main/java/cc/keyimc/keyi/KeyiCommand.java
|
||||
@@ -1,5 +1,6 @@
|
||||
package cc.keyimc.keyi;
|
||||
|
||||
+import cc.keyimc.keyi.config.KGlobalConfig;
|
||||
import cc.keyimc.keyi.utils.TextUtil;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -45,7 +46,7 @@ public final class KeyiCommand extends Command {
|
||||
}
|
||||
|
||||
if (args[0].equalsIgnoreCase("reload")) {
|
||||
- KeyiConfig.reload();
|
||||
+ KGlobalConfig.getInstance().init();
|
||||
sender.sendMessage(TextUtil.deserialize("<#00f898>Reload completed!"));
|
||||
|
||||
var minecraftServer = MinecraftServer.getServer();
|
||||
diff --git a/src/main/java/cc/keyimc/keyi/KeyiConfig.java b/src/main/java/cc/keyimc/keyi/abandoned/KeyiConfig.java
|
||||
similarity index 99%
|
||||
rename from src/main/java/cc/keyimc/keyi/KeyiConfig.java
|
||||
rename to src/main/java/cc/keyimc/keyi/abandoned/KeyiConfig.java
|
||||
index 4f08f2e40f5bc3bc5a87bf3a34945afdec65f288..ffb825bf9eda4fffebb4ea8e64eefa966f7a4051 100644
|
||||
--- a/src/main/java/cc/keyimc/keyi/KeyiConfig.java
|
||||
+++ b/src/main/java/cc/keyimc/keyi/abandoned/KeyiConfig.java
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
-package cc.keyimc.keyi;
|
||||
+package cc.keyimc.keyi.abandoned;
|
||||
|
||||
import com.google.common.base.Throwables;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
diff --git a/src/main/java/cc/keyimc/keyi/abandoned/package-info.java b/src/main/java/cc/keyimc/keyi/abandoned/package-info.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..7b731c9307eb9f2a7ffa629f1716cda26b00d5f2
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/cc/keyimc/keyi/abandoned/package-info.java
|
||||
@@ -0,0 +1,6 @@
|
||||
+package cc.keyimc.keyi.abandoned;
|
||||
+
|
||||
+/**
|
||||
+ * Classes in these package are abandoned!
|
||||
+ * We won't use it anymore, so we moved them to here as a backup.
|
||||
+ */
|
||||
\ No newline at end of file
|
||||
diff --git a/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java b/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..72720a4893fc010c2076476a0f239cd625ac3175
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java
|
||||
@@ -0,0 +1,105 @@
|
||||
+package cc.keyimc.keyi.config;
|
||||
+
|
||||
+import com.electronwill.nightconfig.core.file.CommentedFileConfig;
|
||||
+
|
||||
+import java.io.File;
|
||||
+import java.io.IOException;
|
||||
+
|
||||
+public class KGlobalConfig {
|
||||
+ private static final KGlobalConfig INSTANCE;
|
||||
+
|
||||
+ private File file;
|
||||
+ private CommentedFileConfig fileConfig;
|
||||
+
|
||||
+ static {
|
||||
+ INSTANCE = new KGlobalConfig();
|
||||
+ }
|
||||
+
|
||||
+ public static KGlobalConfig getInstance() {
|
||||
+ return INSTANCE;
|
||||
+ }
|
||||
+
|
||||
+ private KGlobalConfig() {
|
||||
+ }
|
||||
+
|
||||
+ public void init() {
|
||||
+ File folder = new File("." + File.separator + "/keyi/");
|
||||
+
|
||||
+ if (!folder.exists()) {
|
||||
+ folder.mkdirs();
|
||||
+ }
|
||||
+
|
||||
+ file = new File(folder, "keyi_config.toml");
|
||||
+
|
||||
+ if (!file.exists()) {
|
||||
+ try {
|
||||
+ file.createNewFile();
|
||||
+ } catch (IOException e) {
|
||||
+ e.printStackTrace();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ fileConfig = CommentedFileConfig.ofConcurrent(file);
|
||||
+
|
||||
+ fileConfig.load();
|
||||
+ initValues();
|
||||
+ fileConfig.save();
|
||||
+ }
|
||||
+
|
||||
+ private <T> T get(String key, T defaultValue) {
|
||||
+ if (fileConfig.contains(key)) {
|
||||
+ return fileConfig.get(key);
|
||||
+ }
|
||||
+ fileConfig.set(key, defaultValue);
|
||||
+ return defaultValue;
|
||||
+ }
|
||||
+
|
||||
+ // Basic values
|
||||
+ public int version = 2;
|
||||
+ public boolean verbose = false;
|
||||
+
|
||||
+ // Performance settings
|
||||
+ public boolean spigotDropsMergingMechanism = true;
|
||||
+
|
||||
+ // Bug-fixes settings
|
||||
+ public boolean fixTripwireDuping = true;
|
||||
+
|
||||
+ // Misc settings
|
||||
+ public boolean rootUserWarning = true;
|
||||
+ public boolean offlineModeWarning = true;
|
||||
+ public boolean proxyUnsafeWarning = true;
|
||||
+
|
||||
+ private void initValues() {
|
||||
+ verbose = get("verbose", verbose);
|
||||
+ version = get("dont-touch-these-values-down-below.version", version);
|
||||
+
|
||||
+ // Performance settings
|
||||
+ spigotDropsMergingMechanism = get("performance.use-spigot-drops-merging-mechanism", spigotDropsMergingMechanism);
|
||||
+
|
||||
+ // Bug-fixes settings
|
||||
+ fixTripwireDuping = get("bug-fixes.fix-tripwire-duping", fixTripwireDuping);
|
||||
+
|
||||
+ // Misc settings
|
||||
+ rootUserWarning = get("misc.root-user-warning", rootUserWarning);
|
||||
+ offlineModeWarning = get("misc.offline-mode-warning", offlineModeWarning);
|
||||
+ proxyUnsafeWarning = get("misc.proxy-unsafe-warning", proxyUnsafeWarning);
|
||||
+
|
||||
+ initComments();
|
||||
+ }
|
||||
+
|
||||
+ private void initComments() {
|
||||
+ fileConfig.setComment("verbose", " Should debug output be enabled? You don't need to change this unless you really know what you need.");
|
||||
+ fileConfig.setComment("dont-touch-these-values-down-below.version", " DO NOT TOUCH THIS!!!");
|
||||
+
|
||||
+ // Performance settings
|
||||
+ fileConfig.setComment("performance.use-spigot-drops-merging-mechanism", " Should large drops stack should be merged into smaller drops stack?");
|
||||
+
|
||||
+ // Bug-fixes settings
|
||||
+ fileConfig.setComment("bug-fixes.fix-tripwire-duping", " Should Paper's tripwire duping fix be enabled? By disabling this you are able to duping tripwires!");
|
||||
+
|
||||
+ // Misc settings
|
||||
+ fileConfig.setComment("misc.root-user-warning", " Should display warnings while this server is running on a root/administrator user?");
|
||||
+ fileConfig.setComment("misc.offline-mode-warning", " Should display warnings while this server is running in offline/insecure mode?");
|
||||
+ fileConfig.setComment("misc.proxy-unsafe-warning", " Should display warnings while this server is running in proxy mode?");
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
index 8aeb2aa9ccba986163441cc428c2804de438288c..b217cb396b3f6e79c968a5614cce0459bb818445 100644
|
||||
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
|
||||
@@ -63,6 +63,7 @@ import org.bukkit.event.server.ServerCommandEvent;
|
||||
import org.bukkit.craftbukkit.util.Waitable;
|
||||
import org.bukkit.event.server.RemoteServerCommandEvent;
|
||||
// CraftBukkit end
|
||||
+import cc.keyimc.keyi.config.KGlobalConfig; // KeYi
|
||||
|
||||
public class DedicatedServer extends MinecraftServer implements ServerInterface {
|
||||
|
||||
@@ -180,7 +181,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
}
|
||||
|
||||
// Paper start - detect running as root
|
||||
- if (io.papermc.paper.util.ServerEnvironment.userIsRootOrAdmin() && cc.keyimc.keyi.KeyiConfig.enableRootUserWarning) { // KeYi start - let user decide if we should warn
|
||||
+ if (io.papermc.paper.util.ServerEnvironment.userIsRootOrAdmin() && KGlobalConfig.getInstance().rootUserWarning) { // KeYi start - let user decide if we should warn
|
||||
DedicatedServer.LOGGER.warn("****************************");
|
||||
DedicatedServer.LOGGER.warn("YOU ARE RUNNING THIS SERVER AS AN ADMINISTRATIVE OR ROOT USER. THIS IS NOT ADVISED.");
|
||||
DedicatedServer.LOGGER.warn("YOU ARE OPENING YOURSELF UP TO POTENTIAL RISKS WHEN DOING THIS.");
|
||||
@@ -236,9 +237,9 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
|
||||
// KeYi start - init config
|
||||
try {
|
||||
- cc.keyimc.keyi.KeyiConfig.init((java.io.File) options.valueOf("keyi-settings"));
|
||||
+ KGlobalConfig.getInstance().init();
|
||||
}catch (Exception e) {
|
||||
- LOGGER.error("Failed to load keyi.yml!", e);
|
||||
+ logger.log(Level.ERROR, "Failed to load KeYi config!", e);
|
||||
}
|
||||
// KeYi end
|
||||
|
||||
@@ -322,14 +323,14 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||
|
||||
if (!this.usesAuthentication()) {
|
||||
// KeYi start - let users choose if we should warn while running in offline mode
|
||||
- if (cc.keyimc.keyi.KeyiConfig.enableOfflineModeWarning) {
|
||||
+ if (KGlobalConfig.getInstance().offlineModeWarning) {
|
||||
DedicatedServer.LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!");
|
||||
DedicatedServer.LOGGER.warn("The server will make no attempt to authenticate usernames. Beware.");
|
||||
DedicatedServer.LOGGER.warn("To change this, set \"online-mode\" to \"true\" in the server.properties file."); // KeYi - move up
|
||||
}
|
||||
// KeYi end
|
||||
// Spigot start
|
||||
- if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() && cc.keyimc.keyi.KeyiConfig.enableProxyUnsafeWarning) { // Purpur // KeYi - Let users decide if we should warn while running in proxy mode
|
||||
+ if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() && KGlobalConfig.getInstance().proxyUnsafeWarning) { // Purpur // KeYi - Let users decide if we should warn while running in proxy mode
|
||||
DedicatedServer.LOGGER.warn("Whilst this makes it possible to use BungeeCord or Velocity, unless access to your server is properly restricted, it also opens up the ability for hackers to connect with any username they choose."); // Purpur
|
||||
DedicatedServer.LOGGER.warn("Please see http://www.spigotmc.org/wiki/firewall-guide/ for further information.");
|
||||
} else {
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
|
||||
index 2bcdd7232377784c548c228e4768697ef6918f2b..cf2b1232ab704e485695cb33ce8be05a3fcc678e 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
|
||||
@@ -35,6 +35,7 @@ import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||
// CraftBukkit end
|
||||
import org.bukkit.event.player.PlayerAttemptPickupItemEvent; // Paper
|
||||
+import cc.keyimc.keyi.config.KGlobalConfig; // KeYi
|
||||
|
||||
public class ItemEntity extends Entity {
|
||||
|
||||
@@ -294,7 +295,7 @@ public class ItemEntity extends Entity {
|
||||
ItemStack itemstack1 = other.getItem();
|
||||
|
||||
if (Objects.equals(this.getOwner(), other.getOwner()) && ItemEntity.areMergable(itemstack, itemstack1)) {
|
||||
- if (cc.keyimc.keyi.KeyiConfig.useSpigotItemMergingMechanism || itemstack1.getCount() < itemstack.getCount()) { // Spigot // KeYi
|
||||
+ if (KGlobalConfig.getInstance().spigotDropsMergingMechanism || itemstack1.getCount() < itemstack.getCount()) { // Spigot // KeYi
|
||||
ItemEntity.merge(this, itemstack, other, itemstack1);
|
||||
} else {
|
||||
ItemEntity.merge(other, itemstack1, this, itemstack);
|
||||
diff --git a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java
|
||||
index b37a5d643dc07eaa0808b972f43281f2e24d3394..02b3d90227f37190d327b5530d5aafd687d123b9 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java
|
||||
@@ -27,6 +27,7 @@ import net.minecraft.world.level.gameevent.GameEvent;
|
||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit
|
||||
+import cc.keyimc.keyi.config.KGlobalConfig;// KeYi
|
||||
|
||||
public class TripWireHookBlock extends Block {
|
||||
|
||||
@@ -147,7 +148,7 @@ public class TripWireHookBlock extends Block {
|
||||
boolean flag7 = (Boolean) iblockdata2.getValue(TripWireBlock.POWERED);
|
||||
|
||||
flag5 |= flag6 && flag7;
|
||||
- if (k != i || !tripWireBeingRemoved || !flag6 || cc.keyimc.keyi.KeyiConfig.fixTripwireDuping) // Paper - don't update the tripwire again if being removed and not disarmed // KeYi
|
||||
+ if (k != i || !tripWireBeingRemoved || !flag6 || KGlobalConfig.getInstance().fixTripwireDuping) // Paper - don't update the tripwire again if being removed and not disarmed // KeYi
|
||||
aiblockdata[k] = iblockdata2;
|
||||
if (k == i) {
|
||||
world.scheduleTick(pos, (Block) this, 10);
|
||||
@@ -0,0 +1,81 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalgic853 <yuu8583@proton.me>
|
||||
Date: Wed, 21 Dec 2022 17:05:01 +0800
|
||||
Subject: [PATCH] Low active POI finding for entities in vehicle
|
||||
|
||||
Airplane
|
||||
Copyright (C) 2020 Technove LLC
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
diff --git a/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java b/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java
|
||||
index 3a82d6bcd92c497ce21e5fd3cf569d5794aedb2e..9f6a8841390b6982efb3ebb21ced137c780e5d1d 100644
|
||||
--- a/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java
|
||||
+++ b/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java
|
||||
@@ -60,6 +60,7 @@ public class KGlobalConfig {
|
||||
|
||||
// Performance settings
|
||||
public boolean spigotDropsMergingMechanism = true;
|
||||
+ public boolean lowActivePoiFindingForEntitiesInVehicle = true;
|
||||
|
||||
// Bug-fixes settings
|
||||
public boolean fixTripwireDuping = true;
|
||||
@@ -75,6 +76,7 @@ public class KGlobalConfig {
|
||||
|
||||
// Performance settings
|
||||
spigotDropsMergingMechanism = get("performance.use-spigot-drops-merging-mechanism", spigotDropsMergingMechanism);
|
||||
+ lowActivePoiFindingForEntitiesInVehicle = get("performance.low-active-poi-finding-for-entities-in-vehicle", lowActivePoiFindingForEntitiesInVehicle);
|
||||
|
||||
// Bug-fixes settings
|
||||
fixTripwireDuping = get("bug-fixes.fix-tripwire-duping", fixTripwireDuping);
|
||||
@@ -93,6 +95,7 @@ public class KGlobalConfig {
|
||||
|
||||
// Performance settings
|
||||
fileConfig.setComment("performance.use-spigot-drops-merging-mechanism", " Should large drops stack should be merged into smaller drops stack?");
|
||||
+ fileConfig.setComment("performance.low-active-poi-finding-for-entities-in-vehicle", " Should the server wait more 10s to do POI finding of entities stuck in a vehicle?");
|
||||
|
||||
// Bug-fixes settings
|
||||
fileConfig.setComment("bug-fixes.fix-tripwire-duping", " Should Paper's tripwire duping fix be enabled? By disabling this you are able to duping tripwires!");
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java b/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java
|
||||
index fe502445a77afe7e3807afae48d7bf03f370e290..1c555f6c10740506242b12775304c6a310cc1f25 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java
|
||||
@@ -7,7 +7,6 @@ import java.util.HashSet;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Predicate;
|
||||
-import java.util.stream.Collectors;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.GlobalPos;
|
||||
@@ -22,6 +21,7 @@ import net.minecraft.world.entity.ai.village.poi.PoiManager;
|
||||
import net.minecraft.world.entity.ai.village.poi.PoiType;
|
||||
import net.minecraft.world.level.pathfinder.Path;
|
||||
import org.apache.commons.lang3.mutable.MutableLong;
|
||||
+import cc.keyimc.keyi.config.KGlobalConfig; // KeYi
|
||||
|
||||
public class AcquirePoi {
|
||||
public static final int SCAN_RANGE = 48;
|
||||
@@ -47,6 +47,11 @@ public class AcquirePoi {
|
||||
return false;
|
||||
} else {
|
||||
mutableLong.setValue(time + 20L + (long)world.getRandom().nextInt(20));
|
||||
+ // KeYi start - Airplane: wait an additional 10s to check again if they're stuck
|
||||
+ if (entity.getNavigation().isStuck() && KGlobalConfig.getInstance().lowActivePoiFindingForEntitiesInVehicle) {
|
||||
+ mutableLong.add(200);
|
||||
+ }
|
||||
+ // KeYi end
|
||||
if (entity.getNavigation().isStuck()) mutableLong.add(200); // Pufferfish - wait an additional 10s to check again if they're stuck
|
||||
PoiManager poiManager = world.getPoiManager();
|
||||
long2ObjectMap.long2ObjectEntrySet().removeIf((entry) -> {
|
||||
57
patches/server/0023-Fast-item-merging-raytracing.patch
Normal file
57
patches/server/0023-Fast-item-merging-raytracing.patch
Normal file
@@ -0,0 +1,57 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalgic853 <yuu8583@proton.me>
|
||||
Date: Wed, 21 Dec 2022 17:21:04 +0800
|
||||
Subject: [PATCH] Fast item merging raytracing
|
||||
|
||||
|
||||
diff --git a/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java b/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java
|
||||
index 9f6a8841390b6982efb3ebb21ced137c780e5d1d..0e3db3ab79b3712704350aefbbf07f966a3fb083 100644
|
||||
--- a/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java
|
||||
+++ b/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java
|
||||
@@ -61,6 +61,7 @@ public class KGlobalConfig {
|
||||
// Performance settings
|
||||
public boolean spigotDropsMergingMechanism = true;
|
||||
public boolean lowActivePoiFindingForEntitiesInVehicle = true;
|
||||
+ public boolean useFastItemMergingRaytracing = true;
|
||||
|
||||
// Bug-fixes settings
|
||||
public boolean fixTripwireDuping = true;
|
||||
@@ -77,6 +78,7 @@ public class KGlobalConfig {
|
||||
// Performance settings
|
||||
spigotDropsMergingMechanism = get("performance.use-spigot-drops-merging-mechanism", spigotDropsMergingMechanism);
|
||||
lowActivePoiFindingForEntitiesInVehicle = get("performance.low-active-poi-finding-for-entities-in-vehicle", lowActivePoiFindingForEntitiesInVehicle);
|
||||
+ useFastItemMergingRaytracing = get("performance.use-fast-item-merge-raytracing", useFastItemMergingRaytracing);
|
||||
|
||||
// Bug-fixes settings
|
||||
fixTripwireDuping = get("bug-fixes.fix-tripwire-duping", fixTripwireDuping);
|
||||
@@ -96,6 +98,7 @@ public class KGlobalConfig {
|
||||
// Performance settings
|
||||
fileConfig.setComment("performance.use-spigot-drops-merging-mechanism", " Should large drops stack should be merged into smaller drops stack?");
|
||||
fileConfig.setComment("performance.low-active-poi-finding-for-entities-in-vehicle", " Should the server wait more 10s to do POI finding of entities stuck in a vehicle?");
|
||||
+ fileConfig.setComment("performance.use-fast-item-merge-raytracing", " Skip some allocations to make some operations faster.");
|
||||
|
||||
// Bug-fixes settings
|
||||
fileConfig.setComment("bug-fixes.fix-tripwire-duping", " Should Paper's tripwire duping fix be enabled? By disabling this you are able to duping tripwires!");
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
|
||||
index cf2b1232ab704e485695cb33ce8be05a3fcc678e..fbde463c789d728150f7963ab1598a811c2522c1 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
|
||||
@@ -263,12 +263,12 @@ public class ItemEntity extends Entity {
|
||||
// Paper Start - Fix items merging through walls
|
||||
if (this.level.paperConfig().fixes.fixItemsMergingThroughWalls) {
|
||||
// Pufferfish start - skip the allocations
|
||||
- /*
|
||||
- net.minecraft.world.level.ClipContext rayTrace = new net.minecraft.world.level.ClipContext(this.position(), entityitem.position(),
|
||||
- net.minecraft.world.level.ClipContext.Block.COLLIDER, net.minecraft.world.level.ClipContext.Fluid.NONE, this);
|
||||
- net.minecraft.world.phys.BlockHitResult rayTraceResult = level.clip(rayTrace);
|
||||
- if (rayTraceResult.getType() == net.minecraft.world.phys.HitResult.Type.BLOCK) continue;
|
||||
- */
|
||||
+ if (!KGlobalConfig.getInstance().useFastItemMergingRaytracing) {
|
||||
+ net.minecraft.world.level.ClipContext rayTrace = new net.minecraft.world.level.ClipContext(this.position(), entityitem.position(),
|
||||
+ net.minecraft.world.level.ClipContext.Block.COLLIDER, net.minecraft.world.level.ClipContext.Fluid.NONE, this);
|
||||
+ net.minecraft.world.phys.BlockHitResult rayTraceResult = level.clip(rayTrace);
|
||||
+ if (rayTraceResult.getType() == net.minecraft.world.phys.HitResult.Type.BLOCK) continue;
|
||||
+ }
|
||||
if (level.rayTraceDirect(this.position(), entityitem.position(), net.minecraft.world.phys.shapes.CollisionContext.of(this)) ==
|
||||
net.minecraft.world.phys.HitResult.Type.BLOCK) continue;
|
||||
// Pufferfish end
|
||||
@@ -1,17 +1,17 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: astei <andrew@steinborn.me>
|
||||
Date: Sat, 1 Oct 2022 09:56:47 +0200
|
||||
Subject: [PATCH] PaperPR Optimize VarInts
|
||||
Subject: [PATCH] Optimize VarInts
|
||||
|
||||
Original license: GPLv3
|
||||
Original project: https://github.com/PaperMC/Velocity
|
||||
Paper pull request: https://github.com/PaperMC/Paper/pull/8418
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java
|
||||
index a7b6e22daf64abca311bc5771192a3c09368537f..c264aa4c8db4d68c75364206893e6aff7f2e483e 100644
|
||||
index 314318a21b6fa9e827945d8996c6ed0f9679a4eb..2e1cf850f1b26f25ea09178941f4c789d65d851f 100644
|
||||
--- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java
|
||||
+++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java
|
||||
@@ -89,15 +89,18 @@ public class FriendlyByteBuf extends ByteBuf {
|
||||
@@ -95,15 +95,18 @@ public class FriendlyByteBuf extends ByteBuf {
|
||||
this.source = parent;
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ index a7b6e22daf64abca311bc5771192a3c09368537f..c264aa4c8db4d68c75364206893e6aff
|
||||
|
||||
public static int getVarLongSize(long value) {
|
||||
for (int j = 1; j < 10; ++j) {
|
||||
@@ -505,7 +508,22 @@ public class FriendlyByteBuf extends ByteBuf {
|
||||
@@ -567,7 +570,22 @@ public class FriendlyByteBuf extends ByteBuf {
|
||||
return new UUID(this.readLong(), this.readLong());
|
||||
}
|
||||
|
||||
129
patches/server/0025-Make-things-more-configurable.patch
Normal file
129
patches/server/0025-Make-things-more-configurable.patch
Normal file
@@ -0,0 +1,129 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalgic853 <yuu8583@proton.me>
|
||||
Date: Sun, 15 Jan 2023 03:00:29 +0800
|
||||
Subject: [PATCH] Make things more configurable
|
||||
|
||||
|
||||
diff --git a/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java b/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java
|
||||
index 5e01dfe18789ce3815ce1c36233ef89265584d44..ed2d911f5393abb6c398c909c4667867034aaf87 100644
|
||||
--- a/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java
|
||||
+++ b/src/main/java/cc/keyimc/keyi/config/KGlobalConfig.java
|
||||
@@ -62,6 +62,9 @@ public class KGlobalConfig {
|
||||
public boolean spigotDropsMergingMechanism = true;
|
||||
public boolean lowActivePoiFindingForEntitiesInVehicle = true;
|
||||
public boolean useFastItemMergingRaytracing = true;
|
||||
+ public boolean useOptimizedVarInts = true;
|
||||
+ public boolean saveFirework = false;
|
||||
+ public boolean fastSpeedCheck = true;
|
||||
|
||||
// Bug-fixes settings
|
||||
public boolean fixTripwireDuping = true;
|
||||
@@ -79,6 +82,9 @@ public class KGlobalConfig {
|
||||
spigotDropsMergingMechanism = get("performance.use-spigot-drops-merging-mechanism", spigotDropsMergingMechanism);
|
||||
lowActivePoiFindingForEntitiesInVehicle = get("performance.low-active-poi-finding-for-entities-in-vehicle", lowActivePoiFindingForEntitiesInVehicle);
|
||||
useFastItemMergingRaytracing = get("performance.use-fast-item-merge-raytracing", useFastItemMergingRaytracing);
|
||||
+ useOptimizedVarInts = get("performance.use-optimized-var-ints", useOptimizedVarInts);
|
||||
+ saveFirework = get("performance.save-firework", saveFirework);
|
||||
+ fastSpeedCheck = get("performance.fast-speed-check", fastSpeedCheck);
|
||||
|
||||
// Bug-fixes settings
|
||||
fixTripwireDuping = get("bug-fixes.fix-tripwire-duping", fixTripwireDuping);
|
||||
@@ -99,6 +105,9 @@ public class KGlobalConfig {
|
||||
fileConfig.setComment("performance.use-spigot-drops-merging-mechanism", " Should large drops stack should be merged into smaller drops stack?");
|
||||
fileConfig.setComment("performance.low-active-poi-finding-for-entities-in-vehicle", " Should the server wait more 10s to do POI finding of entities stuck in a vehicle?");
|
||||
fileConfig.setComment("performance.use-fast-item-merge-raytracing", " Skip some allocations to make some operations faster.");
|
||||
+ fileConfig.setComment("performance.use-optimized-var-ints", " Use an optimized var ints method from Paper's unmerged PR.");
|
||||
+ fileConfig.setComment("performance.save-firework", " Should fireworks to be saved?");
|
||||
+ fileConfig.setComment("performance.fast-speed-check", " Use a faster speed check method.");
|
||||
|
||||
// Bug-fixes settings
|
||||
fileConfig.setComment("bug-fixes.fix-tripwire-duping", " Should Paper's tripwire duping fix be enabled? By disabling this you are able to duping tripwires!");
|
||||
diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java
|
||||
index 2e1cf850f1b26f25ea09178941f4c789d65d851f..6a303f47e33c128d6de299f4ea2d49049baeb08e 100644
|
||||
--- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java
|
||||
+++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.minecraft.network;
|
||||
|
||||
+import cc.keyimc.keyi.config.KGlobalConfig;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
@@ -98,13 +99,25 @@ public class FriendlyByteBuf extends ByteBuf {
|
||||
// Paper start - Optimize VarInts
|
||||
private static final int[] VARINT_EXACT_BYTE_LENGTHS = new int[33];
|
||||
static {
|
||||
- for (int i = 0; i <= 32; ++i) {
|
||||
- VARINT_EXACT_BYTE_LENGTHS[i] = (int) Math.ceil((31d - (i - 1)) / 7d);
|
||||
+ if (KGlobalConfig.getInstance().useOptimizedVarInts) {
|
||||
+ for (int i = 0; i <= 32; ++i) {
|
||||
+ VARINT_EXACT_BYTE_LENGTHS[i] = (int) Math.ceil((31d - (i - 1)) / 7d);
|
||||
+ }
|
||||
+ VARINT_EXACT_BYTE_LENGTHS[32] = 1; // Special case for the number 0.
|
||||
}
|
||||
- VARINT_EXACT_BYTE_LENGTHS[32] = 1; // Special case for the number 0.
|
||||
}
|
||||
public static int getVarIntSize(int value) {
|
||||
- return VARINT_EXACT_BYTE_LENGTHS[Integer.numberOfLeadingZeros(value)]; // Paper - Optimize VarInts
|
||||
+ if (KGlobalConfig.getInstance().useOptimizedVarInts) {
|
||||
+ return VARINT_EXACT_BYTE_LENGTHS[Integer.numberOfLeadingZeros(value)]; // Paper - Optimize VarInts
|
||||
+ } else {
|
||||
+ for (int j = 1; j < 5; ++j) {
|
||||
+ if ((value & -1 << j * 7) == 0) {
|
||||
+ return j;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 5;
|
||||
+ }
|
||||
}
|
||||
// Paper end - Optimize VarInts
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
index 85542015ef7376baf0cfaa090265c1286459788b..af5addc0b647ebb0033048fdc48866071a13f829 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.minecraft.world.entity;
|
||||
|
||||
+import cc.keyimc.keyi.config.KGlobalConfig;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableList.Builder;
|
||||
import com.google.common.collect.Iterables;
|
||||
@@ -1206,8 +1207,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
||||
this.tryCheckInsideBlocks();
|
||||
// KeYi start - Fast speed check
|
||||
float f2;
|
||||
- if (this.getDeltaMovement().x == 0 && this.getDeltaMovement().z == 0) {
|
||||
- f2 = 1;
|
||||
+ if (KGlobalConfig.getInstance().fastSpeedCheck) {
|
||||
+ if (this.getDeltaMovement().x == 0 && this.getDeltaMovement().z == 0) {
|
||||
+ f2 = 1;
|
||||
+ } else {
|
||||
+ f2 = this.getBlockSpeedFactor();
|
||||
+ }
|
||||
} else {
|
||||
f2 = this.getBlockSpeedFactor();
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/projectile/FireworkRocketEntity.java b/src/main/java/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
||||
index 0b664dfef68b1e3905c9d8451602abf9cd9eafe6..0cd2b587ee4c2c565d660a5e04c77ecec9d597b5 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
||||
@@ -4,6 +4,8 @@ import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.OptionalInt;
|
||||
import javax.annotation.Nullable;
|
||||
+
|
||||
+import cc.keyimc.keyi.config.KGlobalConfig;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
@@ -362,7 +364,7 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
|
||||
// KeYi start
|
||||
@Override
|
||||
public boolean shouldBeSaved() {
|
||||
- return false;
|
||||
+ return KGlobalConfig.getInstance().saveFirework;
|
||||
}
|
||||
// KeYi end
|
||||
}
|
||||
Reference in New Issue
Block a user