diff --git a/PATCHES.md b/PATCHES.md
index 984201c3..7ee4ac29 100644
--- a/PATCHES.md
+++ b/PATCHES.md
@@ -267,7 +267,6 @@ # Patches
| server | Make entity tracker use highest range of passengers | Spottedleaf | |
| server | Make lava flow speed configurable | William Blake Galbreath | |
| server | Make sure inlined getChunkAt has inlined logic for loaded | Spottedleaf | |
-| server | Make sure to remove correct TE during TE tick | Spottedleaf | |
| server | Manually inline methods in BlockPosition | Spottedleaf | |
| server | Mending mends most damages equipment first | William Blake Galbreath | |
| server | Modify POM | YatopiaMC | |
@@ -331,7 +330,6 @@ # Patches
| server | Players should not cram to death | William Blake Galbreath | |
| server | Populator seed controls | Spottedleaf | |
| server | Preload ProtocolLib EnumWrappers | ishland | |
-| server | Prevent light queue overfill when no players are online | Spottedleaf | |
| server | Prevent long map entry creation in light engine | Spottedleaf | |
| server | Prevent unload() calls removing tickets for sync loads | Spottedleaf | |
| server | Projectile offset config | YouHaveTrouble | |
@@ -399,7 +397,6 @@ # Patches
| server | Toggle for Zombified Piglin death always counting as player | jmp | |
| server | Toggle for water sensitive mob damage | YouHaveTrouble | |
| server | Totems work in inventory | draycia | |
-| server | Track Queue debug | Paul Sauve | |
| server | Tuinity POM Changes | Spottedleaf | |
| api | Tuinity POM Changes | Spottedleaf | |
| server | Tuinity Server Config | Spottedleaf | |
diff --git a/Paper b/Paper
index 8b47131d..211f8e04 160000
--- a/Paper
+++ b/Paper
@@ -1 +1 @@
-Subproject commit 8b47131da76e9a0e4da00d1888950a6e4fa3d07b
+Subproject commit 211f8e041c69147d305897bfbba251295e93eaa9
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 2a563242..442d9132 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/patches/Airplane/patches/server/0002-Airplane-Branding-Changes.patch b/patches/Airplane/patches/server/0002-Airplane-Branding-Changes.patch
index 2344798b..bbdf7945 100644
--- a/patches/Airplane/patches/server/0002-Airplane-Branding-Changes.patch
+++ b/patches/Airplane/patches/server/0002-Airplane-Branding-Changes.patch
@@ -72,7 +72,7 @@ index 7063f1da3654b382e26b0093ad5d0ff04a2b38c2..b9c5479e5561f8fe68ea8f94fbf4e64d
return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index e757cb5c2d50cb3a4dbe50d4726db09ab845fcbb..7cbbc1b1161f26f22a7f7832395af0d4a781cb1a 100644
+index 02d8a8f13d81c47316f704fb700afd0214a5f546..ca10d901ebd56bdee54f3c8cf607a5a34cd79f32 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1636,7 +1636,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant.
+diff --git a/pom.xml b/pom.xml
+index a3a3b17f3b30b55bb50905353e77723091bb5c1f..f9ead3ed315a3e726233545f35358cca0fc68e06 100644
+--- a/pom.xml
++++ b/pom.xml
+@@ -159,6 +159,13 @@
+ 1.1.0-SNAPSHOT
+ compile
+
++
++
++ com.github.technove
++ AIR
++ fe3dbb4420
++ compile
++
+
+
+
diff --git a/src/main/java/gg/airplane/AirplaneCommand.java b/src/main/java/gg/airplane/AirplaneCommand.java
new file mode 100644
-index 0000000000000000000000000000000000000000..1fa9b40e2f89272fa8bc9d927a9a852b5eb0db22
+index 0000000000000000000000000000000000000000..89c89e633f14b5820147e734b1b7ad8cadfdce80
--- /dev/null
+++ b/src/main/java/gg/airplane/AirplaneCommand.java
-@@ -0,0 +1,56 @@
+@@ -0,0 +1,65 @@
+package gg.airplane;
+
++import net.kyori.adventure.text.Component;
++import net.kyori.adventure.text.format.NamedTextColor;
+import net.md_5.bungee.api.ChatColor;
+import net.minecraft.server.MinecraftServer;
+import org.bukkit.Bukkit;
@@ -36,6 +56,7 @@ index 0000000000000000000000000000000000000000..1fa9b40e2f89272fa8bc9d927a9a852b
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+
++import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
@@ -72,7 +93,13 @@ index 0000000000000000000000000000000000000000..1fa9b40e2f89272fa8bc9d927a9a852b
+
+ if (args[0].equalsIgnoreCase("reload")) {
+ MinecraftServer console = MinecraftServer.getServer();
-+ AirplaneConfig.load();
++ try {
++ AirplaneConfig.load();
++ } catch (IOException e) {
++ sender.sendMessage(Component.text("Failed to reload.", NamedTextColor.RED));
++ e.printStackTrace();
++ return true;
++ }
+ console.server.reloadCount++;
+
+ Command.broadcastCommandMessage(sender, prefix + "Airplane configuration has been reloaded.");
@@ -85,37 +112,42 @@ index 0000000000000000000000000000000000000000..1fa9b40e2f89272fa8bc9d927a9a852b
+}
diff --git a/src/main/java/gg/airplane/AirplaneConfig.java b/src/main/java/gg/airplane/AirplaneConfig.java
new file mode 100644
-index 0000000000000000000000000000000000000000..fbb9544027a48941bd0938d8f607e8c7ff9443a1
+index 0000000000000000000000000000000000000000..ab019b577002677a4ce788106f8e5a1d7757a2ae
--- /dev/null
+++ b/src/main/java/gg/airplane/AirplaneConfig.java
-@@ -0,0 +1,47 @@
+@@ -0,0 +1,50 @@
+package gg.airplane;
+
-+import gg.airplane.manual.ManualParser;
++import co.technove.air.AIR;
+import net.minecraft.server.MinecraftServer;
+import org.apache.logging.log4j.Level;
+
+import java.io.File;
++import java.io.FileInputStream;
++import java.io.FileOutputStream;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+
+public class AirplaneConfig {
+
-+ private static ManualParser manual;
++ private static AIR config;
+
-+ public static void load() {
-+ try {
-+ manual = new ManualParser(new File("airplane.air"));
-+ } catch (IOException e) {
-+ e.printStackTrace();
++ public static void load() throws IOException {
++ File configFile = new File("airplane.air");
++ if (configFile.exists()) {
++ try (FileInputStream inputStream = new FileInputStream(configFile)) {
++ config = new AIR(inputStream);
++ }
++ } else {
++ config = new AIR();
+ }
+
-+ manual.get("info.version", "1.0");
-+ manual.setComment("info",
++ config.setComment("info",
+ "Airplane Configuration",
+ "Read https://blog.airplane.gg/ to find out more about Airplane",
+ "Join our Discord to receive support & optimization help: https://discord.gg/3gtc45q");
++ config.getString("info.version", "1.0");
+
+ for (Method method : AirplaneConfig.class.getDeclaredMethods()) {
+ if (Modifier.isStatic(method.getModifiers()) && Modifier.isPrivate(method.getModifiers())) {
@@ -128,10 +160,8 @@ index 0000000000000000000000000000000000000000..fbb9544027a48941bd0938d8f607e8c7
+ }
+ }
+
-+ try {
-+ manual.save();
-+ } catch (IOException e) {
-+ e.printStackTrace();
++ try (FileOutputStream outputStream = new FileOutputStream(configFile)) {
++ config.save(outputStream);
+ }
+ }
+
@@ -152,222 +182,6 @@ index 0000000000000000000000000000000000000000..807cf274619b8f7be839e249cb62b981
+ MinecraftServer.getServer().server.getCommandMap().register("airplane", "Airplane", new AirplaneCommand());
+ }
+}
-diff --git a/src/main/java/gg/airplane/manual/ManualParser.java b/src/main/java/gg/airplane/manual/ManualParser.java
-new file mode 100644
-index 0000000000000000000000000000000000000000..ace29adb0f140d99a8d85ac824654beded4bf5b8
---- /dev/null
-+++ b/src/main/java/gg/airplane/manual/ManualParser.java
-@@ -0,0 +1,210 @@
-+package gg.airplane.manual;
-+
-+import java.io.BufferedReader;
-+import java.io.BufferedWriter;
-+import java.io.File;
-+import java.io.FileReader;
-+import java.io.FileWriter;
-+import java.io.IOException;
-+import java.util.ArrayList;
-+import java.util.Arrays;
-+import java.util.LinkedHashMap;
-+import java.util.List;
-+import java.util.Map;
-+import java.util.TreeMap;
-+
-+// todo make this cleaner and more ergonomic to use
-+// also probably needs lists eventually
-+public class ManualParser {
-+
-+ private final File file;
-+ private final Map sections = new LinkedHashMap<>();
-+
-+ private static class ManualObject {
-+ public final String key;
-+ public final List comments;
-+
-+ private ManualObject(String key, List comments) {
-+ this.key = key;
-+ this.comments = comments == null ? new ArrayList<>() : comments;
-+ }
-+ }
-+
-+ private static class Section extends ManualObject {
-+ public final Map values;
-+
-+ private Section(String key, List comments) {
-+ super(key, comments);
-+ this.values = new LinkedHashMap<>();
-+ }
-+
-+ public void add(String key, Value value) {
-+ this.values.put(key, value);
-+ value.parent = this;
-+ }
-+
-+ public Value get(String key) {
-+ return this.values.computeIfAbsent(key, k -> {
-+ Value value = new Value(k, null, null);
-+ value.parent = this;
-+ return value;
-+ });
-+ }
-+ }
-+
-+ private static class Value extends ManualObject {
-+ public Object value;
-+ public Section parent;
-+
-+ private Value(String key, Object value, List comments) {
-+ super(key, comments);
-+ this.value = value;
-+ }
-+ }
-+
-+ public ManualParser(File file) throws IOException {
-+ this.file = file;
-+
-+ if (!file.exists()) {
-+ return;
-+ }
-+
-+ try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
-+ Section currentSection = null;
-+ List currentComment = new ArrayList<>();
-+
-+ String line;
-+ while ((line = reader.readLine()) != null) {
-+ line = line.trim();
-+
-+ if (line.length() == 0) {
-+ continue; // empty line
-+ }
-+
-+ if (line.startsWith("#")) {
-+ currentComment.add(line.substring(1).trim());
-+ } else if (line.startsWith("[")) {
-+ if (!line.endsWith("]")) {
-+ throw new IllegalArgumentException("Invalid configuration, section '" + line + "' does not end with ]");
-+ }
-+ if (line.length() < 3) {
-+ throw new IllegalArgumentException("Invalid configuration, section '" + line + "' does not have a name");
-+ }
-+ String sectionName = line.substring(1, line.length() - 1);
-+ Section newSection = new Section(sectionName, currentComment);
-+ currentComment = new ArrayList<>();
-+ currentSection = newSection;
-+ this.sections.put(sectionName, newSection);
-+ } else {
-+ if (currentSection == null) {
-+ throw new IllegalArgumentException("Invalid configuration, found value outside of section " + line);
-+ }
-+ int equals = line.indexOf("=");
-+ if (equals <= 1 || equals == line.length() - 1) {
-+ throw new IllegalArgumentException("Invalid configuration, assignment invalid " + line);
-+ }
-+
-+ String key = line.substring(0, equals).trim();
-+
-+ String value = line.substring(equals + 1).trim();
-+ if (value.length() == 0) {
-+ throw new IllegalArgumentException("Invalid configuration, value does not exist " + line);
-+ }
-+ if (value.startsWith("\"")) {
-+ if (!value.endsWith("\"")) {
-+ throw new IllegalArgumentException("Invalid configuration, value has no ending quote " + line);
-+ }
-+ String stringValue = value.substring(1, value.length() - 1);
-+ currentSection.add(key, new Value(key, stringValue, currentComment));
-+ } else if (Character.isDigit(value.charAt(0))) {
-+ if (value.contains(".")) {
-+ double doubleValue = Double.parseDouble(value);
-+ currentSection.add(key, new Value(key, doubleValue, currentComment));
-+ } else {
-+ int intValue = Integer.parseInt(value);
-+ currentSection.add(key, new Value(key, intValue, currentComment));
-+ }
-+ } else if (value.equals("true") || value.equals("false")) {
-+ boolean boolValue = Boolean.parseBoolean(value);
-+ currentSection.add(key, new Value(key, boolValue, currentComment));
-+ } else {
-+ throw new IllegalArgumentException("Invalid configuration, unknown type for " + line);
-+ }
-+ currentComment = new ArrayList<>();
-+ }
-+ }
-+ }
-+ }
-+
-+ public void save() throws IOException {
-+ try (BufferedWriter writer = new BufferedWriter(new FileWriter(this.file))) {
-+ for (Map.Entry entry : this.sections.entrySet()) {
-+ Section section = entry.getValue();
-+ if (section.comments != null) {
-+ for (String comment : section.comments) {
-+ writer.write("# " + comment + "\n");
-+ }
-+ }
-+ writer.write("[" + section.key + "]" + "\n");
-+ for (Value value : section.values.values()) {
-+ if (value.comments != null) {
-+ for (String comment : value.comments) {
-+ writer.write(" # " + comment + "\n");
-+ }
-+ }
-+ writer.write(" " + value.key + " = " + serialize(value.value) + "\n");
-+ }
-+ writer.write("\n");
-+ }
-+ }
-+ }
-+
-+ private ManualObject getObject(String key) {
-+ String[] split = key.split("\\.", 2);
-+ if (split.length == 1) {
-+ return this.sections.computeIfAbsent(key, k -> new Section(k, null));
-+ }
-+ return this.sections.computeIfAbsent(split[0], k -> new Section(k, null)).get(split[1]);
-+ }
-+
-+ public void setComment(String key, String... comment) {
-+ ManualObject object = this.getObject(key);
-+ object.comments.clear();
-+ object.comments.addAll(Arrays.asList(comment));
-+ }
-+
-+ public T get(String key, T defaultValue, String... comment) {
-+ String[] split = key.split("\\.", 2);
-+ if (split.length == 1) {
-+ throw new IllegalArgumentException("Key " + key + " does not include section");
-+ }
-+ Section section = this.sections.computeIfAbsent(split[0], k -> new Section(k, null));
-+ if (!section.values.containsKey(split[1])) {
-+ Value value = section.get(split[1]);
-+ value.value = defaultValue;
-+ value.comments.addAll(Arrays.asList(comment));
-+ return defaultValue;
-+ }
-+ Value value = section.get(split[1]);
-+ if (value.comments.isEmpty()) {
-+ value.comments.addAll(Arrays.asList(comment));
-+ }
-+ return (T) value.value;
-+ }
-+
-+ public void set(String key, Object value) {
-+ ManualObject object = getObject(key);
-+ if (!(object instanceof Value)) {
-+ throw new IllegalArgumentException("Invalid key for value " + key);
-+ }
-+ ((Value) object).value = value;
-+ }
-+
-+ private String serialize(Object object) {
-+ if (object instanceof String) {
-+ return "\"" + object + "\"";
-+ }
-+ return String.valueOf(object);
-+ }
-+
-+}
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
index d902efdb8f2d42ea4c3933f7fa76ebe135ee09db..24a46ad36613faa5f5a1a12b70f7af886e1608ae 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
diff --git a/patches/Airplane/patches/server/0005-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch b/patches/Airplane/patches/server/0005-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch
index ed4d7a5f..879bab6e 100644
--- a/patches/Airplane/patches/server/0005-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch
+++ b/patches/Airplane/patches/server/0005-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch
@@ -108,7 +108,7 @@ index e612e1d30f76e217b1aa23488ab025adce048f57..c9198d242b9053fad6fa5b53c1894679
default MovingObjectPositionBlock rayTraceBlock(RayTrace raytrace1, BlockPosition blockposition) {
// Paper start - Prevent raytrace from loading chunks
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
-index 68fa071fc576f398682ef461df102be432cdcb4c..9860bef7d4372071228532d28e6d21e675dff25c 100644
+index af01f5d635eada7175b9d7fdb47a65530686a539..3e08e56f67516333e7d880fdc595447a3ae4dc83 100644
--- a/src/main/java/net/minecraft/world/level/World.java
+++ b/src/main/java/net/minecraft/world/level/World.java
@@ -69,6 +69,8 @@ import net.minecraft.world.level.saveddata.maps.WorldMap;
diff --git a/patches/Airplane/patches/server/0008-Swap-priority-of-checks-in-chunk-ticking.patch b/patches/Airplane/patches/server/0008-Swap-priority-of-checks-in-chunk-ticking.patch
index 2dae8f6d..9b0a5634 100644
--- a/patches/Airplane/patches/server/0008-Swap-priority-of-checks-in-chunk-ticking.patch
+++ b/patches/Airplane/patches/server/0008-Swap-priority-of-checks-in-chunk-ticking.patch
@@ -23,7 +23,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index 46f960b9276dced41deb8f741454b6cce5a81529..277132da0b3672a9097b16f3b8534975dc795e3e 100644
+index 655e994376dcc65f4fd76e182d4ef5bc20142063..0440aa285226d5ed1853c059d91b5779501e95d1 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
@@ -1210,7 +1210,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
diff --git a/patches/Airplane/patches/server/0010-Optimize-random-calls-in-chunk-ticking.patch b/patches/Airplane/patches/server/0010-Optimize-random-calls-in-chunk-ticking.patch
index d4e9e05a..972d09e7 100644
--- a/patches/Airplane/patches/server/0010-Optimize-random-calls-in-chunk-ticking.patch
+++ b/patches/Airplane/patches/server/0010-Optimize-random-calls-in-chunk-ticking.patch
@@ -34,7 +34,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-index cb83f1152c52a99d25e4e80cc8bf18c6793e8b50..87c87b9767003652814c3726eece64470dbb69a8 100644
+index fe040615ff03478a20cdf8376f89a6b7d100ba61..207a9c3928aad7c6e89a120b54d87e003ebd232c 100644
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
@@ -1000,6 +1000,7 @@ public class ChunkProviderServer extends IChunkProvider {
@@ -46,7 +46,7 @@ index cb83f1152c52a99d25e4e80cc8bf18c6793e8b50..87c87b9767003652814c3726eece6447
boolean flag2 = world.ticksPerAnimalSpawns != 0L && worlddata.getTime() % world.ticksPerAnimalSpawns == 0L; // CraftBukkit
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index 277132da0b3672a9097b16f3b8534975dc795e3e..b33f37309d4dd22c033ad84effa4ff9d6e20a790 100644
+index 0440aa285226d5ed1853c059d91b5779501e95d1..8fa26ce7a9eed8ec43791079d6416eb2cd4a9398 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
@@ -1200,6 +1200,8 @@ public class WorldServer extends World implements GeneratorAccessSeed {
@@ -77,7 +77,7 @@ index 277132da0b3672a9097b16f3b8534975dc795e3e..b33f37309d4dd22c033ad84effa4ff9d
// Tuinity start - optimise chunk ice snow ticking
BiomeBase[] biomeCache = this.biomeBaseCache;
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 ffef28f9fa82a6961ef6db5f6732cfee4352ee01..c987dff9660469bf5144ef07e0d13fbfea31e7dd 100644
+index df35ae12ecbe88ab396bed9850ef80433ff42fd4..7474c070598bc093e06f02f19d49f3a6fa6b3d4e 100644
--- a/src/main/java/net/minecraft/world/level/chunk/Chunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/Chunk.java
@@ -99,6 +99,18 @@ public class Chunk implements IChunkAccess {
diff --git a/patches/Airplane/patches/server/0012-Dynamic-activation-range.patch b/patches/Airplane/patches/server/0012-Dynamic-activation-range.patch
index 619b1410..ecfa0ac4 100644
--- a/patches/Airplane/patches/server/0012-Dynamic-activation-range.patch
+++ b/patches/Airplane/patches/server/0012-Dynamic-activation-range.patch
@@ -27,10 +27,10 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
diff --git a/src/main/java/gg/airplane/AirplaneConfig.java b/src/main/java/gg/airplane/AirplaneConfig.java
-index fbb9544027a48941bd0938d8f607e8c7ff9443a1..e0bed57aa5547a214ad779dbd0f648f3663147f9 100644
+index ab019b577002677a4ce788106f8e5a1d7757a2ae..946e476e1ca8c3ced119c64a05643c8c64760724 100644
--- a/src/main/java/gg/airplane/AirplaneConfig.java
+++ b/src/main/java/gg/airplane/AirplaneConfig.java
-@@ -44,4 +44,29 @@ public class AirplaneConfig {
+@@ -47,4 +47,30 @@ public class AirplaneConfig {
}
}
@@ -42,21 +42,22 @@ index fbb9544027a48941bd0938d8f607e8c7ff9443a1..e0bed57aa5547a214ad779dbd0f648f3
+ public static boolean dynamicHoglinBehavior = true;
+
+ private static void dynamicActivationRange() {
-+ manual.setComment("activation-range", "Optimizes how entities act when", "they're far away from the player");
++ config.setComment("activation-range", "Optimizes how entities act when", "they're far away from the player");
+
-+ maximumActivationPrio = manual.get("activation-range.max-tick-freq", maximumActivationPrio,
++ maximumActivationPrio = config.getInt("activation-range.max-tick-freq", maximumActivationPrio,
+ "This value defines how often in ticks, the furthest entity",
+ "will get their pathfinders and behaviors ticked. 20 = 1s");
-+ activationDistanceMod = manual.get("activation-range.activation-dist-mod", activationDistanceMod,
++ activationDistanceMod = config.getInt("activation-range.activation-dist-mod", activationDistanceMod,
+ "This value defines how much distance modifies an entity's",
+ "tick frequency. freq = (distanceToPlayer^2) / (2^value)",
+ "If you want further away entities to tick less often, use 8.",
+ "If you want further away entities to tick more often, try 10.");
+
-+ manual.setComment("behavior-activation", "A list of entities to use the dynamic activation range", "to modify how often their behaviors are ticked");
-+ dynamicVillagerBehavior = manual.get("behavior-activation.villager", dynamicVillagerBehavior);
-+ dynamicPiglinBehavior = manual.get("behavior-activation.piglin", dynamicPiglinBehavior);
-+ dynamicHoglinBehavior = manual.get("behavior-activation.hoglin", dynamicHoglinBehavior);
++ config.setComment("behavior-activation", "A list of entities to use the dynamic activation range", "to modify how often their behaviors are ticked");
++
++ dynamicVillagerBehavior = config.getBoolean("behavior-activation.villager", dynamicVillagerBehavior);
++ dynamicPiglinBehavior = config.getBoolean("behavior-activation.piglin", dynamicPiglinBehavior);
++ dynamicHoglinBehavior = config.getBoolean("behavior-activation.hoglin", dynamicHoglinBehavior);
+ }
+
}
diff --git a/patches/Airplane/patches/server/0017-Airplane-Profiler.patch b/patches/Airplane/patches/server/0017-Airplane-Profiler.patch
index de6d15ae..af45938c 100644
--- a/patches/Airplane/patches/server/0017-Airplane-Profiler.patch
+++ b/patches/Airplane/patches/server/0017-Airplane-Profiler.patch
@@ -20,11 +20,11 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
diff --git a/pom.xml b/pom.xml
-index a3a3b17f3b30b55bb50905353e77723091bb5c1f..fc2c3714b6c772d67e258be269aa92dda80cdb12 100644
+index f9ead3ed315a3e726233545f35358cca0fc68e06..988a4464b1c84f7aa973269f1c109fb49b1b4d4b 100644
--- a/pom.xml
+++ b/pom.xml
-@@ -159,8 +159,23 @@
- 1.1.0-SNAPSHOT
+@@ -166,8 +166,23 @@
+ fe3dbb4420
compile
+
@@ -48,34 +48,35 @@ index a3a3b17f3b30b55bb50905353e77723091bb5c1f..fc2c3714b6c772d67e258be269aa92dd
tuinity-${minecraft.version}
diff --git a/src/main/java/gg/airplane/AirplaneConfig.java b/src/main/java/gg/airplane/AirplaneConfig.java
-index e0bed57aa5547a214ad779dbd0f648f3663147f9..39ef53c9dd49d5951103777002f866a64a252bfd 100644
+index 946e476e1ca8c3ced119c64a05643c8c64760724..a77e628518920e84b03a8a00e1308a9a53a00896 100644
--- a/src/main/java/gg/airplane/AirplaneConfig.java
+++ b/src/main/java/gg/airplane/AirplaneConfig.java
-@@ -69,4 +69,26 @@ public class AirplaneConfig {
- dynamicHoglinBehavior = manual.get("behavior-activation.hoglin", dynamicHoglinBehavior);
+@@ -73,4 +73,27 @@ public class AirplaneConfig {
+ dynamicHoglinBehavior = config.getBoolean("behavior-activation.hoglin", dynamicHoglinBehavior);
}
+
+ public static String profileWebUrl = "https://flare.airplane.gg";
+
+ private static void profilerOptions() {
-+ manual.setComment("flare", "Configures Flare, the built-in profiler");
++ config.setComment("flare", "Configures Flare, the built-in profiler");
+
-+ profileWebUrl = manual.get("flare.url", profileWebUrl, "Sets the server to use for profiles.");
++ profileWebUrl = config.getString("flare.url", profileWebUrl, "Sets the server to use for profiles.");
+ }
+
+
+ public static String accessToken = "";
+
+ private static void airplaneWebServices() {
-+ manual.setComment("web-services", "Options for connecting to Airplane's online utilities");
++ config.setComment("web-services", "Options for connecting to Airplane's online utilities");
+
-+ accessToken = manual.get("web-services.token", "");
++ accessToken = config.getString("web-services.token", "");
+ // todo lookup token (off-thread) and let users know if their token is valid
+ if (accessToken.length() > 0) {
+ gg.airplane.flare.FlareSetup.init(); // Airplane
+ }
+ }
++
+
}
diff --git a/src/main/java/gg/airplane/AirplaneLogger.java b/src/main/java/gg/airplane/AirplaneLogger.java
diff --git a/patches/Airplane/patches/server/0019-Skip-copying-unloading-tile-entities.patch b/patches/Airplane/patches/server/0018-Skip-copying-unloading-tile-entities.patch
similarity index 95%
rename from patches/Airplane/patches/server/0019-Skip-copying-unloading-tile-entities.patch
rename to patches/Airplane/patches/server/0018-Skip-copying-unloading-tile-entities.patch
index e6dabfb6..e58685bc 100644
--- a/patches/Airplane/patches/server/0019-Skip-copying-unloading-tile-entities.patch
+++ b/patches/Airplane/patches/server/0018-Skip-copying-unloading-tile-entities.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Skip copying unloading tile entities
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
-index 9860bef7d4372071228532d28e6d21e675dff25c..a5530b21f20d55386346b4e3970c65bcddffee51 100644
+index 3e08e56f67516333e7d880fdc595447a3ae4dc83..f0420b87025a090a659542a00614e805bf850fd2 100644
--- a/src/main/java/net/minecraft/world/level/World.java
+++ b/src/main/java/net/minecraft/world/level/World.java
@@ -106,7 +106,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
diff --git a/patches/Airplane/patches/server/0020-Reduce-entity-chunk-ticking-checks-from-3-to-1.patch b/patches/Airplane/patches/server/0019-Reduce-entity-chunk-ticking-checks-from-3-to-1.patch
similarity index 93%
rename from patches/Airplane/patches/server/0020-Reduce-entity-chunk-ticking-checks-from-3-to-1.patch
rename to patches/Airplane/patches/server/0019-Reduce-entity-chunk-ticking-checks-from-3-to-1.patch
index 14ad39d4..a25fe1c8 100644
--- a/patches/Airplane/patches/server/0020-Reduce-entity-chunk-ticking-checks-from-3-to-1.patch
+++ b/patches/Airplane/patches/server/0019-Reduce-entity-chunk-ticking-checks-from-3-to-1.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Reduce entity chunk ticking checks from 3 to 1
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index b33f37309d4dd22c033ad84effa4ff9d6e20a790..b788c33605fc96d17758cf42e508872e38fb4322 100644
+index 8fa26ce7a9eed8ec43791079d6416eb2cd4a9398..81b0ced87adbeffc7fd2343910735cd0f4c1bf13 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
@@ -1081,11 +1081,12 @@ public class WorldServer extends World implements GeneratorAccessSeed {
@@ -31,7 +31,7 @@ index b33f37309d4dd22c033ad84effa4ff9d6e20a790..b788c33605fc96d17758cf42e508872e
this.updateNavigatorsInRegion(entity);
}
} else {
-@@ -1416,7 +1417,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1415,7 +1416,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
}
// Tuinity end - log detailed entity tick information
@@ -42,7 +42,7 @@ index b33f37309d4dd22c033ad84effa4ff9d6e20a790..b788c33605fc96d17758cf42e508872e
// Tuinity start - log detailed entity tick information
com.tuinity.tuinity.util.TickThread.ensureTickThread("Cannot tick an entity off-main");
try {
-@@ -1424,7 +1427,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1423,7 +1426,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
currentlyTickingEntity.lazySet(entity);
}
// Tuinity end - log detailed entity tick information
diff --git a/patches/Airplane/patches/server/0021-Remove-iterators-from-inventory-contains.patch b/patches/Airplane/patches/server/0020-Remove-iterators-from-inventory-contains.patch
similarity index 100%
rename from patches/Airplane/patches/server/0021-Remove-iterators-from-inventory-contains.patch
rename to patches/Airplane/patches/server/0020-Remove-iterators-from-inventory-contains.patch
diff --git a/patches/Airplane/patches/server/0022-Cache-entityhuman-display-name.patch b/patches/Airplane/patches/server/0021-Cache-entityhuman-display-name.patch
similarity index 100%
rename from patches/Airplane/patches/server/0022-Cache-entityhuman-display-name.patch
rename to patches/Airplane/patches/server/0021-Cache-entityhuman-display-name.patch
diff --git a/patches/Airplane/patches/server/0023-Early-return-optimization-for-target-finding.patch b/patches/Airplane/patches/server/0022-Early-return-optimization-for-target-finding.patch
similarity index 100%
rename from patches/Airplane/patches/server/0023-Early-return-optimization-for-target-finding.patch
rename to patches/Airplane/patches/server/0022-Early-return-optimization-for-target-finding.patch
diff --git a/patches/Airplane/patches/server/0024-More-debug-for-plugins-not-shutting-down-tasks.patch b/patches/Airplane/patches/server/0023-More-debug-for-plugins-not-shutting-down-tasks.patch
similarity index 100%
rename from patches/Airplane/patches/server/0024-More-debug-for-plugins-not-shutting-down-tasks.patch
rename to patches/Airplane/patches/server/0023-More-debug-for-plugins-not-shutting-down-tasks.patch
diff --git a/patches/Airplane/patches/server/0025-Track-Queue-debug.patch b/patches/Airplane/patches/server/0025-Track-Queue-debug.patch
deleted file mode 100644
index 8384d9e2..00000000
--- a/patches/Airplane/patches/server/0025-Track-Queue-debug.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Paul Sauve
-Date: Thu, 25 Feb 2021 20:25:49 -0600
-Subject: [PATCH] Track Queue debug
-
-
-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 b9bdce7c7ca8b7b107b0dca165d722321c16229d..739839314fd8a88b5fca8b9678e1df07a166c35d 100644
---- a/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java
-+++ b/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java
-@@ -20,7 +20,7 @@ public final class IteratorSafeOrderedReferenceSet {
-
- 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/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
-index ae7c5430b4f5970ede602bb234b5ffcee424f6a7..4419fbe94041f4b8a0ea848880798289d063b8e2 100644
---- a/src/main/java/gg/airplane/structs/TrackQueue.java
-+++ b/src/main/java/gg/airplane/structs/TrackQueue.java
-@@ -1,9 +1,12 @@
- 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;
-@@ -14,6 +17,28 @@ import java.util.concurrent.atomic.AtomicInteger;
- */
- 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 chunks = world.getChunkProvider().entityTickingChunks;
-+ sender.sendMessage(world.getWorld().getName() + ": " + chunks.size() + " / " + chunks.getListSize() + " (iterators: " + chunks.iteratorCount + ")");
-+ }
-+ return true;
-+ }
-+ }
-+
- private final IteratorSafeOrderedReferenceSet chunks;
- private final ForkJoinPool pool = new ForkJoinPool(Math.max(4, Runtime.getRuntime().availableProcessors() >> 2));
- private final AtomicInteger taskIndex = new AtomicInteger();
-diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-index 87c87b9767003652814c3726eece64470dbb69a8..dc1b7db4d39d4dfa65d60e5a059d3b94def6cf62 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 tickingChunks = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(4096, 0.75f, 4096, 0.15, true);
-- final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet entityTickingChunks = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(4096, 0.75f, 4096, 0.15, true);
-+ public final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet 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 supplier) {
diff --git a/patches/Akarin/patches/server/0001-Disable-the-Snooper.patch b/patches/Akarin/patches/server/0001-Disable-the-Snooper.patch
index 17256ad6..52163919 100644
--- a/patches/Akarin/patches/server/0001-Disable-the-Snooper.patch
+++ b/patches/Akarin/patches/server/0001-Disable-the-Snooper.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Disable the Snooper
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index e8146dad220330bdcc46e563172b40a66931d17c..34552a2bd96428013dba6f2bead737af75a28d0d 100644
+index 966b6e2f9b7c473d8dfcae205d8ef8f08912ded9..f72574fde82307a0e73a9eca6c9dc967d0c48f22 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1441,6 +1441,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant.
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..b9bdce7c7ca8b7b107b0dca165d722321c16229d 100644
+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,7 +16,7 @@ public final class IteratorSafeOrderedReferenceSet {
+@@ -16,11 +16,11 @@ public final class IteratorSafeOrderedReferenceSet {
/* list impl */
protected E[] listElements;
@@ -36,41 +36,67 @@ index be408aebbccbda46e8aa82ef337574137cfa0096..b9bdce7c7ca8b7b107b0dca165d72232
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 39ef53c9dd49d5951103777002f866a64a252bfd..3886c731a69540f638d57a411285da289d3b704b 100644
+index a77e628518920e84b03a8a00e1308a9a53a00896..9f8d2528a9482cb562c610eecd21204d422da47a 100644
--- a/src/main/java/gg/airplane/AirplaneConfig.java
+++ b/src/main/java/gg/airplane/AirplaneConfig.java
-@@ -91,4 +91,18 @@ public class AirplaneConfig {
- }
+@@ -96,4 +96,18 @@ public class AirplaneConfig {
}
+
+
+ public static boolean multithreadedEntityTracker = false;
+ public static boolean entityTrackerAsyncPackets = false;
+
+ private static void entityTracker() {
-+ manual.setComment("tracker", "Options to improve the performance of the entity tracker");
++ config.setComment("tracker", "Options to improve the performance of the entity tracker");
+
-+ multithreadedEntityTracker = manual.get("tracker.multithreaded", multithreadedEntityTracker,
++ multithreadedEntityTracker = config.getBoolean("tracker.multithreaded", multithreadedEntityTracker,
+ "This enables the multithreading of the tracker.");
-+ entityTrackerAsyncPackets = manual.get("tracker.unsafe-async-packets", entityTrackerAsyncPackets,
++ 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..ae7c5430b4f5970ede602bb234b5ffcee424f6a7
+index 0000000000000000000000000000000000000000..4419fbe94041f4b8a0ea848880798289d063b8e2
--- /dev/null
+++ b/src/main/java/gg/airplane/structs/TrackQueue.java
-@@ -0,0 +1,84 @@
+@@ -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;
@@ -81,6 +107,28 @@ index 0000000000000000000000000000000000000000..ae7c5430b4f5970ede602bb234b5ffce
+ */
+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 chunks = world.getChunkProvider().entityTickingChunks;
++ sender.sendMessage(world.getWorld().getName() + ": " + chunks.size() + " / " + chunks.getListSize() + " (iterators: " + chunks.iteratorCount + ")");
++ }
++ return true;
++ }
++ }
++
+ private final IteratorSafeOrderedReferenceSet chunks;
+ private final ForkJoinPool pool = new ForkJoinPool(Math.max(4, Runtime.getRuntime().availableProcessors() >> 2));
+ private final AtomicInteger taskIndex = new AtomicInteger();
@@ -149,6 +197,19 @@ index 0000000000000000000000000000000000000000..ae7c5430b4f5970ede602bb234b5ffce
+ }
+
+}
+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 tickingChunks = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(4096, 0.75f, 4096, 0.15, true);
+- final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet entityTickingChunks = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(4096, 0.75f, 4096, 0.15, true);
++ public final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet 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 supplier) {
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
index 59989db6dcf96a8ab5a75775bb588c31cec3418a..534c7266fe9d6f60b74a71e5e61ed248e515dffd 100644
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
@@ -371,7 +432,7 @@ index d7eede51f1c4ebbe8e00b16efd6331c87db53bb4..585dbb250d975d2e9c34af26b9d5927c
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.b(chunkcoordintpair, 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 c987dff9660469bf5144ef07e0d13fbfea31e7dd..506c75013831a01e323a43ac94986600b8433e11 100644
+index 7474c070598bc093e06f02f19d49f3a6fa6b3d4e..c07fb5ca761c0f2067bd103026ded618a8620947 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 {
diff --git a/patches/Purpur/patches/server/0001-Rebrand.patch b/patches/Purpur/patches/server/0002-Rebrand.patch
similarity index 89%
rename from patches/Purpur/patches/server/0001-Rebrand.patch
rename to patches/Purpur/patches/server/0002-Rebrand.patch
index 6448dece..6d373dd5 100644
--- a/patches/Purpur/patches/server/0001-Rebrand.patch
+++ b/patches/Purpur/patches/server/0002-Rebrand.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand
diff --git a/pom.xml b/pom.xml
-index fc2c3714b6c772d67e258be269aa92dda80cdb12..cf6e53e9f483d21b17e2782816be4403fa5be717 100644
+index 988a4464b1c84f7aa973269f1c109fb49b1b4d4b..9d9ea5cff8a07c445837de74b3f887316cd79772 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,8 +27,10 @@
@@ -21,6 +21,35 @@ index fc2c3714b6c772d67e258be269aa92dda80cdb12..cf6e53e9f483d21b17e2782816be4403
${project.version}
compile
+@@ -181,6 +183,11 @@
+ jitpack.io
+ https://jitpack.io
+
++
++
++ purpur-snapshots
++ https://repo.pl3x.net/
++
+
+
+
+@@ -360,8 +367,15 @@
+
+ org.eclipse.jdt
+ ecj
+- 3.24.0
++
++ 3.25.0
++
++
++ org.jetbrains.kotlin
++ kotlin-stdlib
++ 1.4.33-SNAPSHOT
+
++
+
+
+
diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java
index 89eeb9d202405747409e65fcf226d95379987e29..4d9e685c691a37078ff7452e50ab8c13999dbe10 100644
--- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java
@@ -60,7 +89,7 @@ index 3bc5cd1e53dd7c94b948e7f57f0dc8e073e349b0..87891161f5b06bb8be0e2016b490484e
throwable = throwable1;
throw throwable1;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 7cbbc1b1161f26f22a7f7832395af0d4a781cb1a..9301d93ffb5a961cb68a5c37c30b656087c1b45c 100644
+index ca10d901ebd56bdee54f3c8cf607a5a34cd79f32..4f602f0448585b95b8b2b05006f0fa9f9c57ba43 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1636,7 +1636,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant {
+ GraphData data = RAMGraph.DATA.peekLast();
+ Vector vector = new Vector<>();
+
+- double[] tps = new double[] {server.tps1.getAverage(), server.tps5.getAverage(), server.tps15.getAverage()};
++ double[] tps = new double[] {server.tps5s.getAverage(), server.tps1.getAverage(), server.tps5.getAverage(), server.tps15.getAverage()}; // Purpur
+ String[] tpsAvg = new String[tps.length];
+
+ for ( int g = 0; g < tps.length; g++) {
+@@ -67,7 +67,7 @@ public class RAMDetails extends JList {
+ vector.add("Memory use: " + (data.getUsedMem() / 1024L / 1024L) + " mb (" + (data.getFree() * 100L / data.getMax()) + "% free)");
+ vector.add("Heap: " + (data.getTotal() / 1024L / 1024L) + " / " + (data.getMax() / 1024L / 1024L) + " mb");
+ vector.add("Avg tick: " + DECIMAL_FORMAT.format(getAverage(server.getTickTimes())) + " ms");
+- vector.add("TPS from last 1m, 5m, 15m: " + String.join(", ", tpsAvg));
++ vector.add("TPS from last 5s, 1m, 5m, 15m: " + String.join(", ", tpsAvg)); // Purpur
+
+ setListData(vector);
+ }
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 5367c3b7bdfb6951986e5c844fb978f42a0bfec5..c6c4349954cb302e933739870814f54e426bd825 100644
+index 9cc171e17e0d5d8f60a6d229eb2d39fb9181412f..fd32bd05973785c4fc64849a8b7a96551a3223b9 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -278,7 +278,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant void mergeSortedSets(final java.util.function.Consumer consumer, final java.util.Comparator super T> comparator, final java.util.SortedSet...sets) {
final ObjectRBTreeSet all = new ObjectRBTreeSet<>(comparator);
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 2d567bda66f010d2e2eac9fe343196901ad16a1c..6a7fed72bdf9c576170591359e78f943e1523e43 100644
+index e3253796c70b990e000ed1073f4070fe07a3f845..dda93749eef9cd63e47ffe269b839512fe4db695 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -267,6 +267,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant>>> iterator = this.tickets.long2ObjectEntrySet().fastIterator(); iterator.hasNext();) {
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-index a755ef31627ad398c152c2bd3340855da4fa3a93..e9f66fbde9a70779600ff6d15b43a93347b9f1e8 100644
+index e9b236bb95985ba0806a3d27d705ac61bce55ea5..c5038aa66703484a9243579ba4a6c92d138fc388 100644
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
@@ -1223,6 +1223,7 @@ public class ChunkProviderServer extends IChunkProvider {
@@ -256,10 +256,10 @@ index f3d6811156e68040106f1d027a10ea33b5646b05..e7cd6392d722d0e13b86b57d70946b18
this.noTickViewDistance = viewDistance;
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index e67c57573ea3be869fecb7a00de8157e3f5437d1..d7399bc4a4c8ec0712dbe8b909bf5ef1fafa75db 100644
+index 58528d2b5e30b0436b93213ba31d1777fe3e953e..392e0638fea678c5eddaca0cbed7d84dd41c30ed 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
-@@ -1774,6 +1774,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1773,6 +1773,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
@Override
public void notify(BlockPosition blockposition, IBlockData iblockdata, IBlockData iblockdata1, int i) {
@@ -268,7 +268,7 @@ index e67c57573ea3be869fecb7a00de8157e3f5437d1..d7399bc4a4c8ec0712dbe8b909bf5ef1
if(this.paperConfig.updatePathfindingOnBlockUpdate) { // Paper - option to disable pathfinding updates
VoxelShape voxelshape = iblockdata.getCollisionShape(this, blockposition);
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
-index 983e61051b7a8a8f5094cee8de9b8ca8c072fc68..6ec5d99dffa26b9a94f59340ba9498baf8bc2015 100644
+index 32b6de119c1ee27be0be42c0a0cdb4dd741a4c36..74894282575d12f25ba4968abf873d3a346529b7 100644
--- a/src/main/java/net/minecraft/world/level/World.java
+++ b/src/main/java/net/minecraft/world/level/World.java
@@ -423,6 +423,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
diff --git a/patches/Tuinity/patches/server/0009-Delay-chunk-unloads.patch b/patches/Tuinity/patches/server/0009-Delay-chunk-unloads.patch
index 256508d9..b2a2991b 100644
--- a/patches/Tuinity/patches/server/0009-Delay-chunk-unloads.patch
+++ b/patches/Tuinity/patches/server/0009-Delay-chunk-unloads.patch
@@ -247,7 +247,7 @@ index 3c804c7b20a14ea6e510810e2be10c1cc89ff5c1..47da7efffde2e6d63c1a064b950abf81
return new TicketType<>(s, comparator, 0L);
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-index 16567619d7ca84a997ef46417d72f92e6db6993d..494e3b65880a5a5ced4adc8b4d5a51d2e78a51b0 100644
+index e739b4f8a7b8785ceb11c553bd27e2fe0e64a4bb..42babc6dc316374981e4a5e813d38645927e982d 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -505,6 +505,7 @@ public class CraftWorld implements World {
diff --git a/patches/Tuinity/patches/server/0013-Per-World-Spawn-Limits.patch b/patches/Tuinity/patches/server/0013-Per-World-Spawn-Limits.patch
index 53d9a975..f1bf5972 100644
--- a/patches/Tuinity/patches/server/0013-Per-World-Spawn-Limits.patch
+++ b/patches/Tuinity/patches/server/0013-Per-World-Spawn-Limits.patch
@@ -35,7 +35,7 @@ index 5aa558bd05c4ab735730263f220478c36a4ba0fd..6473b951788a3ecbeee4811ea0288ff4
}
\ No newline at end of file
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-index 494e3b65880a5a5ced4adc8b4d5a51d2e78a51b0..77057470addd6e6934bd6c32b0c36dea11bbb95d 100644
+index 42babc6dc316374981e4a5e813d38645927e982d..68e2f318780f613a85fc85e08d25f00e0c74ada3 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -342,6 +342,14 @@ public class CraftWorld implements World {
diff --git a/patches/Tuinity/patches/server/0014-Detail-more-information-in-watchdog-dumps.patch b/patches/Tuinity/patches/server/0014-Detail-more-information-in-watchdog-dumps.patch
index a31f7609..f6191528 100644
--- a/patches/Tuinity/patches/server/0014-Detail-more-information-in-watchdog-dumps.patch
+++ b/patches/Tuinity/patches/server/0014-Detail-more-information-in-watchdog-dumps.patch
@@ -74,10 +74,10 @@ index 67d8fe8ad036a9252c774bb6a914c8ec79981876..71a000edfab27c9965d1929af7858282
});
throw CancelledPacketHandleException.INSTANCE;
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index d7399bc4a4c8ec0712dbe8b909bf5ef1fafa75db..2dc399e7aab930b062d7fdac354de7b7188f2369 100644
+index 392e0638fea678c5eddaca0cbed7d84dd41c30ed..455de3a3ce619a0b6116b9d84e0a1a05938bfea0 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
-@@ -1014,7 +1014,26 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1013,7 +1013,26 @@ public class WorldServer extends World implements GeneratorAccessSeed {
}
@@ -104,7 +104,7 @@ index d7399bc4a4c8ec0712dbe8b909bf5ef1fafa75db..2dc399e7aab930b062d7fdac354de7b7
if (!(entity instanceof EntityHuman) && !this.getChunkProvider().a(entity)) {
this.chunkCheck(entity);
} else {
-@@ -1067,6 +1086,13 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1066,6 +1085,13 @@ public class WorldServer extends World implements GeneratorAccessSeed {
//} finally { timer.stopTiming(); } // Paper - timings - move up
}
diff --git a/patches/Tuinity/patches/server/0015-Execute-chunk-tasks-mid-tick.patch b/patches/Tuinity/patches/server/0015-Execute-chunk-tasks-mid-tick.patch
index 33ab9fbc..05a72bed 100644
--- a/patches/Tuinity/patches/server/0015-Execute-chunk-tasks-mid-tick.patch
+++ b/patches/Tuinity/patches/server/0015-Execute-chunk-tasks-mid-tick.patch
@@ -18,7 +18,7 @@ index 4666d6582535d6e49c5bd40d4fcdcdfe07590aa9..b870cca05f0ba354e6976a7051123563
// re-schedule eventually
toTick.tickState = STATE_SCHEDULED;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index b7a452b51ee4382e03d7879f511a7c34b415925a..41c8646aef9a8df2f99319c2a8e76d850bdcc1f6 100644
+index f6d443d0193ceea1b3248b66cb198be04822e9e7..5c909b776e111d6bd9e2429f25fed121bb391219 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1105,7 +1105,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant getEntities(@Nullable Entity entity, AxisAlignedBB axisalignedbb, @Nullable Predicate super Entity> predicate) {
this.getMethodProfiler().c("getEntities");
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 34a9f7b2f998f77b1279516cd09397ab6c2ac1cc..9293cb1dd27bb3b797e29f6edddf22ba80ff4134 100644
+index 0727b12b5ff146b4efa9204bf4f495f2f1aa20b9..a0b732a68d9961fc8a42e2aaf0d513605552bd98 100644
--- a/src/main/java/net/minecraft/world/level/chunk/Chunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/Chunk.java
@@ -137,6 +137,56 @@ public class Chunk implements IChunkAccess {
diff --git a/patches/Tuinity/patches/server/0025-Highly-optimise-single-and-multi-AABB-VoxelShapes-an.patch b/patches/Tuinity/patches/server/0025-Highly-optimise-single-and-multi-AABB-VoxelShapes-an.patch
index a727a1dc..be49f6c5 100644
--- a/patches/Tuinity/patches/server/0025-Highly-optimise-single-and-multi-AABB-VoxelShapes-an.patch
+++ b/patches/Tuinity/patches/server/0025-Highly-optimise-single-and-multi-AABB-VoxelShapes-an.patch
@@ -248,7 +248,7 @@ index 006e7076932f6be576a64da09c4d84ca4a15f5dd..e832ea0497b2d6af7556bda7f6728e72
0, 2, 60L, TimeUnit.SECONDS,
new LinkedBlockingQueue(),
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 41c8646aef9a8df2f99319c2a8e76d850bdcc1f6..6b6a90dc07ab126a21d011d1a831019ec1456834 100644
+index 5c909b776e111d6bd9e2429f25fed121bb391219..d7e1c830764973c31dff8311a79e617d8f283a53 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1441,6 +1441,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant {
net.minecraft.world.level.chunk.Chunk chunk = (net.minecraft.world.level.chunk.Chunk) either.left().orElse(null);
diff --git a/patches/Tuinity/patches/server/0033-Allow-Entities-to-be-removed-from-a-world-while-tick.patch b/patches/Tuinity/patches/server/0033-Allow-Entities-to-be-removed-from-a-world-while-tick.patch
index 4b8a5889..82e7c51c 100644
--- a/patches/Tuinity/patches/server/0033-Allow-Entities-to-be-removed-from-a-world-while-tick.patch
+++ b/patches/Tuinity/patches/server/0033-Allow-Entities-to-be-removed-from-a-world-while-tick.patch
@@ -9,7 +9,7 @@ issues where teleporting players across worlds while ticking.
Also allows us to run mid tick while ticking entities.
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index f696cc065c7058550a10705f0f827872be11c54d..e563589ac5622990dc6091f69fde79878d4c8d94 100644
+index 97783a1b857e6c088fc3bab9226dc0fe648ac944..1999e82f1272c993677d4fb3884520fe23dbb50b 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
@@ -174,7 +174,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
@@ -63,7 +63,7 @@ index f696cc065c7058550a10705f0f827872be11c54d..e563589ac5622990dc6091f69fde7987
this.tickingEntities = false;
// Paper start
for (java.lang.Runnable run : this.afterEntityTickingTasks) {
-@@ -1777,7 +1777,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1776,7 +1776,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
Entity entity = (Entity) iterator.next();
if (!(entity instanceof EntityPlayer)) {
@@ -72,7 +72,7 @@ index f696cc065c7058550a10705f0f827872be11c54d..e563589ac5622990dc6091f69fde7987
throw (IllegalStateException) SystemUtils.c((Throwable) (new IllegalStateException("Removing entity while ticking!")));
}
-@@ -1805,6 +1805,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1804,6 +1804,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
public void unregisterEntity(Entity entity) {
org.spigotmc.AsyncCatcher.catchOp("entity unregister"); // Spigot
@@ -80,7 +80,7 @@ index f696cc065c7058550a10705f0f827872be11c54d..e563589ac5622990dc6091f69fde7987
// Paper start - fix entity registration issues
if (entity instanceof EntityComplexPart) {
// Usually this is a no-op for complex parts, and ID's should be removed, but go ahead and remove it anyways
-@@ -1871,12 +1872,16 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1870,12 +1871,16 @@ public class WorldServer extends World implements GeneratorAccessSeed {
this.getScoreboard().a(entity);
// CraftBukkit start - SPIGOT-5278
if (entity instanceof EntityDrowned) {
@@ -100,7 +100,7 @@ index f696cc065c7058550a10705f0f827872be11c54d..e563589ac5622990dc6091f69fde7987
}
new com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent(entity.getBukkitEntity()).callEvent(); // Paper - fire while valid
entity.valid = false; // CraftBukkit
-@@ -1892,7 +1897,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1891,7 +1896,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
return;
}
// Paper end
@@ -109,7 +109,7 @@ index f696cc065c7058550a10705f0f827872be11c54d..e563589ac5622990dc6091f69fde7987
if (!entity.isQueuedForRegister) { // Paper
this.entitiesToAdd.add(entity);
entity.isQueuedForRegister = true; // Paper
-@@ -1900,6 +1905,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1899,6 +1904,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
} else {
entity.isQueuedForRegister = false; // Paper
this.entitiesById.put(entity.getId(), entity);
@@ -117,7 +117,7 @@ index f696cc065c7058550a10705f0f827872be11c54d..e563589ac5622990dc6091f69fde7987
if (entity instanceof EntityEnderDragon) {
EntityComplexPart[] aentitycomplexpart = ((EntityEnderDragon) entity).eJ();
int i = aentitycomplexpart.length;
-@@ -1908,6 +1914,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1907,6 +1913,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
EntityComplexPart entitycomplexpart = aentitycomplexpart[j];
this.entitiesById.put(entitycomplexpart.getId(), entitycomplexpart);
@@ -125,7 +125,7 @@ index f696cc065c7058550a10705f0f827872be11c54d..e563589ac5622990dc6091f69fde7987
}
}
-@@ -1932,12 +1939,16 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1931,12 +1938,16 @@ public class WorldServer extends World implements GeneratorAccessSeed {
// this.getChunkProvider().addEntity(entity); // Paper - moved down below valid=true
// CraftBukkit start - SPIGOT-5278
if (entity instanceof EntityDrowned) {
@@ -145,7 +145,7 @@ index f696cc065c7058550a10705f0f827872be11c54d..e563589ac5622990dc6091f69fde7987
}
entity.valid = true; // CraftBukkit
this.getChunkProvider().addEntity(entity); // Paper - from above to be below valid=true
-@@ -1953,7 +1964,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1952,7 +1963,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
}
public void removeEntity(Entity entity) {
@@ -154,7 +154,7 @@ index f696cc065c7058550a10705f0f827872be11c54d..e563589ac5622990dc6091f69fde7987
throw (IllegalStateException) SystemUtils.c((Throwable) (new IllegalStateException("Removing entity while ticking!")));
} else {
this.removeEntityFromChunk(entity);
-@@ -2057,7 +2068,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -2056,7 +2067,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
if (VoxelShapes.c(voxelshape, voxelshape1, OperatorBoolean.NOT_SAME)) {
boolean wasTicking = this.tickingEntities; this.tickingEntities = true; // Paper
@@ -165,7 +165,7 @@ index f696cc065c7058550a10705f0f827872be11c54d..e563589ac5622990dc6091f69fde7987
while (iterator.hasNext()) {
// CraftBukkit start - fix SPIGOT-6362
-@@ -2077,6 +2090,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -2076,6 +2089,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
navigationabstract.b(blockposition);
}
}
diff --git a/patches/Tuinity/patches/server/0034-Prevent-unload-calls-removing-tickets-for-sync-loads.patch b/patches/Tuinity/patches/server/0034-Prevent-unload-calls-removing-tickets-for-sync-loads.patch
index 0ed3595e..c1427b05 100644
--- a/patches/Tuinity/patches/server/0034-Prevent-unload-calls-removing-tickets-for-sync-loads.patch
+++ b/patches/Tuinity/patches/server/0034-Prevent-unload-calls-removing-tickets-for-sync-loads.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Prevent unload() calls removing tickets for sync loads
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-index b44b1b79a38ac2c15666e5b04e16f1bed67d3d89..a68803eaf773be992b5fb9facba7add84c5b41ad 100644
+index 3560ac0c554b8e60c1bc961766bcf942ba6dd963..aa673cf8a11c17faaa1520eaa9329200453a53ff 100644
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
@@ -734,6 +734,8 @@ public class ChunkProviderServer extends IChunkProvider {
diff --git a/patches/Tuinity/patches/server/0038-Distance-manager-tick-timings.patch b/patches/Tuinity/patches/server/0038-Distance-manager-tick-timings.patch
index c7d24732..fc595a61 100644
--- a/patches/Tuinity/patches/server/0038-Distance-manager-tick-timings.patch
+++ b/patches/Tuinity/patches/server/0038-Distance-manager-tick-timings.patch
@@ -19,7 +19,7 @@ index 9d64fffd10ce21a26541198b0c2fd8f0c77f47f1..67980e1dc186c0b458eca9f00acfea7d
private static final Map, String> taskNameCache = new MapMaker().weakKeys().makeMap();
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-index a68803eaf773be992b5fb9facba7add84c5b41ad..a6185a17606785f1b4893d7d32e0cf1f32d00f4f 100644
+index aa673cf8a11c17faaa1520eaa9329200453a53ff..9d26ca0ed8a8ad33091ee5b649289f2fae6c6f74 100644
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
@@ -840,6 +840,7 @@ public class ChunkProviderServer extends IChunkProvider {
diff --git a/patches/Tuinity/patches/server/0043-Do-not-allow-ticket-level-changes-while-unloading-pl.patch b/patches/Tuinity/patches/server/0043-Do-not-allow-ticket-level-changes-while-unloading-pl.patch
index a59853b3..a0cb2771 100644
--- a/patches/Tuinity/patches/server/0043-Do-not-allow-ticket-level-changes-while-unloading-pl.patch
+++ b/patches/Tuinity/patches/server/0043-Do-not-allow-ticket-level-changes-while-unloading-pl.patch
@@ -8,7 +8,7 @@ Sync loading the chunk at this stage would cause it to load
older data, as well as screwing our region state.
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-index a6185a17606785f1b4893d7d32e0cf1f32d00f4f..a2917fd52d9cde535ca3e6422b6742711584bb09 100644
+index 9d26ca0ed8a8ad33091ee5b649289f2fae6c6f74..d1fa4602f2f443c19ff69bfbd39cacdb4cbaf2a3 100644
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
@@ -840,6 +840,7 @@ public class ChunkProviderServer extends IChunkProvider {
diff --git a/patches/Tuinity/patches/server/0044-Make-sure-inlined-getChunkAt-has-inlined-logic-for-l.patch b/patches/Tuinity/patches/server/0044-Make-sure-inlined-getChunkAt-has-inlined-logic-for-l.patch
index 3f918cc8..7636e2fc 100644
--- a/patches/Tuinity/patches/server/0044-Make-sure-inlined-getChunkAt-has-inlined-logic-for-l.patch
+++ b/patches/Tuinity/patches/server/0044-Make-sure-inlined-getChunkAt-has-inlined-logic-for-l.patch
@@ -13,7 +13,7 @@ Paper recently reverted this optimisation, so it's been reintroduced
here.
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
-index 8d3dbf064df74434988b3c60fcb2b72bece37b7e..6b937f4300b445c5e0a9fd82db7e5dc01e8c6cfe 100644
+index a0ff1e87224f418a387656c8793151af7929454a..33b7d8247273d7744a241285f8732847d01e8892 100644
--- a/src/main/java/net/minecraft/world/level/World.java
+++ b/src/main/java/net/minecraft/world/level/World.java
@@ -349,6 +349,15 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
diff --git a/patches/Tuinity/patches/server/0046-Optimise-closest-entity-lookup.patch b/patches/Tuinity/patches/server/0046-Optimise-closest-entity-lookup.patch
index 18622d12..778a34b2 100644
--- a/patches/Tuinity/patches/server/0046-Optimise-closest-entity-lookup.patch
+++ b/patches/Tuinity/patches/server/0046-Optimise-closest-entity-lookup.patch
@@ -613,7 +613,7 @@ index 69cc7664089c505eb5cfdc437f16b91e9713eada..7c9ed41ae67bce0e5e45b9c091180ca3
}
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
-index 6b937f4300b445c5e0a9fd82db7e5dc01e8c6cfe..9118616e00220715339e31798e29a1871fafbea5 100644
+index 33b7d8247273d7744a241285f8732847d01e8892..23db2bad910795b1335e247521d383c2dd87a23b 100644
--- a/src/main/java/net/minecraft/world/level/World.java
+++ b/src/main/java/net/minecraft/world/level/World.java
@@ -1246,7 +1246,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
@@ -742,7 +742,7 @@ index 6b937f4300b445c5e0a9fd82db7e5dc01e8c6cfe..9118616e00220715339e31798e29a187
public abstract Entity getEntity(int i);
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 9293cb1dd27bb3b797e29f6edddf22ba80ff4134..d2f2efa21f8aec3515ae0c4491956916c9ed9500 100644
+index a0b732a68d9961fc8a42e2aaf0d513605552bd98..eb1e4a6c89b79fa1e2ec367eba441970c694f2d1 100644
--- a/src/main/java/net/minecraft/world/level/chunk/Chunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/Chunk.java
@@ -138,54 +138,24 @@ public class Chunk implements IChunkAccess {
@@ -842,7 +842,7 @@ index 9293cb1dd27bb3b797e29f6edddf22ba80ff4134..d2f2efa21f8aec3515ae0c4491956916
return;
}
if (entity instanceof EntityItem) {
-@@ -972,116 +945,18 @@ public class Chunk implements IChunkAccess {
+@@ -980,116 +953,18 @@ public class Chunk implements IChunkAccess {
}
public void a(@Nullable Entity entity, AxisAlignedBB axisalignedbb, List list, @Nullable Predicate super Entity> predicate) {
diff --git a/patches/Tuinity/patches/server/0047-Optimise-nearby-player-lookups.patch b/patches/Tuinity/patches/server/0047-Optimise-nearby-player-lookups.patch
index 35695202..2077218c 100644
--- a/patches/Tuinity/patches/server/0047-Optimise-nearby-player-lookups.patch
+++ b/patches/Tuinity/patches/server/0047-Optimise-nearby-player-lookups.patch
@@ -97,7 +97,7 @@ index 3b727fcb05074dea7cc1689e8589d4f93d5ccceb..7897fe870234ddef12926d855a3f060f
// Paper start - Chunk Prioritization
public void queueHolderUpdate(PlayerChunk playerchunk) {
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index e563589ac5622990dc6091f69fde79878d4c8d94..a7f399994fac91a02e608ab0cae99c82a91e4ab4 100644
+index 1999e82f1272c993677d4fb3884520fe23dbb50b..61f60a957c298413e88df4e2e499855d6ada8204 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
@@ -414,6 +414,107 @@ public class WorldServer extends World implements GeneratorAccessSeed {
@@ -308,7 +308,7 @@ index 24771c3522ea74ac12058591137eafc21adf3762..b3c73c6b4cffa20813355c5f2132fe3e
} else if (worldserver.getSpawn().a((IPosition) (new Vec3D((double) blockposition_mutableblockposition.getX() + 0.5D, (double) blockposition_mutableblockposition.getY(), (double) blockposition_mutableblockposition.getZ() + 0.5D)), 24.0D)) {
return false;
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
-index 9118616e00220715339e31798e29a1871fafbea5..1fab6ec02c0aceb56baea5353dbd85b580caf454 100644
+index 23db2bad910795b1335e247521d383c2dd87a23b..a802c45538943b570ca0daa3a40607dc80e696eb 100644
--- a/src/main/java/net/minecraft/world/level/World.java
+++ b/src/main/java/net/minecraft/world/level/World.java
@@ -183,6 +183,65 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
@@ -378,7 +378,7 @@ index 9118616e00220715339e31798e29a1871fafbea5..1fab6ec02c0aceb56baea5353dbd85b5
this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.WorldDataServer) worlddatamutable).getName()); // Spigot
this.paperConfig = new com.destroystokyo.paper.PaperWorldConfig(((net.minecraft.world.level.storage.WorldDataServer) worlddatamutable).getName(), this.spigotConfig); // Paper
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 d2f2efa21f8aec3515ae0c4491956916c9ed9500..ec5770453f2c795f09345f2f89209a66625392f3 100644
+index eb1e4a6c89b79fa1e2ec367eba441970c694f2d1..86d326d40a2957a12dc800560487af4bd272cdcb 100644
--- a/src/main/java/net/minecraft/world/level/chunk/Chunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/Chunk.java
@@ -157,6 +157,92 @@ public class Chunk implements IChunkAccess {
diff --git a/patches/Tuinity/patches/server/0054-Do-not-load-chunks-during-a-crash-report.patch b/patches/Tuinity/patches/server/0054-Do-not-load-chunks-during-a-crash-report.patch
index 6823ce8e..10fbc0c2 100644
--- a/patches/Tuinity/patches/server/0054-Do-not-load-chunks-during-a-crash-report.patch
+++ b/patches/Tuinity/patches/server/0054-Do-not-load-chunks-during-a-crash-report.patch
@@ -22,7 +22,7 @@ index e50731723d266ba65b2163df2e935afb8b013a93..a6736d15282715d920bab85eb92074cd
}
value.append("},");
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-index 5f83ad77edfa2f7ddd58334a592864185f88e435..89e2ce2e20a9051336c784a48e3b4214379cd77b 100644
+index 8f77a04440a23707d05ad12e40e39af7c2963f69..12f12aeeed79c657659b4bc8651488f1d73d3ef9 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -720,6 +720,30 @@ public class CraftWorld implements World {
diff --git a/patches/Tuinity/patches/server/0055-Improve-abnormal-server-shutdown-process.patch b/patches/Tuinity/patches/server/0055-Improve-abnormal-server-shutdown-process.patch
index b9403fdb..988642f8 100644
--- a/patches/Tuinity/patches/server/0055-Improve-abnormal-server-shutdown-process.patch
+++ b/patches/Tuinity/patches/server/0055-Improve-abnormal-server-shutdown-process.patch
@@ -11,7 +11,7 @@ gui. It looks like during sigint shutdown there can be some
deadlock between the server thread and awt shutdown thread here.
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 6b6a90dc07ab126a21d011d1a831019ec1456834..e757cb5c2d50cb3a4dbe50d4726db09ab845fcbb 100644
+index d7e1c830764973c31dff8311a79e617d8f283a53..02d8a8f13d81c47316f704fb700afd0214a5f546 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -868,10 +868,11 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant
-Date: Tue, 22 Dec 2020 21:12:05 -0800
-Subject: [PATCH] Prevent light queue overfill when no players are online
-
-block changes don't queue light updates (and they shouldn't)
-
-diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-index a2917fd52d9cde535ca3e6422b6742711584bb09..c1e1b3d53de18579dbe83e7c88d13d44c89fb2d8 100644
---- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-@@ -1246,7 +1246,7 @@ public class ChunkProviderServer extends IChunkProvider {
- if (ChunkProviderServer.this.tickDistanceManager()) {
- return true;
- } else {
-- //ChunkProviderServer.this.lightEngine.queueUpdate(); // Paper - not needed
-+ ChunkProviderServer.this.lightEngine.queueUpdate(); // Paper - not needed // Tuinity - prevent queue overflow when no players are in this world
- return super.executeNext() || execChunkTask; // Paper
- }
- } finally {
-diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index a7f399994fac91a02e608ab0cae99c82a91e4ab4..6b5aa91ddc657443580f2cb82c5aff3ee0180fa6 100644
---- a/src/main/java/net/minecraft/server/level/WorldServer.java
-+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
-@@ -1277,7 +1277,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
- }
- gameprofilerfiller.exit();
- timings.chunkTicksBlocks.stopTiming(); // Paper
-- getChunkProvider().getLightEngine().queueUpdate(); // Paper
-+ //getChunkProvider().getLightEngine().queueUpdate(); // Paper // Tuinity - no longer needed here, moved into task execution
- // Paper end
- }
- }
diff --git a/patches/Tuinity/patches/server/0060-Properly-handle-cancellation-of-projectile-hit-event.patch b/patches/Tuinity/patches/server/0059-Properly-handle-cancellation-of-projectile-hit-event.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0060-Properly-handle-cancellation-of-projectile-hit-event.patch
rename to patches/Tuinity/patches/server/0059-Properly-handle-cancellation-of-projectile-hit-event.patch
diff --git a/patches/Tuinity/patches/server/0061-Rewrite-the-light-engine.patch b/patches/Tuinity/patches/server/0060-Rewrite-the-light-engine.patch
similarity index 99%
rename from patches/Tuinity/patches/server/0061-Rewrite-the-light-engine.patch
rename to patches/Tuinity/patches/server/0060-Rewrite-the-light-engine.patch
index 2708921e..85e2a746 100644
--- a/patches/Tuinity/patches/server/0061-Rewrite-the-light-engine.patch
+++ b/patches/Tuinity/patches/server/0060-Rewrite-the-light-engine.patch
@@ -4930,7 +4930,7 @@ index 1122df50a7f9cbc489e8da7a91e9af73476eb148..3738c51b5e673c439d88a7ef7f4614f3
// Tuinity end - delay chunk unloads
public static TicketType a(String s, Comparator comparator) {
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index 6b5aa91ddc657443580f2cb82c5aff3ee0180fa6..6ce29205ba4480b19912a7acd393c4198d6a9e35 100644
+index 61f60a957c298413e88df4e2e499855d6ada8204..53e343a351ff19912c04bfeb6dc731947c9fc3d8 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
@@ -515,6 +515,13 @@ public class WorldServer extends World implements GeneratorAccessSeed {
@@ -5027,7 +5027,7 @@ index a96069c86ef5f5af4820436dd1f24e297bcca73f..0b852fa247c65cb1e889ad4e55886e25
protected final boolean c;
private final boolean[] j;
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 ec5770453f2c795f09345f2f89209a66625392f3..8b73ba51dde43e3ddf40ed863cf286042f139a34 100644
+index 86d326d40a2957a12dc800560487af4bd272cdcb..d6b34c6abebeac8445da3e76f341066952182e2b 100644
--- a/src/main/java/net/minecraft/world/level/chunk/Chunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/Chunk.java
@@ -144,6 +144,52 @@ public class Chunk implements IChunkAccess {
diff --git a/patches/Tuinity/patches/server/0062-Optimise-WorldServer-notify.patch b/patches/Tuinity/patches/server/0061-Optimise-WorldServer-notify.patch
similarity index 97%
rename from patches/Tuinity/patches/server/0062-Optimise-WorldServer-notify.patch
rename to patches/Tuinity/patches/server/0061-Optimise-WorldServer-notify.patch
index 813b4f42..46822c57 100644
--- a/patches/Tuinity/patches/server/0062-Optimise-WorldServer-notify.patch
+++ b/patches/Tuinity/patches/server/0061-Optimise-WorldServer-notify.patch
@@ -111,7 +111,7 @@ index e30995df572df6135e159d34cd7646fd08db4a5a..b48d419f82f0d9df1f8848d95066bad7
}
// Tuiniy end
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index 6ce29205ba4480b19912a7acd393c4198d6a9e35..4ffe6c1e791f1a8531525bc053b30629fcc30e82 100644
+index 53e343a351ff19912c04bfeb6dc731947c9fc3d8..9061a2b9bffc7f4737871225a678c64f5799e2b8 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
@@ -1083,6 +1083,15 @@ public class WorldServer extends World implements GeneratorAccessSeed {
@@ -145,7 +145,7 @@ index 6ce29205ba4480b19912a7acd393c4198d6a9e35..4ffe6c1e791f1a8531525bc053b30629
gameprofilerfiller.exit();
}
-@@ -1516,6 +1532,12 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1515,6 +1531,12 @@ public class WorldServer extends World implements GeneratorAccessSeed {
int i = MathHelper.floor(entity.locX() / 16.0D);
int j = Math.min(15, Math.max(0, MathHelper.floor(entity.locY() / 16.0D))); // Paper - stay consistent with chunk add/remove behavior
int k = MathHelper.floor(entity.locZ() / 16.0D);
@@ -158,7 +158,7 @@ index 6ce29205ba4480b19912a7acd393c4198d6a9e35..4ffe6c1e791f1a8531525bc053b30629
if (!entity.inChunk || entity.chunkX != i || entity.chunkY != j || entity.chunkZ != k) {
// Paper start - remove entity if its in a chunk more correctly.
-@@ -1525,6 +1547,12 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1524,6 +1546,12 @@ public class WorldServer extends World implements GeneratorAccessSeed {
}
// Paper end
@@ -171,7 +171,7 @@ index 6ce29205ba4480b19912a7acd393c4198d6a9e35..4ffe6c1e791f1a8531525bc053b30629
if (entity.inChunk && this.isChunkLoaded(entity.chunkX, entity.chunkZ)) {
this.getChunkAt(entity.chunkX, entity.chunkZ).a(entity, entity.chunkY);
}
-@@ -1538,6 +1566,11 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1537,6 +1565,11 @@ public class WorldServer extends World implements GeneratorAccessSeed {
} else {
this.getChunkAt(i, k).a(entity);
}
@@ -183,7 +183,7 @@ index 6ce29205ba4480b19912a7acd393c4198d6a9e35..4ffe6c1e791f1a8531525bc053b30629
}
this.getMethodProfiler().exit();
-@@ -2000,9 +2033,64 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1999,9 +2032,64 @@ public class WorldServer extends World implements GeneratorAccessSeed {
// Tuinity end
}
new com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent(entity.getBukkitEntity()).callEvent(); // Paper - fire while valid
@@ -248,7 +248,7 @@ index 6ce29205ba4480b19912a7acd393c4198d6a9e35..4ffe6c1e791f1a8531525bc053b30629
private void registerEntity(Entity entity) {
org.spigotmc.AsyncCatcher.catchOp("entity register"); // Spigot
// Paper start - don't double enqueue entity registration
-@@ -2183,16 +2271,26 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -2182,16 +2270,26 @@ public class WorldServer extends World implements GeneratorAccessSeed {
VoxelShape voxelshape1 = iblockdata1.getCollisionShape(this, blockposition);
if (VoxelShapes.c(voxelshape, voxelshape1, OperatorBoolean.NOT_SAME)) {
diff --git a/patches/Tuinity/patches/server/0063-Actually-unload-POI-data.patch b/patches/Tuinity/patches/server/0062-Actually-unload-POI-data.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0063-Actually-unload-POI-data.patch
rename to patches/Tuinity/patches/server/0062-Actually-unload-POI-data.patch
diff --git a/patches/Tuinity/patches/server/0064-Send-full-pos-packets-for-hard-colliding-entities.patch b/patches/Tuinity/patches/server/0063-Send-full-pos-packets-for-hard-colliding-entities.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0064-Send-full-pos-packets-for-hard-colliding-entities.patch
rename to patches/Tuinity/patches/server/0063-Send-full-pos-packets-for-hard-colliding-entities.patch
diff --git a/patches/Tuinity/patches/server/0065-Fix-chunks-refusing-to-unload-at-low-TPS.patch b/patches/Tuinity/patches/server/0064-Fix-chunks-refusing-to-unload-at-low-TPS.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0065-Fix-chunks-refusing-to-unload-at-low-TPS.patch
rename to patches/Tuinity/patches/server/0064-Fix-chunks-refusing-to-unload-at-low-TPS.patch
diff --git a/patches/Tuinity/patches/server/0066-Fix-incorrect-isRealPlayer-init.patch b/patches/Tuinity/patches/server/0065-Fix-incorrect-isRealPlayer-init.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0066-Fix-incorrect-isRealPlayer-init.patch
rename to patches/Tuinity/patches/server/0065-Fix-incorrect-isRealPlayer-init.patch
diff --git a/patches/Tuinity/patches/server/0067-Do-not-run-raytrace-logic-for-AIR.patch b/patches/Tuinity/patches/server/0066-Do-not-run-raytrace-logic-for-AIR.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0067-Do-not-run-raytrace-logic-for-AIR.patch
rename to patches/Tuinity/patches/server/0066-Do-not-run-raytrace-logic-for-AIR.patch
diff --git a/patches/Tuinity/patches/server/0068-Make-entity-tracker-use-highest-range-of-passengers.patch b/patches/Tuinity/patches/server/0067-Make-entity-tracker-use-highest-range-of-passengers.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0068-Make-entity-tracker-use-highest-range-of-passengers.patch
rename to patches/Tuinity/patches/server/0067-Make-entity-tracker-use-highest-range-of-passengers.patch
diff --git a/patches/Tuinity/patches/server/0069-Do-not-allow-the-server-to-unload-chunks-at-request-.patch b/patches/Tuinity/patches/server/0068-Do-not-allow-the-server-to-unload-chunks-at-request-.patch
similarity index 92%
rename from patches/Tuinity/patches/server/0069-Do-not-allow-the-server-to-unload-chunks-at-request-.patch
rename to patches/Tuinity/patches/server/0068-Do-not-allow-the-server-to-unload-chunks-at-request-.patch
index 35d6327a..1a2fc4de 100644
--- a/patches/Tuinity/patches/server/0069-Do-not-allow-the-server-to-unload-chunks-at-request-.patch
+++ b/patches/Tuinity/patches/server/0068-Do-not-allow-the-server-to-unload-chunks-at-request-.patch
@@ -10,7 +10,7 @@ to be unloaded will simply be unloaded next tick, rather than
immediately.
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-index c1e1b3d53de18579dbe83e7c88d13d44c89fb2d8..94c47f26ad5f521c46cf29c5b7271598a0dfc075 100644
+index d1fa4602f2f443c19ff69bfbd39cacdb4cbaf2a3..4934d0872af5c9cf6be640bad1f46298ad984337 100644
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
@@ -926,6 +926,7 @@ public class ChunkProviderServer extends IChunkProvider {
diff --git a/patches/Tuinity/patches/server/0070-Do-not-run-close-logic-for-inventories-on-chunk-unlo.patch b/patches/Tuinity/patches/server/0069-Do-not-run-close-logic-for-inventories-on-chunk-unlo.patch
similarity index 96%
rename from patches/Tuinity/patches/server/0070-Do-not-run-close-logic-for-inventories-on-chunk-unlo.patch
rename to patches/Tuinity/patches/server/0069-Do-not-run-close-logic-for-inventories-on-chunk-unlo.patch
index 5fd67eb5..03639ab8 100644
--- a/patches/Tuinity/patches/server/0070-Do-not-run-close-logic-for-inventories-on-chunk-unlo.patch
+++ b/patches/Tuinity/patches/server/0069-Do-not-run-close-logic-for-inventories-on-chunk-unlo.patch
@@ -31,10 +31,10 @@ index b2cd13541bf3486a69e8f3e41e4c90cdc47180d1..553ad54e5d657a840d3dbd3b48a8b21f
public void broadcastCarriedItem() {
if (!this.e) {
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index 4ffe6c1e791f1a8531525bc053b30629fcc30e82..b4a22a1bb8001437d0eae48d7284eca0a1b30ad4 100644
+index 9061a2b9bffc7f4737871225a678c64f5799e2b8..ea71586563ceaf241c5a9f443805ec917a286690 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
-@@ -1907,10 +1907,14 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1906,10 +1906,14 @@ public class WorldServer extends World implements GeneratorAccessSeed {
// Spigot Start
for (TileEntity tileentity : chunk.getTileEntities().values()) {
if (tileentity instanceof net.minecraft.world.IInventory) {
diff --git a/patches/Tuinity/patches/server/0071-Fix-NPE-in-pickup-logic-for-arrow.patch b/patches/Tuinity/patches/server/0070-Fix-NPE-in-pickup-logic-for-arrow.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0071-Fix-NPE-in-pickup-logic-for-arrow.patch
rename to patches/Tuinity/patches/server/0070-Fix-NPE-in-pickup-logic-for-arrow.patch
diff --git a/patches/Tuinity/patches/server/0072-Remove-chunk-lookup-lambda-allocation-from-counting-.patch b/patches/Tuinity/patches/server/0071-Remove-chunk-lookup-lambda-allocation-from-counting-.patch
similarity index 97%
rename from patches/Tuinity/patches/server/0072-Remove-chunk-lookup-lambda-allocation-from-counting-.patch
rename to patches/Tuinity/patches/server/0071-Remove-chunk-lookup-lambda-allocation-from-counting-.patch
index 4200c60d..9027cbdb 100644
--- a/patches/Tuinity/patches/server/0072-Remove-chunk-lookup-lambda-allocation-from-counting-.patch
+++ b/patches/Tuinity/patches/server/0071-Remove-chunk-lookup-lambda-allocation-from-counting-.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Remove chunk lookup & lambda allocation from counting mobs
The chunk lookup doesn't look cheap.
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-index 94c47f26ad5f521c46cf29c5b7271598a0dfc075..118b21b15e12de491a9cfc2b68c6da7bb10b1fee 100644
+index 4934d0872af5c9cf6be640bad1f46298ad984337..9e96376a1d710c0ba7a763868b23fc586253e1a8 100644
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
@@ -1016,9 +1016,9 @@ public class ChunkProviderServer extends IChunkProvider {
diff --git a/patches/Tuinity/patches/server/0073-Optimise-snow-ice-in-chunk-ticking.patch b/patches/Tuinity/patches/server/0072-Optimise-snow-ice-in-chunk-ticking.patch
similarity index 98%
rename from patches/Tuinity/patches/server/0073-Optimise-snow-ice-in-chunk-ticking.patch
rename to patches/Tuinity/patches/server/0072-Optimise-snow-ice-in-chunk-ticking.patch
index 187b8509..bc7f842d 100644
--- a/patches/Tuinity/patches/server/0073-Optimise-snow-ice-in-chunk-ticking.patch
+++ b/patches/Tuinity/patches/server/0072-Optimise-snow-ice-in-chunk-ticking.patch
@@ -11,7 +11,7 @@ the biome methods, removing the need to invoke a chunk
lookup.
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index b4a22a1bb8001437d0eae48d7284eca0a1b30ad4..943f72ed96549e1a495af984670ed3efe8707f6a 100644
+index ea71586563ceaf241c5a9f443805ec917a286690..c9d03c7025b05a496b6860718f6b307a4ff658f8 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
@@ -1196,6 +1196,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
diff --git a/patches/Tuinity/patches/server/0074-Oprimise-map-impl-for-tracked-players.patch b/patches/Tuinity/patches/server/0073-Oprimise-map-impl-for-tracked-players.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0074-Oprimise-map-impl-for-tracked-players.patch
rename to patches/Tuinity/patches/server/0073-Oprimise-map-impl-for-tracked-players.patch
diff --git a/patches/Tuinity/patches/server/0075-Use-hash-table-for-maintaing-changed-block-set.patch b/patches/Tuinity/patches/server/0074-Use-hash-table-for-maintaing-changed-block-set.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0075-Use-hash-table-for-maintaing-changed-block-set.patch
rename to patches/Tuinity/patches/server/0074-Use-hash-table-for-maintaing-changed-block-set.patch
diff --git a/patches/Tuinity/patches/server/0076-Replace-player-chunk-loader-system.patch b/patches/Tuinity/patches/server/0075-Replace-player-chunk-loader-system.patch
similarity index 99%
rename from patches/Tuinity/patches/server/0076-Replace-player-chunk-loader-system.patch
rename to patches/Tuinity/patches/server/0075-Replace-player-chunk-loader-system.patch
index 2277f0fe..625cd497 100644
--- a/patches/Tuinity/patches/server/0076-Replace-player-chunk-loader-system.patch
+++ b/patches/Tuinity/patches/server/0075-Replace-player-chunk-loader-system.patch
@@ -1203,7 +1203,7 @@ index 8d4944fa1c761bb3ab299ec639663e7f52b512a3..db8532c42fcb2e96f4b3491352d1b9a2
class b extends ChunkMap {
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
-index 118b21b15e12de491a9cfc2b68c6da7bb10b1fee..cb83f1152c52a99d25e4e80cc8bf18c6793e8b50 100644
+index 9e96376a1d710c0ba7a763868b23fc586253e1a8..fe040615ff03478a20cdf8376f89a6b7d100ba61 100644
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
@@ -946,6 +946,7 @@ public class ChunkProviderServer extends IChunkProvider {
@@ -1648,7 +1648,7 @@ index f74685a7cdb905af8e9712ca8597e7ed3dc8b120..feedbd8c97c1b1c56eaff359e6a94069
double deltaZ = soundPos.getZ() - player.locZ();
double distanceSquared = deltaX * deltaX + deltaZ * deltaZ;
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
-index 1fab6ec02c0aceb56baea5353dbd85b580caf454..c8a5d4972431ce9615312280f36181a2b9645df7 100644
+index a802c45538943b570ca0daa3a40607dc80e696eb..af01f5d635eada7175b9d7fdb47a65530686a539 100644
--- a/src/main/java/net/minecraft/world/level/World.java
+++ b/src/main/java/net/minecraft/world/level/World.java
@@ -606,7 +606,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
@@ -1661,7 +1661,7 @@ index 1fab6ec02c0aceb56baea5353dbd85b580caf454..c8a5d4972431ce9615312280f36181a2
// Paper end - per player view distance
}
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 8b73ba51dde43e3ddf40ed863cf286042f139a34..259d4ac89e84fd334ff65ea8a606e1fc50cc882b 100644
+index d6b34c6abebeac8445da3e76f341066952182e2b..df35ae12ecbe88ab396bed9850ef80433ff42fd4 100644
--- a/src/main/java/net/minecraft/world/level/chunk/Chunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/Chunk.java
@@ -406,12 +406,12 @@ public class Chunk implements IChunkAccess {
@@ -1713,7 +1713,7 @@ index 8b73ba51dde43e3ddf40ed863cf286042f139a34..259d4ac89e84fd334ff65ea8a606e1fc
}
// Paper end - no-tick view distance
}
-@@ -1019,6 +995,7 @@ public class Chunk implements IChunkAccess {
+@@ -1027,6 +1003,7 @@ public class Chunk implements IChunkAccess {
// Paper end - neighbour cache
org.bukkit.Server server = this.world.getServer();
((WorldServer)this.world).getChunkProvider().addLoadedChunk(this); // Paper
@@ -1739,10 +1739,10 @@ index 3fe1508b091e1fd0325eae50138d02fa6445c9ff..a19a26a88f247d359354902efeece992
return new Vec3D((double) baseblockposition.getX() + 0.5D, (double) baseblockposition.getY() + 0.5D, (double) baseblockposition.getZ() + 0.5D);
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-index 89e2ce2e20a9051336c784a48e3b4214379cd77b..292bd2187eb08fe535a8c1f8047be2bb29f55c53 100644
+index 12f12aeeed79c657659b4bc8651488f1d73d3ef9..b393490231ea00af15d883336a07de6cca642195 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-@@ -2632,14 +2632,14 @@ public class CraftWorld implements World {
+@@ -2637,14 +2637,14 @@ public class CraftWorld implements World {
throw new IllegalArgumentException("View distance " + viewDistance + " is out of range of [2, 32]");
}
PlayerChunkMap chunkMap = getHandle().getChunkProvider().playerChunkMap;
@@ -1759,7 +1759,7 @@ index 89e2ce2e20a9051336c784a48e3b4214379cd77b..292bd2187eb08fe535a8c1f8047be2bb
}
@Override
-@@ -2648,11 +2648,22 @@ public class CraftWorld implements World {
+@@ -2653,11 +2653,22 @@ public class CraftWorld implements World {
throw new IllegalArgumentException("View distance " + viewDistance + " is out of range of [2, 32]");
}
PlayerChunkMap chunkMap = getHandle().getChunkProvider().playerChunkMap;
diff --git a/patches/Tuinity/patches/server/0077-Optimise-general-POI-access.patch b/patches/Tuinity/patches/server/0076-Optimise-general-POI-access.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0077-Optimise-general-POI-access.patch
rename to patches/Tuinity/patches/server/0076-Optimise-general-POI-access.patch
diff --git a/patches/Tuinity/patches/server/0078-Be-aware-of-entity-teleports-when-chunk-checking-ent.patch b/patches/Tuinity/patches/server/0077-Be-aware-of-entity-teleports-when-chunk-checking-ent.patch
similarity index 94%
rename from patches/Tuinity/patches/server/0078-Be-aware-of-entity-teleports-when-chunk-checking-ent.patch
rename to patches/Tuinity/patches/server/0077-Be-aware-of-entity-teleports-when-chunk-checking-ent.patch
index 5d543eeb..ed8150f4 100644
--- a/patches/Tuinity/patches/server/0078-Be-aware-of-entity-teleports-when-chunk-checking-ent.patch
+++ b/patches/Tuinity/patches/server/0077-Be-aware-of-entity-teleports-when-chunk-checking-ent.patch
@@ -8,10 +8,10 @@ that occured from the getChunkAt call, we would either
add to the wrong chunk or add to both chunks! not good.
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index 943f72ed96549e1a495af984670ed3efe8707f6a..46f960b9276dced41deb8f741454b6cce5a81529 100644
+index c9d03c7025b05a496b6860718f6b307a4ff658f8..655e994376dcc65f4fd76e182d4ef5bc20142063 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
-@@ -1571,7 +1571,35 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -1570,7 +1570,35 @@ public class WorldServer extends World implements GeneratorAccessSeed {
entity.inChunk = false;
} else {
diff --git a/patches/Tuinity/patches/server/0079-Custom-table-implementation-for-blockstate-state-loo.patch b/patches/Tuinity/patches/server/0078-Custom-table-implementation-for-blockstate-state-loo.patch
similarity index 100%
rename from patches/Tuinity/patches/server/0079-Custom-table-implementation-for-blockstate-state-loo.patch
rename to patches/Tuinity/patches/server/0078-Custom-table-implementation-for-blockstate-state-loo.patch
diff --git a/patches/Tuinity/patches/server/0080-Make-sure-to-remove-correct-TE-during-TE-tick.patch b/patches/Tuinity/patches/server/0080-Make-sure-to-remove-correct-TE-during-TE-tick.patch
deleted file mode 100644
index 296bfb48..00000000
--- a/patches/Tuinity/patches/server/0080-Make-sure-to-remove-correct-TE-during-TE-tick.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Spottedleaf
-Date: Fri, 26 Mar 2021 14:10:58 -0700
-Subject: [PATCH] Make sure to remove correct TE during TE tick
-
-This looks like it can cause premature TE removal
-
-diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
-index c8a5d4972431ce9615312280f36181a2b9645df7..68fa071fc576f398682ef461df102be432cdcb4c 100644
---- a/src/main/java/net/minecraft/world/level/World.java
-+++ b/src/main/java/net/minecraft/world/level/World.java
-@@ -968,7 +968,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
- //this.tileEntityList.remove(tileentity); // Paper - remove unused list
- // Paper - prevent double chunk lookups
- Chunk chunk; if ((chunk = this.getChunkIfLoaded(tileentity.getPosition())) != null) { // inlined contents of this.isLoaded(BlockPosition). Reuse the returned chunk instead of looking it up again
-- chunk.removeTileEntity(tileentity.getPosition());
-+ chunk.removeTileEntity(tileentity.getPosition(), tileentity); // Tuinity - make sure we remove the correct TE
- }
- // Paper end
- }
-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 259d4ac89e84fd334ff65ea8a606e1fc50cc882b..ffef28f9fa82a6961ef6db5f6732cfee4352ee01 100644
---- a/src/main/java/net/minecraft/world/level/chunk/Chunk.java
-+++ b/src/main/java/net/minecraft/world/level/chunk/Chunk.java
-@@ -956,10 +956,18 @@ public class Chunk implements IChunkAccess {
-
- @Override
- public void removeTileEntity(BlockPosition blockposition) {
-+ // Tuinity start - make sure we remove the correct TE
-+ this.removeTileEntity(blockposition, null);
-+ }
-+ public void removeTileEntity(BlockPosition blockposition, TileEntity match) {
-+ // Tuinity end - make sure we remove the correct TE
- if (this.loaded || this.world.s_()) {
-- TileEntity tileentity = (TileEntity) this.tileEntities.remove(blockposition);
-+ // Tuinity start - make sure we remove the correct TE
-+ TileEntity tileentity = (TileEntity) this.tileEntities.get(blockposition);
-
-- if (tileentity != null) {
-+ if (tileentity != null && (match == null || match == tileentity)) {
-+ this.tileEntities.remove(blockposition);
-+ // Tuinity end - make sure we remove the correct TE
- tileentity.al_();
- }
- }
diff --git a/patches/server/0001-Modify-POM.patch b/patches/server/0001-Modify-POM.patch
index eb7290ec..d2091116 100644
--- a/patches/server/0001-Modify-POM.patch
+++ b/patches/server/0001-Modify-POM.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Modify POM
diff --git a/pom.xml b/pom.xml
-index cf6e53e9f483d21b17e2782816be4403fa5be717..dc7bca7a09cb173af53c916d8f231249af8b1cdb 100644
+index 9d9ea5cff8a07c445837de74b3f887316cd79772..67c70c38214f39739d56121dde76a12f584f2a64 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,11 +1,11 @@
@@ -112,7 +112,7 @@ index cf6e53e9f483d21b17e2782816be4403fa5be717..dc7bca7a09cb173af53c916d8f231249
test
-@@ -168,6 +177,12 @@
+@@ -175,6 +184,12 @@
master-SNAPSHOT
compile
@@ -125,9 +125,9 @@ index cf6e53e9f483d21b17e2782816be4403fa5be717..dc7bca7a09cb173af53c916d8f231249
-@@ -176,19 +191,32 @@
- jitpack.io
- https://jitpack.io
+@@ -188,19 +203,32 @@
+ purpur-snapshots
+ https://repo.pl3x.net/
+
+ destroystokyo-repo
diff --git a/patches/server/0003-Utilities.patch b/patches/server/0003-Utilities.patch
index 1d196842..cc6e6c12 100644
--- a/patches/server/0003-Utilities.patch
+++ b/patches/server/0003-Utilities.patch
@@ -9,10 +9,10 @@ Co-authored-by: Mykyta Komarnytskyy
Co-authored-by: Ivan Pekov
diff --git a/pom.xml b/pom.xml
-index dc7bca7a09cb173af53c916d8f231249af8b1cdb..16234696393f0d61bdaa7009c80fa0996a7f1712 100644
+index 67c70c38214f39739d56121dde76a12f584f2a64..0d960c173924f2ee97b9ad676d2c48c532b5ef5d 100644
--- a/pom.xml
+++ b/pom.xml
-@@ -183,6 +183,12 @@
+@@ -190,6 +190,12 @@
commons-math3
3.6.1
diff --git a/patches/server/0005-Add-last-tick-time-API.patch b/patches/server/0005-Add-last-tick-time-API.patch
index 2d96c090..0423d415 100644
--- a/patches/server/0005-Add-last-tick-time-API.patch
+++ b/patches/server/0005-Add-last-tick-time-API.patch
@@ -7,7 +7,7 @@ Original patch by:
Co-authored-by: tr7zw
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 34552a2bd96428013dba6f2bead737af75a28d0d..e283960750cff2f45695117ef873cf1f941c27bf 100644
+index f72574fde82307a0e73a9eca6c9dc967d0c48f22..8004b6068e4f9dac2cdda8300615b285b7bf16b2 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1055,6 +1055,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrantnet/minecraft/server/v${minecraft_version}/$2
true
diff --git a/patches/server/0019-Optimize-TileEntity-load-unload.patch b/patches/server/0019-Optimize-TileEntity-load-unload.patch
index 6f5c75c4..9343eed5 100644
--- a/patches/server/0019-Optimize-TileEntity-load-unload.patch
+++ b/patches/server/0019-Optimize-TileEntity-load-unload.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Optimize TileEntity load/unload
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
-index f6f233ea7344924303b7462b88eaf348de439c0e..42ba62dbee134b2bc5f8065a4cd3f2811aa54310 100644
+index 1132743062846f0ac20a2611bc2ec697d6ea97da..ee6bace3bf6995a765bb9dd26a7a8003867b53de 100644
--- a/src/main/java/net/minecraft/world/level/World.java
+++ b/src/main/java/net/minecraft/world/level/World.java
@@ -105,8 +105,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
diff --git a/patches/server/0024-Optimize-some-stuff-in-WorldServer-ticking.patch b/patches/server/0024-Optimize-some-stuff-in-WorldServer-ticking.patch
index 5d692d89..f8fcdb4c 100644
--- a/patches/server/0024-Optimize-some-stuff-in-WorldServer-ticking.patch
+++ b/patches/server/0024-Optimize-some-stuff-in-WorldServer-ticking.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Optimize some stuff in WorldServer ticking
Replaced some streams and some array lists with glue lists
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index 680d5d5273d70bd7ebba2cb62d655f94a4132468..9dcf078c7e32697417399b684211d5a3d5a7eff5 100644
+index 62d1ee6f091d1b80d6f96930d2edb91259e15ffa..c97d29ef4b6d64a641d72ad754dab18932d185d5 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
@@ -1005,12 +1005,21 @@ public class WorldServer extends World implements GeneratorAccessSeed {
@@ -60,7 +60,7 @@ index 680d5d5273d70bd7ebba2cb62d655f94a4132468..9dcf078c7e32697417399b684211d5a3
}
// Paper start - optimise random block ticking
-@@ -2068,8 +2075,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -2067,8 +2074,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
// Spigot start
if ( entity instanceof EntityHuman )
{
@@ -71,7 +71,7 @@ index 680d5d5273d70bd7ebba2cb62d655f94a4132468..9dcf078c7e32697417399b684211d5a3
for (Object o : worldData.data.values() )
{
if ( o instanceof WorldMap )
-@@ -2086,7 +2094,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -2085,7 +2093,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
}
}
}
diff --git a/patches/server/0031-Fix-LightEngineThreaded-memory-leak.patch b/patches/server/0031-Fix-LightEngineThreaded-memory-leak.patch
index 4d498f09..283a4703 100644
--- a/patches/server/0031-Fix-LightEngineThreaded-memory-leak.patch
+++ b/patches/server/0031-Fix-LightEngineThreaded-memory-leak.patch
@@ -18,10 +18,10 @@ index 381bd11075599d44e4c705a8e754769d29883d75..e36d11ffb3e66e6ce6f64d2e771661f8
return this.size == 0 && this.pendingTasks.isEmpty();
}
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
-index 9dcf078c7e32697417399b684211d5a3d5a7eff5..d42c15dc16114e362722ccfde2021a2c41680649 100644
+index c97d29ef4b6d64a641d72ad754dab18932d185d5..8ea7ad63c0f091102f793b3c1f90b4121c4d74e0 100644
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
-@@ -2054,6 +2054,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
+@@ -2053,6 +2053,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
}
// Paper end
diff --git a/patches/server/0034-Optimize-whitelist-command-for-multiple-additions-re.patch b/patches/server/0034-Optimize-whitelist-command-for-multiple-additions-re.patch
index 86858698..ef72d87e 100644
--- a/patches/server/0034-Optimize-whitelist-command-for-multiple-additions-re.patch
+++ b/patches/server/0034-Optimize-whitelist-command-for-multiple-additions-re.patch
@@ -10,7 +10,7 @@ added.
These changes aim to reduce that load whenever you are using the /whitelist command.
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index e283960750cff2f45695117ef873cf1f941c27bf..16d8d7760ca0348ee0cf1edec1650cac536e21d0 100644
+index 8004b6068e4f9dac2cdda8300615b285b7bf16b2..57df64bb8ff906f035d50646678d194173864ded 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -2108,6 +2108,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 9c991ee900a306f19d613b1d0511b89496267286..1b0add2400c8e518953add4cc100f227ebae0703 100644
+index d4490515972936d762faffa3e432db92ee340ad2..27378526efabe92735790b1fd993e9bb5f23f730 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -942,7 +942,9 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant