mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly Paper Changes: 840e72091 [CI-SKIP] [Auto] Rebuild Patches a33232d4a Add beacon activation and deactivation events (#5121) bc7ea673a Add internal channel initialization listeners (#5557) b28ad17ac Check for world change in MoveEvent API methods 3095c7592 [Auto] Updated Upstream (CraftBukkit) f56989c97 Add RespawnFlags to PlayerRespawnEvent (#5533) 7579c2667 Add more API to PlayerMoveEvent (#5553)
This commit is contained in:
2
Paper
2
Paper
Submodule Paper updated: ef60c01c4d...840e72091f
@@ -15035,7 +15035,7 @@ index c67b94840e4c967baebf6eb351df15f0e4ead4be..ed836462123efc6903e406fa926e55e1
|
|||||||
throw new IllegalStateException("Protocol error", cryptographyexception);
|
throw new IllegalStateException("Protocol error", cryptographyexception);
|
||||||
}
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
index b543776da3b799643893984a8c6f29477ed78d4a..159c38618d7745ea513ad179b1217d76c2c4897a 100644
|
index 9455cb9bc849a330e57fdc466fb51902631e22d8..53320d1d134305c0b37442dfca9931629a6d196d 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
@@ -542,6 +542,12 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
@@ -542,6 +542,12 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||||
@@ -15254,7 +15254,7 @@ index b543776da3b799643893984a8c6f29477ed78d4a..159c38618d7745ea513ad179b1217d76
|
|||||||
Stream<VoxelShape> stream = iworldreader.d(this.player, this.player.getBoundingBox().shrink(9.999999747378752E-6D), (entity) -> {
|
Stream<VoxelShape> stream = iworldreader.d(this.player, this.player.getBoundingBox().shrink(9.999999747378752E-6D), (entity) -> {
|
||||||
return true;
|
return true;
|
||||||
diff --git a/src/main/java/net/minecraft/server/network/ServerConnection.java b/src/main/java/net/minecraft/server/network/ServerConnection.java
|
diff --git a/src/main/java/net/minecraft/server/network/ServerConnection.java b/src/main/java/net/minecraft/server/network/ServerConnection.java
|
||||||
index dc362724ea0cc1b2f9d9ceffff483217b4356c40..70fde7bad2e0a6d7432d8509fdb7c46d9f020d4c 100644
|
index 69fc2789df88344587b6052f93661ed38f24a503..92836f1200461ba7fff2f8bcb5e1755ec9a0c9ce 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/ServerConnection.java
|
--- a/src/main/java/net/minecraft/server/network/ServerConnection.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/ServerConnection.java
|
+++ b/src/main/java/net/minecraft/server/network/ServerConnection.java
|
||||||
@@ -87,6 +87,11 @@ public class ServerConnection {
|
@@ -87,6 +87,11 @@ public class ServerConnection {
|
||||||
@@ -15270,7 +15270,7 @@ index dc362724ea0cc1b2f9d9ceffff483217b4356c40..70fde7bad2e0a6d7432d8509fdb7c46d
|
|||||||
protected void initChannel(Channel channel) throws Exception {
|
protected void initChannel(Channel channel) throws Exception {
|
||||||
try {
|
try {
|
||||||
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
index f8f0212497ad4fbb1273820a06a4ae6721053b8e..c705bf1e651a764d56b87ebc5a86a938d8bd34bb 100644
|
index 6bfa8020c19721dd63e038e4b866a7d3a24e66ac..b5043eabe63fe703a321cff6c0f6449cf729cd0e 100644
|
||||||
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -179,6 +179,7 @@ public abstract class PlayerList {
|
@@ -179,6 +179,7 @@ public abstract class PlayerList {
|
||||||
@@ -16846,7 +16846,7 @@ index 2f8b3587f527620152609d5be342b328a7621e0f..e440d26c920c4efddf958c61bfdfa508
|
|||||||
if (this.fromPlayer == EntityArrow.PickupStatus.ALLOWED && !entityhuman.inventory.pickup(itemstack)) {
|
if (this.fromPlayer == EntityArrow.PickupStatus.ALLOWED && !entityhuman.inventory.pickup(itemstack)) {
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java b/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java b/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java
|
||||||
index b9680f6f2e30ec9397d6a9c83e79563d9253aff6..546de0ec2b624a781480ac95f65b2cbfbb5dcf2e 100644
|
index c4248531d4a6a11259d9d78ce1d7683a86840d40..f3077c22445949c484a73ee56eab593f527795a6 100644
|
||||||
--- a/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java
|
--- a/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java
|
||||||
@@ -83,7 +83,9 @@ public abstract class EntityFireball extends IProjectile {
|
@@ -83,7 +83,9 @@ public abstract class EntityFireball extends IProjectile {
|
||||||
|
|||||||
@@ -1,463 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Paul Sauve <paul@technove.co>
|
|
||||||
Date: Fri, 12 Feb 2021 16:29:41 -0600
|
|
||||||
Subject: [PATCH] Multithreaded entity tracking
|
|
||||||
|
|
||||||
Adds a configuration option to run the tracker on multiple threads.
|
|
||||||
This will generally be faster than the single threaded approach,
|
|
||||||
unless you don't have a lot of entities/players.
|
|
||||||
|
|
||||||
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/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java b/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java
|
|
||||||
index be408aebbccbda46e8aa82ef337574137cfa0096..739839314fd8a88b5fca8b9678e1df07a166c35d 100644
|
|
||||||
--- a/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java
|
|
||||||
+++ b/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java
|
|
||||||
@@ -16,11 +16,11 @@ public final class IteratorSafeOrderedReferenceSet<E> {
|
|
||||||
|
|
||||||
/* list impl */
|
|
||||||
protected E[] listElements;
|
|
||||||
- protected int listSize;
|
|
||||||
+ protected int listSize; public int getListSize() { return this.listSize; } // Airplane - getter
|
|
||||||
|
|
||||||
protected final double maxFragFactor;
|
|
||||||
|
|
||||||
- protected int iteratorCount;
|
|
||||||
+ public int iteratorCount; // Airplane - public for debug
|
|
||||||
|
|
||||||
private final boolean threadRestricted;
|
|
||||||
|
|
||||||
diff --git a/src/main/java/gg/airplane/AirplaneConfig.java b/src/main/java/gg/airplane/AirplaneConfig.java
|
|
||||||
index 65adf3ceda012c8cfdea675c40e2bb27d34ebac7..bb87d8792fa6f4b888dd562d63353fe90d2bc588 100644
|
|
||||||
--- a/src/main/java/gg/airplane/AirplaneConfig.java
|
|
||||||
+++ b/src/main/java/gg/airplane/AirplaneConfig.java
|
|
||||||
@@ -120,4 +120,17 @@ public class AirplaneConfig {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
+ public static boolean multithreadedEntityTracker = false;
|
|
||||||
+ public static boolean entityTrackerAsyncPackets = false;
|
|
||||||
+
|
|
||||||
+ private static void entityTracker() {
|
|
||||||
+ config.setComment("tracker", "Options to improve the performance of the entity tracker");
|
|
||||||
+
|
|
||||||
+ multithreadedEntityTracker = config.getBoolean("tracker.multithreaded", multithreadedEntityTracker,
|
|
||||||
+ "This enables the multithreading of the tracker.");
|
|
||||||
+ entityTrackerAsyncPackets = config.getBoolean("tracker.unsafe-async-packets", entityTrackerAsyncPackets,
|
|
||||||
+ "This option can break plugins that assume packets from the",
|
|
||||||
+ "entity tracker will be sent sync.");
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
}
|
|
||||||
diff --git a/src/main/java/gg/airplane/commands/AirplaneCommands.java b/src/main/java/gg/airplane/commands/AirplaneCommands.java
|
|
||||||
index 66b20250a26d005427601b1cdee43bdd9eba70cc..f84e26b2d8ab9a9b2d9e92e18002483127121135 100644
|
|
||||||
--- a/src/main/java/gg/airplane/commands/AirplaneCommands.java
|
|
||||||
+++ b/src/main/java/gg/airplane/commands/AirplaneCommands.java
|
|
||||||
@@ -2,11 +2,13 @@ package gg.airplane.commands;
|
|
||||||
|
|
||||||
import gg.airplane.AirplaneCommand;
|
|
||||||
import gg.airplane.flare.FlareCommand;
|
|
||||||
+import gg.airplane.structs.TrackQueue;
|
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
|
|
||||||
public class AirplaneCommands {
|
|
||||||
public static void init() {
|
|
||||||
MinecraftServer.getServer().server.getCommandMap().register("airplane", "Airplane", new AirplaneCommand());
|
|
||||||
MinecraftServer.getServer().server.getCommandMap().register("flare", "Airplane", new FlareCommand());
|
|
||||||
+ TrackQueue.TrackQueueDebugCommand.register();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/src/main/java/gg/airplane/structs/TrackQueue.java b/src/main/java/gg/airplane/structs/TrackQueue.java
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000000000000000000000000000000000000..4419fbe94041f4b8a0ea848880798289d063b8e2
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/src/main/java/gg/airplane/structs/TrackQueue.java
|
|
||||||
@@ -0,0 +1,109 @@
|
|
||||||
+package gg.airplane.structs;
|
|
||||||
+
|
|
||||||
+import com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet;
|
|
||||||
+import net.minecraft.server.level.WorldServer;
|
|
||||||
+import net.minecraft.world.level.chunk.Chunk;
|
|
||||||
+import net.minecraft.server.MinecraftServer;
|
|
||||||
+import org.apache.logging.log4j.Level;
|
|
||||||
+import org.bukkit.command.Command;
|
|
||||||
+import org.bukkit.command.CommandSender;
|
|
||||||
+
|
|
||||||
+import java.util.concurrent.ConcurrentLinkedQueue;
|
|
||||||
+import java.util.concurrent.ForkJoinPool;
|
|
||||||
+import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * Helper class to handle processing a track queue.
|
|
||||||
+ */
|
|
||||||
+public class TrackQueue {
|
|
||||||
+
|
|
||||||
+ public static class TrackQueueDebugCommand extends Command {
|
|
||||||
+ protected TrackQueueDebugCommand() {
|
|
||||||
+ super("trackqueuedebug");
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ public static void register() {
|
|
||||||
+ MinecraftServer.getServer().server.getCommandMap().register("trackqueuedebug", "Airplane", new TrackQueueDebugCommand());
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ @Override
|
|
||||||
+ public boolean execute(CommandSender sender, String commandLabel, String[] args) {
|
|
||||||
+ if (!sender.isOp()) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ for (WorldServer world : MinecraftServer.getServer().getWorlds()) {
|
|
||||||
+ IteratorSafeOrderedReferenceSet<Chunk> chunks = world.getChunkProvider().entityTickingChunks;
|
|
||||||
+ sender.sendMessage(world.getWorld().getName() + ": " + chunks.size() + " / " + chunks.getListSize() + " (iterators: " + chunks.iteratorCount + ")");
|
|
||||||
+ }
|
|
||||||
+ return true;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private final IteratorSafeOrderedReferenceSet<Chunk> chunks;
|
|
||||||
+ private final ForkJoinPool pool = new ForkJoinPool(Math.max(4, Runtime.getRuntime().availableProcessors() >> 2));
|
|
||||||
+ private final AtomicInteger taskIndex = new AtomicInteger();
|
|
||||||
+
|
|
||||||
+ private final ConcurrentLinkedQueue<Runnable> mainThreadTasks;
|
|
||||||
+
|
|
||||||
+ public TrackQueue(IteratorSafeOrderedReferenceSet<Chunk> chunks, ConcurrentLinkedQueue<Runnable> mainThreadTasks) {
|
|
||||||
+ this.chunks = chunks;
|
|
||||||
+ this.mainThreadTasks = mainThreadTasks;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ public void start() {
|
|
||||||
+ int iterator = this.chunks.createRawIterator();
|
|
||||||
+ if (iterator == -1) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ try {
|
|
||||||
+ this.taskIndex.set(iterator);
|
|
||||||
+
|
|
||||||
+ for (int i = 0; i < this.pool.getParallelism(); i++) {
|
|
||||||
+ this.pool.execute(this::run);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ while (this.taskIndex.get() < this.chunks.getListSize()) {
|
|
||||||
+ this.runMainThreadTasks();
|
|
||||||
+ this.handleTask(); // assist
|
|
||||||
+ }
|
|
||||||
+ this.runMainThreadTasks(); // finish tasks
|
|
||||||
+ } finally {
|
|
||||||
+ this.chunks.finishRawIterator();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private void runMainThreadTasks() {
|
|
||||||
+ Runnable task;
|
|
||||||
+ while ((task = this.mainThreadTasks.poll()) != null) {
|
|
||||||
+ try {
|
|
||||||
+ task.run();
|
|
||||||
+ } catch (Throwable t) {
|
|
||||||
+ MinecraftServer.LOGGER.log(Level.WARN, "Tasks failed while ticking track queue", t);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private void run() {
|
|
||||||
+ while (handleTask());
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private boolean handleTask() {
|
|
||||||
+ int index;
|
|
||||||
+ while ((index = this.taskIndex.getAndIncrement()) < this.chunks.getListSize()) {
|
|
||||||
+ Chunk chunk = this.chunks.rawGet(index);
|
|
||||||
+ if (chunk != null) {
|
|
||||||
+ try {
|
|
||||||
+ chunk.entityTracker.run();
|
|
||||||
+ } catch (Throwable t) {
|
|
||||||
+ MinecraftServer.LOGGER.log(Level.WARN, "Ticking tracker failed", t);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return true;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+}
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
|
|
||||||
index 207a9c3928aad7c6e89a120b54d87e003ebd232c..424cd048f905cd0ed3f7a4545a26ffde8da1f91f 100644
|
|
||||||
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
|
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
|
|
||||||
@@ -388,7 +388,7 @@ public class ChunkProviderServer extends IChunkProvider {
|
|
||||||
}
|
|
||||||
|
|
||||||
final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<Chunk> tickingChunks = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(4096, 0.75f, 4096, 0.15, true);
|
|
||||||
- final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<Chunk> entityTickingChunks = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(4096, 0.75f, 4096, 0.15, true);
|
|
||||||
+ public final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<Chunk> entityTickingChunks = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(4096, 0.75f, 4096, 0.15, true); // Airplane - public for debug
|
|
||||||
// Tuinity end
|
|
||||||
|
|
||||||
public ChunkProviderServer(WorldServer worldserver, Convertable.ConversionSession convertable_conversionsession, DataFixer datafixer, DefinedStructureManager definedstructuremanager, Executor executor, ChunkGenerator chunkgenerator, int i, boolean flag, WorldLoadListener worldloadlistener, Supplier<WorldPersistentData> supplier) {
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
|
||||||
index fb61b6ac167b34486282a24e598020fb96081f28..b2e21e7034ad83a4ba1c99f860be5a0f5ee6a75f 100644
|
|
||||||
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
|
||||||
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
|
||||||
@@ -182,7 +182,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
|
||||||
public NetworkManager networkManager; // Paper
|
|
||||||
public final MinecraftServer server;
|
|
||||||
public final PlayerInteractManager playerInteractManager;
|
|
||||||
- public final Deque<Integer> removeQueue = new ArrayDeque<>(); // Paper
|
|
||||||
+ public final Deque<Integer> removeQueue = new java.util.concurrent.ConcurrentLinkedDeque<>(); // Paper // Airplane concurrent deque
|
|
||||||
private final AdvancementDataPlayer advancementDataPlayer;
|
|
||||||
private final ServerStatisticManager serverStatisticManager;
|
|
||||||
private float lastHealthScored = Float.MIN_VALUE;
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
|
||||||
index 67ca28463f5add7c18f7f16b918c3f36f8feeeda..37e64e24ca3a90370cdf12e5ff9cd1fceede796b 100644
|
|
||||||
--- a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
|
||||||
+++ b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
|
||||||
@@ -75,6 +75,10 @@ public class EntityTrackerEntry {
|
|
||||||
* Requested in https://github.com/PaperMC/Paper/issues/1537 to allow intercepting packets
|
|
||||||
*/
|
|
||||||
public void sendPlayerPacket(EntityPlayer player, Packet packet) {
|
|
||||||
+ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) {
|
|
||||||
+ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> sendPlayerPacket(player, packet));
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
player.playerConnection.sendPacket(packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -103,7 +107,7 @@ public class EntityTrackerEntry {
|
|
||||||
|
|
||||||
public final void tick() { this.a(); } // Paper - OBFHELPER
|
|
||||||
public void a() {
|
|
||||||
- com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Tracker update"); // Tuinity
|
|
||||||
+ //com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Tracker update"); // Tuinity // Airplane - allow multithreaded
|
|
||||||
List<Entity> list = this.tracker.passengers; // Paper - do not copy list
|
|
||||||
|
|
||||||
if (!list.equals(this.p)) {
|
|
||||||
@@ -116,6 +120,8 @@ public class EntityTrackerEntry {
|
|
||||||
ItemStack itemstack = entityitemframe.getItem();
|
|
||||||
|
|
||||||
if (this.tickCounter % 10 == 0 && itemstack.getItem() instanceof ItemWorldMap) { // CraftBukkit - Moved this.tickCounter % 10 logic here so item frames do not enter the other blocks
|
|
||||||
+ // Airplane start - process maps on main
|
|
||||||
+ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> {
|
|
||||||
WorldMap worldmap = ItemWorldMap.getSavedMap(itemstack, this.b);
|
|
||||||
Iterator iterator = this.trackedPlayers.iterator(); // CraftBukkit
|
|
||||||
|
|
||||||
@@ -129,6 +135,8 @@ public class EntityTrackerEntry {
|
|
||||||
entityplayer.playerConnection.sendPacket(packet);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ });
|
|
||||||
+ // Airplane end
|
|
||||||
}
|
|
||||||
|
|
||||||
this.c();
|
|
||||||
@@ -263,18 +271,25 @@ public class EntityTrackerEntry {
|
|
||||||
// CraftBukkit start - Create PlayerVelocity event
|
|
||||||
boolean cancelled = false;
|
|
||||||
|
|
||||||
- if (this.tracker instanceof EntityPlayer) {
|
|
||||||
+ if (this.tracker instanceof EntityPlayer && PlayerVelocityEvent.getHandlerList().getRegisteredListeners().length > 0) { // Airplane - ensure there's listeners
|
|
||||||
+ // Airplane start - run on main thread
|
|
||||||
+ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> {
|
|
||||||
Player player = (Player) this.tracker.getBukkitEntity();
|
|
||||||
org.bukkit.util.Vector velocity = player.getVelocity();
|
|
||||||
|
|
||||||
PlayerVelocityEvent event = new PlayerVelocityEvent(player, velocity.clone());
|
|
||||||
this.tracker.world.getServer().getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
- if (event.isCancelled()) {
|
|
||||||
- cancelled = true;
|
|
||||||
- } else if (!velocity.equals(event.getVelocity())) {
|
|
||||||
+ if (!event.isCancelled() && !velocity.equals(event.getVelocity())) {
|
|
||||||
player.setVelocity(event.getVelocity());
|
|
||||||
}
|
|
||||||
+ if (!event.isCancelled()) {
|
|
||||||
+ this.broadcastIncludingSelf(new PacketPlayOutEntityVelocity(this.tracker)); // duplicate from !cancelled below
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ });
|
|
||||||
+ cancelled = true; // don't broadcast until the event has finished
|
|
||||||
+ // Airplane end
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!cancelled) {
|
|
||||||
@@ -358,7 +373,9 @@ public class EntityTrackerEntry {
|
|
||||||
if (!list.isEmpty()) {
|
|
||||||
consumer.accept(new PacketPlayOutEntityEquipment(this.tracker.getId(), list));
|
|
||||||
}
|
|
||||||
+ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> { // Airplane
|
|
||||||
((EntityLiving) this.tracker).updateEquipment(); // CraftBukkit - SPIGOT-3789: sync again immediately after sending
|
|
||||||
+ }); // Airplane
|
|
||||||
}
|
|
||||||
|
|
||||||
// CraftBukkit start - Fix for nonsensical head yaw
|
|
||||||
@@ -436,6 +453,10 @@ public class EntityTrackerEntry {
|
|
||||||
// Paper end
|
|
||||||
|
|
||||||
private void broadcastIncludingSelf(Packet<?> packet) {
|
|
||||||
+ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) {
|
|
||||||
+ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> broadcastIncludingSelf(packet));
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
this.f.accept(packet);
|
|
||||||
if (this.tracker instanceof EntityPlayer) {
|
|
||||||
((EntityPlayer) this.tracker).playerConnection.sendPacket(packet);
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
|
||||||
index 914c7a1b18151f29183cfe9474313ce18e7c4ae2..737851cde7752e7cccf226f1868a38d6411bfb31 100644
|
|
||||||
--- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
|
||||||
+++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
|
||||||
@@ -769,6 +769,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
|
||||||
return this.updatingChunks.getVisibleAsync(i);
|
|
||||||
// Tuinity end - Don't copy
|
|
||||||
}
|
|
||||||
+ // Airplane start - since neither map can be updated during tracker tick, it's safe to allow direct retrieval here
|
|
||||||
+ private PlayerChunk trackerGetVisibleChunk(long i) {
|
|
||||||
+ return this.updatingChunks.getVisibleAsync(i);
|
|
||||||
+ }
|
|
||||||
+ // Airplane end
|
|
||||||
|
|
||||||
protected final IntSupplier getPrioritySupplier(long i) { return c(i); } // Paper - OBFHELPER
|
|
||||||
protected IntSupplier c(long i) {
|
|
||||||
@@ -2164,10 +2169,30 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
|
||||||
entity.tracker = null; // Paper - We're no longer tracked
|
|
||||||
}
|
|
||||||
|
|
||||||
+ // Airplane start - tools to ensure main thread
|
|
||||||
+ private final java.util.concurrent.ConcurrentLinkedQueue<Runnable> trackerMainQueue = new java.util.concurrent.ConcurrentLinkedQueue<>();
|
|
||||||
+ private gg.airplane.structs.TrackQueue trackQueue;
|
|
||||||
+
|
|
||||||
+ void trackerEnsureMain(Runnable runnable) {
|
|
||||||
+ if (this.world.serverThread == Thread.currentThread()) {
|
|
||||||
+ runnable.run();
|
|
||||||
+ } else {
|
|
||||||
+ this.trackerMainQueue.add(runnable);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ // Airplane end
|
|
||||||
+
|
|
||||||
// Paper start - optimised tracker
|
|
||||||
private final void processTrackQueue() {
|
|
||||||
this.world.timings.tracker1.startTiming();
|
|
||||||
try {
|
|
||||||
+ // Airplane start - multithreaded tracker
|
|
||||||
+ if (this.trackQueue == null) this.trackQueue = new gg.airplane.structs.TrackQueue(this.world.getChunkProvider().entityTickingChunks, trackerMainQueue);
|
|
||||||
+ if (gg.airplane.AirplaneConfig.multithreadedEntityTracker) {
|
|
||||||
+ this.trackQueue.start();
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ // Airplane end
|
|
||||||
com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet.Iterator<Chunk> iterator = this.world.getChunkProvider().entityTickingChunks.iterator();
|
|
||||||
try {
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
@@ -2433,7 +2458,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially
|
|
||||||
public class EntityTracker {
|
|
||||||
|
|
||||||
final EntityTrackerEntry trackerEntry; // Paper - private -> package private
|
|
||||||
- private final Entity tracker;
|
|
||||||
+ public final Entity tracker; // Airplane - public for chunk
|
|
||||||
private final int trackingDistance;
|
|
||||||
private SectionPosition e;
|
|
||||||
// Paper start
|
|
||||||
@@ -2452,7 +2477,9 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially
|
|
||||||
// Paper start - use distance map to optimise tracker
|
|
||||||
com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> lastTrackerCandidates;
|
|
||||||
|
|
||||||
- final void updatePlayers(com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> newTrackerCandidates) {
|
|
||||||
+ public synchronized final void tickEntry() { this.trackerEntry.tick(); } // Airplane - move entry tick into sync block
|
|
||||||
+
|
|
||||||
+ public synchronized final void updatePlayers(com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> newTrackerCandidates) { // Airplane
|
|
||||||
com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<EntityPlayer> oldTrackerCandidates = this.lastTrackerCandidates;
|
|
||||||
this.lastTrackerCandidates = newTrackerCandidates;
|
|
||||||
|
|
||||||
@@ -2493,7 +2520,13 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially
|
|
||||||
return this.tracker.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
- public void broadcast(Packet<?> packet) {
|
|
||||||
+ public synchronized void broadcast(Packet<?> packet) { // Airplane - synchronized for tracked player
|
|
||||||
+ // Airplane start
|
|
||||||
+ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) {
|
|
||||||
+ trackerEnsureMain(() -> broadcast(packet));
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ // Airplane end
|
|
||||||
Iterator iterator = this.trackedPlayers.iterator();
|
|
||||||
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
@@ -2505,6 +2538,12 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially
|
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastIncludingSelf(Packet<?> packet) {
|
|
||||||
+ // Airplane start
|
|
||||||
+ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) {
|
|
||||||
+ trackerEnsureMain(() -> broadcastIncludingSelf(packet));
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ // Airplane end
|
|
||||||
this.broadcast(packet);
|
|
||||||
if (this.tracker instanceof EntityPlayer) {
|
|
||||||
((EntityPlayer) this.tracker).playerConnection.sendPacket(packet);
|
|
||||||
@@ -2531,8 +2570,8 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
- public void updatePlayer(EntityPlayer entityplayer) {
|
|
||||||
- org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot
|
|
||||||
+ public synchronized void updatePlayer(EntityPlayer entityplayer) { // Airplane - sync for access to map
|
|
||||||
+ //org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot // Airplane - allow sync for tracker
|
|
||||||
if (entityplayer != this.tracker) {
|
|
||||||
// Paper start - remove allocation of Vec3D here
|
|
||||||
//Vec3D vec3d = entityplayer.getPositionVector().d(this.tracker.getPositionVector()); // MC-155077, SPIGOT-5113
|
|
||||||
@@ -2553,7 +2592,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially
|
|
||||||
*/
|
|
||||||
int x = this.tracker.chunkX, z = this.tracker.chunkZ;
|
|
||||||
long chunkcoordintpair = ChunkCoordIntPair.pair(x, z);
|
|
||||||
- PlayerChunk playerchunk = PlayerChunkMap.this.getVisibleChunk(chunkcoordintpair);
|
|
||||||
+ PlayerChunk playerchunk = PlayerChunkMap.this.trackerGetVisibleChunk(chunkcoordintpair); // Airplane
|
|
||||||
|
|
||||||
if (playerchunk != null && playerchunk.getSendingChunk() != null && PlayerChunkMap.this.playerChunkManager.isChunkSent(entityplayer, MathHelper.floor(this.tracker.locX()) >> 4, MathHelper.floor(this.tracker.locZ()) >> 4)) { // Paper - no-tick view distance // Tuinity - don't broadcast in chunks the player hasn't received
|
|
||||||
flag1 = PlayerChunkMap.someDistanceCalculation(x, z, entityplayer, false) <= PlayerChunkMap.this.viewDistance;
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/Chunk.java b/src/main/java/net/minecraft/world/level/chunk/Chunk.java
|
|
||||||
index 8f5809756b4fb358f1207c1d61c5cbe6df3fff00..2e8eb0bb8fb4f7ce6b92fe01a81327da30e614ae 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/level/chunk/Chunk.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/level/chunk/Chunk.java
|
|
||||||
@@ -111,6 +111,26 @@ public class Chunk implements IChunkAccess {
|
|
||||||
}
|
|
||||||
// Airplane end
|
|
||||||
|
|
||||||
+ // Airplane start - entity tracker runnable
|
|
||||||
+ // prevents needing to allocate new lambda in processTrackQueue
|
|
||||||
+ public final Runnable entityTracker = new Runnable() {
|
|
||||||
+ @Override
|
|
||||||
+ public void run() {
|
|
||||||
+ Entity[] entities = Chunk.this.entities.getRawData();
|
|
||||||
+ for (int i = 0, len = Chunk.this.entities.size(); i < len; ++i) {
|
|
||||||
+ Entity entity = entities[i];
|
|
||||||
+ if (entity != null) {
|
|
||||||
+ PlayerChunkMap.EntityTracker tracker = ((WorldServer) Chunk.this.getWorld()).getChunkProvider().playerChunkMap.trackedEntities.get(entity.getId());
|
|
||||||
+ if (tracker != null) {
|
|
||||||
+ tracker.updatePlayers(tracker.tracker.getPlayersInTrackRange());
|
|
||||||
+ tracker.tickEntry();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ };
|
|
||||||
+ // Airplane end
|
|
||||||
+
|
|
||||||
public Chunk(World world, ChunkCoordIntPair chunkcoordintpair, BiomeStorage biomestorage) {
|
|
||||||
this(world, chunkcoordintpair, biomestorage, ChunkConverter.a, TickListEmpty.b(), TickListEmpty.b(), 0L, (ChunkSection[]) null, (Consumer) null);
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] AFK API
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
index b2e21e7034ad83a4ba1c99f860be5a0f5ee6a75f..598b30244e74a56d62dc4ace5362225447860a0a 100644
|
index fb61b6ac167b34486282a24e598020fb96081f28..c42a2813b40152079786dde33231d945f3144580 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
@@ -2071,8 +2071,54 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
@@ -2071,8 +2071,54 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||||
@@ -86,7 +86,7 @@ index 51bb2502e4efb052f55de6eabce07f59e936c9d9..4f1b055dfe38f6a48763f75c1795dcd6
|
|||||||
} else if (entityplayer.isSleeping()) {
|
} else if (entityplayer.isSleeping()) {
|
||||||
++j;
|
++j;
|
||||||
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
index 159c38618d7745ea513ad179b1217d76c2c4897a..15349a7bddcad5a4a6db07a8aa6ae8d06163b1f6 100644
|
index 53320d1d134305c0b37442dfca9931629a6d196d..1f4e45f6e70032bfeeafe30d038e14e052e6ad9d 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
@@ -399,6 +399,12 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
@@ -399,6 +399,12 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Player invulnerabilities
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
index 598b30244e74a56d62dc4ace5362225447860a0a..f59d7e245aa3768004c7f82837a7482260a53406 100644
|
index c42a2813b40152079786dde33231d945f3144580..6e3a3a50e01c41b40451bce05015714b5a7fe1e3 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
@@ -284,6 +284,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
@@ -284,6 +284,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||||
@@ -67,7 +67,7 @@ index 598b30244e74a56d62dc4ace5362225447860a0a..f59d7e245aa3768004c7f82837a74822
|
|||||||
public Scoreboard getScoreboard() {
|
public Scoreboard getScoreboard() {
|
||||||
return getBukkitEntity().getScoreboard().getHandle();
|
return getBukkitEntity().getScoreboard().getHandle();
|
||||||
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
index 15349a7bddcad5a4a6db07a8aa6ae8d06163b1f6..37663436c1ffed4552cdcdac7a5c09fe9b632fee 100644
|
index 1f4e45f6e70032bfeeafe30d038e14e052e6ad9d..568fea41d12f2817b09768ff3b03f76930ad676c 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
@@ -1896,6 +1896,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
@@ -1896,6 +1896,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||||
@@ -79,7 +79,7 @@ index 15349a7bddcad5a4a6db07a8aa6ae8d06163b1f6..37663436c1ffed4552cdcdac7a5c09fe
|
|||||||
this.server.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(getPlayer(), packStatus));
|
this.server.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(getPlayer(), packStatus));
|
||||||
// Paper end
|
// Paper end
|
||||||
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
index c705bf1e651a764d56b87ebc5a86a938d8bd34bb..9360d35581c6961a768973cc31341381ee26e234 100644
|
index b5043eabe63fe703a321cff6c0f6449cf729cd0e..456d87ffb2303867ac1e586078b4f81c059b0e74 100644
|
||||||
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -1009,6 +1009,8 @@ public abstract class PlayerList {
|
@@ -1009,6 +1009,8 @@ public abstract class PlayerList {
|
||||||
@@ -17,7 +17,7 @@ index b4c37287362907b8507d156b978ba5b9d961bb7b..9e6e6636539702507abb78515e002819
|
|||||||
return this.a;
|
return this.a;
|
||||||
}
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
index 37663436c1ffed4552cdcdac7a5c09fe9b632fee..f5ada346a11ac3becda4b87416beebd680ca16fa 100644
|
index 568fea41d12f2817b09768ff3b03f76930ad676c..54327914233580282ee86e46712d1ba0d176bcc4 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
@@ -233,6 +233,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
@@ -233,6 +233,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||||
@@ -26,10 +26,10 @@ index 0eed10a6c4e0c7245f219d19ed1e2e5c94364db9..2b54a5f3347f788b751892105f888663
|
|||||||
protected boolean h;
|
protected boolean h;
|
||||||
protected boolean i;
|
protected boolean i;
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
diff --git a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
||||||
index 37e64e24ca3a90370cdf12e5ff9cd1fceede796b..f63ec5fa5a1cb34f4809a06a29d01603efb178f1 100644
|
index 67ca28463f5add7c18f7f16b918c3f36f8feeeda..53e773c14689967d5b12467bf209eefb05f7a812 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
--- a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
+++ b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
||||||
@@ -208,6 +208,7 @@ public class EntityTrackerEntry {
|
@@ -200,6 +200,7 @@ public class EntityTrackerEntry {
|
||||||
this.o = 0;
|
this.o = 0;
|
||||||
packet1 = new PacketPlayOutEntityTeleport(this.tracker);
|
packet1 = new PacketPlayOutEntityTeleport(this.tracker);
|
||||||
}
|
}
|
||||||
@@ -37,7 +37,7 @@ index 37e64e24ca3a90370cdf12e5ff9cd1fceede796b..f63ec5fa5a1cb34f4809a06a29d01603
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((this.e || this.tracker.impulse || this.tracker instanceof EntityLiving && ((EntityLiving) this.tracker).isGliding()) && this.tickCounter > 0) {
|
if ((this.e || this.tracker.impulse || this.tracker instanceof EntityLiving && ((EntityLiving) this.tracker).isGliding()) && this.tickCounter > 0) {
|
||||||
@@ -301,6 +302,22 @@ public class EntityTrackerEntry {
|
@@ -286,6 +287,22 @@ public class EntityTrackerEntry {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Signs allow color codes
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
index f59d7e245aa3768004c7f82837a7482260a53406..c337b22a2f8ce5c76a1699956f6c06721046e814 100644
|
index 6e3a3a50e01c41b40451bce05015714b5a7fe1e3..43900bb788f4baef420de0782c77d74dd7310f6e 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
@@ -1579,6 +1579,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
@@ -1579,6 +1579,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||||
@@ -17,7 +17,7 @@ index f59d7e245aa3768004c7f82837a7482260a53406..c337b22a2f8ce5c76a1699956f6c0672
|
|||||||
this.playerConnection.sendPacket(new PacketPlayOutOpenSignEditor(tileentitysign.getPosition()));
|
this.playerConnection.sendPacket(new PacketPlayOutOpenSignEditor(tileentitysign.getPosition()));
|
||||||
}
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
index f5ada346a11ac3becda4b87416beebd680ca16fa..4f094f026b118775cae84024b2ba6c33e14784e6 100644
|
index 54327914233580282ee86e46712d1ba0d176bcc4..6451d5a6d491959ea537d11d0dde077578fed381 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
@@ -3073,6 +3073,15 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
@@ -3073,6 +3073,15 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||||
@@ -22,7 +22,7 @@ index 3c51ee00aa53e561c02bb779c7115d8475d70ed7..47381b2a804f1e2296d654933d77c2da
|
|||||||
super(i, j, k);
|
super(i, j, k);
|
||||||
}
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
index c337b22a2f8ce5c76a1699956f6c06721046e814..7fd6c93e7c7cd8f86d06710d39e4431e001bd97b 100644
|
index 43900bb788f4baef420de0782c77d74dd7310f6e..01d4aa706f5c1cf35210bbdbf25b4687d110eaa1 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
@@ -1132,6 +1132,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
@@ -1132,6 +1132,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Players should not cram to death
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
index 7fd6c93e7c7cd8f86d06710d39e4431e001bd97b..0f6760c6922be4a4322ebbc6212b0d88494f5a52 100644
|
index 01d4aa706f5c1cf35210bbdbf25b4687d110eaa1..257265a036a62c7d5fbcff17a10a41198ed880a4 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
@@ -1556,7 +1556,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
@@ -1556,7 +1556,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Add permission for F3+N debug
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
index 9360d35581c6961a768973cc31341381ee26e234..c742647c0c5e3e4925e4ee6d195a54a85435e65e 100644
|
index 456d87ffb2303867ac1e586078b4f81c059b0e74..92d696ee1812e8cfb8a853b5254db3ef5e4d2266 100644
|
||||||
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -1168,6 +1168,7 @@ public abstract class PlayerList {
|
@@ -1168,6 +1168,7 @@ public abstract class PlayerList {
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Item entity immunities
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
diff --git a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
||||||
index f63ec5fa5a1cb34f4809a06a29d01603efb178f1..b773480baef218d0aab2f524e7e305c18443517d 100644
|
index 53e773c14689967d5b12467bf209eefb05f7a812..04c4012d2f57025c28607c12b71cd1737ed7cac5 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
--- a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
+++ b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
||||||
@@ -31,6 +31,7 @@ import net.minecraft.world.entity.EntityLiving;
|
@@ -31,6 +31,7 @@ import net.minecraft.world.entity.EntityLiving;
|
||||||
@@ -25,7 +25,7 @@ index f63ec5fa5a1cb34f4809a06a29d01603efb178f1..b773480baef218d0aab2f524e7e305c1
|
|||||||
// Paper start
|
// Paper start
|
||||||
private java.util.Map<EntityPlayer, Boolean> trackedPlayerMap = null;
|
private java.util.Map<EntityPlayer, Boolean> trackedPlayerMap = null;
|
||||||
|
|
||||||
@@ -142,6 +143,15 @@ public class EntityTrackerEntry {
|
@@ -134,6 +135,15 @@ public class EntityTrackerEntry {
|
||||||
this.c();
|
this.c();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,16 +42,16 @@ index f63ec5fa5a1cb34f4809a06a29d01603efb178f1..b773480baef218d0aab2f524e7e305c1
|
|||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
||||||
index 737851cde7752e7cccf226f1868a38d6411bfb31..ae32fe66a70d583993fe81de4c95b7b2fe8a6fc8 100644
|
index 914c7a1b18151f29183cfe9474313ce18e7c4ae2..12c0a0cebc9db542a654ff2a2826f1bcf4a72baa 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
--- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
+++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java
|
||||||
@@ -2457,7 +2457,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially
|
@@ -2432,7 +2432,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially
|
||||||
|
|
||||||
public class EntityTracker {
|
public class EntityTracker {
|
||||||
|
|
||||||
- final EntityTrackerEntry trackerEntry; // Paper - private -> package private
|
- final EntityTrackerEntry trackerEntry; // Paper - private -> package private
|
||||||
+ public final EntityTrackerEntry trackerEntry; // Paper - private -> public
|
+ public final EntityTrackerEntry trackerEntry; // Paper - private -> package private // Purpur -> public
|
||||||
public final Entity tracker; // Airplane - public for chunk
|
private final Entity tracker;
|
||||||
private final int trackingDistance;
|
private final int trackingDistance;
|
||||||
private SectionPosition e;
|
private SectionPosition e;
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Allow color codes in books
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
index 4f094f026b118775cae84024b2ba6c33e14784e6..c4ef3fef4db2326a531694e6798bab6103c7061c 100644
|
index 6451d5a6d491959ea537d11d0dde077578fed381..e63e7f30db64d30840037d996c153822ce80fbbd 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
@@ -1211,7 +1211,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
@@ -1211,7 +1211,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Entity lifespan
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
index c4ef3fef4db2326a531694e6798bab6103c7061c..92437cf4413ea76ef139b007adf2b76c2729dad2 100644
|
index e63e7f30db64d30840037d996c153822ce80fbbd..1c7579a1426c831484fe095d13169c2c47906843 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||||
@@ -2458,6 +2458,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
@@ -2458,6 +2458,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
index 0f6760c6922be4a4322ebbc6212b0d88494f5a52..53c2bb5af825255e8c786bf02052f41c5d3e270b 100644
|
index 257265a036a62c7d5fbcff17a10a41198ed880a4..da708df0dc50ea02441f9db2bfd52f04d9a8e3da 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||||
@@ -2556,4 +2556,26 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
@@ -2556,4 +2556,26 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user