mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-02 04:56:50 +01:00
842e040c19
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 220bc594 #486: Add method to get player's attack cooldown 21853d39 SPIGOT-5681: Increase max plugin channel size 5b972adc Improve build process b55e58d9 Note which custom generator is missing required method CraftBukkit Changes:893ad93b
#650: Add method to get player's attack cooldownef706b06
#655: Added support for the VM tag jansi.passthrough when processing messages sent to a ColouredConsoleSender.e0cfb347
SPIGOT-5689: Fireball.setDirection increases velocity too much94cb030f
SPIGOT-5673: swingHand API does not show to selfb331a055
SPIGOT-5680: isChunkGenerated creates empty region filese1335932
Improve build processa8ec1d60
Add a couple of method null checks to CraftWorldce66f693
Misc checkstyle fixes8bd0e9ab
SPIGOT-5669: Fix Beehive.isSedated Spigot Changes: 2040c4c4 SPIGOT-5677, MC-114796: Fix portals generating outside world border ab8f6b5a Rebuild patches e7dc2f53 Rebuild patches
61 lines
2.7 KiB
Diff
61 lines
2.7 KiB
Diff
From b732b943c32cdc2dd199c5846cf85f6cc83bca1f Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Sat, 11 Apr 2020 21:23:42 -0400
|
|
Subject: [PATCH] Delay unsafe actions until after entity ticking is done
|
|
|
|
This will help prevent many cases of unregistering entities during entity ticking
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
|
index dc01fb494d..d13dc8fce9 100644
|
|
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
|
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
|
@@ -60,6 +60,16 @@ public class WorldServer extends World {
|
|
private final Queue<Entity> entitiesToAdd = Queues.newArrayDeque();
|
|
public final List<EntityPlayer> players = Lists.newArrayList(); // Paper - private -> public
|
|
boolean tickingEntities;
|
|
+ // Paper start
|
|
+ List<java.lang.Runnable> afterEntityTickingTasks = Lists.newArrayList();
|
|
+ public void doIfNotEntityTicking(java.lang.Runnable run) {
|
|
+ if (tickingEntities) {
|
|
+ afterEntityTickingTasks.add(run);
|
|
+ } else {
|
|
+ run.run();
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
private final MinecraftServer server;
|
|
private final WorldNBTStorage dataManager;
|
|
public boolean savingDisabled;
|
|
@@ -531,6 +541,16 @@ public class WorldServer extends World {
|
|
timings.entityTick.stopTiming(); // Spigot
|
|
|
|
this.tickingEntities = false;
|
|
+ // Paper start
|
|
+ for (java.lang.Runnable run : this.afterEntityTickingTasks) {
|
|
+ try {
|
|
+ run.run();
|
|
+ } catch (Exception e) {
|
|
+ LOGGER.error("Error in After Entity Ticking Task", e);
|
|
+ }
|
|
+ }
|
|
+ this.afterEntityTickingTasks.clear();
|
|
+ // Paper end
|
|
this.getMinecraftServer().midTickLoadChunks(); // Paper
|
|
|
|
try (co.aikar.timings.Timing ignored = this.timings.newEntities.startTiming()) { // Paper - timings
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index b962dbfdfe..c9e5330948 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -2475,7 +2475,7 @@ public class CraftWorld implements World {
|
|
|
|
CompletableFuture<Chunk> ret = new CompletableFuture<>();
|
|
this.world.getChunkProvider().getChunkAtAsynchronously(x, z, gen, (net.minecraft.server.Chunk chunk) -> {
|
|
- ret.complete(chunk == null ? null : chunk.bukkitChunk);
|
|
+ this.world.doIfNotEntityTicking(() -> ret.complete(chunk == null ? null : chunk.bukkitChunk));
|
|
});
|
|
|
|
return ret;
|
|
--
|
|
2.26.2
|
|
|