mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Updated Upstream (Paper & Pufferfish)
Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@307778f Collision API (#6736) PaperMC/Paper@fcb7b73 [ci skip] remove stale PaperMC/Paper@1f0d707 Fix issues with CreeperIgniteEvent (#7507) PaperMC/Paper@fd557b7 Undeprecate Bed's tile entity interface (#7330) Pufferfish Changes: pufferfish-gg/Pufferfish@002f541 Updated Upstream (Paper) pufferfish-gg/Pufferfish@9c5fcfd Add option to disable out-of-order chat pufferfish-gg/Pufferfish@b21931d Fix memory leak in async pathfinder (#42)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
group = org.purpurmc.purpur
|
||||
version = 1.19.1-R0.1-SNAPSHOT
|
||||
|
||||
paperCommit = 532dc51d5f4deb036474e8d5921275f937e4c4ac
|
||||
paperCommit = fd557b7d51bba4d5e830d6047005f7e4335f5ada
|
||||
|
||||
org.gradle.caching = true
|
||||
org.gradle.parallel = true
|
||||
|
||||
@@ -3,21 +3,6 @@ From: Kevin Raneri <kevin.raneri@gmail.com>
|
||||
Date: Tue, 9 Nov 2021 14:01:56 -0500
|
||||
Subject: [PATCH] Pufferfish API Changes
|
||||
|
||||
Pufferfish
|
||||
Copyright (C) 2022 Pufferfish Studios 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/build.gradle.kts b/build.gradle.kts
|
||||
index e950bce5047552bdd3f5664eb24ce290b0a06225..10716b2c866631badb99b1fb79b66c62b117b038 100644
|
||||
@@ -426,7 +411,7 @@ index 8e6ad6ffb6918742d47b58d6cb1ad646d5e3df5f..331adbaf782c00d801a36c0c9551451a
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
||||
index 1c9d0a81d581d0e6a8b2551a2cb9ed5e18bb2991..e42a2d631fd7eaa455132e0cf64c9be7707dadb9 100644
|
||||
index 9db611841b73fed8dc8a71f4d7fdef95af3cf89d..49a4611ed4891cce10fd6e01b4062740ad18ee6f 100644
|
||||
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
||||
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
|
||||
@@ -623,7 +623,9 @@ public final class SimplePluginManager implements PluginManager {
|
||||
|
||||
@@ -22,13 +22,13 @@ index 8fd399f791b45eb7fc62693ca954eea0c68e2881..22705359d5b3b1af522ff5575c07ca5e
|
||||
* @deprecated removed in 1.16
|
||||
*/
|
||||
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
|
||||
index 03b35d3ba8ba00c0fa0272450f19355244a014ea..79990a193443ed4c619a25ae1b4c18d46e8dcc83 100644
|
||||
index 4d4a0d15876cc48c9c0456b9f11a5dda37fd56ce..dd7df647f98fe72694fb7615e5cd1192724b7812 100644
|
||||
--- a/src/main/java/org/bukkit/entity/Entity.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Entity.java
|
||||
@@ -897,4 +897,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
|
||||
@@ -919,4 +919,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
|
||||
*/
|
||||
boolean isInPowderedSnow();
|
||||
// Paper end
|
||||
boolean wouldCollideUsing(@NotNull BoundingBox boundingBox);
|
||||
// Paper End - Collision API
|
||||
+
|
||||
+ // Purpur start
|
||||
+ /**
|
||||
|
||||
@@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight
|
||||
Co-authored by: Encode42 <me@encode42.dev>
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
|
||||
index 79990a193443ed4c619a25ae1b4c18d46e8dcc83..ffd3d7f4c0c86806bcf70bd90edf3041834d401c 100644
|
||||
index dd7df647f98fe72694fb7615e5cd1192724b7812..1f116f33e6dbce8d8d67d799beeedecf792cd728 100644
|
||||
--- a/src/main/java/org/bukkit/entity/Entity.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Entity.java
|
||||
@@ -927,5 +927,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
|
||||
@@ -949,5 +949,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
|
||||
* @return True if ridable in water
|
||||
*/
|
||||
boolean isRidableInWater();
|
||||
|
||||
@@ -3,21 +3,6 @@ From: Kevin Raneri <kevin.raneri@gmail.com>
|
||||
Date: Wed, 3 Feb 2021 23:02:38 -0600
|
||||
Subject: [PATCH] Pufferfish Server Changes
|
||||
|
||||
Pufferfish
|
||||
Copyright (C) 2022 Pufferfish Studios 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/build.gradle.kts b/build.gradle.kts
|
||||
index 2374cc9bab5039d0a0dc11d4b2ec573ab75778a7..74c91f79576e85618fefb79be8d313ba871701c7 100644
|
||||
@@ -612,10 +597,10 @@ index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f7473
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..09827eaa9f6adf49385a33aa60b3a6bf4005a982
|
||||
index 0000000000000000000000000000000000000000..38cb29c646ff496ffaa6553f98a565b71155c464
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
|
||||
@@ -0,0 +1,335 @@
|
||||
@@ -0,0 +1,337 @@
|
||||
+package gg.pufferfish.pufferfish;
|
||||
+
|
||||
+import gg.pufferfish.pufferfish.simd.SIMDDetection;
|
||||
@@ -945,8 +930,10 @@ index 0000000000000000000000000000000000000000..09827eaa9f6adf49385a33aa60b3a6bf
|
||||
+
|
||||
+
|
||||
+ public static boolean disableMethodProfiler;
|
||||
+ public static boolean disableOutOfOrderChat;
|
||||
+ private static void miscSettings() {
|
||||
+ disableMethodProfiler = getBoolean("misc.disable-method-profiler", true);
|
||||
+ disableMethodProfiler = getBoolean("misc.disable-method-profiler", true);
|
||||
+ disableOutOfOrderChat = getBoolean("misc.disable-out-of-order-chat", false);
|
||||
+ setComment("misc", "Settings for things that don't belong elsewhere");
|
||||
+ }
|
||||
+
|
||||
@@ -1811,10 +1798,10 @@ index 0000000000000000000000000000000000000000..db15d3fbe2b65fc8035573f5fdbea382
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/path/AsyncPath.java b/src/main/java/gg/pufferfish/pufferfish/path/AsyncPath.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..401645f9f2cccaec4b37c6a91cf930a1fc520301
|
||||
index 0000000000000000000000000000000000000000..dcfe6fa538c54417b90a138b26c451f63b408ff6
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/path/AsyncPath.java
|
||||
@@ -0,0 +1,280 @@
|
||||
@@ -0,0 +1,282 @@
|
||||
+package gg.pufferfish.pufferfish.path;
|
||||
+
|
||||
+import net.minecraft.core.BlockPos;
|
||||
@@ -1825,9 +1812,9 @@ index 0000000000000000000000000000000000000000..401645f9f2cccaec4b37c6a91cf930a1
|
||||
+import org.jetbrains.annotations.NotNull;
|
||||
+import org.jetbrains.annotations.Nullable;
|
||||
+
|
||||
+import java.util.ArrayList;
|
||||
+import java.util.List;
|
||||
+import java.util.Set;
|
||||
+import java.util.concurrent.CompletableFuture;
|
||||
+import java.util.function.Supplier;
|
||||
+
|
||||
+/**
|
||||
@@ -1841,9 +1828,9 @@ index 0000000000000000000000000000000000000000..401645f9f2cccaec4b37c6a91cf930a1
|
||||
+ private volatile boolean processed = false;
|
||||
+
|
||||
+ /**
|
||||
+ * a future representing the processing state of this path
|
||||
+ * runnables waiting for path to be processed
|
||||
+ */
|
||||
+ private final @NotNull CompletableFuture<Path> processingFuture;
|
||||
+ private final @NotNull List<Runnable> postProcessing = new ArrayList<>();
|
||||
+
|
||||
+ /**
|
||||
+ * a list of positions that this path could path towards
|
||||
@@ -1890,7 +1877,7 @@ index 0000000000000000000000000000000000000000..401645f9f2cccaec4b37c6a91cf930a1
|
||||
+ this.positions = positions;
|
||||
+ this.pathSupplier = pathSupplier;
|
||||
+
|
||||
+ this.processingFuture = AsyncPathProcessor.queue(this).thenApply((unused) -> this);
|
||||
+ AsyncPathProcessor.queue(this);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
@@ -1899,11 +1886,11 @@ index 0000000000000000000000000000000000000000..401645f9f2cccaec4b37c6a91cf930a1
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * returns the future representing the processing state of this path
|
||||
+ * @return a future
|
||||
+ * add a post-processing action
|
||||
+ */
|
||||
+ public @NotNull CompletableFuture<Path> getProcessingFuture() {
|
||||
+ return this.processingFuture;
|
||||
+ public synchronized void postProcessing(@NotNull Runnable runnable) {
|
||||
+ if (processed) runnable.run();
|
||||
+ else postProcessing.add(runnable);
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
@@ -1936,6 +1923,8 @@ index 0000000000000000000000000000000000000000..401645f9f2cccaec4b37c6a91cf930a1
|
||||
+ this.canReach = bestPath.canReach();
|
||||
+
|
||||
+ this.processed = true;
|
||||
+
|
||||
+ this.postProcessing.forEach(Runnable::run);
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
@@ -2097,7 +2086,7 @@ index 0000000000000000000000000000000000000000..401645f9f2cccaec4b37c6a91cf930a1
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/path/AsyncPathProcessor.java b/src/main/java/gg/pufferfish/pufferfish/path/AsyncPathProcessor.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..08e949d8493284667cd8f1adb710b4e9e9611e28
|
||||
index 0000000000000000000000000000000000000000..6c8035ef7effd0ccdc887b3792ba09ef6b2a74fa
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/path/AsyncPathProcessor.java
|
||||
@@ -0,0 +1,44 @@
|
||||
@@ -2139,7 +2128,7 @@ index 0000000000000000000000000000000000000000..08e949d8493284667cd8f1adb710b4e9
|
||||
+ */
|
||||
+ public static void awaitProcessing(@Nullable Path path, Consumer<@Nullable Path> afterProcessing) {
|
||||
+ if (path != null && !path.isProcessed() && path instanceof AsyncPath asyncPath) {
|
||||
+ asyncPath.getProcessingFuture().thenAcceptAsync(afterProcessing, mainThreadExecutor);
|
||||
+ asyncPath.postProcessing(() -> mainThreadExecutor.execute(() -> afterProcessing.accept(path)));
|
||||
+ } else {
|
||||
+ afterProcessing.accept(path);
|
||||
+ }
|
||||
@@ -2147,10 +2136,10 @@ index 0000000000000000000000000000000000000000..08e949d8493284667cd8f1adb710b4e9
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/path/NodeEvaluatorCache.java b/src/main/java/gg/pufferfish/pufferfish/path/NodeEvaluatorCache.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..9f81dc6e8d198f1be957c1a05c72eb5ba38832ce
|
||||
index 0000000000000000000000000000000000000000..a18b967d7a7325885c94a1093cc5800012998f1a
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/path/NodeEvaluatorCache.java
|
||||
@@ -0,0 +1,39 @@
|
||||
@@ -0,0 +1,43 @@
|
||||
+package gg.pufferfish.pufferfish.path;
|
||||
+
|
||||
+import net.minecraft.world.level.pathfinder.NodeEvaluator;
|
||||
@@ -2189,6 +2178,10 @@ index 0000000000000000000000000000000000000000..9f81dc6e8d198f1be957c1a05c72eb5b
|
||||
+ getDequeForGenerator(generator).offer(nodeEvaluator);
|
||||
+ }
|
||||
+
|
||||
+ public static void removeNodeEvaluator(@NotNull NodeEvaluator nodeEvaluator) {
|
||||
+ nodeEvaluatorToGenerator.remove(nodeEvaluator);
|
||||
+ }
|
||||
+
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/path/NodeEvaluatorGenerator.java b/src/main/java/gg/pufferfish/pufferfish/path/NodeEvaluatorGenerator.java
|
||||
new file mode 100644
|
||||
@@ -2395,10 +2388,10 @@ index 0000000000000000000000000000000000000000..1b29210ad0bbb4ada150f23357f0c80d
|
||||
+}
|
||||
diff --git a/src/main/java/gg/pufferfish/pufferfish/tracker/MultithreadedTracker.java b/src/main/java/gg/pufferfish/pufferfish/tracker/MultithreadedTracker.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..2dfe34a3fd0e460865393d9d8a1bdab71aa47b6b
|
||||
index 0000000000000000000000000000000000000000..ac541ddf1594ae865de02fd40940e39285043b1f
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/gg/pufferfish/pufferfish/tracker/MultithreadedTracker.java
|
||||
@@ -0,0 +1,141 @@
|
||||
@@ -0,0 +1,127 @@
|
||||
+package gg.pufferfish.pufferfish.tracker;
|
||||
+
|
||||
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
@@ -2426,7 +2419,6 @@ index 0000000000000000000000000000000000000000..2dfe34a3fd0e460865393d9d8a1bdab7
|
||||
+ private final AtomicInteger taskIndex = new AtomicInteger();
|
||||
+
|
||||
+ private final ConcurrentLinkedQueue<Runnable> mainThreadTasks;
|
||||
+ private final ConcurrentLinkedQueue<Runnable> postTrackingTasks = new ConcurrentLinkedQueue<>();
|
||||
+ private final AtomicInteger finishedTasks = new AtomicInteger();
|
||||
+
|
||||
+ public MultithreadedTracker(IteratorSafeOrderedReferenceSet<LevelChunk> entityTickingChunks, ConcurrentLinkedQueue<Runnable> mainThreadTasks) {
|
||||
@@ -2459,7 +2451,6 @@ index 0000000000000000000000000000000000000000..2dfe34a3fd0e460865393d9d8a1bdab7
|
||||
+ }
|
||||
+
|
||||
+ this.runMainThreadTasks(); // finish any remaining tasks
|
||||
+ this.runPostTrackingTasks(); // run all post-tracking tasks
|
||||
+ } finally {
|
||||
+ this.entityTickingChunks.finishRawIterator();
|
||||
+ }
|
||||
@@ -2476,17 +2467,6 @@ index 0000000000000000000000000000000000000000..2dfe34a3fd0e460865393d9d8a1bdab7
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private void runPostTrackingTasks() {
|
||||
+ try {
|
||||
+ Runnable task;
|
||||
+ while ((task = this.postTrackingTasks.poll()) != null) {
|
||||
+ task.run();
|
||||
+ }
|
||||
+ } catch (Throwable throwable) {
|
||||
+ MinecraftServer.LOGGER.warn("Post-tracking tasks failed while ticking track queue", throwable);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private void run() {
|
||||
+ try {
|
||||
+ while (handleTasks(10));
|
||||
@@ -2532,8 +2512,7 @@ index 0000000000000000000000000000000000000000..2dfe34a3fd0e460865393d9d8a1bdab7
|
||||
+ if (entityTracker != null) {
|
||||
+ entityTracker.updatePlayers(entityTracker.entity.getPlayersInTrackRange());
|
||||
+
|
||||
+ // run this on the main thread. This needs to be run after all updatePlayers methods are called.
|
||||
+ this.postTrackingTasks.offer(entityTracker.serverEntity::sendChanges);
|
||||
+ this.mainThreadTasks.offer(entityTracker.serverEntity::sendChanges);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
@@ -3080,7 +3059,7 @@ index 59acbf6249f8f5285504c0ddea448a3433d1d68d..378cc1f9e19eb9b18037ab8af92f6589
|
||||
|
||||
private void getFullChunk(long pos, Consumer<LevelChunk> chunkConsumer) {
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
||||
index 3b144c820531122eb37d41be06c182b5f5dc0724..871bce7f5acc1b9a058496f41d962ec2e724f620 100644
|
||||
index 3b144c820531122eb37d41be06c182b5f5dc0724..88152988425b7b02ec5ce229ba4c24b40e030329 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
||||
@@ -165,6 +165,7 @@ public class ServerEntity {
|
||||
@@ -3120,6 +3099,36 @@ index 3b144c820531122eb37d41be06c182b5f5dc0724..871bce7f5acc1b9a058496f41d962ec2
|
||||
this.entity.startSeenByPlayer(player);
|
||||
}
|
||||
|
||||
@@ -360,19 +366,26 @@ public class ServerEntity {
|
||||
SynchedEntityData datawatcher = this.entity.getEntityData();
|
||||
|
||||
if (datawatcher.isDirty()) {
|
||||
- this.broadcastAndSend(new ClientboundSetEntityDataPacket(this.entity.getId(), datawatcher, false));
|
||||
+ ((ServerLevel) this.entity.level).chunkSource.chunkMap.runOnTrackerMainThread(() -> // Pufferfish
|
||||
+ this.broadcastAndSend(new ClientboundSetEntityDataPacket(this.entity.getId(), datawatcher, false))
|
||||
+ ); // Pufferfish
|
||||
}
|
||||
|
||||
if (this.entity instanceof LivingEntity) {
|
||||
Set<AttributeInstance> set = ((LivingEntity) this.entity).getAttributes().getDirtyAttributes();
|
||||
|
||||
if (!set.isEmpty()) {
|
||||
+ // Pufferfish start
|
||||
+ List<AttributeInstance> attributesCopy = Lists.newArrayList(set);
|
||||
+ ((ServerLevel) this.entity.level).chunkSource.chunkMap.runOnTrackerMainThread(() -> {
|
||||
// CraftBukkit start - Send scaled max health
|
||||
if (this.entity instanceof ServerPlayer) {
|
||||
- ((ServerPlayer) this.entity).getBukkitEntity().injectScaledMaxHealth(set, false);
|
||||
+ ((ServerPlayer) this.entity).getBukkitEntity().injectScaledMaxHealth(attributesCopy, false); // Pufferfish
|
||||
}
|
||||
// CraftBukkit end
|
||||
- this.broadcastAndSend(new ClientboundUpdateAttributesPacket(this.entity.getId(), set));
|
||||
+ this.broadcastAndSend(new ClientboundUpdateAttributesPacket(this.entity.getId(), attributesCopy)); // Pufferfish
|
||||
+ });
|
||||
+ // Pufferfish end
|
||||
}
|
||||
|
||||
set.clear();
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
index 083349794d5ceb50322c5a645dd33fbfcc1c8155..f58873ef4362bfcc618ead099be94ba2dd4d86ed 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||
@@ -3178,7 +3187,7 @@ index 083349794d5ceb50322c5a645dd33fbfcc1c8155..f58873ef4362bfcc618ead099be94ba2
|
||||
this.getRandomBlockPosition(j, 0, k, 15, blockposition);
|
||||
int normalY = chunk.getHeight(Heightmap.Types.MOTION_BLOCKING, blockposition.getX() & 15, blockposition.getZ() & 15) + 1;
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index ff7df8026f85b7ad51458a0b720a8baf71cd9bd1..32ef30e130c7f6e252ebf5b866fb9e89d7c0d7db 100644
|
||||
index ff7df8026f85b7ad51458a0b720a8baf71cd9bd1..8da76daecef969f452960df5577c7bc408ac7acb 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -1215,6 +1215,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -3189,6 +3198,14 @@ index ff7df8026f85b7ad51458a0b720a8baf71cd9bd1..32ef30e130c7f6e252ebf5b866fb9e89
|
||||
// Paper start
|
||||
if (!this.cserver.isPrimaryThread()) {
|
||||
List<String> pageList = packet.getPages();
|
||||
@@ -2349,6 +2350,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
}
|
||||
|
||||
private boolean updateChatOrder(Instant timestamp) {
|
||||
+ if (gg.pufferfish.pufferfish.PufferfishConfig.disableOutOfOrderChat) return true;
|
||||
Instant instant1;
|
||||
|
||||
do {
|
||||
diff --git a/src/main/java/net/minecraft/world/CompoundContainer.java b/src/main/java/net/minecraft/world/CompoundContainer.java
|
||||
index 241fec02e6869c638d3a160819b32173a081467b..6a8f9e8f5bf108674c47018def28906e2d0a729c 100644
|
||||
--- a/src/main/java/net/minecraft/world/CompoundContainer.java
|
||||
@@ -3741,84 +3758,136 @@ index 43243537b765a2d270be6de3f053fea77ff67d18..b56bb0ac37a6d51d645b6189af0ae7da
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/MoveToTargetSink.java b/src/main/java/net/minecraft/world/entity/ai/behavior/MoveToTargetSink.java
|
||||
index 18364ce4c60172529b10bc9e3a813dcedc4b766f..698c46f786689d719ecca0780e220eab594bc45e 100644
|
||||
index 18364ce4c60172529b10bc9e3a813dcedc4b766f..72dfb58a7f4586387c2d32cf54fff137b2d26666 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/ai/behavior/MoveToTargetSink.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/MoveToTargetSink.java
|
||||
@@ -58,6 +58,7 @@ public class MoveToTargetSink extends Behavior<Mob> {
|
||||
@@ -21,6 +21,7 @@ public class MoveToTargetSink extends Behavior<Mob> {
|
||||
private int remainingCooldown;
|
||||
@Nullable
|
||||
private Path path;
|
||||
+ private boolean finishedProcessing; // Pufferfish
|
||||
@Nullable
|
||||
private BlockPos lastTargetPos;
|
||||
private float speedModifier;
|
||||
@@ -42,9 +43,10 @@ public class MoveToTargetSink extends Behavior<Mob> {
|
||||
Brain<?> brain = entity.getBrain();
|
||||
WalkTarget walkTarget = brain.getMemory(MemoryModuleType.WALK_TARGET).get();
|
||||
boolean bl = this.reachedTarget(entity, walkTarget);
|
||||
- if (!bl && this.tryComputePath(entity, walkTarget, world.getGameTime())) {
|
||||
+ if (!bl && (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding && this.tryComputePath(entity, walkTarget, world.getGameTime()))) { // Pufferfish
|
||||
this.lastTargetPos = walkTarget.getTarget().currentBlockPosition();
|
||||
return true;
|
||||
+ } else if (!bl) { return true; // Pufferfish
|
||||
} else {
|
||||
brain.eraseMemory(MemoryModuleType.WALK_TARGET);
|
||||
if (bl) {
|
||||
@@ -58,6 +60,7 @@ public class MoveToTargetSink extends Behavior<Mob> {
|
||||
|
||||
@Override
|
||||
protected boolean canStillUse(ServerLevel serverLevel, Mob mob, long l) {
|
||||
+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding && this.path != null && !this.path.isProcessed()) return true; // Pufferfish - wait for path to process
|
||||
+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding && !finishedProcessing) return true; // Pufferfish - wait for path to process
|
||||
if (this.path != null && this.lastTargetPos != null) {
|
||||
Optional<WalkTarget> optional = mob.getBrain().getMemory(MemoryModuleType.WALK_TARGET);
|
||||
PathNavigation pathNavigation = mob.getNavigation();
|
||||
@@ -87,6 +88,8 @@ public class MoveToTargetSink extends Behavior<Mob> {
|
||||
@@ -81,28 +84,96 @@ public class MoveToTargetSink extends Behavior<Mob> {
|
||||
|
||||
@Override
|
||||
protected void start(ServerLevel serverLevel, Mob mob, long l) {
|
||||
+ if (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding) { // Pufferfish
|
||||
mob.getBrain().setMemory(MemoryModuleType.PATH, this.path);
|
||||
mob.getNavigation().moveTo(this.path, (double)this.speedModifier);
|
||||
+ // Pufferfish start
|
||||
+ } else {
|
||||
+ Brain<?> brain = mob.getBrain();
|
||||
+ WalkTarget walkTarget = brain.getMemory(MemoryModuleType.WALK_TARGET).get();
|
||||
+
|
||||
+ this.finishedProcessing = false;
|
||||
+ this.lastTargetPos = walkTarget.getTarget().currentBlockPosition();
|
||||
+ this.path = this.computePath(mob, walkTarget);
|
||||
+ }
|
||||
+ // Pufferfish end
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void tick(ServerLevel world, Mob entity, long time) {
|
||||
+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding && this.path != null && !this.path.isProcessed()) return; // Pufferfish - wait for processing
|
||||
+
|
||||
Path path = entity.getNavigation().getPath();
|
||||
Brain<?> brain = entity.getBrain();
|
||||
if (this.path != path) {
|
||||
@@ -94,6 +97,12 @@ public class MoveToTargetSink extends Behavior<Mob> {
|
||||
brain.setMemory(MemoryModuleType.PATH, path);
|
||||
}
|
||||
|
||||
+ // Pufferfish start - periodically recall moveTo to ensure we're moving towards the correct path
|
||||
+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding && time % 8 == 0) {
|
||||
+ // Pufferfish start
|
||||
+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding && !finishedProcessing) {
|
||||
+ this.finishedProcessing = true;
|
||||
+ Brain<?> brain = entity.getBrain();
|
||||
+ boolean canReach = this.path != null && this.path.canReach();
|
||||
+ if (canReach) {
|
||||
+ brain.eraseMemory(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE);
|
||||
+ } else if (brain.hasMemoryValue(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE)) {
|
||||
+ brain.setMemory(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE, time);
|
||||
+ }
|
||||
+
|
||||
+ if (!canReach) {
|
||||
+ Optional<WalkTarget> walkTarget = brain.getMemory(MemoryModuleType.WALK_TARGET);
|
||||
+
|
||||
+ if (walkTarget.isPresent()) {
|
||||
+ BlockPos blockPos = walkTarget.get().getTarget().currentBlockPosition();
|
||||
+ Vec3 vec3 = DefaultRandomPos.getPosTowards((PathfinderMob)entity, 10, 7, Vec3.atBottomCenterOf(blockPos), (double)((float)Math.PI / 2F));
|
||||
+ if (vec3 != null) {
|
||||
+ // try recalculating the path using a random position
|
||||
+ this.path = entity.getNavigation().createPath(vec3.x, vec3.y, vec3.z, 0);
|
||||
+ this.finishedProcessing = false;
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ brain.eraseMemory(MemoryModuleType.WALK_TARGET);
|
||||
+ this.path = null;
|
||||
+
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ entity.getBrain().setMemory(MemoryModuleType.PATH, this.path);
|
||||
+ entity.getNavigation().moveTo(this.path, (double)this.speedModifier);
|
||||
+ }
|
||||
+ // Pufferfish end
|
||||
+
|
||||
if (path != null && this.lastTargetPos != null) {
|
||||
WalkTarget walkTarget = brain.getMemory(MemoryModuleType.WALK_TARGET).get();
|
||||
if (walkTarget.getTarget().currentBlockPosition().distSqr(this.lastTargetPos) > 4.0D && this.tryComputePath(entity, walkTarget, world.getGameTime())) {
|
||||
@@ -112,6 +121,24 @@ public class MoveToTargetSink extends Behavior<Mob> {
|
||||
if (this.reachedTarget(entity, walkTarget)) {
|
||||
brain.eraseMemory(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE);
|
||||
} else {
|
||||
+ // Pufferfish start - move this out to postProcessPath
|
||||
+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding) {
|
||||
+ gg.pufferfish.pufferfish.path.AsyncPathProcessor.awaitProcessing(this.path, (unusedPath) -> {
|
||||
+ this.postProcessPath(entity, walkTarget, time);
|
||||
+ });
|
||||
+ return true;
|
||||
+ } else {
|
||||
+ return postProcessPath(entity, walkTarget, time);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ private boolean postProcessPath(Mob entity, WalkTarget walkTarget, long time) {
|
||||
+ Brain<?> brain = entity.getBrain();
|
||||
+ BlockPos blockPos = walkTarget.getTarget().currentBlockPosition();
|
||||
+
|
||||
boolean bl = this.path != null && this.path.canReach();
|
||||
if (bl) {
|
||||
brain.eraseMemory(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE);
|
||||
@@ -128,10 +155,19 @@ public class MoveToTargetSink extends Behavior<Mob> {
|
||||
this.path = entity.getNavigation().createPath(vec3.x, vec3.y, vec3.z, 0);
|
||||
return this.path != null;
|
||||
}
|
||||
+
|
||||
+ // We failed, so erase and move on
|
||||
+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding) {
|
||||
+ brain.eraseMemory(MemoryModuleType.WALK_TARGET);
|
||||
+ if (bl) {
|
||||
+ brain.eraseMemory(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE);
|
||||
+ }
|
||||
+ this.path = null;
|
||||
Path path = entity.getNavigation().getPath();
|
||||
Brain<?> brain = entity.getBrain();
|
||||
- if (this.path != path) {
|
||||
+ if (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding && this.path != path) { // Pufferfish
|
||||
this.path = path;
|
||||
brain.setMemory(MemoryModuleType.PATH, path);
|
||||
}
|
||||
|
||||
return false;
|
||||
- if (path != null && this.lastTargetPos != null) {
|
||||
+ if (path != null && this.lastTargetPos != null && (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding || brain.hasMemoryValue(MemoryModuleType.WALK_TARGET))) { // Pufferfish
|
||||
WalkTarget walkTarget = brain.getMemory(MemoryModuleType.WALK_TARGET).get();
|
||||
+ if (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncPathfinding) { // Pufferfish
|
||||
if (walkTarget.getTarget().currentBlockPosition().distSqr(this.lastTargetPos) > 4.0D && this.tryComputePath(entity, walkTarget, world.getGameTime())) {
|
||||
this.lastTargetPos = walkTarget.getTarget().currentBlockPosition();
|
||||
this.start(world, entity, time);
|
||||
}
|
||||
+ // Pufferfish start
|
||||
+ } else {
|
||||
+ if (walkTarget.getTarget().currentBlockPosition().distSqr(this.lastTargetPos) > 4.0D) this.start(world, entity, time);
|
||||
+ }
|
||||
+ // Pufferfish end
|
||||
+
|
||||
+ }
|
||||
+ }
|
||||
|
||||
+ // Pufferfish start
|
||||
+ private Path computePath(Mob entity, WalkTarget walkTarget) {
|
||||
+ BlockPos blockPos = walkTarget.getTarget().currentBlockPosition();
|
||||
+ this.speedModifier = walkTarget.getSpeedModifier();
|
||||
+ Brain<?> brain = entity.getBrain();
|
||||
+ if (this.reachedTarget(entity, walkTarget)) {
|
||||
+ brain.eraseMemory(MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE);
|
||||
}
|
||||
+
|
||||
+ return entity.getNavigation().createPath(blockPos, 0);
|
||||
}
|
||||
+ // Pufferfish end
|
||||
|
||||
private boolean reachedTarget(Mob entity, WalkTarget walkTarget) {
|
||||
return walkTarget.getTarget().currentBlockPosition().distManhattan(entity.blockPosition()) <= walkTarget.getCloseEnoughDist();
|
||||
private boolean tryComputePath(Mob entity, WalkTarget walkTarget, long time) {
|
||||
BlockPos blockPos = walkTarget.getTarget().currentBlockPosition();
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/SetClosestHomeAsWalkTarget.java b/src/main/java/net/minecraft/world/entity/ai/behavior/SetClosestHomeAsWalkTarget.java
|
||||
index 9bd6d4f7b86daaaa9cfbad454dde06b797e3f667..2402a8c1067a74a21d9812561df5fb6284670571 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/ai/behavior/SetClosestHomeAsWalkTarget.java
|
||||
@@ -5364,10 +5433,10 @@ index 2a335f277bd0e4b8ad0f60d8226eb8aaa80a871f..228b11a21735885055d2fb5e0568e21a
|
||||
return false;
|
||||
} else if (o.nodes.size() != this.nodes.size()) {
|
||||
diff --git a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java b/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java
|
||||
index d23481453717f715124156b5d83f6448f720d049..e6593d081b9349d68d45b645455d28f6f00d7c00 100644
|
||||
index d23481453717f715124156b5d83f6448f720d049..0455c8a7da880da4f0b7ae9d57e83e281a55f0ae 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java
|
||||
@@ -25,36 +25,73 @@ public class PathFinder {
|
||||
@@ -25,36 +25,75 @@ public class PathFinder {
|
||||
private static final boolean DEBUG = false;
|
||||
private final BinaryHeap openSet = new BinaryHeap();
|
||||
|
||||
@@ -5397,6 +5466,7 @@ index d23481453717f715124156b5d83f6448f720d049..e6593d081b9349d68d45b645455d28f6
|
||||
+ nodeEvaluator.prepare(world, mob);
|
||||
+ Node node = nodeEvaluator.getStart();
|
||||
if (node == null) {
|
||||
+ gg.pufferfish.pufferfish.path.NodeEvaluatorCache.removeNodeEvaluator(nodeEvaluator);
|
||||
return null;
|
||||
} else {
|
||||
// Paper start - remove streams - and optimize collection
|
||||
@@ -5413,6 +5483,7 @@ index d23481453717f715124156b5d83f6448f720d049..e6593d081b9349d68d45b645455d28f6
|
||||
+ // Pufferfish start
|
||||
+ if (this.nodeEvaluatorGenerator == null) {
|
||||
+ // run sync :(
|
||||
+ gg.pufferfish.pufferfish.path.NodeEvaluatorCache.removeNodeEvaluator(nodeEvaluator);
|
||||
+ return this.findPath(world.getProfiler(), node, map, followRange, distance, rangeMultiplier);
|
||||
+ }
|
||||
+
|
||||
@@ -5450,7 +5521,7 @@ index d23481453717f715124156b5d83f6448f720d049..e6593d081b9349d68d45b645455d28f6
|
||||
// Set<Target> set = positions.keySet();
|
||||
startNode.g = 0.0F;
|
||||
startNode.h = this.getBestH(startNode, positions); // Paper - optimize collection
|
||||
@@ -91,7 +128,7 @@ public class PathFinder {
|
||||
@@ -91,7 +130,7 @@ public class PathFinder {
|
||||
}
|
||||
|
||||
if (!(node.distanceTo(startNode) >= followRange)) {
|
||||
@@ -5459,7 +5530,7 @@ index d23481453717f715124156b5d83f6448f720d049..e6593d081b9349d68d45b645455d28f6
|
||||
|
||||
for(int l = 0; l < k; ++l) {
|
||||
Node node2 = this.neighbors[l];
|
||||
@@ -123,9 +160,14 @@ public class PathFinder {
|
||||
@@ -123,9 +162,14 @@ public class PathFinder {
|
||||
if (best == null || comparator.compare(path, best) < 0)
|
||||
best = path;
|
||||
}
|
||||
|
||||
@@ -17,10 +17,10 @@ index 94944ba458178f9e5b772224da329bb5d85f4394..94d87f6bd2c27b0d6cc4547e8bc6e87b
|
||||
public double lastEntitySpawnRadiusSquared; // Paper - optimise isOutsideRange, this field is in blocks
|
||||
public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<ServerPlayer> cachedSingleHashSet; // Paper
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index 32ef30e130c7f6e252ebf5b866fb9e89d7c0d7db..2c9ab0cd801b6c95c9263960a7234a5e30de9672 100644
|
||||
index 8da76daecef969f452960df5577c7bc408ac7acb..116389472b3b25aaa5657c7dcbbc59bf8324b25e 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -3614,6 +3614,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -3615,6 +3615,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
private static final ResourceLocation CUSTOM_UNREGISTER = new ResourceLocation("unregister");
|
||||
|
||||
private static final ResourceLocation MINECRAFT_BRAND = new ResourceLocation("brand"); // Paper - Brand support
|
||||
@@ -28,7 +28,7 @@ index 32ef30e130c7f6e252ebf5b866fb9e89d7c0d7db..2c9ab0cd801b6c95c9263960a7234a5e
|
||||
|
||||
@Override
|
||||
public void handleCustomPayload(ServerboundCustomPayloadPacket packet) {
|
||||
@@ -3638,6 +3639,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -3639,6 +3640,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t unregister custom payload", ex);
|
||||
this.disconnect("Invalid payload UNREGISTER!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); // Paper - kick event cause
|
||||
}
|
||||
|
||||
@@ -66,10 +66,10 @@ index db23ce6f9253697592d80e44c192e9a97d06b83b..8c18c203854628c0dd8d660b197127b0
|
||||
|
||||
public void doTick() {
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index 2c9ab0cd801b6c95c9263960a7234a5e30de9672..cd723d7e216ff6de0daee9d21309006b9874f321 100644
|
||||
index 116389472b3b25aaa5657c7dcbbc59bf8324b25e..ed5ba255f7de765bf956381c6d1d99dfc3cc64d3 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -2887,6 +2887,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -2888,6 +2888,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
|
||||
ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event);
|
||||
|
||||
@@ -3237,7 +3237,7 @@ index d980b906d9206560741576fa4153c57212f307a0..790d4abbc8e0b288e20e72e63f8190e9
|
||||
public boolean doHurtTarget(Entity target) {
|
||||
if (super.doHurtTarget(target)) {
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
|
||||
index 8c328d72c42ccaa6891249cc700b70bb34c09545..a5250d7a85f11c58732d7e3d3ca3321efac42fc0 100644
|
||||
index e0f71dc12cfc28710cacfbc372026f556dcab165..17cc847fd6e5a128c9ae7427dc0aef51918bc30a 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
|
||||
@@ -60,21 +60,98 @@ public class Creeper extends Monster implements PowerableMob {
|
||||
@@ -5146,13 +5146,13 @@ index 4132c1113f5437a776e5e3c1cb306904775aed88..1a945a32c3d3705a318ebca72a365931
|
||||
public void tick() {
|
||||
super.tick();
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||||
index b80cc0938b2b3928f4450f1314a9fbd7ea9c116b..b8cb317246b1f07c193abac9b5c84acdfe9ef958 100644
|
||||
index 6549ade8e19807c523e5a1dc68b66585aad438b1..11d51beb52c326a9fc040322a79d3916a8ddd0a2 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||||
@@ -1340,4 +1340,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
return getHandle().isInPowderSnow || getHandle().wasInPowderSnow; // depending on the location in the entity "tick" either could be needed.
|
||||
@@ -1355,4 +1355,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
return !this.getHandle().level.noCollision(this.getHandle(), aabb);
|
||||
}
|
||||
// Paper end
|
||||
// Paper End - Collision API
|
||||
+
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Alternative Keepalive Handling
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index a67301f606e7f2b05559aed2ac88288dd40dd539..977da4e13d0f67179522da6964231773de9451e8 100644
|
||||
index 7da5e02745decd39c9ef220b84eb2f633cf44494..fe3a1669bb224bea7559adbf453e744962dfd1d3 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -258,6 +258,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -38,7 +38,7 @@ index a67301f606e7f2b05559aed2ac88288dd40dd539..977da4e13d0f67179522da6964231773
|
||||
if (this.keepAlivePending) {
|
||||
if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
|
||||
ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info
|
||||
@@ -3599,6 +3615,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -3600,6 +3616,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
|
||||
@Override
|
||||
public void handleKeepAlive(ServerboundKeepAlivePacket packet) {
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Entity lifespan
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index e529b3f40f5388f3f20bde4e61be70ed2b018372..309240669b3e7116a7e1e52ddcffd4365e438c9c 100644
|
||||
index 6995bdfea267d64286b8549521df2e3ef8e8c562..999a6c65f9693d03ab7010f55e0b9eb42dd25206 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -2942,6 +2942,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -2943,6 +2943,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
}
|
||||
|
||||
if (entity.distanceToSqr(this.player.getEyePosition()) < ServerGamePacketListenerImpl.MAX_INTERACTION_DISTANCE) {
|
||||
|
||||
@@ -17,10 +17,10 @@ index d042f2866a513263cc1b82df1cabe7fee81a1603..ab3744184ed4e761e58ea93099a3d6e9
|
||||
this.connection.send(new ClientboundBlockUpdatePacket(this.level, sign.getBlockPos()));
|
||||
this.connection.send(new ClientboundOpenSignEditorPacket(sign.getBlockPos()));
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index 2505557a4e0db77dd1d18bc78ecada154d59da0f..de6255d8c629e6ffc3963521f1021d0c72c3d0b1 100644
|
||||
index a727e98b5b5575e895579cb02b5e6c719ad24445..36e9129d4a63201e8dca9e94c9aaa09679144500 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -3623,11 +3623,17 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -3624,11 +3624,17 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
for (int i = 0; i < signText.size(); ++i) {
|
||||
FilteredText filteredtext = (FilteredText) signText.get(i);
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Add log suppression for sent expired chat
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index de6255d8c629e6ffc3963521f1021d0c72c3d0b1..42ab824643fe252761b1c83262effd2ba2cc7af0 100644
|
||||
index 36e9129d4a63201e8dca9e94c9aaa09679144500..433c8c86202619a0af8b03bfd6182f6a57b7a8ed 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -2660,7 +2660,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -2661,7 +2661,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
this.disconnect(Component.translatable("multiplayer.disconnect.unsigned_chat"), org.bukkit.event.player.PlayerKickEvent.Cause.UNSIGNED_CHAT); // Paper - kick event cause
|
||||
return false;
|
||||
} else {
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Option to disable kick for out of order chat
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index 42ab824643fe252761b1c83262effd2ba2cc7af0..85a0a342f6c007280e62f2b0f3c932e665debd6f 100644
|
||||
index 433c8c86202619a0af8b03bfd6182f6a57b7a8ed..fcc032154baba11894ab381943f496f225bed464 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -2437,7 +2437,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -2438,7 +2438,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
do {
|
||||
instant1 = (Instant) this.lastChatTimeStamp.get();
|
||||
if (timestamp.isBefore(instant1)) {
|
||||
|
||||
@@ -82,7 +82,7 @@ index 8bc0cb9ad5bb4e76d962ff54305e2c08e279a17b..e8efbbeece7e866c6c4d7489677d2d9e
|
||||
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 327ecc7a92671fbdb8e22e19ca30bb0f76a35a8c..d6b0477509ce4fc37f9e3388a014970ec5e04693 100644
|
||||
index 7b999456cc1a0808bcb5490deb334e848ce5f361..96255e81c232f9cbc3268127d4232bb9c2c73292 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -1426,15 +1426,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -748,10 +748,10 @@ index c685e0acb2559e7415c94790d8392f0ee997ecc6..ad14dbed67ca622f9c8e05164104fe9a
|
||||
this.entityManager.saveAll();
|
||||
} else {
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index 85a0a342f6c007280e62f2b0f3c932e665debd6f..6a161743fd80c90c945499075e84aa981fbbd090 100644
|
||||
index fcc032154baba11894ab381943f496f225bed464..473bbdf6b98eabe55f02e93bb72e1877fcf236e9 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -2587,7 +2587,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -2588,7 +2588,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
}
|
||||
}
|
||||
// Paper End
|
||||
@@ -760,7 +760,7 @@ index 85a0a342f6c007280e62f2b0f3c932e665debd6f..6a161743fd80c90c945499075e84aa98
|
||||
if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot
|
||||
this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s);
|
||||
|
||||
@@ -2597,7 +2597,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -2598,7 +2598,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
this.cserver.getPluginManager().callEvent(event);
|
||||
|
||||
if (event.isCancelled()) {
|
||||
@@ -769,7 +769,7 @@ index 85a0a342f6c007280e62f2b0f3c932e665debd6f..6a161743fd80c90c945499075e84aa98
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2610,7 +2610,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -2611,7 +2611,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||
return;
|
||||
} finally {
|
||||
|
||||
@@ -39,7 +39,7 @@ index a1b80de62f07e0b476775289ec46e3f685b41d7f..ffcc53399da282a525785426279c3194
|
||||
|
||||
return b0;
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index ec2c9f2e3bb89be847993205f107089ed8cc05b5..e78170ae888146c2aab6b218f7501b911a70add6 100644
|
||||
index 96255e81c232f9cbc3268127d4232bb9c2c73292..d678c6e0109dabe93485fb214622a0213c790f26 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -328,13 +328,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
@@ -835,7 +835,7 @@ index ab3744184ed4e761e58ea93099a3d6e9ca68bdde..1013618b91df8b2bdf2aa3f5f9f91f0a
|
||||
this.connection.send(new ClientboundPlayerAbilitiesPacket(this.getAbilities()));
|
||||
playerlist.sendLevelInfo(this, worldserver);
|
||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index af8043503f16c09a25da71a00d80a77eb5874e71..8ddd79ebc916d34d63be3d62fc3d37f5a56b3b35 100644
|
||||
index 473bbdf6b98eabe55f02e93bb72e1877fcf236e9..b17b01b4689f87bae9640d41115851cc2e6170a2 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -419,7 +419,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||
@@ -1726,7 +1726,7 @@ index 01477e7240f9e33d08d416a7d40ee10f3e5d4abf..c9def2202d7c2a523858ec124df2beaf
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
|
||||
index d270d0f47d26085ce7912b61a66b922a95871a73..ee54cbdaecbdd285fe3f74f902f01f964b569521 100644
|
||||
index 582613e9c45135b2cc0c02f457e5c3d61d138c86..018a5c13d3f0321d4346e6c1845f1aed2b8de3dd 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/Level.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/Level.java
|
||||
@@ -713,9 +713,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
|
||||
@@ -1837,10 +1837,10 @@ index ab024c5315c0a7cb2f80d5d7b251f6a3531879b3..12293740461b6cd965297543a1ae3bea
|
||||
if (throwable instanceof ThreadDeath) throw throwable; // Paper
|
||||
// Paper start - Prevent tile entity and entity crashes
|
||||
diff --git a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java b/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java
|
||||
index e6593d081b9349d68d45b645455d28f6f00d7c00..aca4100964a1f225bd93390f521073e2bc15c04f 100644
|
||||
index 0455c8a7da880da4f0b7ae9d57e83e281a55f0ae..23cb03d28c43729d5b5d450cd975456512477353 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java
|
||||
@@ -78,8 +78,8 @@ public class PathFinder {
|
||||
@@ -80,8 +80,8 @@ public class PathFinder {
|
||||
// Paper start - optimize collection
|
||||
private Path findPath(ProfilerFiller profiler, Node startNode, List<Map.Entry<Target, BlockPos>> positions, float followRange, int distance, float rangeMultiplier) {
|
||||
// readd the profiler code for sync
|
||||
|
||||
Reference in New Issue
Block a user