diff --git a/Spigot-Server-Patches/0004-MC-Utils.patch b/Spigot-Server-Patches/0004-MC-Utils.patch index 1149614460..1948636b49 100644 --- a/Spigot-Server-Patches/0004-MC-Utils.patch +++ b/Spigot-Server-Patches/0004-MC-Utils.patch @@ -3515,10 +3515,18 @@ index 254953c1d8ad80173bcc9ed703bacaf32ca89c9a..7dea5e783ce2a1f8ddd2b3ab7a19e03a } diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index b9a0b37ceeeda9f6b1c4c23283e53dcb229f7249..67cae076af338348fdc9c5de51377b32a97ef836 100644 +index b9a0b37ceeeda9f6b1c4c23283e53dcb229f7249..0bf95b97140a67682ec2953ccc773f6faad7b7da 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -146,6 +146,26 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -54,6 +54,7 @@ import net.minecraft.network.protocol.game.PacketPlayOutLightUpdate; + import net.minecraft.network.protocol.game.PacketPlayOutMapChunk; + import net.minecraft.network.protocol.game.PacketPlayOutMount; + import net.minecraft.network.protocol.game.PacketPlayOutViewCentre; ++import net.minecraft.server.MCUtil; + import net.minecraft.server.level.progress.WorldLoadListener; + import net.minecraft.util.CSVWriter; + import net.minecraft.util.EntitySlice; +@@ -146,6 +147,26 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { }; // CraftBukkit end @@ -3545,7 +3553,7 @@ index b9a0b37ceeeda9f6b1c4c23283e53dcb229f7249..67cae076af338348fdc9c5de51377b32 public PlayerChunkMap(WorldServer worldserver, Convertable.ConversionSession convertable_conversionsession, DataFixer datafixer, DefinedStructureManager definedstructuremanager, Executor executor, IAsyncTaskHandler iasynctaskhandler, ILightAccess ilightaccess, ChunkGenerator chunkgenerator, WorldLoadListener worldloadlistener, Supplier supplier, int i, boolean flag) { super(new File(convertable_conversionsession.a(worldserver.getDimensionKey()), "region"), datafixer, flag); this.visibleChunks = this.updatingChunks.clone(); -@@ -235,6 +255,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -235,6 +256,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { }; } @@ -3560,7 +3568,7 @@ index b9a0b37ceeeda9f6b1c4c23283e53dcb229f7249..67cae076af338348fdc9c5de51377b32 private CompletableFuture, PlayerChunk.Failure>> a(ChunkCoordIntPair chunkcoordintpair, int i, IntFunction intfunction) { List>> list = Lists.newArrayList(); int j = chunkcoordintpair.x; -@@ -945,6 +973,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -945,6 +974,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { if (!flag1) { this.chunkDistanceManager.a(SectionPosition.a((Entity) entityplayer), entityplayer); } @@ -3568,7 +3576,7 @@ index b9a0b37ceeeda9f6b1c4c23283e53dcb229f7249..67cae076af338348fdc9c5de51377b32 } else { SectionPosition sectionposition = entityplayer.O(); -@@ -952,6 +981,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -952,6 +982,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { if (!flag2) { this.chunkDistanceManager.b(sectionposition, entityplayer); } @@ -3576,7 +3584,7 @@ index b9a0b37ceeeda9f6b1c4c23283e53dcb229f7249..67cae076af338348fdc9c5de51377b32 } for (int k = i - this.viewDistance; k <= i + this.viewDistance; ++k) { -@@ -1062,6 +1092,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1062,6 +1093,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } } @@ -3780,7 +3788,7 @@ index acebee991eca1e19fc1094718dc40822b66756e1..c484e27650364b6537fe6b2e8e14de98 super(entitytypes, world); this.f = 5; diff --git a/src/main/java/net/minecraft/world/entity/player/PlayerInventory.java b/src/main/java/net/minecraft/world/entity/player/PlayerInventory.java -index 97db41acf626eec3e587964d0e73c370e5695bf0..bc251c67b2006ea85e890c29fec52dc034298281 100644 +index 97db41acf626eec3e587964d0e73c370e5695bf0..2df3ae0b72ccb5f816d55fed15396ba5a1affb7f 100644 --- a/src/main/java/net/minecraft/world/entity/player/PlayerInventory.java +++ b/src/main/java/net/minecraft/world/entity/player/PlayerInventory.java @@ -38,7 +38,7 @@ public class PlayerInventory implements IInventory, INamableTileEntity { @@ -3788,7 +3796,7 @@ index 97db41acf626eec3e587964d0e73c370e5695bf0..bc251c67b2006ea85e890c29fec52dc0 public final NonNullList armor; public final NonNullList extraSlots; - private final List> f; -+ private final List> f;List> getComponents() { return f; } // Paper - OBFHELPER ++ private final List> f; public final List> getComponents() { return f; } // Paper - OBFHELPER public int itemInHandIndex; public final EntityHuman player; private ItemStack carried; @@ -3982,10 +3990,22 @@ index 14e55bf842e928d1e8e2137f9efdef0f7c336362..9a88791be443a5b18934e7d752aee6dc } diff --git a/src/main/java/net/minecraft/world/level/IBlockAccess.java b/src/main/java/net/minecraft/world/level/IBlockAccess.java -index 25e50b57f42dde156443480d73c6c9985df6f0c6..f0b74dce1e0a3ca150251008247a14b380cde03d 100644 +index 25e50b57f42dde156443480d73c6c9985df6f0c6..e799765ecfada1eec78beb71651e52ad355a30aa 100644 --- a/src/main/java/net/minecraft/world/level/IBlockAccess.java +++ b/src/main/java/net/minecraft/world/level/IBlockAccess.java -@@ -22,6 +22,19 @@ public interface IBlockAccess { +@@ -8,9 +8,11 @@ import javax.annotation.Nullable; + import net.minecraft.core.BlockPosition; + import net.minecraft.core.EnumDirection; + import net.minecraft.util.MathHelper; ++import net.minecraft.world.level.block.Block; + import net.minecraft.world.level.block.entity.TileEntity; + import net.minecraft.world.level.block.state.IBlockData; + import net.minecraft.world.level.material.Fluid; ++import net.minecraft.world.level.material.Material; + import net.minecraft.world.phys.AxisAlignedBB; + import net.minecraft.world.phys.MovingObjectPositionBlock; + import net.minecraft.world.phys.Vec3D; +@@ -22,6 +24,19 @@ public interface IBlockAccess { TileEntity getTileEntity(BlockPosition blockposition); IBlockData getType(BlockPosition blockposition); diff --git a/Spigot-Server-Patches/0007-Store-reference-to-current-Chunk-for-Entity-and-Bloc.patch b/Spigot-Server-Patches/0007-Store-reference-to-current-Chunk-for-Entity-and-Bloc.patch index df2fae99a0..c43854e2c1 100644 --- a/Spigot-Server-Patches/0007-Store-reference-to-current-Chunk-for-Entity-and-Bloc.patch +++ b/Spigot-Server-Patches/0007-Store-reference-to-current-Chunk-for-Entity-and-Bloc.patch @@ -45,10 +45,18 @@ index ec553e7d7595ef3652bfa3325a07483bb3c32245..9af9d9463e9b50f8a627ffd79dcd3716 private String entityKeyString; diff --git a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -index 2b58ae6d91fe0d0f36eedbb78a3c8a8a66d92405..8300bb425f7fc3fa8a5a8832a0bb432a2947793b 100644 +index 2b58ae6d91fe0d0f36eedbb78a3c8a8a66d92405..75110c41af3e0097aef65091a2497dd87d08b4b2 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -@@ -63,6 +63,15 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / +@@ -11,6 +11,7 @@ import net.minecraft.world.level.World; + import net.minecraft.world.level.block.EnumBlockMirror; + import net.minecraft.world.level.block.EnumBlockRotation; + import net.minecraft.world.level.block.state.IBlockData; ++import net.minecraft.world.level.chunk.Chunk; + import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; + import org.apache.logging.log4j.util.Supplier; +@@ -63,6 +64,15 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / getMinecraftKey(); // Try to load if it doesn't exists. return tileEntityKeyString; } diff --git a/Spigot-Server-Patches/0009-Timings-v2.patch b/Spigot-Server-Patches/0009-Timings-v2.patch index 42bf7d230a..d0c795ff04 100644 --- a/Spigot-Server-Patches/0009-Timings-v2.patch +++ b/Spigot-Server-Patches/0009-Timings-v2.patch @@ -546,15 +546,15 @@ index 0000000000000000000000000000000000000000..d4ebcf8f66197299256bd6b65710a148 +} diff --git a/src/main/java/co/aikar/timings/WorldTimingsHandler.java b/src/main/java/co/aikar/timings/WorldTimingsHandler.java new file mode 100644 -index 0000000000000000000000000000000000000000..944fd203e9f39d6c6fc9e270940c76c98067273a +index 0000000000000000000000000000000000000000..fa154ed68187a2020e814db6345a8cc1119ab4ba --- /dev/null +++ b/src/main/java/co/aikar/timings/WorldTimingsHandler.java @@ -0,0 +1,119 @@ +package co.aikar.timings; + -+import net.minecraft.server.World; -+import net.minecraft.server.WorldDataServer; -+import net.minecraft.server.WorldServer; ++import net.minecraft.server.level.WorldServer; ++import net.minecraft.world.level.World; ++import net.minecraft.world.level.storage.WorldDataServer; + +/** + * Set of timers per world, to track world specific timings. @@ -1154,7 +1154,7 @@ index 3055ef62a054d91a74552f83f7afdfe08c7880db..95af66ebb7849cbf2bcad6bc52aeb85a private void a(long i, Consumer consumer) { diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 67cae076af338348fdc9c5de51377b32a97ef836..8219ffea086a446a682479ae21ca7d56a598751a 100644 +index 0bf95b97140a67682ec2953ccc773f6faad7b7da..9eae9d7e9d18d73b1050e1d9b8859802cbd286ed 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java @@ -1,7 +1,9 @@ @@ -1167,7 +1167,7 @@ index 67cae076af338348fdc9c5de51377b32a97ef836..8219ffea086a446a682479ae21ca7d56 import com.google.common.collect.Lists; import com.google.common.collect.Queues; import com.google.common.collect.Sets; -@@ -553,11 +555,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -554,11 +556,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { private CompletableFuture> f(ChunkCoordIntPair chunkcoordintpair) { return CompletableFuture.supplyAsync(() -> { @@ -1185,7 +1185,7 @@ index 67cae076af338348fdc9c5de51377b32a97ef836..8219ffea086a446a682479ae21ca7d56 boolean flag = nbttagcompound.hasKeyOfType("Level", 10) && nbttagcompound.getCompound("Level").hasKeyOfType("Status", 8); if (flag) { -@@ -569,7 +574,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -570,7 +575,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } PlayerChunkMap.LOGGER.error("Chunk file at {} is missing level data, skipping", chunkcoordintpair); @@ -1194,7 +1194,7 @@ index 67cae076af338348fdc9c5de51377b32a97ef836..8219ffea086a446a682479ae21ca7d56 } catch (ReportedException reportedexception) { Throwable throwable = reportedexception.getCause(); -@@ -606,7 +611,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -607,7 +612,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return "chunkGenerate " + chunkstatus.d(); }); return completablefuture.thenComposeAsync((either) -> { @@ -1203,7 +1203,7 @@ index 67cae076af338348fdc9c5de51377b32a97ef836..8219ffea086a446a682479ae21ca7d56 try { CompletableFuture> completablefuture1 = chunkstatus.a(this.world, this.chunkGenerator, this.definedStructureManager, this.lightEngine, (ichunkaccess) -> { return this.c(playerchunk); -@@ -659,6 +664,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -660,6 +665,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { ChunkStatus chunkstatus = PlayerChunk.getChunkStatus(playerchunk.getTicketLevel()); return !chunkstatus.b(ChunkStatus.FULL) ? PlayerChunk.UNLOADED_CHUNK_ACCESS : either.mapLeft((ichunkaccess) -> { @@ -1211,7 +1211,7 @@ index 67cae076af338348fdc9c5de51377b32a97ef836..8219ffea086a446a682479ae21ca7d56 ChunkCoordIntPair chunkcoordintpair = playerchunk.i(); Chunk chunk; -@@ -710,6 +716,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -711,6 +717,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } return chunk; @@ -1219,7 +1219,7 @@ index 67cae076af338348fdc9c5de51377b32a97ef836..8219ffea086a446a682479ae21ca7d56 }); }, (runnable) -> { Mailbox mailbox = this.mailboxMain; -@@ -1168,6 +1175,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1169,6 +1176,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { PlayerChunkMap.EntityTracker playerchunkmap_entitytracker; ObjectIterator objectiterator; @@ -1227,7 +1227,7 @@ index 67cae076af338348fdc9c5de51377b32a97ef836..8219ffea086a446a682479ae21ca7d56 for (objectiterator = this.trackedEntities.values().iterator(); objectiterator.hasNext(); playerchunkmap_entitytracker.trackerEntry.a()) { playerchunkmap_entitytracker = (PlayerChunkMap.EntityTracker) objectiterator.next(); -@@ -1185,16 +1193,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1186,16 +1194,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { playerchunkmap_entitytracker.e = sectionposition1; } } @@ -1737,10 +1737,10 @@ index bab55395ba92d0f3788e798ae0e154d62c4ec2fa..d285c4e3d9f938973bf7fb904680044b private String name; @Nullable diff --git a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -index 8300bb425f7fc3fa8a5a8832a0bb432a2947793b..da39fcb22d7656eedb8bf7d0774f50018b9fb02b 100644 +index 75110c41af3e0097aef65091a2497dd87d08b4b2..9ebd91e1309938f81583eb3d4dd97fd39bcc930a 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -@@ -22,10 +22,12 @@ import org.bukkit.inventory.InventoryHolder; +@@ -23,10 +23,12 @@ import org.bukkit.inventory.InventoryHolder; // CraftBukkit end import org.spigotmc.CustomTimingsHandler; // Spigot diff --git a/Spigot-Server-Patches/0027-Prevent-tile-entity-and-entity-crashes.patch b/Spigot-Server-Patches/0027-Prevent-tile-entity-and-entity-crashes.patch index e725bcb865..7abd9f5960 100644 --- a/Spigot-Server-Patches/0027-Prevent-tile-entity-and-entity-crashes.patch +++ b/Spigot-Server-Patches/0027-Prevent-tile-entity-and-entity-crashes.patch @@ -46,10 +46,10 @@ index 62735e7908f86e31f7a89ce2071ddebe176c0385..87e37c38825ad20fc11f41ea2a451275 } diff --git a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -index da39fcb22d7656eedb8bf7d0774f50018b9fb02b..b1c220df7e00af79b548895cc9333ba85d5a447f 100644 +index 9ebd91e1309938f81583eb3d4dd97fd39bcc930a..58789a6e285c31947508deae37caefe7e182278c 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -@@ -207,7 +207,12 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / +@@ -208,7 +208,12 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / return IRegistry.BLOCK_ENTITY_TYPE.getKey(this.getTileType()) + " // " + this.getClass().getCanonicalName(); }); if (this.world != null) { diff --git a/Spigot-Server-Patches/0038-Send-absolute-position-the-first-time-an-entity-is-s.patch b/Spigot-Server-Patches/0038-Send-absolute-position-the-first-time-an-entity-is-s.patch index 1842bc6ca3..6c1c88095b 100644 --- a/Spigot-Server-Patches/0038-Send-absolute-position-the-first-time-an-entity-is-s.patch +++ b/Spigot-Server-Patches/0038-Send-absolute-position-the-first-time-an-entity-is-s.patch @@ -77,10 +77,10 @@ index a95867c0ba7dec750e07a4ac623ee30b4522fe55..f5227aa761d326376d057eaadcdbef02 this.c(); diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 8219ffea086a446a682479ae21ca7d56a598751a..21282ce37e55cbca027c7542c148928fd4e69dfc 100644 +index 9eae9d7e9d18d73b1050e1d9b8859802cbd286ed..e9657faf0a24aee8444372e6f1ca0d971339ce5a 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -1294,10 +1294,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1295,10 +1295,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { private final Entity tracker; private final int trackingDistance; private SectionPosition e; @@ -97,7 +97,7 @@ index 8219ffea086a446a682479ae21ca7d56a598751a..21282ce37e55cbca027c7542c148928f this.tracker = entity; this.trackingDistance = i; this.e = SectionPosition.a(entity); -@@ -1379,7 +1383,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1380,7 +1384,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { entityplayer.removeQueue.remove(Integer.valueOf(this.tracker.getId())); // CraftBukkit end diff --git a/Spigot-Server-Patches/0055-Add-exception-reporting-event.patch b/Spigot-Server-Patches/0055-Add-exception-reporting-event.patch index d2afba5500..34e17ce28f 100644 --- a/Spigot-Server-Patches/0055-Add-exception-reporting-event.patch +++ b/Spigot-Server-Patches/0055-Add-exception-reporting-event.patch @@ -49,10 +49,10 @@ index 0000000000000000000000000000000000000000..f699ce18ca044f813e194ef2786b7ea8 + } +} diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 21282ce37e55cbca027c7542c148928fd4e69dfc..7702b0b86a5ccfe6eab81025cfc8c4a83ba52b7c 100644 +index e9657faf0a24aee8444372e6f1ca0d971339ce5a..e8150c456efe72a561d6a6a7647eca05fbc8bd94 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -806,6 +806,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -807,6 +807,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return true; } catch (Exception exception) { PlayerChunkMap.LOGGER.error("Failed to save chunk {},{}", chunkcoordintpair.x, chunkcoordintpair.z, exception); @@ -128,7 +128,7 @@ index 2d02b2fc502a0f7e541f7943ed647ff7177acee8..fd0595fd584046326eccacdf0a6afe40 } diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 33469b719d679c65d4bcb8366008e6e107eb3a0b..b0ad55f35285cc1bc339859a8deae65e930082b8 100644 +index 33469b719d679c65d4bcb8366008e6e107eb3a0b..01cb0c8dd9875986e0c08371e876f0dba3f0cf5a 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java @@ -1,5 +1,10 @@ @@ -147,7 +147,7 @@ index 33469b719d679c65d4bcb8366008e6e107eb3a0b..b0ad55f35285cc1bc339859a8deae65e } catch (Throwable throwable) { // Paper start - Prevent tile entity and entity crashes - System.err.println("TileEntity threw exception at " + tileentity.world.getWorld().getName() + ":" + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ()); -+ String msg = "TileEntity threw exception at " + tileentity.world.getWorld().getName() + ":" + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ(); ++ String msg = "TileEntity threw exception at " + tileentity.getWorld().getWorld().getName() + ":" + tileentity.getPosition().getX() + "," + tileentity.getPosition().getY() + "," + tileentity.getPosition().getZ(); + System.err.println(msg); throwable.printStackTrace(); + getServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable))); diff --git a/Spigot-Server-Patches/0060-Chunk-Save-Reattempt.patch b/Spigot-Server-Patches/0060-Chunk-Save-Reattempt.patch index 93b118d8c9..6cf26b30df 100644 --- a/Spigot-Server-Patches/0060-Chunk-Save-Reattempt.patch +++ b/Spigot-Server-Patches/0060-Chunk-Save-Reattempt.patch @@ -19,10 +19,18 @@ index 7f695f2b49df3400cd263fd6ffff77e753a65ea1..6efbb8a3502f86e105d4dfb9cef114a7 } } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java -index de125077656f249d5cf9b76f07981b55e690e015..44c09e3b8d5abe4fdf9c4a46c21bc82e9dfefa0b 100644 +index de125077656f249d5cf9b76f07981b55e690e015..8310dd6bfc04b8ac0a51545baa3a264e6cb42eac 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java -@@ -92,6 +92,7 @@ public final class RegionFileCache implements AutoCloseable { +@@ -11,6 +11,7 @@ import java.io.IOException; + import javax.annotation.Nullable; + import net.minecraft.nbt.NBTCompressedStreamTools; + import net.minecraft.nbt.NBTTagCompound; ++import net.minecraft.server.MinecraftServer; + import net.minecraft.util.ExceptionSuppressor; + import net.minecraft.world.level.ChunkCoordIntPair; + +@@ -92,6 +93,7 @@ public final class RegionFileCache implements AutoCloseable { protected void write(ChunkCoordIntPair chunkcoordintpair, NBTTagCompound nbttagcompound) throws IOException { RegionFile regionfile = this.getFile(chunkcoordintpair, false); // CraftBukkit @@ -30,7 +38,7 @@ index de125077656f249d5cf9b76f07981b55e690e015..44c09e3b8d5abe4fdf9c4a46c21bc82e DataOutputStream dataoutputstream = regionfile.c(chunkcoordintpair); Throwable throwable = null; -@@ -115,6 +116,18 @@ public final class RegionFileCache implements AutoCloseable { +@@ -115,6 +117,18 @@ public final class RegionFileCache implements AutoCloseable { } diff --git a/Spigot-Server-Patches/0072-Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch b/Spigot-Server-Patches/0072-Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch index c30710c0bd..c1accf63cf 100644 --- a/Spigot-Server-Patches/0072-Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch +++ b/Spigot-Server-Patches/0072-Only-process-BlockPhysicsEvent-if-a-plugin-has-a-lis.patch @@ -18,19 +18,19 @@ index 2c295e070a0418c7d3bc4a4a531df699acadb0ff..555b99c45e0785750c48b0db2bc0b8da this.methodProfiler.a(() -> { return worldserver + " " + worldserver.getDimensionKey().a(); diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 3403ed91e7ec98116438398fb7247e7f05171feb..3b82b358d53454dcde4e64123e6262a68a5ed1b0 100644 +index 3403ed91e7ec98116438398fb7247e7f05171feb..addbb868ac43538b9fc468eb2601ffc9f974fa37 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -196,6 +196,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { private int tickPosition; public final Convertable.ConversionSession convertable; public final UUID uuid; -+ boolean hasPhysicsEvent = true; // Paper ++ public boolean hasPhysicsEvent = true; // Paper @Override public Chunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI return this.chunkProvider.getChunkAt(x, z, false); diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 07b5ff3ae319776bc1d85d113007a9afbad1c29a..70db5312ac556ea53247efdbc7759910ba0c9a95 100644 +index a22be13b097052b2a88707c9436b88c84298e46b..9236e480d21340d4295caa16dae34363e182f483 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java @@ -458,7 +458,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { diff --git a/Spigot-Server-Patches/0076-Sanitise-RegionFileCache-and-make-configurable.patch b/Spigot-Server-Patches/0076-Sanitise-RegionFileCache-and-make-configurable.patch index eac05ac95a..d60c778cea 100644 --- a/Spigot-Server-Patches/0076-Sanitise-RegionFileCache-and-make-configurable.patch +++ b/Spigot-Server-Patches/0076-Sanitise-RegionFileCache-and-make-configurable.patch @@ -25,10 +25,10 @@ index 716f285e67019b8a62922d09c15883c99f9421aa..439dcc6effdc91830d2b7ede90639829 + } } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java -index 44c09e3b8d5abe4fdf9c4a46c21bc82e9dfefa0b..13d0d6e7e03322f20ef5666d5299d26d51d1714c 100644 +index 8310dd6bfc04b8ac0a51545baa3a264e6cb42eac..75b10a3755392870d8f5b51239a09a0e7fd75a42 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java -@@ -32,7 +32,7 @@ public final class RegionFileCache implements AutoCloseable { +@@ -33,7 +33,7 @@ public final class RegionFileCache implements AutoCloseable { if (regionfile != null) { return regionfile; } else { diff --git a/Spigot-Server-Patches/0087-Configurable-Player-Collision.patch b/Spigot-Server-Patches/0087-Configurable-Player-Collision.patch index 3852c395e2..c52f4fd417 100644 --- a/Spigot-Server-Patches/0087-Configurable-Player-Collision.patch +++ b/Spigot-Server-Patches/0087-Configurable-Player-Collision.patch @@ -57,10 +57,18 @@ index 555b99c45e0785750c48b0db2bc0b8da98c52295..bea6cd6cf4dceece74de9cbb12a09433 this.server.getPluginManager().callEvent(new ServerLoadEvent(ServerLoadEvent.LoadType.STARTUP)); this.serverConnection.acceptConnections(); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 152aa38788a21638aab7cfe2dc187671f1143bde..aeda31ccd2829bc7ad60c6941174addc8b02c4eb 100644 +index 152aa38788a21638aab7cfe2dc187671f1143bde..95ff827b1d5704d279d258bdfb43fd33ec7a9187 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -145,6 +145,7 @@ public abstract class PlayerList { +@@ -86,6 +86,7 @@ import net.minecraft.world.level.storage.SavedFile; + import net.minecraft.world.level.storage.WorldData; + import net.minecraft.world.level.storage.WorldNBTStorage; + import net.minecraft.world.phys.Vec3D; ++import net.minecraft.world.scores.Scoreboard; + import net.minecraft.world.scores.ScoreboardObjective; + import net.minecraft.world.scores.ScoreboardTeam; + import net.minecraft.world.scores.ScoreboardTeamBase; +@@ -145,6 +146,7 @@ public abstract class PlayerList { // CraftBukkit start private CraftServer cserver; private final Map playersByName = new java.util.HashMap<>(); @@ -68,7 +76,7 @@ index 152aa38788a21638aab7cfe2dc187671f1143bde..aeda31ccd2829bc7ad60c6941174addc public PlayerList(MinecraftServer minecraftserver, IRegistryCustom.Dimension iregistrycustom_dimension, WorldNBTStorage worldnbtstorage, int i) { this.cserver = minecraftserver.server = new CraftServer((DedicatedServer) minecraftserver, this); -@@ -376,6 +377,13 @@ public abstract class PlayerList { +@@ -376,6 +378,13 @@ public abstract class PlayerList { } entityplayer.syncInventory(); @@ -82,7 +90,7 @@ index 152aa38788a21638aab7cfe2dc187671f1143bde..aeda31ccd2829bc7ad60c6941174addc // CraftBukkit - Moved from above, added world PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", entityplayer.getDisplayName().getString(), s1, entityplayer.getId(), worldserver1.worldDataServer.getName(), entityplayer.locX(), entityplayer.locY(), entityplayer.locZ()); } -@@ -496,6 +504,16 @@ public abstract class PlayerList { +@@ -496,6 +505,16 @@ public abstract class PlayerList { entityplayer.playerTick(); // SPIGOT-924 // CraftBukkit end @@ -99,7 +107,7 @@ index 152aa38788a21638aab7cfe2dc187671f1143bde..aeda31ccd2829bc7ad60c6941174addc this.savePlayerFile(entityplayer); if (entityplayer.isPassenger()) { Entity entity = entityplayer.getRootVehicle(); -@@ -1144,6 +1162,13 @@ public abstract class PlayerList { +@@ -1144,6 +1163,13 @@ public abstract class PlayerList { } // CraftBukkit end diff --git a/Spigot-Server-Patches/0095-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch b/Spigot-Server-Patches/0095-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch index 1e0b90241a..9216681020 100644 --- a/Spigot-Server-Patches/0095-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch +++ b/Spigot-Server-Patches/0095-Improve-Maps-in-item-frames-performance-and-bug-fixe.patch @@ -13,7 +13,7 @@ custom renderers are in use, defaulting to the much simpler Vanilla system. Additionally, numerous issues to player position tracking on maps has been fixed. diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index e96a92119dce25c34509e502e8dce8596af6fd67..62430c61047f288ce6df6f77302c3bfb2817b299 100644 +index 5ac96a25a9010ab3ddbd4a2b30cef0bba2a02054..de95ff06f2eedd8f812d7e2a83955642c1f9bba9 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -1168,6 +1168,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -25,10 +25,26 @@ index e96a92119dce25c34509e502e8dce8596af6fd67..62430c61047f288ce6df6f77302c3bfb } } diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index f42e16589476c1bd10b13214dda5ac7bb3e52131..291bd9b70a8404a09511fd902b6f376c3d5ca0d4 100644 +index f42e16589476c1bd10b13214dda5ac7bb3e52131..e3e3426a00128b56d523bb43a59b814b915ad0ff 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -689,6 +689,12 @@ public abstract class EntityHuman extends EntityLiving { +@@ -86,6 +86,7 @@ import net.minecraft.world.item.ItemElytra; + import net.minecraft.world.item.ItemProjectileWeapon; + import net.minecraft.world.item.ItemStack; + import net.minecraft.world.item.ItemSword; ++import net.minecraft.world.item.ItemWorldMap; + import net.minecraft.world.item.Items; + import net.minecraft.world.item.crafting.IRecipe; + import net.minecraft.world.item.enchantment.EnchantmentManager; +@@ -104,6 +105,7 @@ import net.minecraft.world.level.block.entity.TileEntitySign; + import net.minecraft.world.level.block.entity.TileEntityStructure; + import net.minecraft.world.level.block.state.IBlockData; + import net.minecraft.world.level.block.state.pattern.ShapeDetectorBlock; ++import net.minecraft.world.level.saveddata.maps.WorldMap; + import net.minecraft.world.phys.AxisAlignedBB; + import net.minecraft.world.phys.Vec3D; + import net.minecraft.world.scores.Scoreboard; +@@ -689,6 +691,12 @@ public abstract class EntityHuman extends EntityLiving { return null; } // CraftBukkit end diff --git a/Spigot-Server-Patches/0102-Faster-redstone-torch-rapid-clock-removal.patch b/Spigot-Server-Patches/0102-Faster-redstone-torch-rapid-clock-removal.patch index 5a8eae2799..7aa9554cd7 100644 --- a/Spigot-Server-Patches/0102-Faster-redstone-torch-rapid-clock-removal.patch +++ b/Spigot-Server-Patches/0102-Faster-redstone-torch-rapid-clock-removal.patch @@ -6,10 +6,18 @@ Subject: [PATCH] Faster redstone torch rapid clock removal Only resize the the redstone torch list once, since resizing arrays / lists is costly diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 2bb85896df999675d33f70a90f1c68865099ee83..b954b2f3c6e2d6725f9a134699f0d218f8ce1d05 100644 +index cad86b0273c05767f78bcb3bdfaa9ea01e26af4e..d8ab2e22a5c0144decb5c657a123cc61722fcbf5 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -142,6 +142,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -44,6 +44,7 @@ import net.minecraft.world.level.biome.BiomeBase; + import net.minecraft.world.level.biome.BiomeManager; + import net.minecraft.world.level.block.Block; + import net.minecraft.world.level.block.BlockFireAbstract; ++import net.minecraft.world.level.block.BlockRedstoneTorch; + import net.minecraft.world.level.block.Blocks; + import net.minecraft.world.level.block.entity.ITickable; + import net.minecraft.world.level.block.entity.TileEntity; +@@ -142,6 +143,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { private org.spigotmc.TickLimiter tileLimiter; private int tileTickPosition; public final Map explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions diff --git a/Spigot-Server-Patches/0106-Fix-Old-Sign-Conversion.patch b/Spigot-Server-Patches/0106-Fix-Old-Sign-Conversion.patch index 9a59345028..81720d1251 100644 --- a/Spigot-Server-Patches/0106-Fix-Old-Sign-Conversion.patch +++ b/Spigot-Server-Patches/0106-Fix-Old-Sign-Conversion.patch @@ -9,10 +9,10 @@ Subject: [PATCH] Fix Old Sign Conversion This causes Igloos and such to render broken signs. We fix this by ignoring sign conversion for Defined Structures diff --git a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -index b1c220df7e00af79b548895cc9333ba85d5a447f..2e1ce36fedac351f4320c6379ce73f8ffb0f5918 100644 +index 58789a6e285c31947508deae37caefe7e182278c..fd6364dfc68c2eb9f560e7bc403dea874193828e 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -@@ -33,6 +33,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / +@@ -34,6 +34,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / public CraftPersistentDataContainer persistentDataContainer; // CraftBukkit end private static final Logger LOGGER = LogManager.getLogger(); diff --git a/Spigot-Server-Patches/0125-Optimize-World.isLoaded-BlockPosition-Z.patch b/Spigot-Server-Patches/0125-Optimize-World.isLoaded-BlockPosition-Z.patch index 66b1b18d72..2bc6bb0583 100644 --- a/Spigot-Server-Patches/0125-Optimize-World.isLoaded-BlockPosition-Z.patch +++ b/Spigot-Server-Patches/0125-Optimize-World.isLoaded-BlockPosition-Z.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Optimize World.isLoaded(BlockPosition)Z Reduce method invocations for World.isLoaded(BlockPosition)Z diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index b954b2f3c6e2d6725f9a134699f0d218f8ce1d05..edc760be0a3e58d2a917b70337b24b67ec5c5c1e 100644 +index d8ab2e22a5c0144decb5c657a123cc61722fcbf5..bd08ff18d8d7dbe63ed33c1efb6099b58aa02caa 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -304,6 +304,10 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -305,6 +305,10 @@ public abstract class World implements GeneratorAccess, AutoCloseable { return chunk == null ? null : chunk.getFluid(blockposition); } diff --git a/Spigot-Server-Patches/0129-Add-API-methods-to-control-if-armour-stands-can-move.patch b/Spigot-Server-Patches/0129-Add-API-methods-to-control-if-armour-stands-can-move.patch index fc24d9fc35..6b9000b823 100644 --- a/Spigot-Server-Patches/0129-Add-API-methods-to-control-if-armour-stands-can-move.patch +++ b/Spigot-Server-Patches/0129-Add-API-methods-to-control-if-armour-stands-can-move.patch @@ -4,11 +4,40 @@ Date: Wed, 21 Dec 2016 11:47:25 -0600 Subject: [PATCH] Add API methods to control if armour stands can move +diff --git a/src/main/java/net/minecraft/world/entity/EntityInsentient.java b/src/main/java/net/minecraft/world/entity/EntityInsentient.java +index 0631cd531647239858b2a7298f58cc770720f69a..6ee5e1b0bb34ba490a130fbcbdb7a2706c5ecf86 100644 +--- a/src/main/java/net/minecraft/world/entity/EntityInsentient.java ++++ b/src/main/java/net/minecraft/world/entity/EntityInsentient.java +@@ -38,6 +38,7 @@ import net.minecraft.world.entity.ai.control.ControllerLook; + import net.minecraft.world.entity.ai.control.ControllerMove; + import net.minecraft.world.entity.ai.control.EntityAIBodyControl; + import net.minecraft.world.entity.ai.goal.PathfinderGoal; ++import net.minecraft.world.entity.ai.goal.PathfinderGoalFloat; + import net.minecraft.world.entity.ai.goal.PathfinderGoalSelector; + import net.minecraft.world.entity.ai.navigation.Navigation; + import net.minecraft.world.entity.ai.navigation.NavigationAbstract; +@@ -45,6 +46,8 @@ import net.minecraft.world.entity.ai.sensing.EntitySenses; + import net.minecraft.world.entity.decoration.EntityHanging; + import net.minecraft.world.entity.decoration.EntityLeash; + import net.minecraft.world.entity.item.EntityItem; ++import net.minecraft.world.entity.monster.EntityBlaze; ++import net.minecraft.world.entity.monster.EntityEnderman; + import net.minecraft.world.entity.monster.IMonster; + import net.minecraft.world.entity.player.EntityHuman; + import net.minecraft.world.entity.vehicle.EntityBoat; diff --git a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -index 72e53968c5fb03301ddec7a0cf937ac2f8cf0901..f0f93b3ff0b98f916b5f63b37b0f9b5c7fa03c2e 100644 +index 72e53968c5fb03301ddec7a0cf937ac2f8cf0901..2ef991aa7f739d3577fbbf4386064557e8f7c904 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -@@ -79,6 +79,7 @@ public class EntityArmorStand extends EntityLiving { +@@ -28,6 +28,7 @@ import net.minecraft.world.entity.EntitySize; + import net.minecraft.world.entity.EntityTypes; + import net.minecraft.world.entity.EnumItemSlot; + import net.minecraft.world.entity.EnumMainHand; ++import net.minecraft.world.entity.EnumMoveType; + import net.minecraft.world.entity.player.EntityHuman; + import net.minecraft.world.entity.projectile.EntityArrow; + import net.minecraft.world.entity.vehicle.EntityMinecartAbstract; +@@ -79,6 +80,7 @@ public class EntityArmorStand extends EntityLiving { public Vector3f rightArmPose; public Vector3f leftLegPose; public Vector3f rightLegPose; @@ -16,7 +45,7 @@ index 72e53968c5fb03301ddec7a0cf937ac2f8cf0901..f0f93b3ff0b98f916b5f63b37b0f9b5c public EntityArmorStand(EntityTypes entitytypes, World world) { super(entitytypes, world); -@@ -862,4 +863,13 @@ public class EntityArmorStand extends EntityLiving { +@@ -862,4 +864,13 @@ public class EntityArmorStand extends EntityLiving { private EntitySize s(boolean flag) { return flag ? EntityArmorStand.bp : (this.isBaby() ? EntityArmorStand.bq : this.getEntityType().l()); } diff --git a/Spigot-Server-Patches/0135-Enforce-Sync-Player-Saves.patch b/Spigot-Server-Patches/0135-Enforce-Sync-Player-Saves.patch index 965b04f212..cde18f2475 100644 --- a/Spigot-Server-Patches/0135-Enforce-Sync-Player-Saves.patch +++ b/Spigot-Server-Patches/0135-Enforce-Sync-Player-Saves.patch @@ -7,10 +7,10 @@ Saving players async is extremely dangerous. This will force it to main the same way we handle async chunk loads. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index aeda31ccd2829bc7ad60c6941174addc8b02c4eb..f044f735a51dcec91f6166179fb1b21eb8229cd0 100644 +index 95ff827b1d5704d279d258bdfb43fd33ec7a9187..d7cf89f4603779ce9a2e9a6f837a81684f209826 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1046,11 +1046,13 @@ public abstract class PlayerList { +@@ -1047,11 +1047,13 @@ public abstract class PlayerList { } public void savePlayers() { diff --git a/Spigot-Server-Patches/0140-Make-targetSize-more-aggressive-in-the-chunk-unload-.patch b/Spigot-Server-Patches/0140-Make-targetSize-more-aggressive-in-the-chunk-unload-.patch index 94fc8c9154..a382dd4190 100644 --- a/Spigot-Server-Patches/0140-Make-targetSize-more-aggressive-in-the-chunk-unload-.patch +++ b/Spigot-Server-Patches/0140-Make-targetSize-more-aggressive-in-the-chunk-unload-.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make targetSize more aggressive in the chunk unload queue diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 7702b0b86a5ccfe6eab81025cfc8c4a83ba52b7c..146227ecfe654c36da958ddc2cfb9b67738de4a0 100644 +index e8150c456efe72a561d6a6a7647eca05fbc8bd94..56f83a930c3dad1a1de366bff530131d92b4893c 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -120,7 +120,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -121,7 +121,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { private final PlayerMap playerMap; public final Int2ObjectMap trackedEntities; private final Long2ByteMap z; @@ -17,7 +17,7 @@ index 7702b0b86a5ccfe6eab81025cfc8c4a83ba52b7c..146227ecfe654c36da958ddc2cfb9b67 private int viewDistance; // CraftBukkit start - recursion-safe executor for Chunk loadCallback() and unloadCallback() -@@ -178,7 +178,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -179,7 +179,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.playerMap = new PlayerMap(); this.trackedEntities = new Int2ObjectOpenHashMap(); this.z = new Long2ByteOpenHashMap(); @@ -26,7 +26,7 @@ index 7702b0b86a5ccfe6eab81025cfc8c4a83ba52b7c..146227ecfe654c36da958ddc2cfb9b67 this.definedStructureManager = definedstructuremanager; this.w = convertable_conversionsession.a(worldserver.getDimensionKey()); this.world = worldserver; -@@ -436,7 +436,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -437,7 +437,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Spigot start org.spigotmc.SlackActivityAccountant activityAccountant = this.world.getMinecraftServer().slackActivityAccountant; activityAccountant.startActivity(0.5); @@ -35,7 +35,7 @@ index 7702b0b86a5ccfe6eab81025cfc8c4a83ba52b7c..146227ecfe654c36da958ddc2cfb9b67 // Spigot end while (longiterator.hasNext()) { // Spigot long j = longiterator.nextLong(); -@@ -458,7 +458,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -459,7 +459,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { Runnable runnable; diff --git a/Spigot-Server-Patches/0141-Do-not-let-armorstands-drown.patch b/Spigot-Server-Patches/0141-Do-not-let-armorstands-drown.patch index 3f2446b762..31754281aa 100644 --- a/Spigot-Server-Patches/0141-Do-not-let-armorstands-drown.patch +++ b/Spigot-Server-Patches/0141-Do-not-let-armorstands-drown.patch @@ -26,10 +26,10 @@ index 2eee92f74a7c82ec7df05db6df79743b4345cc86..3d6b8fd09c07e78c0d786dff9658eb00 if (this.getAirTicks() == -20) { this.setAirTicks(0); diff --git a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -index f0f93b3ff0b98f916b5f63b37b0f9b5c7fa03c2e..e9ea670248eb0680cdff9a72412e9331fc57ff8a 100644 +index 2ef991aa7f739d3577fbbf4386064557e8f7c904..57e0ea95df34fab22d6c5868ab839d56a3fa85fc 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -@@ -871,5 +871,10 @@ public class EntityArmorStand extends EntityLiving { +@@ -872,5 +872,10 @@ public class EntityArmorStand extends EntityLiving { super.move(moveType, vec3d); } } diff --git a/Spigot-Server-Patches/0142-Properly-handle-async-calls-to-restart-the-server.patch b/Spigot-Server-Patches/0142-Properly-handle-async-calls-to-restart-the-server.patch index 1cc210a185..25c51a6e8b 100644 --- a/Spigot-Server-Patches/0142-Properly-handle-async-calls-to-restart-the-server.patch +++ b/Spigot-Server-Patches/0142-Properly-handle-async-calls-to-restart-the-server.patch @@ -73,10 +73,10 @@ index c6ab645397911d984a28e40583bdb8f782a4f934..42ff9c57a6107c0cf22a204cf7cabf37 // Spigot Start private static double calcTps(double avg, double exp, double tps) diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index f044f735a51dcec91f6166179fb1b21eb8229cd0..80c558fadd1e6a8dab6f8ba63979c98efa258c5a 100644 +index d7cf89f4603779ce9a2e9a6f837a81684f209826..488e33cfc4887e602c897c9a94c0d824af7672ff 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1157,9 +1157,15 @@ public abstract class PlayerList { +@@ -1158,9 +1158,15 @@ public abstract class PlayerList { entityplayer.playerInteractManager.b(worldserver.worldDataServer.getGameType()); // CraftBukkit } @@ -92,7 +92,7 @@ index f044f735a51dcec91f6166179fb1b21eb8229cd0..80c558fadd1e6a8dab6f8ba63979c98e player.playerConnection.disconnect(PaperAdventure.asVanilla(this.server.server.shutdownMessage())); // CraftBukkit - add custom shutdown message // Paper - Adventure } // CraftBukkit end -@@ -1172,6 +1178,7 @@ public abstract class PlayerList { +@@ -1173,6 +1179,7 @@ public abstract class PlayerList { } // Paper end } diff --git a/Spigot-Server-Patches/0144-Add-option-to-make-parrots-stay-on-shoulders-despite.patch b/Spigot-Server-Patches/0144-Add-option-to-make-parrots-stay-on-shoulders-despite.patch index 57e9c3377e..7642b6b25a 100644 --- a/Spigot-Server-Patches/0144-Add-option-to-make-parrots-stay-on-shoulders-despite.patch +++ b/Spigot-Server-Patches/0144-Add-option-to-make-parrots-stay-on-shoulders-despite.patch @@ -44,10 +44,10 @@ index bc0b1d0cc9c54d53c68ee59b0a707e0335297441..62fb502adf8cd7095e4826eb72ab39cf case RELEASE_SHIFT_KEY: this.player.setSneaking(false); diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index 291bd9b70a8404a09511fd902b6f376c3d5ca0d4..1a62ea103bb827ffcf0b3fd18a26ac72c0a5ba5c 100644 +index e3e3426a00128b56d523bb43a59b814b915ad0ff..ba26fc2405e17d582da971d03147fb1865e9b546 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -530,7 +530,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -532,7 +532,7 @@ public abstract class EntityHuman extends EntityLiving { this.j(this.getShoulderEntityLeft()); this.j(this.getShoulderEntityRight()); if (!this.world.isClientSide && (this.fallDistance > 0.5F || this.isInWater()) || this.abilities.isFlying || this.isSleeping()) { diff --git a/Spigot-Server-Patches/0146-Use-TerminalConsoleAppender-for-console-improvements.patch b/Spigot-Server-Patches/0146-Use-TerminalConsoleAppender-for-console-improvements.patch index 215efbf60e..fd51a32a5b 100644 --- a/Spigot-Server-Patches/0146-Use-TerminalConsoleAppender-for-console-improvements.patch +++ b/Spigot-Server-Patches/0146-Use-TerminalConsoleAppender-for-console-improvements.patch @@ -75,13 +75,13 @@ index 2559c83c1b811177ade56537aeab1982ac53ee67..26e59ca76d856cc37222963fd14cb6ea org.apache.maven.plugins diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java new file mode 100644 -index 0000000000000000000000000000000000000000..74ed02fa9296583977bb721014b10ff8b708b43c +index 0000000000000000000000000000000000000000..89eeb9d202405747409e65fcf226d95379987e29 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java @@ -0,0 +1,41 @@ +package com.destroystokyo.paper.console; + -+import net.minecraft.server.DedicatedServer; ++import net.minecraft.server.dedicated.DedicatedServer; +import net.minecrell.terminalconsole.SimpleTerminalConsole; +import org.bukkit.craftbukkit.command.ConsoleCommandCompleter; +import org.jline.reader.LineReader; @@ -245,10 +245,10 @@ index 8ae72e8c8325d9b03803f29fcdd83a0ce8d34450..a0804c4df6f047cf913ae70970219617 System.setOut(IoBuilder.forLogger(logger).setLevel(Level.INFO).buildPrintStream()); System.setErr(IoBuilder.forLogger(logger).setLevel(Level.WARN).buildPrintStream()); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 80c558fadd1e6a8dab6f8ba63979c98efa258c5a..398fd08341eae503d53dcca42bbbd1c27c60cc17 100644 +index 488e33cfc4887e602c897c9a94c0d824af7672ff..9db65b9d8f66ff83dcf32274fec98a425e7353d8 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -149,8 +149,7 @@ public abstract class PlayerList { +@@ -150,8 +150,7 @@ public abstract class PlayerList { public PlayerList(MinecraftServer minecraftserver, IRegistryCustom.Dimension iregistrycustom_dimension, WorldNBTStorage worldnbtstorage, int i) { this.cserver = minecraftserver.server = new CraftServer((DedicatedServer) minecraftserver, this); @@ -372,7 +372,7 @@ index 4580642e0ee79e6d9c9bef0344e643bbc551205c..829c62b6d55cb5706be3ce6bdc758d6b + }*/ // Paper } diff --git a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java -index befcc19f9b56df9096b98a23b0020f1db793ea5b..5510266fb114954322823b72e3199f33c4d7a9a7 100644 +index befcc19f9b56df9096b98a23b0020f1db793ea5b..a957695457cf3252848ce6ef37069692841b8e28 100644 --- a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java +++ b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java @@ -4,20 +4,31 @@ import java.util.Collections; @@ -380,11 +380,11 @@ index befcc19f9b56df9096b98a23b0020f1db793ea5b..5510266fb114954322823b72e3199f33 import java.util.concurrent.ExecutionException; import java.util.logging.Level; -import jline.console.completer.Completer; ++import net.minecraft.server.dedicated.DedicatedServer; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.util.Waitable; + +// Paper start - JLine update -+import net.minecraft.server.DedicatedServer; // Paper +import org.jline.reader.Candidate; +import org.jline.reader.Completer; +import org.jline.reader.LineReader; diff --git a/Spigot-Server-Patches/0148-Item-canEntityPickup.patch b/Spigot-Server-Patches/0148-Item-canEntityPickup.patch index 13ad0fa1fe..3aa1baa985 100644 --- a/Spigot-Server-Patches/0148-Item-canEntityPickup.patch +++ b/Spigot-Server-Patches/0148-Item-canEntityPickup.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Item#canEntityPickup diff --git a/src/main/java/net/minecraft/world/entity/EntityInsentient.java b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -index 0631cd531647239858b2a7298f58cc770720f69a..0387052b45cdc849d9e67113532a7591f05e5531 100644 +index 6ee5e1b0bb34ba490a130fbcbdb7a2706c5ecf86..c22b5f8fcdd4aa7dac242f634ef73edcd8745fc6 100644 --- a/src/main/java/net/minecraft/world/entity/EntityInsentient.java +++ b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -@@ -604,6 +604,11 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -607,6 +607,11 @@ public abstract class EntityInsentient extends EntityLiving { EntityItem entityitem = (EntityItem) iterator.next(); if (!entityitem.dead && !entityitem.getItemStack().isEmpty() && !entityitem.p() && this.i(entityitem.getItemStack())) { diff --git a/Spigot-Server-Patches/0152-Basic-PlayerProfile-API.patch b/Spigot-Server-Patches/0152-Basic-PlayerProfile-API.patch index 6805f107d2..efc9e3b069 100644 --- a/Spigot-Server-Patches/0152-Basic-PlayerProfile-API.patch +++ b/Spigot-Server-Patches/0152-Basic-PlayerProfile-API.patch @@ -7,7 +7,7 @@ Establishes base extension of profile systems for future edits too diff --git a/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java new file mode 100644 -index 0000000000000000000000000000000000000000..6ae316109c8e35fbb6b0aebdee3075beb1445f1b +index 0000000000000000000000000000000000000000..040fd0c3fc4bc3a04fe5dff919a41fe9b474708e --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java @@ -0,0 +1,301 @@ @@ -19,7 +19,7 @@ index 0000000000000000000000000000000000000000..6ae316109c8e35fbb6b0aebdee3075be +import com.mojang.authlib.properties.Property; +import com.mojang.authlib.properties.PropertyMap; +import net.minecraft.server.MinecraftServer; -+import net.minecraft.server.UserCache; ++import net.minecraft.server.players.UserCache; +import org.apache.commons.lang3.Validate; +import org.bukkit.craftbukkit.entity.CraftPlayer; +import org.spigotmc.SpigotConfig; diff --git a/Spigot-Server-Patches/0153-Shoulder-Entities-Release-API.patch b/Spigot-Server-Patches/0153-Shoulder-Entities-Release-API.patch index a1157123d1..ac464d6b5a 100644 --- a/Spigot-Server-Patches/0153-Shoulder-Entities-Release-API.patch +++ b/Spigot-Server-Patches/0153-Shoulder-Entities-Release-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Shoulder Entities Release API diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index 1a62ea103bb827ffcf0b3fd18a26ac72c0a5ba5c..2afd8ccb03ebae94d99995d383f55744bd58df0a 100644 +index ba26fc2405e17d582da971d03147fb1865e9b546..63e8062ae3f3407b92b72b5fccaa958c39282fb8 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -1878,20 +1878,44 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1880,20 +1880,44 @@ public abstract class EntityHuman extends EntityLiving { } diff --git a/Spigot-Server-Patches/0157-Improve-the-Saddle-API-for-Horses.patch b/Spigot-Server-Patches/0157-Improve-the-Saddle-API-for-Horses.patch index d2e2d839c7..5587fd6b92 100644 --- a/Spigot-Server-Patches/0157-Improve-the-Saddle-API-for-Horses.patch +++ b/Spigot-Server-Patches/0157-Improve-the-Saddle-API-for-Horses.patch @@ -41,16 +41,13 @@ index c3599b29c0b32d6fcf18a4a0adfbe8454c37834d..0389d15f8e0b6bb68316eaed0cf91aca super(inventory); diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftSaddledInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftSaddledInventory.java new file mode 100644 -index 0000000000000000000000000000000000000000..99cfbaf90b5ccd828834b33b3c658206efd6ac21 +index 0000000000000000000000000000000000000000..8c2674ca1be1346ea84bcd7c9c5d6ea540802a5f --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftSaddledInventory.java -@@ -0,0 +1,15 @@ +@@ -0,0 +1,12 @@ +package org.bukkit.craftbukkit.inventory; + -+import net.minecraft.server.IInventory; -+ -+import org.bukkit.inventory.AbstractHorseInventory; -+import org.bukkit.inventory.ItemStack; ++import net.minecraft.world.IInventory; +import org.bukkit.inventory.SaddledHorseInventory; + +public class CraftSaddledInventory extends CraftInventoryAbstractHorse implements SaddledHorseInventory { diff --git a/Spigot-Server-Patches/0160-ProfileWhitelistVerifyEvent.patch b/Spigot-Server-Patches/0160-ProfileWhitelistVerifyEvent.patch index 6a85a2bdda..4b6d02529c 100644 --- a/Spigot-Server-Patches/0160-ProfileWhitelistVerifyEvent.patch +++ b/Spigot-Server-Patches/0160-ProfileWhitelistVerifyEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] ProfileWhitelistVerifyEvent diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 398fd08341eae503d53dcca42bbbd1c27c60cc17..41b63da42067397122897d23fd7fb0e517d7c552 100644 +index 9db65b9d8f66ff83dcf32274fec98a425e7353d8..738a69a1a5765897fb3ca3b4ceb07cddade0d27f 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -614,9 +614,9 @@ public abstract class PlayerList { +@@ -615,9 +615,9 @@ public abstract class PlayerList { // return chatmessage; if (!gameprofilebanentry.hasExpired()) event.disallow(PlayerLoginEvent.Result.KICK_BANNED, PaperAdventure.asAdventure(chatmessage)); // Spigot // Paper - Adventure @@ -21,7 +21,7 @@ index 398fd08341eae503d53dcca42bbbd1c27c60cc17..41b63da42067397122897d23fd7fb0e5 } else if (getIPBans().isBanned(socketaddress) && !getIPBans().get(socketaddress).hasExpired()) { IpBanEntry ipbanentry = this.l.get(socketaddress); -@@ -1008,9 +1008,25 @@ public abstract class PlayerList { +@@ -1009,9 +1009,25 @@ public abstract class PlayerList { this.server.getCommandDispatcher().a(entityplayer); } diff --git a/Spigot-Server-Patches/0164-Fix-MC-117075-TE-Unload-Lag-Spike.patch b/Spigot-Server-Patches/0164-Fix-MC-117075-TE-Unload-Lag-Spike.patch index 69b6157444..3dbcb05b98 100644 --- a/Spigot-Server-Patches/0164-Fix-MC-117075-TE-Unload-Lag-Spike.patch +++ b/Spigot-Server-Patches/0164-Fix-MC-117075-TE-Unload-Lag-Spike.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix MC-117075: TE Unload Lag Spike diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index edc760be0a3e58d2a917b70337b24b67ec5c5c1e..651547aa823c6c922c1741dde99c0ccf153edf45 100644 +index bd08ff18d8d7dbe63ed33c1efb6099b58aa02caa..8d4a28f98bd9c8a2dd1262f0f640909a456897fa 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -725,7 +725,11 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -726,7 +726,11 @@ public abstract class World implements GeneratorAccess, AutoCloseable { gameprofilerfiller.enter("blockEntities"); timings.tileEntityTick.startTiming(); // Spigot if (!this.tileEntityListUnload.isEmpty()) { diff --git a/Spigot-Server-Patches/0166-LivingEntity-setKiller.patch b/Spigot-Server-Patches/0166-LivingEntity-setKiller.patch index c55292a45e..2777a89649 100644 --- a/Spigot-Server-Patches/0166-LivingEntity-setKiller.patch +++ b/Spigot-Server-Patches/0166-LivingEntity-setKiller.patch @@ -18,17 +18,25 @@ index 3d6b8fd09c07e78c0d786dff9658eb0089f853cf..851aed157a233ab690a57e5736fa01be protected int ticksFarFromPlayer; protected float aJ; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index c654026587bc9bf77b39f59a0c89991ac581da1e..49247437c91f1d8f24c2bf506d2de200758bad88 100644 +index c654026587bc9bf77b39f59a0c89991ac581da1e..c43c300963bae9bca6ab9c9389dd53e42318715c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -344,6 +344,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -8,6 +8,7 @@ import java.util.Iterator; + import java.util.List; + import java.util.Set; + import java.util.UUID; ++import net.minecraft.server.level.EntityPlayer; + import net.minecraft.world.EnumHand; + import net.minecraft.world.damagesource.DamageSource; + import net.minecraft.world.effect.MobEffect; +@@ -344,6 +345,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { return getHandle().killer == null ? null : (Player) getHandle().killer.getBukkitEntity(); } + // Paper start + @Override + public void setKiller(Player killer) { -+ net.minecraft.server.EntityPlayer entityPlayer = killer == null ? null : ((CraftPlayer) killer).getHandle(); ++ EntityPlayer entityPlayer = killer == null ? null : ((CraftPlayer) killer).getHandle(); + getHandle().killer = entityPlayer; + getHandle().lastDamager = entityPlayer; + getHandle().lastDamageByPlayerTime = entityPlayer == null ? 0 : 100; // 100 value taken from EntityLiving#damageEntity diff --git a/Spigot-Server-Patches/0172-Expose-client-protocol-version-and-virtual-host.patch b/Spigot-Server-Patches/0172-Expose-client-protocol-version-and-virtual-host.patch index 00d813302a..26cabb6886 100644 --- a/Spigot-Server-Patches/0172-Expose-client-protocol-version-and-virtual-host.patch +++ b/Spigot-Server-Patches/0172-Expose-client-protocol-version-and-virtual-host.patch @@ -6,13 +6,13 @@ Subject: [PATCH] Expose client protocol version and virtual host diff --git a/src/main/java/com/destroystokyo/paper/network/PaperNetworkClient.java b/src/main/java/com/destroystokyo/paper/network/PaperNetworkClient.java new file mode 100644 -index 0000000000000000000000000000000000000000..5caca6439d2135e34880d501397fe2ea197d7249 +index 0000000000000000000000000000000000000000..8a716c1647aa29906be26ac262e93ebd2c1adfaa --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/network/PaperNetworkClient.java @@ -0,0 +1,50 @@ +package com.destroystokyo.paper.network; + -+import net.minecraft.server.NetworkManager; ++import net.minecraft.network.NetworkManager; + +import java.net.InetSocketAddress; + diff --git a/Spigot-Server-Patches/0174-Send-attack-SoundEffects-only-to-players-who-can-see.patch b/Spigot-Server-Patches/0174-Send-attack-SoundEffects-only-to-players-who-can-see.patch index 0a8ed4c171..5c3d2d05c3 100644 --- a/Spigot-Server-Patches/0174-Send-attack-SoundEffects-only-to-players-who-can-see.patch +++ b/Spigot-Server-Patches/0174-Send-attack-SoundEffects-only-to-players-who-can-see.patch @@ -6,10 +6,18 @@ Subject: [PATCH] Send attack SoundEffects only to players who can see the diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index 2afd8ccb03ebae94d99995d383f55744bd58df0a..266c4bb75ceaf57b66bb1e4d4deb3e4bfec3fd4e 100644 +index 63e8062ae3f3407b92b72b5fccaa958c39282fb8..f9d0623a3ed5f49758cd5e97fe9f63a5b3198e58 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -1124,7 +1124,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -28,6 +28,7 @@ import net.minecraft.network.chat.ChatMessage; + import net.minecraft.network.chat.IChatBaseComponent; + import net.minecraft.network.chat.IChatMutableComponent; + import net.minecraft.network.protocol.game.PacketPlayOutEntityVelocity; ++import net.minecraft.network.protocol.game.PacketPlayOutNamedSoundEffect; + import net.minecraft.network.syncher.DataWatcher; + import net.minecraft.network.syncher.DataWatcherObject; + import net.minecraft.network.syncher.DataWatcherRegistry; +@@ -1126,7 +1127,7 @@ public abstract class EntityHuman extends EntityLiving { int i = b0 + EnchantmentManager.b((EntityLiving) this); if (this.isSprinting() && flag) { @@ -18,7 +26,7 @@ index 2afd8ccb03ebae94d99995d383f55744bd58df0a..266c4bb75ceaf57b66bb1e4d4deb3e4b ++i; flag1 = true; } -@@ -1199,7 +1199,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1201,7 +1202,7 @@ public abstract class EntityHuman extends EntityLiving { } } @@ -27,7 +35,7 @@ index 2afd8ccb03ebae94d99995d383f55744bd58df0a..266c4bb75ceaf57b66bb1e4d4deb3e4b this.ex(); } -@@ -1227,15 +1227,15 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1229,15 +1230,15 @@ public abstract class EntityHuman extends EntityLiving { } if (flag2) { @@ -46,7 +54,7 @@ index 2afd8ccb03ebae94d99995d383f55744bd58df0a..266c4bb75ceaf57b66bb1e4d4deb3e4b } } -@@ -1287,7 +1287,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1289,7 +1290,7 @@ public abstract class EntityHuman extends EntityLiving { this.applyExhaustion(world.spigotConfig.combatExhaustion, EntityExhaustionEvent.ExhaustionReason.ATTACK); // CraftBukkit - EntityExhaustionEvent // Spigot - Change to use configurable value } else { @@ -55,7 +63,7 @@ index 2afd8ccb03ebae94d99995d383f55744bd58df0a..266c4bb75ceaf57b66bb1e4d4deb3e4b if (flag4) { entity.extinguish(); } -@@ -1722,6 +1722,14 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1724,6 +1725,14 @@ public abstract class EntityHuman extends EntityLiving { public int getExpToLevel() { return this.expLevel >= 30 ? 112 + (this.expLevel - 30) * 9 : (this.expLevel >= 15 ? 37 + (this.expLevel - 15) * 5 : 7 + this.expLevel * 2); } diff --git a/Spigot-Server-Patches/0178-use-CB-BlockState-implementations-for-captured-block.patch b/Spigot-Server-Patches/0178-use-CB-BlockState-implementations-for-captured-block.patch index e09185cdf5..4dc684be75 100644 --- a/Spigot-Server-Patches/0178-use-CB-BlockState-implementations-for-captured-block.patch +++ b/Spigot-Server-Patches/0178-use-CB-BlockState-implementations-for-captured-block.patch @@ -18,10 +18,10 @@ the blockstate that will be valid for restoration, as opposed to dropping information on restoration when the event is cancelled. diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 651547aa823c6c922c1741dde99c0ccf153edf45..f7df55cf3da909c253bab106cdb7149ee9c297d9 100644 +index 8d4a28f98bd9c8a2dd1262f0f640909a456897fa..a9e7da1c848a6fe08fc112e445ceec1b7715d682 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -123,7 +123,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -124,7 +124,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { public boolean captureBlockStates = false; public boolean captureTreeGeneration = false; @@ -30,7 +30,7 @@ index 651547aa823c6c922c1741dde99c0ccf153edf45..f7df55cf3da909c253bab106cdb7149e public Map capturedTileEntities = new HashMap<>(); public List captureDrops; public long ticksPerAnimalSpawns; -@@ -345,7 +345,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -346,7 +346,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { public boolean a(BlockPosition blockposition, IBlockData iblockdata, int i, int j) { // CraftBukkit start - tree generation if (this.captureTreeGeneration) { @@ -39,7 +39,7 @@ index 651547aa823c6c922c1741dde99c0ccf153edf45..f7df55cf3da909c253bab106cdb7149e if (blockstate == null) { blockstate = CapturedBlockState.getTreeBlockState(this, blockposition, i); this.capturedBlockStates.put(blockposition.immutableCopy(), blockstate); -@@ -365,7 +365,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -366,7 +366,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { // CraftBukkit start - capture blockstates boolean captured = false; if (this.captureBlockStates && !this.capturedBlockStates.containsKey(blockposition)) { @@ -49,7 +49,7 @@ index 651547aa823c6c922c1741dde99c0ccf153edf45..f7df55cf3da909c253bab106cdb7149e this.capturedBlockStates.put(blockposition.immutableCopy(), blockstate); captured = true; } -@@ -623,7 +624,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -624,7 +625,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { public IBlockData getType(BlockPosition blockposition) { // CraftBukkit start - tree generation if (captureTreeGeneration) { diff --git a/Spigot-Server-Patches/0179-API-to-get-a-BlockState-without-a-snapshot.patch b/Spigot-Server-Patches/0179-API-to-get-a-BlockState-without-a-snapshot.patch index d3a67e52c0..a1bb3b5796 100644 --- a/Spigot-Server-Patches/0179-API-to-get-a-BlockState-without-a-snapshot.patch +++ b/Spigot-Server-Patches/0179-API-to-get-a-BlockState-without-a-snapshot.patch @@ -13,10 +13,10 @@ also Avoid NPE during CraftBlockEntityState load if could not get TE If Tile Entity was null, correct Sign to return empty lines instead of null diff --git a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -index 2e1ce36fedac351f4320c6379ce73f8ffb0f5918..642ed6e5788a79f7bc7d6185564bdf0df07e492c 100644 +index fd6364dfc68c2eb9f560e7bc403dea874193828e..3ff9e389fcf15044c2740fb884c9438428d7a681 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -@@ -46,6 +46,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / +@@ -47,6 +47,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / public TileEntity(TileEntityTypes tileentitytypes) { this.position = BlockPosition.ZERO; this.tileType = tileentitytypes; @@ -24,7 +24,7 @@ index 2e1ce36fedac351f4320c6379ce73f8ffb0f5918..642ed6e5788a79f7bc7d6185564bdf0d } // Paper start -@@ -94,7 +95,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / +@@ -95,7 +96,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / public void load(IBlockData iblockdata, NBTTagCompound nbttagcompound) { this.position = new BlockPosition(nbttagcompound.getInt("x"), nbttagcompound.getInt("y"), nbttagcompound.getInt("z")); // CraftBukkit start - read container @@ -33,7 +33,7 @@ index 2e1ce36fedac351f4320c6379ce73f8ffb0f5918..642ed6e5788a79f7bc7d6185564bdf0d net.minecraft.nbt.NBTBase persistentDataTag = nbttagcompound.get("PublicBukkitValues"); if (persistentDataTag instanceof NBTTagCompound) { -@@ -244,7 +245,12 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / +@@ -245,7 +246,12 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / } // CraftBukkit start - add method @@ -46,7 +46,7 @@ index 2e1ce36fedac351f4320c6379ce73f8ffb0f5918..642ed6e5788a79f7bc7d6185564bdf0d if (world == null) return null; // Spigot start org.bukkit.block.Block block = world.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ()); -@@ -253,7 +259,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / +@@ -254,7 +260,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / return null; } // Spigot end diff --git a/Spigot-Server-Patches/0186-PreCreatureSpawnEvent.patch b/Spigot-Server-Patches/0186-PreCreatureSpawnEvent.patch index c47e756086..4f00d259ec 100644 --- a/Spigot-Server-Patches/0186-PreCreatureSpawnEvent.patch +++ b/Spigot-Server-Patches/0186-PreCreatureSpawnEvent.patch @@ -15,10 +15,18 @@ instead and save a lot of server resources. See: https://github.com/PaperMC/Paper/issues/917 diff --git a/src/main/java/net/minecraft/world/entity/EntityTypes.java b/src/main/java/net/minecraft/world/entity/EntityTypes.java -index a707ba365e25ea15e2e9d22110696b6136aa0c6f..8ba75c847efa0633e7b8cb718e3a9b55e0b8ad77 100644 +index a707ba365e25ea15e2e9d22110696b6136aa0c6f..1355c074353611669c947cb0f06c67be0ab418aa 100644 --- a/src/main/java/net/minecraft/world/entity/EntityTypes.java +++ b/src/main/java/net/minecraft/world/entity/EntityTypes.java -@@ -317,6 +317,20 @@ public class EntityTypes { +@@ -17,6 +17,7 @@ import net.minecraft.nbt.NBTTagList; + import net.minecraft.network.chat.ChatMessage; + import net.minecraft.network.chat.IChatBaseComponent; + import net.minecraft.resources.MinecraftKey; ++import net.minecraft.server.MCUtil; + import net.minecraft.server.MinecraftServer; + import net.minecraft.server.level.WorldServer; + import net.minecraft.tags.Tag; +@@ -317,6 +318,20 @@ public class EntityTypes { @Nullable public T spawnCreature(WorldServer worldserver, @Nullable NBTTagCompound nbttagcompound, @Nullable IChatBaseComponent ichatbasecomponent, @Nullable EntityHuman entityhuman, BlockPosition blockposition, EnumMobSpawn enummobspawn, boolean flag, boolean flag1, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) { diff --git a/Spigot-Server-Patches/0187-PlayerNaturallySpawnCreaturesEvent.patch b/Spigot-Server-Patches/0187-PlayerNaturallySpawnCreaturesEvent.patch index a83c094247..9520e2d109 100644 --- a/Spigot-Server-Patches/0187-PlayerNaturallySpawnCreaturesEvent.patch +++ b/Spigot-Server-Patches/0187-PlayerNaturallySpawnCreaturesEvent.patch @@ -48,10 +48,10 @@ index afa87cf70ad978161853771c59f5a4906733cab3..8b79d547a3296f056731cbb66508494d public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet cachedSingleHashSet; // Paper diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 146227ecfe654c36da958ddc2cfb9b67738de4a0..88e7fe1d50e644a107aa76c84b7fd1b9b43cd94b 100644 +index 56f83a930c3dad1a1de366bff530131d92b4893c..c6b9b02e6d31bebb3f8c0cadd68e4b5c47fab090 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -957,12 +957,23 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -958,12 +958,23 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { chunkRange = (chunkRange > world.spigotConfig.viewDistance) ? (byte) world.spigotConfig.viewDistance : chunkRange; chunkRange = (chunkRange > 8) ? 8 : chunkRange; diff --git a/Spigot-Server-Patches/0194-Toggleable-player-crits-helps-mitigate-hacked-client.patch b/Spigot-Server-Patches/0194-Toggleable-player-crits-helps-mitigate-hacked-client.patch index d1381daa3b..70c6b6d3e1 100644 --- a/Spigot-Server-Patches/0194-Toggleable-player-crits-helps-mitigate-hacked-client.patch +++ b/Spigot-Server-Patches/0194-Toggleable-player-crits-helps-mitigate-hacked-client.patch @@ -21,10 +21,10 @@ index 3c39f1bb3d88baaaed4dd43c51faeef89bb5c6c2..48f0385c7203c7955de5a015f3dc42be private void allChunksAreSlimeChunks() { allChunksAreSlimeChunks = getBoolean("all-chunks-are-slime-chunks", false); diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index 266c4bb75ceaf57b66bb1e4d4deb3e4bfec3fd4e..5bbb47eea88c068d0e4d22fd87a6dad46255ebe7 100644 +index f9d0623a3ed5f49758cd5e97fe9f63a5b3198e58..18b0020d184e46c8957e82100681c8c66b1c3b62 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -1131,6 +1131,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1134,6 +1134,7 @@ public abstract class EntityHuman extends EntityLiving { boolean flag2 = flag && this.fallDistance > 0.0F && !this.onGround && !this.isClimbing() && !this.isInWater() && !this.hasEffect(MobEffects.BLINDNESS) && !this.isPassenger() && entity instanceof EntityLiving; diff --git a/Spigot-Server-Patches/0197-Implement-extended-PaperServerListPingEvent.patch b/Spigot-Server-Patches/0197-Implement-extended-PaperServerListPingEvent.patch index 159d485912..14740e889e 100644 --- a/Spigot-Server-Patches/0197-Implement-extended-PaperServerListPingEvent.patch +++ b/Spigot-Server-Patches/0197-Implement-extended-PaperServerListPingEvent.patch @@ -6,15 +6,15 @@ Subject: [PATCH] Implement extended PaperServerListPingEvent diff --git a/src/main/java/com/destroystokyo/paper/network/PaperServerListPingEventImpl.java b/src/main/java/com/destroystokyo/paper/network/PaperServerListPingEventImpl.java new file mode 100644 -index 0000000000000000000000000000000000000000..c1a8e295b66501e0580bcfc041bca51e69109062 +index 0000000000000000000000000000000000000000..e7f1efd0466a5d7bb9584ffbd6fbac1ecc6153a5 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/network/PaperServerListPingEventImpl.java @@ -0,0 +1,31 @@ +package com.destroystokyo.paper.network; + +import com.destroystokyo.paper.event.server.PaperServerListPingEvent; -+import net.minecraft.server.EntityPlayer; +import net.minecraft.server.MinecraftServer; ++import net.minecraft.server.level.EntityPlayer; +import org.bukkit.entity.Player; +import org.bukkit.util.CachedServerIcon; + @@ -43,13 +43,13 @@ index 0000000000000000000000000000000000000000..c1a8e295b66501e0580bcfc041bca51e +} diff --git a/src/main/java/com/destroystokyo/paper/network/PaperStatusClient.java b/src/main/java/com/destroystokyo/paper/network/PaperStatusClient.java new file mode 100644 -index 0000000000000000000000000000000000000000..a2a409e635dde08f7c53e67164b967a000511e94 +index 0000000000000000000000000000000000000000..46e84ac6ba5d32d030267fb0c991c281a673c716 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/network/PaperStatusClient.java @@ -0,0 +1,11 @@ +package com.destroystokyo.paper.network; + -+import net.minecraft.server.NetworkManager; ++import net.minecraft.network.NetworkManager; + +class PaperStatusClient extends PaperNetworkClient implements StatusClient { + @@ -60,7 +60,7 @@ index 0000000000000000000000000000000000000000..a2a409e635dde08f7c53e67164b967a0 +} diff --git a/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java b/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java new file mode 100644 -index 0000000000000000000000000000000000000000..39b236a6319b1f44fbe28bbe43f064be3073e725 +index 0000000000000000000000000000000000000000..174326871df9b61beec51ef6a1e5f26932404b6a --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/network/StandardPaperServerListPingEventImpl.java @@ -0,0 +1,110 @@ @@ -75,10 +75,10 @@ index 0000000000000000000000000000000000000000..39b236a6319b1f44fbe28bbe43f064be +import java.util.List; +import java.util.UUID; +import javax.annotation.Nonnull; ++import net.minecraft.network.NetworkManager; ++import net.minecraft.network.protocol.status.PacketStatusOutServerInfo; ++import net.minecraft.network.protocol.status.ServerPing; +import net.minecraft.server.MinecraftServer; -+import net.minecraft.server.NetworkManager; -+import net.minecraft.network.protocol.game.PacketStatusOutServerInfo; -+import net.minecraft.server.ServerPing; + +public final class StandardPaperServerListPingEventImpl extends PaperServerListPingEventImpl { + diff --git a/Spigot-Server-Patches/0200-Player.setPlayerProfile-API.patch b/Spigot-Server-Patches/0200-Player.setPlayerProfile-API.patch index 042d3bff30..7dba2f3c12 100644 --- a/Spigot-Server-Patches/0200-Player.setPlayerProfile-API.patch +++ b/Spigot-Server-Patches/0200-Player.setPlayerProfile-API.patch @@ -35,10 +35,10 @@ index a903a073e6f5e8ae6ea383b786d930af69a966c5..2ce081e68fe27381d3e7f851b685cc54 uniqueId = i.getId(); // Paper end diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index 5bbb47eea88c068d0e4d22fd87a6dad46255ebe7..c7b2032fb677822c8352fabb29c881f609435cb8 100644 +index 18b0020d184e46c8957e82100681c8c66b1c3b62..41dd46c6ef95f7dc41d9ca36a5f0b85f5608fdeb 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -159,7 +159,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -162,7 +162,7 @@ public abstract class EntityHuman extends EntityLiving { protected int bG; protected final float bH = 0.02F; private int g; @@ -48,7 +48,7 @@ index 5bbb47eea88c068d0e4d22fd87a6dad46255ebe7..c7b2032fb677822c8352fabb29c881f6 private final ItemCooldown bM; @Nullable diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index f8780db8f376ee71a35ebe1c2ab84a6117d0d74e..08ef5d2a275f8bf295501b22c5b743f60ac0d465 100644 +index f8780db8f376ee71a35ebe1c2ab84a6117d0d74e..87d00559fb54ed93a374ce827d2d99b4a11c73d7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1308,8 +1308,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/Spigot-Server-Patches/0208-Configurable-sprint-interruption-on-attack.patch b/Spigot-Server-Patches/0208-Configurable-sprint-interruption-on-attack.patch index 8d29c37902..99fb21f6e5 100644 --- a/Spigot-Server-Patches/0208-Configurable-sprint-interruption-on-attack.patch +++ b/Spigot-Server-Patches/0208-Configurable-sprint-interruption-on-attack.patch @@ -20,10 +20,10 @@ index 48f0385c7203c7955de5a015f3dc42be2ab7b681..cebf1a623a9bec72d60fdd23dda01868 + } } diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index c7b2032fb677822c8352fabb29c881f609435cb8..e6b75b6a493f91ccdd67fa507c9869b4007fb907 100644 +index 41dd46c6ef95f7dc41d9ca36a5f0b85f5608fdeb..7839553662d7f1f378969d42fb7a560e489852f4 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -1180,7 +1180,11 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1183,7 +1183,11 @@ public abstract class EntityHuman extends EntityLiving { } this.setMot(this.getMot().d(0.6D, 1.0D, 0.6D)); diff --git a/Spigot-Server-Patches/0225-Make-shield-blocking-delay-configurable.patch b/Spigot-Server-Patches/0225-Make-shield-blocking-delay-configurable.patch index 10f4c7b786..4c22bde487 100644 --- a/Spigot-Server-Patches/0225-Make-shield-blocking-delay-configurable.patch +++ b/Spigot-Server-Patches/0225-Make-shield-blocking-delay-configurable.patch @@ -48,10 +48,10 @@ index 1dcdf9e328670b42d656e8ab65cb3da8a2312fe6..9f6f6ac15688a1010d466e6f0cc3ac5b + // Paper end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 49247437c91f1d8f24c2bf506d2de200758bad88..279de5299483d3fa2f0878d9fafb471d0b5c78a8 100644 +index c43c300963bae9bca6ab9c9389dd53e42318715c..2d1c54eed8fa6885837d63014ff1f4b33dd35bd7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -710,5 +710,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -711,5 +711,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { public void setArrowsStuck(int arrows) { getHandle().setArrowCount(arrows); } diff --git a/Spigot-Server-Patches/0227-PlayerReadyArrowEvent.patch b/Spigot-Server-Patches/0227-PlayerReadyArrowEvent.patch index a2b39a4c9f..48c889f719 100644 --- a/Spigot-Server-Patches/0227-PlayerReadyArrowEvent.patch +++ b/Spigot-Server-Patches/0227-PlayerReadyArrowEvent.patch @@ -7,10 +7,10 @@ Called when a player is firing a bow and the server is choosing an arrow to use. Plugins can skip selection of certain arrows and control which is used. diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index e6b75b6a493f91ccdd67fa507c9869b4007fb907..5a5d6b867d985b55a1bc7286606f73ee5874245f 100644 +index 7839553662d7f1f378969d42fb7a560e489852f4..408732c59ed817c056671a78e43a734b048a818e 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -2139,6 +2139,17 @@ public abstract class EntityHuman extends EntityLiving { +@@ -2142,6 +2142,17 @@ public abstract class EntityHuman extends EntityLiving { return ImmutableList.of(EntityPose.STANDING, EntityPose.CROUCHING, EntityPose.SWIMMING); } @@ -28,7 +28,7 @@ index e6b75b6a493f91ccdd67fa507c9869b4007fb907..5a5d6b867d985b55a1bc7286606f73ee @Override public ItemStack f(ItemStack itemstack) { if (!(itemstack.getItem() instanceof ItemProjectileWeapon)) { -@@ -2155,7 +2166,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -2158,7 +2169,7 @@ public abstract class EntityHuman extends EntityLiving { for (int i = 0; i < this.inventory.getSize(); ++i) { ItemStack itemstack2 = this.inventory.getItem(i); diff --git a/Spigot-Server-Patches/0228-Implement-EntityKnockbackByEntityEvent.patch b/Spigot-Server-Patches/0228-Implement-EntityKnockbackByEntityEvent.patch index d646001a8d..55ceef10ee 100644 --- a/Spigot-Server-Patches/0228-Implement-EntityKnockbackByEntityEvent.patch +++ b/Spigot-Server-Patches/0228-Implement-EntityKnockbackByEntityEvent.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Implement EntityKnockbackByEntityEvent This event is called when an entity receives knockback by another entity. diff --git a/src/main/java/net/minecraft/world/entity/EntityInsentient.java b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -index 0387052b45cdc849d9e67113532a7591f05e5531..486f4727dbcb7955103f854baed9b571fb3b9f3e 100644 +index c22b5f8fcdd4aa7dac242f634ef73edcd8745fc6..41566398f5eee6cf93376f2e2200728bb6d2181c 100644 --- a/src/main/java/net/minecraft/world/entity/EntityInsentient.java +++ b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -@@ -1565,7 +1565,7 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1568,7 +1568,7 @@ public abstract class EntityInsentient extends EntityLiving { if (flag) { if (f1 > 0.0F && entity instanceof EntityLiving) { @@ -70,10 +70,10 @@ index 9f6f6ac15688a1010d466e6f0cc3ac5b8297eb21..61bd7afdafc77725c24c6af978578df0 } diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index 5a5d6b867d985b55a1bc7286606f73ee5874245f..e9dd1ee6dbc8baff395c69e2cb1d7b3a4551f90a 100644 +index 408732c59ed817c056671a78e43a734b048a818e..3c49d7acd4ad0717886adf6c469e8a49a58e859b 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -1174,7 +1174,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1177,7 +1177,7 @@ public abstract class EntityHuman extends EntityLiving { if (flag5) { if (i > 0) { if (entity instanceof EntityLiving) { @@ -82,7 +82,7 @@ index 5a5d6b867d985b55a1bc7286606f73ee5874245f..e9dd1ee6dbc8baff395c69e2cb1d7b3a } else { entity.i((double) (-MathHelper.sin(this.yaw * 0.017453292F) * (float) i * 0.5F), 0.1D, (double) (MathHelper.cos(this.yaw * 0.017453292F) * (float) i * 0.5F)); } -@@ -1198,7 +1198,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1201,7 +1201,7 @@ public abstract class EntityHuman extends EntityLiving { if (entityliving != this && entityliving != entity && !this.r(entityliving) && (!(entityliving instanceof EntityArmorStand) || !((EntityArmorStand) entityliving).isMarker()) && this.h((Entity) entityliving) < 9.0D) { // CraftBukkit start - Only apply knockback if the damage hits if (entityliving.damageEntity(DamageSource.playerAttack(this).sweep(), f4)) { diff --git a/Spigot-Server-Patches/0230-LivingEntity-Hand-Raised-Item-Use-API.patch b/Spigot-Server-Patches/0230-LivingEntity-Hand-Raised-Item-Use-API.patch index 6a8ff6c92e..0b809b05d3 100644 --- a/Spigot-Server-Patches/0230-LivingEntity-Hand-Raised-Item-Use-API.patch +++ b/Spigot-Server-Patches/0230-LivingEntity-Hand-Raised-Item-Use-API.patch @@ -32,10 +32,10 @@ index 61bd7afdafc77725c24c6af978578df0b2d8ca0f..189a00cb68ce9a9060117b79c5356ebb return this.isHandRaised() ? this.activeItem.k() - this.dZ() : 0; } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 279de5299483d3fa2f0878d9fafb471d0b5c78a8..db58175ac8972a4a9f5b7b312c6301f87e943a0e 100644 +index 2d1c54eed8fa6885837d63014ff1f4b33dd35bd7..bd24b9865f37c34ffd63cd411ddc84abe5ab30d0 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -720,5 +720,25 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -721,5 +721,25 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { public void setShieldBlockingDelay(int delay) { getHandle().setShieldBlockingDelay(delay); } diff --git a/Spigot-Server-Patches/0234-InventoryCloseEvent-Reason-API.patch b/Spigot-Server-Patches/0234-InventoryCloseEvent-Reason-API.patch index ca44862bba..497aacaf6c 100644 --- a/Spigot-Server-Patches/0234-InventoryCloseEvent-Reason-API.patch +++ b/Spigot-Server-Patches/0234-InventoryCloseEvent-Reason-API.patch @@ -61,7 +61,7 @@ index 8b79d547a3296f056731cbb66508494d84809e94..b3c5a22bf2eb360399ebfbf90fc74843 this.o(); } diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 3876958f20e675c4c8fd505c5fb333ccb9cdc8c9..eb909ef3a34045480034bd7d7f3e5ac674f664b5 100644 +index 32ad210daf61b6c43fc60f3140dc46529d14ec27..95cd4855cf577d9ceac8c3b45ac54705bea00ea9 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -1123,7 +1123,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -112,10 +112,10 @@ index 415f34109019e68638f76fefa52bd8d40c449e12..c4f14fabc83a9cb13f8f82b651119e0a this.player.o(); } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 41b63da42067397122897d23fd7fb0e517d7c552..2939a8186254a39ef20d778421b0ed984bb20a32 100644 +index 738a69a1a5765897fb3ca3b4ceb07cddade0d27f..349bd74e7e4d1dea9587e55cb6afc1968628ca01 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -493,7 +493,7 @@ public abstract class PlayerList { +@@ -494,7 +494,7 @@ public abstract class PlayerList { // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it // See SPIGOT-5799, SPIGOT-6145 if (entityplayer.activeContainer != entityplayer.defaultContainer) { @@ -125,10 +125,10 @@ index 41b63da42067397122897d23fd7fb0e517d7c552..2939a8186254a39ef20d778421b0ed98 PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(cserver.getPlayer(entityplayer), net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, com.destroystokyo.paper.PaperConfig.useDisplayNameInQuit ? entityplayer.getBukkitEntity().displayName() : net.kyori.adventure.text.Component.text(entityplayer.getName()))); diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index e9dd1ee6dbc8baff395c69e2cb1d7b3a4551f90a..5f92ba350658c7f1cac9111f06d95e6ffc5600c3 100644 +index 3c49d7acd4ad0717886adf6c469e8a49a58e859b..b6effe1037f3ae59e6faa5f5d039b6ad54bca5d4 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -249,7 +249,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -252,7 +252,7 @@ public abstract class EntityHuman extends EntityLiving { this.et(); super.tick(); if (!this.world.isClientSide && this.activeContainer != null && !this.activeContainer.canUse(this)) { @@ -137,7 +137,7 @@ index e9dd1ee6dbc8baff395c69e2cb1d7b3a4551f90a..5f92ba350658c7f1cac9111f06d95e6f this.activeContainer = this.defaultContainer; } -@@ -444,6 +444,13 @@ public abstract class EntityHuman extends EntityLiving { +@@ -447,6 +447,13 @@ public abstract class EntityHuman extends EntityLiving { return 20; } @@ -180,7 +180,7 @@ index a3396a19ba60daeb7240f23831e4bc28631098cc..2ca9d061ec951fb0563959620f0e9959 @Override public boolean isBlocking() { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 5a9b23fd4a414c52ce4b1ccb8696a4408b0b7c90..1851f261ce8e454cbe4012c0c4ea6a69e926daa0 100644 +index 89476782c71a0c54ff140a501a97fdfc4c8f4b81..b4c763d2935aad0038128a61ed09c4904975f0ef 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -895,7 +895,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/Spigot-Server-Patches/0242-Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch b/Spigot-Server-Patches/0242-Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch index 0283a3d71f..b6cf01775e 100644 --- a/Spigot-Server-Patches/0242-Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch +++ b/Spigot-Server-Patches/0242-Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Add Debug Entities option to debug dupe uuid issues Add -Ddebug.entities=true to your JVM flags to gain more information diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 88e7fe1d50e644a107aa76c84b7fd1b9b43cd94b..f0347a71b5937f9b68a4024fd0595a2d3e98eef5 100644 +index c6b9b02e6d31bebb3f8c0cadd68e4b5c47fab090..c4dd2bac48bb93117925b35dcd753d0fbb22e3cf 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -1138,6 +1138,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1139,6 +1139,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } else { PlayerChunkMap.EntityTracker playerchunkmap_entitytracker = new PlayerChunkMap.EntityTracker(entity, i, j, entitytypes.isDeltaTracking()); @@ -17,7 +17,7 @@ index 88e7fe1d50e644a107aa76c84b7fd1b9b43cd94b..f0347a71b5937f9b68a4024fd0595a2d this.trackedEntities.put(entity.getId(), playerchunkmap_entitytracker); playerchunkmap_entitytracker.track(this.world.getPlayers()); if (entity instanceof EntityPlayer) { -@@ -1179,7 +1180,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1180,7 +1181,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { if (playerchunkmap_entitytracker1 != null) { playerchunkmap_entitytracker1.a(); } @@ -27,13 +27,13 @@ index 88e7fe1d50e644a107aa76c84b7fd1b9b43cd94b..f0347a71b5937f9b68a4024fd0595a2d protected void g() { diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 4d3e3a4496ab28e0865f2ad871915fcb2ae57e36..70b837ef82dfe46eb24625b96f9bdbe2e7f2cc2d 100644 +index 24563d21ce2a77b47300cca00e07658a014be96c..04b708e776f277985340f329dc8cb3c16a6100a7 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -197,6 +197,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { public final Convertable.ConversionSession convertable; public final UUID uuid; - boolean hasPhysicsEvent = true; // Paper + public boolean hasPhysicsEvent = true; // Paper + private static Throwable getAddToWorldStackTrace(Entity entity) { + return new Throwable(entity + " Added to world at " + new java.util.Date()); + } @@ -97,23 +97,31 @@ index 4d3e3a4496ab28e0865f2ad871915fcb2ae57e36..70b837ef82dfe46eb24625b96f9bdbe2 // CraftBukkit start - SPIGOT-5278 if (entity instanceof EntityDrowned) { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index a4915d330d9df8773ce2643a17f353045fff7965..94c77ea291b13206c726725def2ecf4e6441bf3f 100644 +index a4915d330d9df8773ce2643a17f353045fff7965..36ac9ba19b3bbcab40b5d4339ba9c297d4b5a65b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -161,6 +161,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -48,6 +48,7 @@ import net.minecraft.resources.MinecraftKey; + import net.minecraft.resources.ResourceKey; + import net.minecraft.server.MinecraftServer; + import net.minecraft.server.level.EntityPlayer; ++import net.minecraft.server.level.PlayerChunkMap; + import net.minecraft.server.level.TicketType; + import net.minecraft.server.level.WorldServer; + import net.minecraft.sounds.SoundCategory; +@@ -161,6 +162,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public com.destroystokyo.paper.loottable.PaperLootableInventoryData lootableData; // Paper private CraftEntity bukkitEntity; + PlayerChunkMap.EntityTracker tracker; // Paper -+ Throwable addedToWorldStack; // Paper - entity debug ++ public Throwable addedToWorldStack; // Paper - entity debug public CraftEntity getBukkitEntity() { if (bukkitEntity == null) { bukkitEntity = CraftEntity.getEntity(world.getServer(), this); diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index f7df55cf3da909c253bab106cdb7149ee9c297d9..6b81392010c216a1c478cae170388d6836e4206e 100644 +index a9e7da1c848a6fe08fc112e445ceec1b7715d682..0d375af209e9768f430e08bd7a4bde1863b14da5 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -120,6 +120,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -121,6 +121,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { public boolean pvpMode; public boolean keepSpawnInMemory = true; public org.bukkit.generator.ChunkGenerator generator; diff --git a/Spigot-Server-Patches/0247-Option-to-prevent-armor-stands-from-doing-entity-loo.patch b/Spigot-Server-Patches/0247-Option-to-prevent-armor-stands-from-doing-entity-loo.patch index 0e003fb8ae..d24d23f2ac 100644 --- a/Spigot-Server-Patches/0247-Option-to-prevent-armor-stands-from-doing-entity-loo.patch +++ b/Spigot-Server-Patches/0247-Option-to-prevent-armor-stands-from-doing-entity-loo.patch @@ -19,10 +19,10 @@ index 4813f62d1e382d5ac6971b2244df3f13c80d1950..3562950df4868b1393790b1a1ff1fe0d + } } diff --git a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -index e9ea670248eb0680cdff9a72412e9331fc57ff8a..0936924707306204c06064ee796413159835bfa9 100644 +index 57e0ea95df34fab22d6c5868ab839d56a3fa85fc..829013f57128cc6c92a45098c6883f2305cf4ea5 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -@@ -355,6 +355,7 @@ public class EntityArmorStand extends EntityLiving { +@@ -356,6 +356,7 @@ public class EntityArmorStand extends EntityLiving { @Override protected void collideNearby() { @@ -31,10 +31,18 @@ index e9ea670248eb0680cdff9a72412e9331fc57ff8a..0936924707306204c06064ee79641315 for (int i = 0; i < list.size(); ++i) { diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 6b81392010c216a1c478cae170388d6836e4206e..06ec41f816bc75ee0fa6418c21ff5a416c834518 100644 +index 0d375af209e9768f430e08bd7a4bde1863b14da5..8c7263f9dbb00cf6484e7f70b8d97639bab0cefc 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -853,6 +853,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -37,6 +37,7 @@ import net.minecraft.world.DifficultyDamageScaler; + import net.minecraft.world.damagesource.DamageSource; + import net.minecraft.world.entity.Entity; + import net.minecraft.world.entity.EntityTypes; ++import net.minecraft.world.entity.decoration.EntityArmorStand; + import net.minecraft.world.entity.player.EntityHuman; + import net.minecraft.world.item.ItemStack; + import net.minecraft.world.item.crafting.CraftingManager; +@@ -854,6 +855,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable { // Paper end } } diff --git a/Spigot-Server-Patches/0248-Vanished-players-don-t-have-rights.patch b/Spigot-Server-Patches/0248-Vanished-players-don-t-have-rights.patch index 2b4c3c5d9a..d709061d84 100644 --- a/Spigot-Server-Patches/0248-Vanished-players-don-t-have-rights.patch +++ b/Spigot-Server-Patches/0248-Vanished-players-don-t-have-rights.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Vanished players don't have rights diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 94c77ea291b13206c726725def2ecf4e6441bf3f..d9dac0420fff1ae06ebbe6cf0d9c9fb2b71eb673 100644 +index 36ac9ba19b3bbcab40b5d4339ba9c297d4b5a65b..e243aa01d59c3e1b6c813922bcf6e04db0693d20 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -183,7 +183,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -184,7 +184,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne private static double e = 1.0D; private final EntityTypes f; private int id; @@ -52,10 +52,29 @@ index ec12bea9de910824927ba31628b49f6713f31a29..59d52c252b2e59923b8e513dd4d2e1ec BlockCanBuildEvent event = new BlockCanBuildEvent(CraftBlock.at(blockactioncontext.getWorld(), blockactioncontext.getClickPosition()), player, CraftBlockData.fromData(iblockdata), defaultReturn); diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 06ec41f816bc75ee0fa6418c21ff5a416c834518..7b552e4e71c82833da2114604de98350567128f0 100644 +index 8c7263f9dbb00cf6484e7f70b8d97639bab0cefc..07c5cdd00930a55fd412ef95f71f55ee908189a1 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -230,6 +230,46 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -27,6 +27,7 @@ import net.minecraft.network.protocol.Packet; + import net.minecraft.resources.MinecraftKey; + import net.minecraft.resources.ResourceKey; + import net.minecraft.server.MinecraftServer; ++import net.minecraft.server.level.EntityPlayer; + import net.minecraft.server.level.PlayerChunk; + import net.minecraft.sounds.SoundCategory; + import net.minecraft.sounds.SoundEffect; +@@ -65,6 +66,10 @@ import net.minecraft.world.level.saveddata.maps.WorldMap; + import net.minecraft.world.level.storage.WorldData; + import net.minecraft.world.level.storage.WorldDataMutable; + import net.minecraft.world.phys.AxisAlignedBB; ++import net.minecraft.world.phys.shapes.OperatorBoolean; ++import net.minecraft.world.phys.shapes.VoxelShape; ++import net.minecraft.world.phys.shapes.VoxelShapeCollision; ++import net.minecraft.world.phys.shapes.VoxelShapes; + import net.minecraft.world.scores.Scoreboard; + import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; +@@ -232,6 +237,46 @@ public abstract class World implements GeneratorAccess, AutoCloseable { this.tileLimiter = new org.spigotmc.TickLimiter(spigotConfig.tileMaxTickTime); } diff --git a/Spigot-Server-Patches/0250-Add-some-Debug-to-Chunk-Entity-slices.patch b/Spigot-Server-Patches/0250-Add-some-Debug-to-Chunk-Entity-slices.patch index 3de571ed47..d3aa3ba8a9 100644 --- a/Spigot-Server-Patches/0250-Add-some-Debug-to-Chunk-Entity-slices.patch +++ b/Spigot-Server-Patches/0250-Add-some-Debug-to-Chunk-Entity-slices.patch @@ -9,10 +9,10 @@ This should hopefully avoid duplicate entities ever being created if the entity was to end up in 2 different chunk slices diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index d9dac0420fff1ae06ebbe6cf0d9c9fb2b71eb673..398c1f223d25931fb4de65582ab162bfc4be5050 100644 +index e243aa01d59c3e1b6c813922bcf6e04db0693d20..6c6171175b1f9cd4471162d070f668263f900dc0 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -156,6 +156,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -157,6 +157,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } } }; diff --git a/Spigot-Server-Patches/0254-Ignore-Dead-Entities-in-entityList-iteration.patch b/Spigot-Server-Patches/0254-Ignore-Dead-Entities-in-entityList-iteration.patch index be04f42799..81f9584f93 100644 --- a/Spigot-Server-Patches/0254-Ignore-Dead-Entities-in-entityList-iteration.patch +++ b/Spigot-Server-Patches/0254-Ignore-Dead-Entities-in-entityList-iteration.patch @@ -23,7 +23,7 @@ index 6943524c2dd8b12691b8ac5b08daee823ce50c3d..b67bd98cca4a06bc0ebaed577195dffc MutablePair> info = list.computeIfAbsent(key, k -> MutablePair.of(0, Maps.newHashMap())); ChunkCoordIntPair chunk = new ChunkCoordIntPair(e.chunkX, e.chunkZ); diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index b121d404f3afb69fa1d0eae727c1dba92eadb0e5..7db20b7d8582595bc40f585104db21e04550d43d 100644 +index c59bcb6e19b712e007c7bf66bf70a4ffa3c6c2cd..8452b4f62689b231d38f4608c2d72b41164078b3 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -1307,6 +1307,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -43,10 +43,10 @@ index b121d404f3afb69fa1d0eae727c1dba92eadb0e5..7db20b7d8582595bc40f585104db21e0 } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 398c1f223d25931fb4de65582ab162bfc4be5050..110b88a098de307ed02b7f72c02c333cd32ec531 100644 +index 6c6171175b1f9cd4471162d070f668263f900dc0..a7115fb1fc6fadb38c7cc9f23629473a7173982e 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -275,6 +275,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -276,6 +276,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne protected int numCollisions = 0; // Paper public void inactiveTick() { } // Spigot end diff --git a/Spigot-Server-Patches/0255-Implement-Expanded-ArmorStand-API.patch b/Spigot-Server-Patches/0255-Implement-Expanded-ArmorStand-API.patch index ebce045866..18ea30042a 100644 --- a/Spigot-Server-Patches/0255-Implement-Expanded-ArmorStand-API.patch +++ b/Spigot-Server-Patches/0255-Implement-Expanded-ArmorStand-API.patch @@ -8,10 +8,10 @@ Add the following: - Enable/Disable slot interactions diff --git a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -index 0936924707306204c06064ee796413159835bfa9..94cb66e0651d918ad984e2056602c70335ce2032 100644 +index 829013f57128cc6c92a45098c6883f2305cf4ea5..e97d25339b37a70f91022dcb021bbe82fb8f5eda 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -@@ -429,6 +429,7 @@ public class EntityArmorStand extends EntityLiving { +@@ -430,6 +430,7 @@ public class EntityArmorStand extends EntityLiving { return enumitemslot; } diff --git a/Spigot-Server-Patches/0257-Add-TNTPrimeEvent.patch b/Spigot-Server-Patches/0257-Add-TNTPrimeEvent.patch index a078c9f762..e848d18de0 100644 --- a/Spigot-Server-Patches/0257-Add-TNTPrimeEvent.patch +++ b/Spigot-Server-Patches/0257-Add-TNTPrimeEvent.patch @@ -29,7 +29,7 @@ index 97ef4c65c8cc569a99d9697f56bd44d32b151328..51993191e01f55e16667c25b8b57d6a6 this.world.a(blockposition, false); diff --git a/src/main/java/net/minecraft/world/level/block/BlockFire.java b/src/main/java/net/minecraft/world/level/block/BlockFire.java -index c22fad0038fdb0769e23db782e3341206fbd80f9..d2d59cc1acc7f67de62ac8d765f2b6b491b69053 100644 +index c22fad0038fdb0769e23db782e3341206fbd80f9..5ef38414d87fbce453e3ab11579c89a8ff089ae0 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockFire.java +++ b/src/main/java/net/minecraft/world/level/block/BlockFire.java @@ -3,6 +3,7 @@ package net.minecraft.world.level.block; @@ -40,7 +40,15 @@ index c22fad0038fdb0769e23db782e3341206fbd80f9..d2d59cc1acc7f67de62ac8d765f2b6b4 import java.util.Map; import java.util.Random; import java.util.function.Function; -@@ -289,7 +290,7 @@ public class BlockFire extends BlockFireAbstract { +@@ -11,6 +12,7 @@ import net.minecraft.SystemUtils; + import net.minecraft.core.BaseBlockPosition; + import net.minecraft.core.BlockPosition; + import net.minecraft.core.EnumDirection; ++import net.minecraft.server.MCUtil; + import net.minecraft.server.level.WorldServer; + import net.minecraft.world.item.context.BlockActionContext; + import net.minecraft.world.level.GameRules; +@@ -289,7 +291,7 @@ public class BlockFire extends BlockFireAbstract { world.setTypeAndData(blockposition, this.a(world, blockposition, l), 3); } else { @@ -49,7 +57,7 @@ index c22fad0038fdb0769e23db782e3341206fbd80f9..d2d59cc1acc7f67de62ac8d765f2b6b4 } Block block = iblockdata.getBlock(); -@@ -297,6 +298,13 @@ public class BlockFire extends BlockFireAbstract { +@@ -297,6 +299,13 @@ public class BlockFire extends BlockFireAbstract { if (block instanceof BlockTNT) { BlockTNT blocktnt = (BlockTNT) block; diff --git a/Spigot-Server-Patches/0259-Add-hand-to-bucket-events.patch b/Spigot-Server-Patches/0259-Add-hand-to-bucket-events.patch index bb9f886d57..baabf8474c 100644 --- a/Spigot-Server-Patches/0259-Add-hand-to-bucket-events.patch +++ b/Spigot-Server-Patches/0259-Add-hand-to-bucket-events.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add hand to bucket events diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 7db20b7d8582595bc40f585104db21e04550d43d..690e40aeed96a8d83e86c9aff0e910f6aa97c1c9 100644 +index 8452b4f62689b231d38f4608c2d72b41164078b3..ab18969083e89eb2016c6a6bffc06f4e83c9f753 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -1656,15 +1656,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -104,10 +104,10 @@ index 4bcac8defeaa146713cce43e04a51c1c9afddb1f..d126f668828e0788e369294c0b376ef5 int i = blockposition.getX(); int j = blockposition.getY(); diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 7b552e4e71c82833da2114604de98350567128f0..b0044d97afca1f658c193278eed542a743f20668 100644 +index 07c5cdd00930a55fd412ef95f71f55ee908189a1..88b1a0235bfc0b41ae1855f8900632e425730d1c 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -270,6 +270,17 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -277,6 +277,17 @@ public abstract class World implements GeneratorAccess, AutoCloseable { } // Paper end diff --git a/Spigot-Server-Patches/0261-Fix-client-rendering-skulls-from-same-user.patch b/Spigot-Server-Patches/0261-Fix-client-rendering-skulls-from-same-user.patch index 10cce8f5d2..a207ac3b21 100644 --- a/Spigot-Server-Patches/0261-Fix-client-rendering-skulls-from-same-user.patch +++ b/Spigot-Server-Patches/0261-Fix-client-rendering-skulls-from-same-user.patch @@ -54,10 +54,18 @@ index df459918c14589155a574730205cb35d463b8079..4fc06bc5ef630b07fc8462cf835e6f92 // CraftBukkit end return itemstack; diff --git a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java -index b6b55d5baa5e8a6b69a3e4865c06bc8a4d61a4f3..7b47d4f1cbf9f8646e0b1af9277cf341ea28a2b3 100644 +index b6b55d5baa5e8a6b69a3e4865c06bc8a4d61a4f3..152118729b1a95dcae05d32aa4289034ba394226 100644 --- a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java +++ b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java -@@ -69,6 +69,7 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -15,6 +15,7 @@ import net.minecraft.network.PacketDataSerializer; + import net.minecraft.network.protocol.Packet; + import net.minecraft.world.level.ChunkCoordIntPair; + import net.minecraft.world.level.block.entity.TileEntity; ++import net.minecraft.world.level.block.entity.TileEntitySkull; + import net.minecraft.world.level.chunk.BiomeStorage; + import net.minecraft.world.level.chunk.Chunk; + import net.minecraft.world.level.chunk.ChunkSection; +@@ -69,6 +70,7 @@ public class PacketPlayOutMapChunk implements Packet { if (this.f() || (i & 1 << j) != 0) { NBTTagCompound nbttagcompound = tileentity.b(); @@ -79,10 +87,18 @@ index c525afbc7d73488db2cae1501cdbe80ec05aeb7c..de171e18fbc6cc5ee06e75f4a3c60fd4 private Entity k; private ShapeDetectorBlock l; diff --git a/src/main/java/net/minecraft/world/level/block/entity/TileEntitySkull.java b/src/main/java/net/minecraft/world/level/block/entity/TileEntitySkull.java -index 06ab45e0927403beb6b5e11d2b5ea93d4786f1d3..fcc393bcf3e40c347a0320544cc93eb84a4d0b90 100644 +index 06ab45e0927403beb6b5e11d2b5ea93d4786f1d3..0c95465cdc29418063a960033fe80de6932c8aa8 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TileEntitySkull.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TileEntitySkull.java -@@ -153,9 +153,37 @@ public class TileEntitySkull extends TileEntity /*implements ITickable*/ { // Pa +@@ -8,6 +8,7 @@ import java.util.UUID; + import javax.annotation.Nullable; + import net.minecraft.nbt.GameProfileSerializer; + import net.minecraft.nbt.NBTTagCompound; ++import net.minecraft.nbt.NBTTagList; + import net.minecraft.network.protocol.game.PacketPlayOutTileEntityData; + import net.minecraft.server.players.UserCache; + import net.minecraft.util.UtilColor; +@@ -153,9 +154,37 @@ public class TileEntitySkull extends TileEntity /*implements ITickable*/ { // Pa @Nullable @Override public PacketPlayOutTileEntityData getUpdatePacket() { @@ -91,7 +107,7 @@ index 06ab45e0927403beb6b5e11d2b5ea93d4786f1d3..fcc393bcf3e40c347a0320544cc93eb8 } + // Paper start -+ static NBTTagCompound sanitizeTileEntityUUID(NBTTagCompound cmp) { ++ public static NBTTagCompound sanitizeTileEntityUUID(NBTTagCompound cmp) { + NBTTagCompound owner = cmp.getCompound("Owner"); + if (!owner.isEmpty()) { + sanitizeUUID(owner); diff --git a/Spigot-Server-Patches/0264-Use-ConcurrentHashMap-in-JsonList.patch b/Spigot-Server-Patches/0264-Use-ConcurrentHashMap-in-JsonList.patch index 97e404b32d..d9c827597c 100644 --- a/Spigot-Server-Patches/0264-Use-ConcurrentHashMap-in-JsonList.patch +++ b/Spigot-Server-Patches/0264-Use-ConcurrentHashMap-in-JsonList.patch @@ -122,10 +122,10 @@ index 52256f72b00d3b868ef1a60e15a3836197c769d9..cd35b833d3047a38be980ee550641e87 this.d.values().stream().map((jsonlistentry) -> { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 2939a8186254a39ef20d778421b0ed984bb20a32..1dfa84dfb7b62c50081ad32b012d108a0b77b83c 100644 +index 349bd74e7e4d1dea9587e55cb6afc1968628ca01..3aaa6313a33865b9823aa38e5d0cce7edce04592 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -617,7 +617,7 @@ public abstract class PlayerList { +@@ -618,7 +618,7 @@ public abstract class PlayerList { } else if (!this.isWhitelisted(gameprofile, event)) { // Paper //chatmessage = new ChatMessage("multiplayer.disconnect.not_whitelisted"); // Paper //event.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, org.spigotmc.SpigotConfig.whitelistMessage); // Spigot // Paper - moved to isWhitelisted diff --git a/Spigot-Server-Patches/0267-Allow-disabling-armour-stand-ticking.patch b/Spigot-Server-Patches/0267-Allow-disabling-armour-stand-ticking.patch index fa440c0f81..c06565f19e 100644 --- a/Spigot-Server-Patches/0267-Allow-disabling-armour-stand-ticking.patch +++ b/Spigot-Server-Patches/0267-Allow-disabling-armour-stand-ticking.patch @@ -20,10 +20,10 @@ index 3562950df4868b1393790b1a1ff1fe0dc589c155..5ab0e7183e48134b7a0f736462516b1a + } } diff --git a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -index 94cb66e0651d918ad984e2056602c70335ce2032..b2a661ddcf13f7d7758cc1cac1f4d2c3fa6c4635 100644 +index e97d25339b37a70f91022dcb021bbe82fb8f5eda..8d35240405d7f7245f3c7b0b611973d58fa4384f 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -@@ -80,9 +80,16 @@ public class EntityArmorStand extends EntityLiving { +@@ -81,9 +81,16 @@ public class EntityArmorStand extends EntityLiving { public Vector3f leftLegPose; public Vector3f rightLegPose; public boolean canMove = true; // Paper @@ -40,7 +40,7 @@ index 94cb66e0651d918ad984e2056602c70335ce2032..b2a661ddcf13f7d7758cc1cac1f4d2c3 this.handItems = NonNullList.a(2, ItemStack.b); this.armorItems = NonNullList.a(4, ItemStack.b); this.headPose = EntityArmorStand.bj; -@@ -178,6 +185,7 @@ public class EntityArmorStand extends EntityLiving { +@@ -179,6 +186,7 @@ public class EntityArmorStand extends EntityLiving { this.armorItems.set(enumitemslot.b(), itemstack); } @@ -48,7 +48,7 @@ index 94cb66e0651d918ad984e2056602c70335ce2032..b2a661ddcf13f7d7758cc1cac1f4d2c3 } @Override -@@ -258,6 +266,7 @@ public class EntityArmorStand extends EntityLiving { +@@ -259,6 +267,7 @@ public class EntityArmorStand extends EntityLiving { } nbttagcompound.set("Pose", this.B()); @@ -56,7 +56,7 @@ index 94cb66e0651d918ad984e2056602c70335ce2032..b2a661ddcf13f7d7758cc1cac1f4d2c3 } @Override -@@ -289,6 +298,12 @@ public class EntityArmorStand extends EntityLiving { +@@ -290,6 +299,12 @@ public class EntityArmorStand extends EntityLiving { this.setBasePlate(nbttagcompound.getBoolean("NoBasePlate")); this.setMarker(nbttagcompound.getBoolean("Marker")); this.noclip = !this.A(); @@ -69,7 +69,7 @@ index 94cb66e0651d918ad984e2056602c70335ce2032..b2a661ddcf13f7d7758cc1cac1f4d2c3 NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("Pose"); this.g(nbttagcompound1); -@@ -644,7 +659,29 @@ public class EntityArmorStand extends EntityLiving { +@@ -645,7 +660,29 @@ public class EntityArmorStand extends EntityLiving { @Override public void tick() { @@ -99,7 +99,7 @@ index 94cb66e0651d918ad984e2056602c70335ce2032..b2a661ddcf13f7d7758cc1cac1f4d2c3 Vector3f vector3f = (Vector3f) this.datawatcher.get(EntityArmorStand.c); if (!this.headPose.equals(vector3f)) { -@@ -767,29 +804,36 @@ public class EntityArmorStand extends EntityLiving { +@@ -768,29 +805,36 @@ public class EntityArmorStand extends EntityLiving { public void setHeadPose(Vector3f vector3f) { this.headPose = vector3f; this.datawatcher.set(EntityArmorStand.c, vector3f); diff --git a/Spigot-Server-Patches/0278-Add-ray-tracing-methods-to-LivingEntity.patch b/Spigot-Server-Patches/0278-Add-ray-tracing-methods-to-LivingEntity.patch index 4e7d50ca7e..f88cf54034 100644 --- a/Spigot-Server-Patches/0278-Add-ray-tracing-methods-to-LivingEntity.patch +++ b/Spigot-Server-Patches/0278-Add-ray-tracing-methods-to-LivingEntity.patch @@ -33,32 +33,64 @@ index 189a00cb68ce9a9060117b79c5356ebb93d7fa62..9d8f92c313829bb32c17907bf2ef23d0 public int getShieldBlockingDelay() { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index db58175ac8972a4a9f5b7b312c6301f87e943a0e..a60a12a7705be29b6f318c587e1c6149b89d86c3 100644 +index bd24b9865f37c34ffd63cd411ddc84abe5ab30d0..c692626b747008a5418ecabf550fc67e3b676f5b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -201,6 +201,28 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -1,5 +1,6 @@ + package org.bukkit.craftbukkit.entity; + ++import com.destroystokyo.paper.block.TargetBlockInfo; + import com.google.common.base.Preconditions; + import com.google.common.collect.Sets; + import java.util.ArrayList; +@@ -8,6 +9,7 @@ import java.util.Iterator; + import java.util.List; + import java.util.Set; + import java.util.UUID; ++import net.minecraft.server.MCUtil; + import net.minecraft.server.level.EntityPlayer; + import net.minecraft.world.EnumHand; + import net.minecraft.world.damagesource.DamageSource; +@@ -40,6 +42,8 @@ import net.minecraft.world.entity.projectile.EntityThrownExpBottle; + import net.minecraft.world.entity.projectile.EntityThrownTrident; + import net.minecraft.world.entity.projectile.EntityTippedArrow; + import net.minecraft.world.entity.projectile.EntityWitherSkull; ++import net.minecraft.world.phys.MovingObjectPosition; ++import net.minecraft.world.phys.MovingObjectPositionBlock; + import org.apache.commons.lang.Validate; + import org.bukkit.FluidCollisionMode; + import org.bukkit.Location; +@@ -49,6 +53,7 @@ import org.bukkit.attribute.AttributeInstance; + import org.bukkit.block.Block; + import org.bukkit.craftbukkit.CraftServer; + import org.bukkit.craftbukkit.CraftWorld; ++import org.bukkit.craftbukkit.block.CraftBlock; + import org.bukkit.craftbukkit.entity.memory.CraftMemoryKey; + import org.bukkit.craftbukkit.entity.memory.CraftMemoryMapper; + import org.bukkit.craftbukkit.inventory.CraftEntityEquipment; +@@ -202,6 +207,28 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { return blocks.get(0); } + // Paper start + @Override -+ public Block getTargetBlock(int maxDistance, com.destroystokyo.paper.block.TargetBlockInfo.FluidMode fluidMode) { -+ net.minecraft.server.MovingObjectPosition rayTrace = getHandle().getRayTrace(maxDistance, net.minecraft.server.MCUtil.getNMSFluidCollisionOption(fluidMode)); -+ return !(rayTrace instanceof net.minecraft.server.MovingObjectPositionBlock) ? null : org.bukkit.craftbukkit.block.CraftBlock.at(getHandle().world, ((net.minecraft.server.MovingObjectPositionBlock)rayTrace).getBlockPosition()); ++ public Block getTargetBlock(int maxDistance, TargetBlockInfo.FluidMode fluidMode) { ++ MovingObjectPosition rayTrace = getHandle().getRayTrace(maxDistance, MCUtil.getNMSFluidCollisionOption(fluidMode)); ++ return !(rayTrace instanceof MovingObjectPositionBlock) ? null : CraftBlock.at(getHandle().world, ((MovingObjectPositionBlock)rayTrace).getBlockPosition()); + } + + @Override -+ public org.bukkit.block.BlockFace getTargetBlockFace(int maxDistance, com.destroystokyo.paper.block.TargetBlockInfo.FluidMode fluidMode) { -+ net.minecraft.server.MovingObjectPosition rayTrace = getHandle().getRayTrace(maxDistance, net.minecraft.server.MCUtil.getNMSFluidCollisionOption(fluidMode)); -+ return !(rayTrace instanceof net.minecraft.server.MovingObjectPositionBlock) ? null : net.minecraft.server.MCUtil.toBukkitBlockFace(((net.minecraft.server.MovingObjectPositionBlock)rayTrace).getDirection()); ++ public org.bukkit.block.BlockFace getTargetBlockFace(int maxDistance, TargetBlockInfo.FluidMode fluidMode) { ++ MovingObjectPosition rayTrace = getHandle().getRayTrace(maxDistance, MCUtil.getNMSFluidCollisionOption(fluidMode)); ++ return !(rayTrace instanceof MovingObjectPositionBlock) ? null : MCUtil.toBukkitBlockFace(((MovingObjectPositionBlock)rayTrace).getDirection()); + } + + @Override -+ public com.destroystokyo.paper.block.TargetBlockInfo getTargetBlockInfo(int maxDistance, com.destroystokyo.paper.block.TargetBlockInfo.FluidMode fluidMode) { -+ net.minecraft.server.MovingObjectPosition rayTrace = getHandle().getRayTrace(maxDistance, net.minecraft.server.MCUtil.getNMSFluidCollisionOption(fluidMode)); -+ return !(rayTrace instanceof net.minecraft.server.MovingObjectPositionBlock) ? null : -+ new com.destroystokyo.paper.block.TargetBlockInfo(org.bukkit.craftbukkit.block.CraftBlock.at(getHandle().world, ((net.minecraft.server.MovingObjectPositionBlock)rayTrace).getBlockPosition()), -+ net.minecraft.server.MCUtil.toBukkitBlockFace(((net.minecraft.server.MovingObjectPositionBlock)rayTrace).getDirection())); ++ public TargetBlockInfo getTargetBlockInfo(int maxDistance, TargetBlockInfo.FluidMode fluidMode) { ++ MovingObjectPosition rayTrace = getHandle().getRayTrace(maxDistance, MCUtil.getNMSFluidCollisionOption(fluidMode)); ++ return !(rayTrace instanceof MovingObjectPositionBlock) ? null : ++ new TargetBlockInfo(CraftBlock.at(getHandle().world, ((MovingObjectPositionBlock)rayTrace).getBlockPosition()), ++ MCUtil.toBukkitBlockFace(((MovingObjectPositionBlock)rayTrace).getDirection())); + } + // Paper end + diff --git a/Spigot-Server-Patches/0279-Expose-attack-cooldown-methods-for-Player.patch b/Spigot-Server-Patches/0279-Expose-attack-cooldown-methods-for-Player.patch index cb48db1e26..116504981b 100644 --- a/Spigot-Server-Patches/0279-Expose-attack-cooldown-methods-for-Player.patch +++ b/Spigot-Server-Patches/0279-Expose-attack-cooldown-methods-for-Player.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose attack cooldown methods for Player diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index 5f92ba350658c7f1cac9111f06d95e6ffc5600c3..bed54f9732bbfe9edab81744276643da482785d3 100644 +index b6effe1037f3ae59e6faa5f5d039b6ad54bca5d4..87374174dcbf9e7ee448a1cdd9a3528557c3a2ea 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -2100,6 +2100,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -2103,6 +2103,7 @@ public abstract class EntityHuman extends EntityLiving { this.datawatcher.set(EntityHuman.bl, nbttagcompound); } @@ -17,7 +17,7 @@ index 5f92ba350658c7f1cac9111f06d95e6ffc5600c3..bed54f9732bbfe9edab81744276643da return (float) (1.0D / this.b(GenericAttributes.ATTACK_SPEED) * 20.0D); } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 1851f261ce8e454cbe4012c0c4ea6a69e926daa0..c763f2bbd10ce6b62d703d3eabb894f24be91b11 100644 +index b4c763d2935aad0038128a61ed09c4904975f0ef..330ea2ea346867fc9005352e87cca892a1d33e03 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2181,6 +2181,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/Spigot-Server-Patches/0280-Improve-death-events.patch b/Spigot-Server-Patches/0280-Improve-death-events.patch index a464187a36..68aaa0fa7a 100644 --- a/Spigot-Server-Patches/0280-Improve-death-events.patch +++ b/Spigot-Server-Patches/0280-Improve-death-events.patch @@ -15,7 +15,7 @@ items and experience which is otherwise only properly possible by using internal code. diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index b3c5a22bf2eb360399ebfbf90fc74843dcd78509..b1e45c326b27d640337fc69bd0e107f5db3eb4cf 100644 +index b3c5a22bf2eb360399ebfbf90fc74843dcd78509..1198de213b3809ddf7b7d6f1696d9f07bb4dc42e 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java @@ -213,6 +213,10 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -78,10 +78,10 @@ index f6f79ed9c38206cc6a4feb5504e854a476868aec..7d2b947b3c2b255c01241f2c4a6d7377 int i = this.f ? 300 : 100; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 110b88a098de307ed02b7f72c02c333cd32ec531..4d7bb023092ee118d68ecce1918e220f541b33c1 100644 +index a7115fb1fc6fadb38c7cc9f23629473a7173982e..2fc25a13a554174d2b5f415c910c4a26e37b30e1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1537,6 +1537,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1538,6 +1538,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } // CraftBukkit end @@ -89,7 +89,7 @@ index 110b88a098de307ed02b7f72c02c333cd32ec531..4d7bb023092ee118d68ecce1918e220f public void a(Entity entity, int i, DamageSource damagesource) { if (entity instanceof EntityPlayer) { CriterionTriggers.c.a((EntityPlayer) entity, this, damagesource); -@@ -2436,6 +2437,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2437,6 +2438,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne this.fallDistance = 0.0F; } @@ -311,10 +311,10 @@ index aa12a0c9f30cd2b8a6de75ff9822843da808ae64..3daa1780a332128bd472fa80039112f3 public void saveData(NBTTagCompound nbttagcompound) { super.saveData(nbttagcompound); diff --git a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -index b2a661ddcf13f7d7758cc1cac1f4d2c3fa6c4635..b93d04cd23a3a3616d1594c69174ea1271a204fb 100644 +index 8d35240405d7f7245f3c7b0b611973d58fa4384f..69361caebf0d3caa5195b519a16691705ac5e16a 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -@@ -745,7 +745,8 @@ public class EntityArmorStand extends EntityLiving { +@@ -746,7 +746,8 @@ public class EntityArmorStand extends EntityLiving { @Override public void killEntity() { @@ -325,7 +325,7 @@ index b2a661ddcf13f7d7758cc1cac1f4d2c3fa6c4635..b93d04cd23a3a3616d1594c69174ea12 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c763f2bbd10ce6b62d703d3eabb894f24be91b11..5c3b83244e77c54d3de5cf56171a88c2952fcd13 100644 +index 330ea2ea346867fc9005352e87cca892a1d33e03..91da1f4d933b991c73e04e077722382d02487e07 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1836,7 +1836,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -346,10 +346,19 @@ index c763f2bbd10ce6b62d703d3eabb894f24be91b11..5c3b83244e77c54d3de5cf56171a88c2 public void injectScaledMaxHealth(Collection collection, boolean force) { diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index ecd3b31216616b0ffe239785e3942cfb4bfebcf8..e408f30da80a4f1450d6ac659e25e511190b1c7b 100644 +index ecd3b31216616b0ffe239785e3942cfb4bfebcf8..0f8764f16b0719e9e370731dc02627e1a55e9708 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -784,9 +784,16 @@ public class CraftEventFactory { +@@ -18,6 +18,8 @@ import net.minecraft.network.protocol.game.PacketPlayInCloseWindow; + import net.minecraft.resources.MinecraftKey; + import net.minecraft.server.level.EntityPlayer; + import net.minecraft.server.level.WorldServer; ++import net.minecraft.sounds.SoundCategory; ++import net.minecraft.sounds.SoundEffect; + import net.minecraft.util.Unit; + import net.minecraft.world.EnumHand; + import net.minecraft.world.IInventory; +@@ -784,9 +786,16 @@ public class CraftEventFactory { public static EntityDeathEvent callEntityDeathEvent(EntityLiving victim, List drops) { CraftLivingEntity entity = (CraftLivingEntity) victim.getBukkitEntity(); EntityDeathEvent event = new EntityDeathEvent(entity, drops, victim.getExpReward()); @@ -366,7 +375,7 @@ index ecd3b31216616b0ffe239785e3942cfb4bfebcf8..e408f30da80a4f1450d6ac659e25e511 victim.expToDrop = event.getDroppedExp(); for (org.bukkit.inventory.ItemStack stack : event.getDrops()) { -@@ -802,8 +809,15 @@ public class CraftEventFactory { +@@ -802,8 +811,15 @@ public class CraftEventFactory { CraftPlayer entity = victim.getBukkitEntity(); PlayerDeathEvent event = new PlayerDeathEvent(entity, drops, victim.getExpReward(), 0, deathMessage, stringDeathMessage); // Paper - Adventure event.setKeepInventory(keepInventory); @@ -382,7 +391,7 @@ index ecd3b31216616b0ffe239785e3942cfb4bfebcf8..e408f30da80a4f1450d6ac659e25e511 victim.keepLevel = event.getKeepLevel(); victim.newLevel = event.getNewLevel(); -@@ -820,6 +834,31 @@ public class CraftEventFactory { +@@ -820,6 +836,31 @@ public class CraftEventFactory { return event; } @@ -391,7 +400,7 @@ index ecd3b31216616b0ffe239785e3942cfb4bfebcf8..e408f30da80a4f1450d6ac659e25e511 + private static void populateFields(EntityLiving victim, EntityDeathEvent event) { + event.setReviveHealth(event.getEntity().getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH).getValue()); + event.setShouldPlayDeathSound(!victim.silentDeath && !victim.isSilent()); -+ net.minecraft.server.SoundEffect soundEffect = victim.getDeathSoundEffect(); ++ SoundEffect soundEffect = victim.getDeathSoundEffect(); + event.setDeathSound(soundEffect != null ? org.bukkit.craftbukkit.CraftSound.getBukkit(soundEffect) : null); + event.setDeathSoundCategory(org.bukkit.SoundCategory.valueOf(victim.getSoundCategory().name())); + event.setDeathSoundVolume(victim.getDeathSoundVolume()); @@ -405,8 +414,8 @@ index ecd3b31216616b0ffe239785e3942cfb4bfebcf8..e408f30da80a4f1450d6ac659e25e511 + double x = event.getEntity().getLocation().getX(); + double y = event.getEntity().getLocation().getY(); + double z = event.getEntity().getLocation().getZ(); -+ net.minecraft.server.SoundEffect soundEffect = org.bukkit.craftbukkit.CraftSound.getSoundEffect(event.getDeathSound()); -+ net.minecraft.server.SoundCategory soundCategory = net.minecraft.server.SoundCategory.valueOf(event.getDeathSoundCategory().name()); ++ SoundEffect soundEffect = org.bukkit.craftbukkit.CraftSound.getSoundEffect(event.getDeathSound()); ++ SoundCategory soundCategory = SoundCategory.valueOf(event.getDeathSoundCategory().name()); + victim.world.playSound(source, x, y, z, soundEffect, soundCategory, event.getDeathSoundVolume(), event.getDeathSoundPitch()); + } + } diff --git a/Spigot-Server-Patches/0282-Mob-Pathfinding-API.patch b/Spigot-Server-Patches/0282-Mob-Pathfinding-API.patch index ebfe5b3cf1..bdaa12000f 100644 --- a/Spigot-Server-Patches/0282-Mob-Pathfinding-API.patch +++ b/Spigot-Server-Patches/0282-Mob-Pathfinding-API.patch @@ -7,15 +7,15 @@ Implements Pathfinding API for mobs diff --git a/src/main/java/com/destroystokyo/paper/entity/PaperPathfinder.java b/src/main/java/com/destroystokyo/paper/entity/PaperPathfinder.java new file mode 100644 -index 0000000000000000000000000000000000000000..af1bac9680028130e99c5e7130f258c196b33275 +index 0000000000000000000000000000000000000000..9a3edd114c4736b1843844c6ca49da7aea7983d1 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/entity/PaperPathfinder.java @@ -0,0 +1,141 @@ +package com.destroystokyo.paper.entity; + -+import net.minecraft.server.EntityInsentient; -+import net.minecraft.server.PathEntity; -+import net.minecraft.server.PathPoint; ++import net.minecraft.world.entity.EntityInsentient; ++import net.minecraft.world.level.pathfinder.PathEntity; ++import net.minecraft.world.level.pathfinder.PathPoint; +import org.apache.commons.lang.Validate; +import org.bukkit.Location; +import org.bukkit.craftbukkit.entity.CraftLivingEntity; diff --git a/Spigot-Server-Patches/0290-Catch-JsonParseException-in-Entity-and-TE-names.patch b/Spigot-Server-Patches/0290-Catch-JsonParseException-in-Entity-and-TE-names.patch index 3a7b00d322..b57615d5de 100644 --- a/Spigot-Server-Patches/0290-Catch-JsonParseException-in-Entity-and-TE-names.patch +++ b/Spigot-Server-Patches/0290-Catch-JsonParseException-in-Entity-and-TE-names.patch @@ -13,10 +13,19 @@ Shulkers) may need to be changed in order for it to re-save properly No more crashing though. diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java -index cd7dc7d90efddb8a1bb50cd964b43d18cf9c83d1..67806eaab081e938cd99a0d74225b1b7744ff2d7 100644 +index cd7dc7d90efddb8a1bb50cd964b43d18cf9c83d1..35d1444c5b75d9a3a6cface5dd70aea0a08ac89d 100644 --- a/src/main/java/net/minecraft/server/MCUtil.java +++ b/src/main/java/net/minecraft/server/MCUtil.java -@@ -514,4 +514,19 @@ public final class MCUtil { +@@ -7,6 +7,8 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder; + import it.unimi.dsi.fastutil.objects.ObjectRBTreeSet; + import net.minecraft.core.BlockPosition; + import net.minecraft.core.EnumDirection; ++import net.minecraft.nbt.NBTTagCompound; ++import net.minecraft.network.chat.IChatBaseComponent; + import net.minecraft.server.level.WorldServer; + import net.minecraft.world.entity.Entity; + import net.minecraft.world.level.ChunkCoordIntPair; +@@ -514,4 +516,19 @@ public final class MCUtil { return null; } } diff --git a/Spigot-Server-Patches/0295-Add-sun-related-API.patch b/Spigot-Server-Patches/0295-Add-sun-related-API.patch index 15d066ee58..60df2ce89a 100644 --- a/Spigot-Server-Patches/0295-Add-sun-related-API.patch +++ b/Spigot-Server-Patches/0295-Add-sun-related-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add sun related API diff --git a/src/main/java/net/minecraft/world/entity/EntityInsentient.java b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -index 486f4727dbcb7955103f854baed9b571fb3b9f3e..a0857de5a14db5580bc047c401a006c9466c49b2 100644 +index 41566398f5eee6cf93376f2e2200728bb6d2181c..db72b685f4a4b95f345f1d34f9eeb83b8731120a 100644 --- a/src/main/java/net/minecraft/world/entity/EntityInsentient.java +++ b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -@@ -1594,6 +1594,7 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1597,6 +1597,7 @@ public abstract class EntityInsentient extends EntityLiving { } diff --git a/Spigot-Server-Patches/0299-Add-Velocity-IP-Forwarding-Support.patch b/Spigot-Server-Patches/0299-Add-Velocity-IP-Forwarding-Support.patch index 735c2f2a77..3fb312b095 100644 --- a/Spigot-Server-Patches/0299-Add-Velocity-IP-Forwarding-Support.patch +++ b/Spigot-Server-Patches/0299-Add-Velocity-IP-Forwarding-Support.patch @@ -55,7 +55,7 @@ index 7178b37f7978c7e9031a22726005c5099fd78fe0..3139c194f9b1bc3510d51a81f13ae43d } diff --git a/src/main/java/com/destroystokyo/paper/proxy/VelocityProxy.java b/src/main/java/com/destroystokyo/paper/proxy/VelocityProxy.java new file mode 100644 -index 0000000000000000000000000000000000000000..fdd8708f974700c7cde6e436c2f189d94d336f1f +index 0000000000000000000000000000000000000000..e6afaa41df086b1eb3950ce870c91dd5bf5a663b --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/proxy/VelocityProxy.java @@ -0,0 +1,67 @@ @@ -65,8 +65,8 @@ index 0000000000000000000000000000000000000000..fdd8708f974700c7cde6e436c2f189d9 +import com.google.common.net.InetAddresses; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; -+import net.minecraft.server.MinecraftKey; -+import net.minecraft.network.protocol.game.PacketDataSerializer; ++import net.minecraft.network.PacketDataSerializer; ++import net.minecraft.resources.MinecraftKey; + +import java.net.InetAddress; +import java.security.InvalidKeyException; @@ -189,10 +189,25 @@ index eb970c1e954cb0aa83aa12e83c471778809e69b2..2d8c917509f10a96fc82404908b452cb public void a(PacketDataSerializer packetdataserializer) throws IOException { this.a = packetdataserializer.i(); diff --git a/src/main/java/net/minecraft/server/network/LoginListener.java b/src/main/java/net/minecraft/server/network/LoginListener.java -index 2ce081e68fe27381d3e7f851b685cc547de35eb7..240fac47dedb726d86f5dd68cad35b91b8117be4 100644 +index 2ce081e68fe27381d3e7f851b685cc547de35eb7..a3c989ef850919fa90590b942f037c1f6d519608 100644 --- a/src/main/java/net/minecraft/server/network/LoginListener.java +++ b/src/main/java/net/minecraft/server/network/LoginListener.java -@@ -45,6 +45,7 @@ import org.bukkit.craftbukkit.util.Waitable; +@@ -18,12 +18,14 @@ import javax.crypto.Cipher; + import javax.crypto.SecretKey; + import net.minecraft.DefaultUncaughtExceptionHandler; + import net.minecraft.network.NetworkManager; ++import net.minecraft.network.PacketDataSerializer; + import net.minecraft.network.chat.ChatMessage; + import net.minecraft.network.chat.IChatBaseComponent; + import net.minecraft.network.protocol.login.PacketLoginInCustomPayload; + import net.minecraft.network.protocol.login.PacketLoginInEncryptionBegin; + import net.minecraft.network.protocol.login.PacketLoginInListener; + import net.minecraft.network.protocol.login.PacketLoginInStart; ++import net.minecraft.network.protocol.login.PacketLoginOutCustomPayload; + import net.minecraft.network.protocol.login.PacketLoginOutDisconnect; + import net.minecraft.network.protocol.login.PacketLoginOutEncryptionBegin; + import net.minecraft.network.protocol.login.PacketLoginOutSetCompression; +@@ -45,6 +47,7 @@ import org.bukkit.craftbukkit.util.Waitable; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerPreLoginEvent; // CraftBukkit end @@ -200,7 +215,7 @@ index 2ce081e68fe27381d3e7f851b685cc547de35eb7..240fac47dedb726d86f5dd68cad35b91 public class LoginListener implements PacketLoginInListener { -@@ -61,6 +62,7 @@ public class LoginListener implements PacketLoginInListener { +@@ -61,6 +64,7 @@ public class LoginListener implements PacketLoginInListener { private SecretKey loginKey; private EntityPlayer l; public String hostname = ""; // CraftBukkit - add field @@ -208,7 +223,7 @@ index 2ce081e68fe27381d3e7f851b685cc547de35eb7..240fac47dedb726d86f5dd68cad35b91 public LoginListener(MinecraftServer minecraftserver, NetworkManager networkmanager) { this.g = LoginListener.EnumProtocolState.HELLO; -@@ -212,6 +214,14 @@ public class LoginListener implements PacketLoginInListener { +@@ -212,6 +216,14 @@ public class LoginListener implements PacketLoginInListener { this.g = LoginListener.EnumProtocolState.KEY; this.networkManager.sendPacket(new PacketLoginOutEncryptionBegin("", this.server.getKeyPair().getPublic().getEncoded(), this.e)); } else { @@ -223,7 +238,7 @@ index 2ce081e68fe27381d3e7f851b685cc547de35eb7..240fac47dedb726d86f5dd68cad35b91 // Spigot start // Paper start - Cache authenticator threads authenticatorPool.execute(new Runnable() { -@@ -313,6 +323,12 @@ public class LoginListener implements PacketLoginInListener { +@@ -313,6 +325,12 @@ public class LoginListener implements PacketLoginInListener { public class LoginHandler { public void fireEvents() throws Exception { @@ -236,7 +251,7 @@ index 2ce081e68fe27381d3e7f851b685cc547de35eb7..240fac47dedb726d86f5dd68cad35b91 String playerName = i.getName(); java.net.InetAddress address = ((java.net.InetSocketAddress) networkManager.getSocketAddress()).getAddress(); java.util.UUID uniqueId = i.getId(); -@@ -360,6 +376,35 @@ public class LoginListener implements PacketLoginInListener { +@@ -360,6 +378,35 @@ public class LoginListener implements PacketLoginInListener { // Spigot end public void a(PacketLoginInCustomPayload packetloginincustompayload) { diff --git a/Spigot-Server-Patches/0304-Reset-players-airTicks-on-respawn.patch b/Spigot-Server-Patches/0304-Reset-players-airTicks-on-respawn.patch index 0bd12596ce..19610017ae 100644 --- a/Spigot-Server-Patches/0304-Reset-players-airTicks-on-respawn.patch +++ b/Spigot-Server-Patches/0304-Reset-players-airTicks-on-respawn.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Reset players airTicks on respawn diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index b63a8ac9bae50494fd8e093ff163df961d779c2d..f05f24f2a5c4ba8dbb8572d113afc404259e73ed 100644 +index d750c814ca3b7dc7df7f87de3e360235849c000b..ae5fe4f71ea1cc231e5d87920c2243f4f4f581f1 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java @@ -2152,6 +2152,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -17,10 +17,10 @@ index b63a8ac9bae50494fd8e093ff163df961d779c2d..f05f24f2a5c4ba8dbb8572d113afc404 this.fallDistance = 0; this.foodData = new FoodMetaData(this); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4d7bb023092ee118d68ecce1918e220f541b33c1..1f5ab7d43315fa3a67297eabea3bda257ed24a44 100644 +index 2fc25a13a554174d2b5f415c910c4a26e37b30e1..f102ecb56ac04a5b840fa52e6d1ff9604598d58d 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2349,6 +2349,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2350,6 +2350,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } diff --git a/Spigot-Server-Patches/0306-Improve-Server-Thread-Pool-and-Thread-Priorities.patch b/Spigot-Server-Patches/0306-Improve-Server-Thread-Pool-and-Thread-Priorities.patch index b3d8dbb5a6..8348f9c7ac 100644 --- a/Spigot-Server-Patches/0306-Improve-Server-Thread-Pool-and-Thread-Priorities.patch +++ b/Spigot-Server-Patches/0306-Improve-Server-Thread-Pool-and-Thread-Priorities.patch @@ -12,10 +12,18 @@ server threads Allow usage of a single thread executor by not using ForkJoin so single core CPU's. diff --git a/src/main/java/net/minecraft/SystemUtils.java b/src/main/java/net/minecraft/SystemUtils.java -index 68ce7605bd63ea280b96db8230463d2afb0a6cb1..c7cbf132bfcb5c5e49b269ebfe5ef9a049ff327f 100644 +index 68ce7605bd63ea280b96db8230463d2afb0a6cb1..46d82c1548088b8305f758699388edf0d5d4d050 100644 --- a/src/main/java/net/minecraft/SystemUtils.java +++ b/src/main/java/net/minecraft/SystemUtils.java -@@ -54,8 +54,8 @@ import org.apache.logging.log4j.Logger; +@@ -45,6 +45,7 @@ import java.util.stream.Stream; + import javax.annotation.Nullable; + import net.minecraft.resources.MinecraftKey; + import net.minecraft.server.DispenserRegistry; ++import net.minecraft.server.ServerWorkerThread; + import net.minecraft.util.MathHelper; + import net.minecraft.util.datafix.DataConverterRegistry; + import net.minecraft.world.level.block.state.properties.IBlockState; +@@ -54,8 +55,8 @@ import org.apache.logging.log4j.Logger; public class SystemUtils { private static final AtomicInteger c = new AtomicInteger(1); @@ -26,7 +34,7 @@ index 68ce7605bd63ea280b96db8230463d2afb0a6cb1..c7cbf132bfcb5c5e49b269ebfe5ef9a0 private static final ExecutorService f = n(); public static LongSupplier a = System::nanoTime; public static final UUID b = new UUID(0L, 0L); public static final UUID getNullUUID() {return b;} // Paper OBFHELPER -@@ -85,15 +85,18 @@ public class SystemUtils { +@@ -85,15 +86,18 @@ public class SystemUtils { return Instant.now().toEpochMilli(); } @@ -50,7 +58,7 @@ index 68ce7605bd63ea280b96db8230463d2afb0a6cb1..c7cbf132bfcb5c5e49b269ebfe5ef9a0 protected void onTermination(Throwable throwable) { if (throwable != null) { SystemUtils.LOGGER.warn("{} died", this.getName(), throwable); -@@ -109,6 +112,7 @@ public class SystemUtils { +@@ -109,6 +113,7 @@ public class SystemUtils { return forkjoinworkerthread; }, SystemUtils::a, true); } @@ -58,7 +66,7 @@ index 68ce7605bd63ea280b96db8230463d2afb0a6cb1..c7cbf132bfcb5c5e49b269ebfe5ef9a0 return (ExecutorService) object; } -@@ -157,6 +161,7 @@ public class SystemUtils { +@@ -157,6 +162,7 @@ public class SystemUtils { }); } diff --git a/Spigot-Server-Patches/0314-Prevent-rayTrace-from-loading-chunks.patch b/Spigot-Server-Patches/0314-Prevent-rayTrace-from-loading-chunks.patch index b490087b7b..0295326280 100644 --- a/Spigot-Server-Patches/0314-Prevent-rayTrace-from-loading-chunks.patch +++ b/Spigot-Server-Patches/0314-Prevent-rayTrace-from-loading-chunks.patch @@ -7,10 +7,10 @@ ray tracing into an unloaded chunk should be treated as a miss this saves a ton of lag for when AI tries to raytrace near unloaded chunks. diff --git a/src/main/java/net/minecraft/world/level/IBlockAccess.java b/src/main/java/net/minecraft/world/level/IBlockAccess.java -index f0b74dce1e0a3ca150251008247a14b380cde03d..b9b2764090134cba5fc3b9edca4e71f1ce772448 100644 +index e799765ecfada1eec78beb71651e52ad355a30aa..21ce19b9caf3150535a3f84027242a93bdd0d263 100644 --- a/src/main/java/net/minecraft/world/level/IBlockAccess.java +++ b/src/main/java/net/minecraft/world/level/IBlockAccess.java -@@ -56,7 +56,15 @@ public interface IBlockAccess { +@@ -58,7 +58,15 @@ public interface IBlockAccess { // CraftBukkit start - moved block handling into separate method for use by Block#rayTrace default MovingObjectPositionBlock rayTraceBlock(RayTrace raytrace1, BlockPosition blockposition) { diff --git a/Spigot-Server-Patches/0315-Handle-Large-Packets-disconnecting-client.patch b/Spigot-Server-Patches/0315-Handle-Large-Packets-disconnecting-client.patch index 40a6c15b04..9f62fd514e 100644 --- a/Spigot-Server-Patches/0315-Handle-Large-Packets-disconnecting-client.patch +++ b/Spigot-Server-Patches/0315-Handle-Large-Packets-disconnecting-client.patch @@ -88,10 +88,10 @@ index cd4493a023748264748d4e892815f14d8a7bd7f6..0783b0777c8d7788bbf6780b464b709b return false; } diff --git a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java -index 7b47d4f1cbf9f8646e0b1af9277cf341ea28a2b3..1119ee4f69a153852219b4e985e97a6b3175a8be 100644 +index 152118729b1a95dcae05d32aa4289034ba394226..0059ede4ba3ff271d47dd38ea87fddc2399aa008 100644 --- a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java +++ b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java -@@ -90,7 +90,7 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -91,7 +91,7 @@ public class PacketPlayOutMapChunk implements Packet { int i = packetdataserializer.i(); @@ -101,10 +101,18 @@ index 7b47d4f1cbf9f8646e0b1af9277cf341ea28a2b3..1119ee4f69a153852219b4e985e97a6b } else { this.f = new byte[i]; diff --git a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutWindowItems.java b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutWindowItems.java -index b90e35a0099a2482f8fc2998bd079fc2fe6439e6..c8c03532982c4d69ea1b070692bbc459f2b83b89 100644 +index b90e35a0099a2482f8fc2998bd079fc2fe6439e6..e540f95a370c627d3d81e0d3670049d01923559d 100644 --- a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutWindowItems.java +++ b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutWindowItems.java -@@ -13,6 +13,15 @@ public class PacketPlayOutWindowItems implements Packet { +@@ -4,6 +4,7 @@ import java.io.IOException; + import java.util.Iterator; + import java.util.List; + import net.minecraft.core.NonNullList; ++import net.minecraft.network.NetworkManager; + import net.minecraft.network.PacketDataSerializer; + import net.minecraft.network.protocol.Packet; + import net.minecraft.world.item.ItemStack; +@@ -13,6 +14,15 @@ public class PacketPlayOutWindowItems implements Packet { private int a; private List b; diff --git a/Spigot-Server-Patches/0316-force-entity-dismount-during-teleportation.patch b/Spigot-Server-Patches/0316-force-entity-dismount-during-teleportation.patch index d8bcf358b4..a755f055c4 100644 --- a/Spigot-Server-Patches/0316-force-entity-dismount-during-teleportation.patch +++ b/Spigot-Server-Patches/0316-force-entity-dismount-during-teleportation.patch @@ -20,7 +20,7 @@ this is going to be the best soultion all around. Improvements/suggestions welcome! diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index f05f24f2a5c4ba8dbb8572d113afc404259e73ed..cf63703f5f38b1531912d413b0ac16c23627ca34 100644 +index ae5fe4f71ea1cc231e5d87920c2243f4f4f581f1..bea8dd578cfd5532dd1b679a4ee4e6c74a416bba 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java @@ -1252,11 +1252,13 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -41,10 +41,10 @@ index f05f24f2a5c4ba8dbb8572d113afc404259e73ed..cf63703f5f38b1531912d413b0ac16c2 if (entity1 != entity && this.playerConnection != null) { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1f5ab7d43315fa3a67297eabea3bda257ed24a44..dca0bab93b5a1460c4741b0517b41490eb62703e 100644 +index f102ecb56ac04a5b840fa52e6d1ff9604598d58d..f0c18a55900774ba67eaf094f175a9e37c16e56c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2039,12 +2039,15 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2040,12 +2040,15 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } @@ -62,7 +62,7 @@ index 1f5ab7d43315fa3a67297eabea3bda257ed24a44..dca0bab93b5a1460c4741b0517b41490 } } -@@ -2099,7 +2102,10 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2100,7 +2103,10 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return true; // CraftBukkit } @@ -74,7 +74,7 @@ index 1f5ab7d43315fa3a67297eabea3bda257ed24a44..dca0bab93b5a1460c4741b0517b41490 if (entity.getVehicle() == this) { throw new IllegalStateException("Use x.stopRiding(y), not y.removePassenger(x)"); } else { -@@ -2109,7 +2115,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2110,7 +2116,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne if (getBukkitEntity() instanceof Vehicle && entity.getBukkitEntity() instanceof LivingEntity) { VehicleExitEvent event = new VehicleExitEvent( (Vehicle) getBukkitEntity(), @@ -83,7 +83,7 @@ index 1f5ab7d43315fa3a67297eabea3bda257ed24a44..dca0bab93b5a1460c4741b0517b41490 ); // Suppress during worldgen if (this.valid) { -@@ -2123,7 +2129,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2124,7 +2130,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } // CraftBukkit end // Spigot start @@ -114,10 +114,10 @@ index c189a7051240bb357acf5075c98206a258409b0c..58270f45de665b5c1cfd9fc548eadb26 this.a(entity); } diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index bed54f9732bbfe9edab81744276643da482785d3..6dc1d03e755cd4c268de71ebba7e771a640938c2 100644 +index 87374174dcbf9e7ee448a1cdd9a3528557c3a2ea..564dfa98c166fde509044e6e1938efb321ece53d 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -1036,9 +1036,11 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1039,9 +1039,11 @@ public abstract class EntityHuman extends EntityLiving { return -0.35D; } diff --git a/Spigot-Server-Patches/0318-Add-PlayerConnectionCloseEvent.patch b/Spigot-Server-Patches/0318-Add-PlayerConnectionCloseEvent.patch index baf4dc17cb..292fb6107f 100644 --- a/Spigot-Server-Patches/0318-Add-PlayerConnectionCloseEvent.patch +++ b/Spigot-Server-Patches/0318-Add-PlayerConnectionCloseEvent.patch @@ -34,7 +34,7 @@ how PlayerPreLoginEvent interacts with PlayerConnectionCloseEvent is undefined. diff --git a/src/main/java/net/minecraft/network/NetworkManager.java b/src/main/java/net/minecraft/network/NetworkManager.java -index dc788d75a6a34fbbae990609bfbbd13ca6cdee5a..2eefa21531c991ae76bf026087eb07280fbc939e 100644 +index dc788d75a6a34fbbae990609bfbbd13ca6cdee5a..6d40ade5a52383ed86d28d272c3dc83dbdcbd218 100644 --- a/src/main/java/net/minecraft/network/NetworkManager.java +++ b/src/main/java/net/minecraft/network/NetworkManager.java @@ -350,6 +350,26 @@ public class NetworkManager extends SimpleChannelInboundHandler> { @@ -46,7 +46,7 @@ index dc788d75a6a34fbbae990609bfbbd13ca6cdee5a..2eefa21531c991ae76bf026087eb0728 + if (packetListener instanceof PlayerConnection) { + /* Player was logged in */ + final PlayerConnection playerConnection = (PlayerConnection) packetListener; -+ new com.destroystokyo.paper.event.player.PlayerConnectionCloseEvent(playerConnection.player.uniqueID, ++ new com.destroystokyo.paper.event.player.PlayerConnectionCloseEvent(playerConnection.player.getUniqueID(), + playerConnection.player.getName(), ((java.net.InetSocketAddress)socketAddress).getAddress(), false).callEvent(); + } else if (packetListener instanceof LoginListener) { + /* Player is login stage */ @@ -65,10 +65,10 @@ index dc788d75a6a34fbbae990609bfbbd13ca6cdee5a..2eefa21531c991ae76bf026087eb0728 } diff --git a/src/main/java/net/minecraft/server/network/LoginListener.java b/src/main/java/net/minecraft/server/network/LoginListener.java -index 240fac47dedb726d86f5dd68cad35b91b8117be4..98ae77269b5aaad951b0e26da61e6f5eb7ec2818 100644 +index a3c989ef850919fa90590b942f037c1f6d519608..4dd2f7fb32b8618d752e0988acadcb41223c0e4c 100644 --- a/src/main/java/net/minecraft/server/network/LoginListener.java +++ b/src/main/java/net/minecraft/server/network/LoginListener.java -@@ -55,9 +55,9 @@ public class LoginListener implements PacketLoginInListener { +@@ -57,9 +57,9 @@ public class LoginListener implements PacketLoginInListener { private final byte[] e = new byte[4]; private final MinecraftServer server; public final NetworkManager networkManager; diff --git a/Spigot-Server-Patches/0320-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch b/Spigot-Server-Patches/0320-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch index 5e5f5d5a68..a6f3de44a8 100644 --- a/Spigot-Server-Patches/0320-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch +++ b/Spigot-Server-Patches/0320-Add-APIs-to-replace-OfflinePlayer-getLastPlayed.patch @@ -16,7 +16,7 @@ intent to remove) and replace it with two new methods, clearly named and documented as to their purpose. diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index cf63703f5f38b1531912d413b0ac16c23627ca34..66749184ec24d15af3aaa71e79475d2a3f51c843 100644 +index bea8dd578cfd5532dd1b679a4ee4e6c74a416bba..e3cc64e837fa9b9c1f1d95037b1a59f1d1f4e6ef 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java @@ -213,6 +213,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -28,10 +28,10 @@ index cf63703f5f38b1531912d413b0ac16c23627ca34..66749184ec24d15af3aaa71e79475d2a public boolean queueHealthUpdatePacket = false; public net.minecraft.network.protocol.game.PacketPlayOutUpdateHealth queuedHealthUpdatePacket; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 1dfa84dfb7b62c50081ad32b012d108a0b77b83c..e4be75fd348357de05cf3710e5643d74cd1d8123 100644 +index 3aaa6313a33865b9823aa38e5d0cce7edce04592..3ef632928bf93a8af5eccada3b1cc76354ed5617 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -167,6 +167,7 @@ public abstract class PlayerList { +@@ -168,6 +168,7 @@ public abstract class PlayerList { } public void a(NetworkManager networkmanager, EntityPlayer entityplayer) { @@ -106,7 +106,7 @@ index 9b8d7b176e288fa715177196e7aff92900d8567a..1e741158bbcc0991259436bec549b32d public Location getBedSpawnLocation() { NBTTagCompound data = getData(); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 5c3b83244e77c54d3de5cf56171a88c2952fcd13..515bd5a7512774d52d1e89afb7306a1f834b537a 100644 +index 91da1f4d933b991c73e04e077722382d02487e07..cd3987ec7569f4a2de1f66fc73b1ca6c19fa82aa 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -142,6 +142,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/Spigot-Server-Patches/0324-BlockDestroyEvent.patch b/Spigot-Server-Patches/0324-BlockDestroyEvent.patch index 219cca9805..c27cd38c27 100644 --- a/Spigot-Server-Patches/0324-BlockDestroyEvent.patch +++ b/Spigot-Server-Patches/0324-BlockDestroyEvent.patch @@ -11,10 +11,18 @@ floating in the air. This can replace many uses of BlockPhysicsEvent diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index b0044d97afca1f658c193278eed542a743f20668..a8899f2ff7c71e62cdbd8eefdca0c3a9905cdc98 100644 +index 88b1a0235bfc0b41ae1855f8900632e425730d1c..3b5ddc083719608e944bdefa38e1fd3909e8e200 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -552,8 +552,20 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -26,6 +26,7 @@ import net.minecraft.core.particles.ParticleParam; + import net.minecraft.network.protocol.Packet; + import net.minecraft.resources.MinecraftKey; + import net.minecraft.resources.ResourceKey; ++import net.minecraft.server.MCUtil; + import net.minecraft.server.MinecraftServer; + import net.minecraft.server.level.EntityPlayer; + import net.minecraft.server.level.PlayerChunk; +@@ -559,8 +560,20 @@ public abstract class World implements GeneratorAccess, AutoCloseable { return false; } else { Fluid fluid = this.getFluid(blockposition); diff --git a/Spigot-Server-Patches/0329-Optimize-Network-Manager-and-add-advanced-packet-sup.patch b/Spigot-Server-Patches/0329-Optimize-Network-Manager-and-add-advanced-packet-sup.patch index 8baec664a3..12e93d8f0e 100644 --- a/Spigot-Server-Patches/0329-Optimize-Network-Manager-and-add-advanced-packet-sup.patch +++ b/Spigot-Server-Patches/0329-Optimize-Network-Manager-and-add-advanced-packet-sup.patch @@ -28,10 +28,26 @@ and then catch exceptions and close if they fire. Part of this commit was authored by: Spottedleaf diff --git a/src/main/java/net/minecraft/network/NetworkManager.java b/src/main/java/net/minecraft/network/NetworkManager.java -index 2eefa21531c991ae76bf026087eb07280fbc939e..54a90c51f3090d0d2d6ea72b152829bc11d3ffbc 100644 +index 6d40ade5a52383ed86d28d272c3dc83dbdcbd218..8e591f75b2c80fdb7e012574e9d7c348f1ffc90d 100644 --- a/src/main/java/net/minecraft/network/NetworkManager.java +++ b/src/main/java/net/minecraft/network/NetworkManager.java -@@ -75,6 +75,10 @@ public class NetworkManager extends SimpleChannelInboundHandler> { +@@ -25,8 +25,15 @@ import net.minecraft.network.chat.ChatMessage; + import net.minecraft.network.chat.IChatBaseComponent; + import net.minecraft.network.protocol.EnumProtocolDirection; + import net.minecraft.network.protocol.Packet; ++import net.minecraft.network.protocol.game.PacketPlayOutBoss; ++import net.minecraft.network.protocol.game.PacketPlayOutChat; ++import net.minecraft.network.protocol.game.PacketPlayOutKeepAlive; + import net.minecraft.network.protocol.game.PacketPlayOutKickDisconnect; ++import net.minecraft.network.protocol.game.PacketPlayOutTabComplete; ++import net.minecraft.network.protocol.game.PacketPlayOutTitle; + import net.minecraft.server.CancelledPacketHandleException; ++import net.minecraft.server.MCUtil; ++import net.minecraft.server.level.EntityPlayer; + import net.minecraft.server.network.LoginListener; + import net.minecraft.server.network.PlayerConnection; + import net.minecraft.util.LazyInitVar; +@@ -75,6 +82,10 @@ public class NetworkManager extends SimpleChannelInboundHandler> { public int protocolVersion; public java.net.InetSocketAddress virtualHost; private static boolean enableExplicitFlush = Boolean.getBoolean("paper.explicit-flush"); @@ -42,7 +58,7 @@ index 2eefa21531c991ae76bf026087eb07280fbc939e..54a90c51f3090d0d2d6ea72b152829bc // Paper end public NetworkManager(EnumProtocolDirection enumprotocoldirection) { -@@ -98,6 +102,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { +@@ -98,6 +109,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { } public void setProtocol(EnumProtocol enumprotocol) { @@ -50,7 +66,7 @@ index 2eefa21531c991ae76bf026087eb07280fbc939e..54a90c51f3090d0d2d6ea72b152829bc this.channel.attr(NetworkManager.c).set(enumprotocol); this.channel.config().setAutoRead(true); NetworkManager.LOGGER.debug("Enabled auto read"); -@@ -168,19 +173,84 @@ public class NetworkManager extends SimpleChannelInboundHandler> { +@@ -168,19 +180,84 @@ public class NetworkManager extends SimpleChannelInboundHandler> { Validate.notNull(packetlistener, "packetListener", new Object[0]); this.packetListener = packetlistener; } @@ -140,7 +156,7 @@ index 2eefa21531c991ae76bf026087eb07280fbc939e..54a90c51f3090d0d2d6ea72b152829bc } private void dispatchPacket(Packet packet, @Nullable GenericFutureListener> genericFutureListener) { this.b(packet, genericFutureListener); } // Paper - OBFHELPER -@@ -194,51 +264,116 @@ public class NetworkManager extends SimpleChannelInboundHandler> { +@@ -194,51 +271,116 @@ public class NetworkManager extends SimpleChannelInboundHandler> { this.channel.config().setAutoRead(false); } @@ -267,7 +283,7 @@ index 2eefa21531c991ae76bf026087eb07280fbc939e..54a90c51f3090d0d2d6ea72b152829bc public void a() { this.p(); -@@ -271,9 +406,21 @@ public class NetworkManager extends SimpleChannelInboundHandler> { +@@ -271,9 +413,21 @@ public class NetworkManager extends SimpleChannelInboundHandler> { return this.socketAddress; } @@ -289,7 +305,7 @@ index 2eefa21531c991ae76bf026087eb07280fbc939e..54a90c51f3090d0d2d6ea72b152829bc // Spigot End if (this.channel.isOpen()) { this.channel.close(); // We can't wait as this may be called from an event loop. -@@ -341,7 +488,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { +@@ -341,7 +495,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { public void handleDisconnection() { if (this.channel != null && !this.channel.isOpen()) { if (this.o) { @@ -298,7 +314,7 @@ index 2eefa21531c991ae76bf026087eb07280fbc939e..54a90c51f3090d0d2d6ea72b152829bc } else { this.o = true; if (this.k() != null) { -@@ -349,7 +496,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { +@@ -349,7 +503,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { } else if (this.j() != null) { this.j().a(new ChatMessage("multiplayer.disconnect.generic")); } diff --git a/Spigot-Server-Patches/0330-Handle-Oversized-Tile-Entities-in-chunks.patch b/Spigot-Server-Patches/0330-Handle-Oversized-Tile-Entities-in-chunks.patch index a4bc530fb5..ee9073137c 100644 --- a/Spigot-Server-Patches/0330-Handle-Oversized-Tile-Entities-in-chunks.patch +++ b/Spigot-Server-Patches/0330-Handle-Oversized-Tile-Entities-in-chunks.patch @@ -9,10 +9,10 @@ creating too large of a packet to sed. Co authored by Spottedleaf diff --git a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java -index 1119ee4f69a153852219b4e985e97a6b3175a8be..31a6f687a8a75b055a32a686c870d3898aae54c3 100644 +index 0059ede4ba3ff271d47dd38ea87fddc2399aa008..a7d10d124021f3427f23fcd533f885367b64515c 100644 --- a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java +++ b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java -@@ -33,7 +33,15 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -34,7 +34,15 @@ public class PacketPlayOutMapChunk implements Packet { private boolean h; public PacketPlayOutMapChunk() {} @@ -28,7 +28,7 @@ index 1119ee4f69a153852219b4e985e97a6b3175a8be..31a6f687a8a75b055a32a686c870d389 public PacketPlayOutMapChunk(Chunk chunk, int i) { ChunkCoordIntPair chunkcoordintpair = chunk.getPos(); -@@ -60,6 +68,7 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -61,6 +69,7 @@ public class PacketPlayOutMapChunk implements Packet { this.c = this.a(new PacketDataSerializer(this.j()), chunk, i); this.g = Lists.newArrayList(); iterator = chunk.getTileEntities().entrySet().iterator(); @@ -36,7 +36,7 @@ index 1119ee4f69a153852219b4e985e97a6b3175a8be..31a6f687a8a75b055a32a686c870d389 while (iterator.hasNext()) { entry = (Entry) iterator.next(); -@@ -68,6 +77,15 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -69,6 +78,15 @@ public class PacketPlayOutMapChunk implements Packet { int j = blockposition.getY() >> 4; if (this.f() || (i & 1 << j) != 0) { diff --git a/Spigot-Server-Patches/0331-MC-145260-Fix-Whitelist-On-Off-inconsistency.patch b/Spigot-Server-Patches/0331-MC-145260-Fix-Whitelist-On-Off-inconsistency.patch index ebca24b23b..922aab5b43 100644 --- a/Spigot-Server-Patches/0331-MC-145260-Fix-Whitelist-On-Off-inconsistency.patch +++ b/Spigot-Server-Patches/0331-MC-145260-Fix-Whitelist-On-Off-inconsistency.patch @@ -11,10 +11,18 @@ everything to the Whitelist object. https://github.com/PaperMC/Paper/issues/1880 diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index e4be75fd348357de05cf3710e5643d74cd1d8123..1bbb846e2671fce67c79357f82a7fc42cc619c8a 100644 +index 3ef632928bf93a8af5eccada3b1cc76354ed5617..317c921eaf734e890706f962b29233e3306a13be 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1015,9 +1015,9 @@ public abstract class PlayerList { +@@ -55,6 +55,7 @@ import net.minecraft.network.protocol.game.PacketPlayOutViewDistance; + import net.minecraft.network.protocol.game.PacketPlayOutWorldBorder; + import net.minecraft.resources.ResourceKey; + import net.minecraft.server.AdvancementDataPlayer; ++import net.minecraft.server.MCUtil; + import net.minecraft.server.MinecraftServer; + import net.minecraft.server.ScoreboardServer; + import net.minecraft.server.level.DemoPlayerInteractManager; +@@ -1016,9 +1017,9 @@ public abstract class PlayerList { } public boolean isWhitelisted(GameProfile gameprofile, org.bukkit.event.player.PlayerLoginEvent loginEvent) { boolean isOp = this.operators.d(gameprofile); diff --git a/Spigot-Server-Patches/0333-Allow-Saving-of-Oversized-Chunks.patch b/Spigot-Server-Patches/0333-Allow-Saving-of-Oversized-Chunks.patch index 0acf5c492f..be548e855e 100644 --- a/Spigot-Server-Patches/0333-Allow-Saving-of-Oversized-Chunks.patch +++ b/Spigot-Server-Patches/0333-Allow-Saving-of-Oversized-Chunks.patch @@ -51,10 +51,10 @@ index f792ac1639e16522695082caed754b1c2cb333b9..9da608c9dde183ad813fa5b7643314ce a((NBTBase) nbttagcompound, dataoutput); } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -index 6efbb8a3502f86e105d4dfb9cef114a790966e95..7491c09b3d8fdd27fa83d850ff097e44e1bb0eee 100644 +index 6efbb8a3502f86e105d4dfb9cef114a790966e95..a9cbe17f6ccf0ce4ace97ba4b951b3fd7415d71b 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -@@ -19,6 +19,8 @@ import java.nio.file.LinkOption; +@@ -19,8 +19,12 @@ import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; @@ -62,8 +62,12 @@ index 6efbb8a3502f86e105d4dfb9cef114a790966e95..7491c09b3d8fdd27fa83d850ff097e44 + import javax.annotation.Nullable; import net.minecraft.SystemUtils; ++import net.minecraft.nbt.NBTCompressedStreamTools; ++import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.level.ChunkCoordIntPair; -@@ -37,6 +39,7 @@ public class RegionFile implements AutoCloseable { + import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; +@@ -37,6 +41,7 @@ public class RegionFile implements AutoCloseable { private final IntBuffer i; @VisibleForTesting protected final RegionFileBitSet freeSectors; @@ -71,16 +75,16 @@ index 6efbb8a3502f86e105d4dfb9cef114a790966e95..7491c09b3d8fdd27fa83d850ff097e44 public RegionFile(File file, File file1, boolean flag) throws IOException { this(file.toPath(), file1.toPath(), RegionFileCompression.b, flag); -@@ -44,6 +47,8 @@ public class RegionFile implements AutoCloseable { +@@ -44,6 +49,8 @@ public class RegionFile implements AutoCloseable { public RegionFile(Path path, Path path1, RegionFileCompression regionfilecompression, boolean flag) throws IOException { this.g = ByteBuffer.allocateDirect(8192); -+ this.file = java_nio_file_path.toFile(); // Paper ++ this.file = path.toFile(); // Paper + initOversizedState(); // Paper this.freeSectors = new RegionFileBitSet(); this.f = regionfilecompression; if (!Files.isDirectory(path1, new LinkOption[0])) { -@@ -407,6 +412,74 @@ public class RegionFile implements AutoCloseable { +@@ -407,6 +414,74 @@ public class RegionFile implements AutoCloseable { void run() throws IOException; } @@ -156,10 +160,21 @@ index 6efbb8a3502f86e105d4dfb9cef114a790966e95..7491c09b3d8fdd27fa83d850ff097e44 private final ChunkCoordIntPair b; diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java -index 13d0d6e7e03322f20ef5666d5299d26d51d1714c..571b34cd30bb76dcfac928e29a1cafd5824d4772 100644 +index 75b10a3755392870d8f5b51239a09a0e7fd75a42..ab9f4d40fd1126a3d7ba5b16fdc6ab09de4a7fdb 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java -@@ -49,6 +49,74 @@ public final class RegionFileCache implements AutoCloseable { +@@ -9,8 +9,10 @@ import java.io.DataOutputStream; + import java.io.File; + import java.io.IOException; + import javax.annotation.Nullable; ++import net.minecraft.nbt.NBTBase; + import net.minecraft.nbt.NBTCompressedStreamTools; + import net.minecraft.nbt.NBTTagCompound; ++import net.minecraft.nbt.NBTTagList; + import net.minecraft.server.MinecraftServer; + import net.minecraft.util.ExceptionSuppressor; + import net.minecraft.world.level.ChunkCoordIntPair; +@@ -50,6 +52,74 @@ public final class RegionFileCache implements AutoCloseable { } } @@ -234,7 +249,7 @@ index 13d0d6e7e03322f20ef5666d5299d26d51d1714c..571b34cd30bb76dcfac928e29a1cafd5 @Nullable public NBTTagCompound read(ChunkCoordIntPair chunkcoordintpair) throws IOException { // CraftBukkit start - SPIGOT-5680: There's no good reason to preemptively create files on read, save that for writing -@@ -58,6 +126,12 @@ public final class RegionFileCache implements AutoCloseable { +@@ -59,6 +129,12 @@ public final class RegionFileCache implements AutoCloseable { } // CraftBukkit end DataInputStream datainputstream = regionfile.a(chunkcoordintpair); @@ -247,7 +262,7 @@ index 13d0d6e7e03322f20ef5666d5299d26d51d1714c..571b34cd30bb76dcfac928e29a1cafd5 Throwable throwable = null; NBTTagCompound nbttagcompound; -@@ -98,6 +172,7 @@ public final class RegionFileCache implements AutoCloseable { +@@ -99,6 +175,7 @@ public final class RegionFileCache implements AutoCloseable { try { NBTCompressedStreamTools.a(nbttagcompound, (DataOutput) dataoutputstream); diff --git a/Spigot-Server-Patches/0334-Call-WhitelistToggleEvent-when-whitelist-is-toggled.patch b/Spigot-Server-Patches/0334-Call-WhitelistToggleEvent-when-whitelist-is-toggled.patch index e10e865a33..157897ec7b 100644 --- a/Spigot-Server-Patches/0334-Call-WhitelistToggleEvent-when-whitelist-is-toggled.patch +++ b/Spigot-Server-Patches/0334-Call-WhitelistToggleEvent-when-whitelist-is-toggled.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Call WhitelistToggleEvent when whitelist is toggled diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 1bbb846e2671fce67c79357f82a7fc42cc619c8a..587fb2246b1ede6d292afe42b826e32423ca3a56 100644 +index 317c921eaf734e890706f962b29233e3306a13be..aebde5e6ec24aff073dfd4eae1ce5a008134658a 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1133,6 +1133,7 @@ public abstract class PlayerList { +@@ -1135,6 +1135,7 @@ public abstract class PlayerList { } public void setHasWhitelist(boolean flag) { diff --git a/Spigot-Server-Patches/0335-Add-LivingEntity-getTargetEntity.patch b/Spigot-Server-Patches/0335-Add-LivingEntity-getTargetEntity.patch index 485ac99ccb..3e94f14b60 100644 --- a/Spigot-Server-Patches/0335-Add-LivingEntity-getTargetEntity.patch +++ b/Spigot-Server-Patches/0335-Add-LivingEntity-getTargetEntity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add LivingEntity#getTargetEntity diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index dca0bab93b5a1460c4741b0517b41490eb62703e..6f4dd6226a23323c1af95380a8d38ee6d19caf60 100644 +index f0c18a55900774ba67eaf094f175a9e37c16e56c..36e9a33d22fc2572e23e457adf62bd2bcebd10d3 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1503,6 +1503,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1504,6 +1504,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return this.c(f - 90.0F, f1); } @@ -16,7 +16,7 @@ index dca0bab93b5a1460c4741b0517b41490eb62703e..6f4dd6226a23323c1af95380a8d38ee6 public final Vec3D j(float f) { if (f == 1.0F) { return new Vec3D(this.locX(), this.getHeadY(), this.locZ()); -@@ -2148,6 +2149,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2149,6 +2150,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return this.getPassengers().size() < 1; } @@ -25,10 +25,18 @@ index dca0bab93b5a1460c4741b0517b41490eb62703e..6f4dd6226a23323c1af95380a8d38ee6 return 0.0F; } diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index 58270f45de665b5c1cfd9fc548eadb263ad230e9..8a0d125bc1cf3a75141a286f0c9fb553827e556f 100644 +index 58270f45de665b5c1cfd9fc548eadb263ad230e9..ecceb272028e1ae1dd40c0c39d6f687fccfabb58 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java -@@ -3637,6 +3637,37 @@ public abstract class EntityLiving extends Entity { +@@ -108,6 +108,7 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParameterSet + import net.minecraft.world.level.storage.loot.parameters.LootContextParameters; + import net.minecraft.world.phys.AxisAlignedBB; + import net.minecraft.world.phys.MovingObjectPosition; ++import net.minecraft.world.phys.MovingObjectPositionEntity; + import net.minecraft.world.phys.Vec3D; + import net.minecraft.world.scores.ScoreboardTeam; + import org.apache.logging.log4j.Logger; +@@ -3637,6 +3638,37 @@ public abstract class EntityLiving extends Entity { return world.rayTrace(raytrace); } @@ -120,33 +128,53 @@ index 3941dd33da4b5c09d0087143f1d8a2d76fc18792..62513c812b497bb9d8dafe1d9c2f5740 double[] adouble = new double[]{1.0D}; double d0 = vec3d1.x - vec3d.x; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index a60a12a7705be29b6f318c587e1c6149b89d86c3..aa08ca83a105627b7e257ac664c29d899b557e9e 100644 +index c692626b747008a5418ecabf550fc67e3b676f5b..ff586b8366a6298f1906551b068e8abb26fcabc7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -221,6 +221,33 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { - new com.destroystokyo.paper.block.TargetBlockInfo(org.bukkit.craftbukkit.block.CraftBlock.at(getHandle().world, ((net.minecraft.server.MovingObjectPositionBlock)rayTrace).getBlockPosition()), - net.minecraft.server.MCUtil.toBukkitBlockFace(((net.minecraft.server.MovingObjectPositionBlock)rayTrace).getDirection())); +@@ -1,6 +1,7 @@ + package org.bukkit.craftbukkit.entity; + + import com.destroystokyo.paper.block.TargetBlockInfo; ++import com.destroystokyo.paper.entity.TargetEntityInfo; + import com.google.common.base.Preconditions; + import com.google.common.collect.Sets; + import java.util.ArrayList; +@@ -42,8 +43,11 @@ import net.minecraft.world.entity.projectile.EntityThrownExpBottle; + import net.minecraft.world.entity.projectile.EntityThrownTrident; + import net.minecraft.world.entity.projectile.EntityTippedArrow; + import net.minecraft.world.entity.projectile.EntityWitherSkull; ++import net.minecraft.world.level.RayTrace; + import net.minecraft.world.phys.MovingObjectPosition; + import net.minecraft.world.phys.MovingObjectPositionBlock; ++import net.minecraft.world.phys.MovingObjectPositionEntity; ++import net.minecraft.world.phys.Vec3D; + import org.apache.commons.lang.Validate; + import org.bukkit.FluidCollisionMode; + import org.bukkit.Location; +@@ -227,6 +231,33 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { + new TargetBlockInfo(CraftBlock.at(getHandle().world, ((MovingObjectPositionBlock)rayTrace).getBlockPosition()), + MCUtil.toBukkitBlockFace(((MovingObjectPositionBlock)rayTrace).getDirection())); } + + public Entity getTargetEntity(int maxDistance, boolean ignoreBlocks) { -+ net.minecraft.server.MovingObjectPositionEntity rayTrace = rayTraceEntity(maxDistance, ignoreBlocks); ++ MovingObjectPositionEntity rayTrace = rayTraceEntity(maxDistance, ignoreBlocks); + return rayTrace == null ? null : rayTrace.getEntity().getBukkitEntity(); + } + -+ public com.destroystokyo.paper.entity.TargetEntityInfo getTargetEntityInfo(int maxDistance, boolean ignoreBlocks) { -+ net.minecraft.server.MovingObjectPositionEntity rayTrace = rayTraceEntity(maxDistance, ignoreBlocks); -+ return rayTrace == null ? null : new com.destroystokyo.paper.entity.TargetEntityInfo(rayTrace.getEntity().getBukkitEntity(), new org.bukkit.util.Vector(rayTrace.getPos().x, rayTrace.getPos().y, rayTrace.getPos().z)); ++ public TargetEntityInfo getTargetEntityInfo(int maxDistance, boolean ignoreBlocks) { ++ MovingObjectPositionEntity rayTrace = rayTraceEntity(maxDistance, ignoreBlocks); ++ return rayTrace == null ? null : new TargetEntityInfo(rayTrace.getEntity().getBukkitEntity(), new org.bukkit.util.Vector(rayTrace.getPos().x, rayTrace.getPos().y, rayTrace.getPos().z)); + } + -+ public net.minecraft.server.MovingObjectPositionEntity rayTraceEntity(int maxDistance, boolean ignoreBlocks) { -+ net.minecraft.server.MovingObjectPositionEntity rayTrace = getHandle().getTargetEntity(maxDistance); ++ public MovingObjectPositionEntity rayTraceEntity(int maxDistance, boolean ignoreBlocks) { ++ MovingObjectPositionEntity rayTrace = getHandle().getTargetEntity(maxDistance); + if (rayTrace == null) { + return null; + } + if (!ignoreBlocks) { -+ net.minecraft.server.MovingObjectPosition rayTraceBlocks = getHandle().getRayTrace(maxDistance, net.minecraft.server.RayTrace.FluidCollisionOption.NONE); ++ MovingObjectPosition rayTraceBlocks = getHandle().getRayTrace(maxDistance, RayTrace.FluidCollisionOption.NONE); + if (rayTraceBlocks != null) { -+ net.minecraft.server.Vec3D eye = getHandle().getEyePosition(1.0F); ++ Vec3D eye = getHandle().getEyePosition(1.0F); + if (eye.distanceSquared(rayTraceBlocks.getPos()) <= eye.distanceSquared(rayTrace.getPos())) { + return null; + } diff --git a/Spigot-Server-Patches/0337-Entity-getEntitySpawnReason.patch b/Spigot-Server-Patches/0337-Entity-getEntitySpawnReason.patch index a90b4332a8..f72125e570 100644 --- a/Spigot-Server-Patches/0337-Entity-getEntitySpawnReason.patch +++ b/Spigot-Server-Patches/0337-Entity-getEntitySpawnReason.patch @@ -10,7 +10,7 @@ persistenting Living Entity, SPAWNER for spawners, or DEFAULT since data was not stored. diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 690e40aeed96a8d83e86c9aff0e910f6aa97c1c9..2a510940525fda83707e2a587e18ce34e5822af1 100644 +index ab18969083e89eb2016c6a6bffc06f4e83c9f753..53359f5ca7a1098f78e683ebad142d5bcca51782 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -1039,6 +1039,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -22,10 +22,10 @@ index 690e40aeed96a8d83e86c9aff0e910f6aa97c1c9..2a510940525fda83707e2a587e18ce34 if (entity.valid) { MinecraftServer.LOGGER.error("Attempted Double World add on " + entity, new Throwable()); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 587fb2246b1ede6d292afe42b826e32423ca3a56..59155d9b39ed6b27dd46ea586ab07360840db5e7 100644 +index aebde5e6ec24aff073dfd4eae1ce5a008134658a..ea6c5c9305994e64831c5444666c22a96f9d36da 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -333,7 +333,7 @@ public abstract class PlayerList { +@@ -335,7 +335,7 @@ public abstract class PlayerList { // CraftBukkit start WorldServer finalWorldServer = worldserver1; Entity entity = EntityTypes.a(nbttagcompound1.getCompound("Entity"), finalWorldServer, (entity1) -> { @@ -35,10 +35,19 @@ index 587fb2246b1ede6d292afe42b826e32423ca3a56..59155d9b39ed6b27dd46ea586ab07360 }); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 6f4dd6226a23323c1af95380a8d38ee6d19caf60..f024db3fe2a9fb9af536fe144b9e871712ae327a 100644 +index 36e9a33d22fc2572e23e457adf62bd2bcebd10d3..37b9915e6c25458e9ec2d0beb40be51991276b8d 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -157,6 +157,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -63,6 +63,8 @@ import net.minecraft.world.EnumHand; + import net.minecraft.world.EnumInteractionResult; + import net.minecraft.world.INamableTileEntity; + import net.minecraft.world.damagesource.DamageSource; ++import net.minecraft.world.entity.animal.EntityAnimal; ++import net.minecraft.world.entity.animal.EntityFish; + import net.minecraft.world.entity.item.EntityItem; + import net.minecraft.world.entity.player.EntityHuman; + import net.minecraft.world.entity.vehicle.EntityBoat; +@@ -158,6 +160,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } }; List entitySlice = null; @@ -46,7 +55,7 @@ index 6f4dd6226a23323c1af95380a8d38ee6d19caf60..f024db3fe2a9fb9af536fe144b9e8717 // Paper end public com.destroystokyo.paper.loottable.PaperLootableInventoryData lootableData; // Paper -@@ -1672,6 +1673,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1673,6 +1676,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne if (this.origin != null) { nbttagcompound.set("Paper.Origin", this.createList(origin.getX(), origin.getY(), origin.getZ())); } @@ -56,7 +65,7 @@ index 6f4dd6226a23323c1af95380a8d38ee6d19caf60..f024db3fe2a9fb9af536fe144b9e8717 // Save entity's from mob spawner status if (spawnedViaMobSpawner) { nbttagcompound.setBoolean("Paper.FromMobSpawner", true); -@@ -1806,6 +1810,26 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1807,6 +1813,26 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } spawnedViaMobSpawner = nbttagcompound.getBoolean("Paper.FromMobSpawner"); // Restore entity's from mob spawner status diff --git a/Spigot-Server-Patches/0338-Update-entity-Metadata-for-all-tracked-players.patch b/Spigot-Server-Patches/0338-Update-entity-Metadata-for-all-tracked-players.patch index 47706b2104..aae7abf5fd 100644 --- a/Spigot-Server-Patches/0338-Update-entity-Metadata-for-all-tracked-players.patch +++ b/Spigot-Server-Patches/0338-Update-entity-Metadata-for-all-tracked-players.patch @@ -22,7 +22,7 @@ index 44b79c97d5cc7570683e1b7f025b4f3ad65beb81..bcc1103e21cc10d5b405a2b89f3dfe78 this.f.accept(packet); if (this.tracker instanceof EntityPlayer) { diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 8f442eae6519c3d0658e6ed77ecfa7aa8161a0f2..b207f4056a274d4115e96d88def3eea7fdf6c0d4 100644 +index 8f442eae6519c3d0658e6ed77ecfa7aa8161a0f2..5d4ab95ca7498671888580f68382667c2282d604 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java @@ -2285,7 +2285,14 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -31,7 +31,7 @@ index 8f442eae6519c3d0658e6ed77ecfa7aa8161a0f2..b207f4056a274d4115e96d88def3eea7 // Refresh the current entity metadata - this.sendPacket(new PacketPlayOutEntityMetadata(entity.getId(), entity.getDataWatcher(), true)); + // Paper start - update entity for all players -+ PacketPlayOutEntityMetadata packet = new PacketPlayOutEntityMetadata(entity.getId(), entity.datawatcher, true); ++ PacketPlayOutEntityMetadata packet = new PacketPlayOutEntityMetadata(entity.getId(), entity.getDataWatcher(), true); + if (entity.tracker != null) { + entity.tracker.broadcast(packet); + } else { diff --git a/Spigot-Server-Patches/0339-Implement-PlayerPostRespawnEvent.patch b/Spigot-Server-Patches/0339-Implement-PlayerPostRespawnEvent.patch index c8912abcdd..1b1cb8bbc5 100644 --- a/Spigot-Server-Patches/0339-Implement-PlayerPostRespawnEvent.patch +++ b/Spigot-Server-Patches/0339-Implement-PlayerPostRespawnEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement PlayerPostRespawnEvent diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 59155d9b39ed6b27dd46ea586ab07360840db5e7..85bb7fc6d4b65ffb2923d5a6776ebe7a89605024 100644 +index ea6c5c9305994e64831c5444666c22a96f9d36da..ae0aaaf129c44901ac72c67e50c663333ab57f9d 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -739,9 +739,14 @@ public abstract class PlayerList { +@@ -741,9 +741,14 @@ public abstract class PlayerList { // this.a(entityplayer1, entityplayer, worldserver1); // CraftBukkit - removed boolean flag2 = false; @@ -24,7 +24,7 @@ index 59155d9b39ed6b27dd46ea586ab07360840db5e7..85bb7fc6d4b65ffb2923d5a6776ebe7a WorldServer worldserver1 = this.server.getWorldServer(entityplayer.getSpawnDimension()); if (worldserver1 != null) { Optional optional; -@@ -792,6 +797,7 @@ public abstract class PlayerList { +@@ -794,6 +799,7 @@ public abstract class PlayerList { location = respawnEvent.getRespawnLocation(); if (!flag) entityplayer.reset(); // SPIGOT-4785 @@ -32,7 +32,7 @@ index 59155d9b39ed6b27dd46ea586ab07360840db5e7..85bb7fc6d4b65ffb2923d5a6776ebe7a } else { location.setWorld(worldserver.getWorld()); } -@@ -849,6 +855,13 @@ public abstract class PlayerList { +@@ -851,6 +857,13 @@ public abstract class PlayerList { if (entityplayer.playerConnection.isDisconnected()) { this.savePlayerFile(entityplayer); } diff --git a/Spigot-Server-Patches/0343-Optimize-Captured-TileEntity-Lookup.patch b/Spigot-Server-Patches/0343-Optimize-Captured-TileEntity-Lookup.patch index 82616bc785..bcc3098364 100644 --- a/Spigot-Server-Patches/0343-Optimize-Captured-TileEntity-Lookup.patch +++ b/Spigot-Server-Patches/0343-Optimize-Captured-TileEntity-Lookup.patch @@ -10,10 +10,10 @@ Optimize to check if the captured list even has values in it, and also to just do a get call since the value can never be null. diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index a8899f2ff7c71e62cdbd8eefdca0c3a9905cdc98..7a432d94607e5f7394c493cce69c4957b7f8a01e 100644 +index 3b5ddc083719608e944bdefa38e1fd3909e8e200..b6b9a471426ddf911a1f6bf38543c0304bfc31f6 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -960,12 +960,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -968,12 +968,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable { return null; } else { // CraftBukkit start diff --git a/Spigot-Server-Patches/0344-Add-Heightmap-API.patch b/Spigot-Server-Patches/0344-Add-Heightmap-API.patch index 6dc669f826..4e7df82f3f 100644 --- a/Spigot-Server-Patches/0344-Add-Heightmap-API.patch +++ b/Spigot-Server-Patches/0344-Add-Heightmap-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add Heightmap API diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 7a432d94607e5f7394c493cce69c4957b7f8a01e..12330f20a8550ec044562e2135c465a9fc8e1d60 100644 +index b6b9a471426ddf911a1f6bf38543c0304bfc31f6..12ac3608736b45447afe6b0d35ead1441390be5e 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -662,8 +662,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -670,8 +670,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { } } diff --git a/Spigot-Server-Patches/0345-Mob-Spawner-API-Enhancements.patch b/Spigot-Server-Patches/0345-Mob-Spawner-API-Enhancements.patch index ff42c8619f..bfe2528d28 100644 --- a/Spigot-Server-Patches/0345-Mob-Spawner-API-Enhancements.patch +++ b/Spigot-Server-Patches/0345-Mob-Spawner-API-Enhancements.patch @@ -82,17 +82,24 @@ index ca753267a06643b6f7224140950aa7f47cea64ad..bd4c7dbfad80b65c1350e93bb8303bf1 nbttagcompound.setShort("MaxNearbyEntities", (short) this.maxNearbyEntities); nbttagcompound.setShort("RequiredPlayerRange", (short) this.requiredPlayerRange); diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java b/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java -index 28295ebd338806a35cbef164cb014abfe7dae769..e1a6048899e82184ac1a2d3480b65e6d0df163ad 100644 +index 28295ebd338806a35cbef164cb014abfe7dae769..3d29be926e36b9a5a981eea1f2a1ec54a4c43393 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java -@@ -8,6 +8,14 @@ import org.bukkit.Material; +@@ -1,13 +1,21 @@ + package org.bukkit.craftbukkit.block; + + import com.google.common.base.Preconditions; ++import net.minecraft.core.IRegistry; ++import net.minecraft.nbt.NBTTagCompound; + import net.minecraft.resources.MinecraftKey; + import net.minecraft.world.entity.EntityTypes; ++import net.minecraft.world.level.MobSpawnerData; + import net.minecraft.world.level.block.entity.TileEntityMobSpawner; + import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.entity.EntityType; +// Paper start -+import net.minecraft.server.IRegistry; -+import net.minecraft.server.MobSpawnerData; -+import net.minecraft.server.NBTTagCompound; +import org.bukkit.craftbukkit.inventory.CraftItemStack; +import org.bukkit.craftbukkit.util.CraftMagicNumbers; +import org.bukkit.inventory.ItemStack; @@ -119,7 +126,7 @@ index 28295ebd338806a35cbef164cb014abfe7dae769..e1a6048899e82184ac1a2d3480b65e6d + @Override + public void setSpawnedItem(ItemStack itemStack) { + Preconditions.checkArgument(itemStack != null && !itemStack.getType().isAir(), "spawners cannot spawn air"); -+ net.minecraft.server.ItemStack item = CraftItemStack.asNMSCopy(itemStack); ++ net.minecraft.world.item.ItemStack item = CraftItemStack.asNMSCopy(itemStack); + NBTTagCompound compound = new NBTTagCompound(); + NBTTagCompound entity = new NBTTagCompound(); + entity.setString("id", IRegistry.ENTITY_TYPE.getKey(EntityTypes.ITEM).toString()); diff --git a/Spigot-Server-Patches/0351-Duplicate-UUID-Resolve-Option.patch b/Spigot-Server-Patches/0351-Duplicate-UUID-Resolve-Option.patch index 3bba75a6e9..385ae1b329 100644 --- a/Spigot-Server-Patches/0351-Duplicate-UUID-Resolve-Option.patch +++ b/Spigot-Server-Patches/0351-Duplicate-UUID-Resolve-Option.patch @@ -81,7 +81,7 @@ index fbf3ccfb347a5ba6e895339e9576629d940d1aa4..38d25a12c6a52d8a83214e2a0f43a218 + } } diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index f0347a71b5937f9b68a4024fd0595a2d3e98eef5..90a3ca4e92fefc1f20b2878686030e9123238384 100644 +index c4dd2bac48bb93117925b35dcd753d0fbb22e3cf..aeed11cfee42fbde2c2e5731f46ac24de6469e0e 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java @@ -1,6 +1,7 @@ @@ -110,7 +110,15 @@ index f0347a71b5937f9b68a4024fd0595a2d3e98eef5..90a3ca4e92fefc1f20b2878686030e91 import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; import java.util.concurrent.Executor; -@@ -696,12 +700,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -73,6 +77,7 @@ import net.minecraft.world.entity.boss.EntityComplexPart; + import net.minecraft.world.entity.player.EntityHuman; + import net.minecraft.world.level.ChunkCoordIntPair; + import net.minecraft.world.level.GameRules; ++import net.minecraft.world.level.World; + import net.minecraft.world.level.chunk.Chunk; + import net.minecraft.world.level.chunk.ChunkConverter; + import net.minecraft.world.level.chunk.ChunkGenerator; +@@ -697,12 +702,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // CraftBukkit start - these are spawned serialized (DefinedStructure) and we don't call an add event below at the moment due to ordering complexities boolean needsRemoval = false; if (chunk.needsDecoration && !this.world.getServer().getServer().getSpawnNPCs() && entity instanceof net.minecraft.world.entity.npc.NPC) { @@ -127,7 +135,7 @@ index f0347a71b5937f9b68a4024fd0595a2d3e98eef5..90a3ca4e92fefc1f20b2878686030e91 if (list == null) { list = Lists.newArrayList(new Entity[]{entity}); } else { -@@ -728,6 +732,44 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -729,6 +734,44 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { }); } @@ -139,7 +147,7 @@ index f0347a71b5937f9b68a4024fd0595a2d3e98eef5..90a3ca4e92fefc1f20b2878686030e91 + && mode != PaperWorldConfig.DuplicateUUIDMode.SAFE_REGEN) { + return; + } -+ Entity other = world.getEntity(entity.uniqueID); ++ Entity other = world.getEntity(entity.getUniqueID()); + + if (mode == PaperWorldConfig.DuplicateUUIDMode.SAFE_REGEN && other != null && !other.dead + && Objects.equals(other.getSaveID(), entity.getSaveID()) @@ -173,7 +181,7 @@ index f0347a71b5937f9b68a4024fd0595a2d3e98eef5..90a3ca4e92fefc1f20b2878686030e91 ChunkCoordIntPair chunkcoordintpair = playerchunk.i(); CompletableFuture, PlayerChunk.Failure>> completablefuture = this.a(chunkcoordintpair, 1, (i) -> { diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index b8f0ea863b89bf9ddeef8104d09fe7f00b91f711..a6f3f773a2fbbf98f9ef1eb03a6b392fb9082d25 100644 +index edae7ff7d181a5d28e083e714112dc3188b2461f..44611304d5bf222900866319a02a333e0f56218d 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -4,6 +4,8 @@ import com.google.common.annotations.VisibleForTesting; @@ -209,10 +217,10 @@ index b8f0ea863b89bf9ddeef8104d09fe7f00b91f711..a6f3f773a2fbbf98f9ef1eb03a6b392f } } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f024db3fe2a9fb9af536fe144b9e871712ae327a..abfda88ab1d0353bbb14ae99dea212941ab2e899 100644 +index 37b9915e6c25458e9ec2d0beb40be51991276b8d..63268bc3e04ef334a750f83a8e39acc0919f7906 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2796,6 +2796,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2799,6 +2799,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne }); } diff --git a/Spigot-Server-Patches/0353-Configurable-Keep-Spawn-Loaded-range-per-world.patch b/Spigot-Server-Patches/0353-Configurable-Keep-Spawn-Loaded-range-per-world.patch index 8ca3b63056..9bb44b2ba9 100644 --- a/Spigot-Server-Patches/0353-Configurable-Keep-Spawn-Loaded-range-per-world.patch +++ b/Spigot-Server-Patches/0353-Configurable-Keep-Spawn-Loaded-range-per-world.patch @@ -75,10 +75,18 @@ index 00dbb5382aa6efec0038a45049716cd44c1f4c79..e4b7bd30117e0a3af50ec28aada604df if (true) { WorldServer worldserver1 = worldserver; diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index a6f3f773a2fbbf98f9ef1eb03a6b392fb9082d25..bfcd40c0cf7f3b41601d4c422e75690a20860bf0 100644 +index 44611304d5bf222900866319a02a333e0f56218d..16441006736abdea0120570557348be4919c82ad 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -1672,12 +1672,88 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -67,6 +67,7 @@ import net.minecraft.network.protocol.game.PacketPlayOutWorldEvent; + import net.minecraft.network.protocol.game.PacketPlayOutWorldParticles; + import net.minecraft.resources.MinecraftKey; + import net.minecraft.resources.ResourceKey; ++import net.minecraft.server.MCUtil; + import net.minecraft.server.MinecraftServer; + import net.minecraft.server.ScoreboardServer; + import net.minecraft.server.level.progress.WorldLoadListener; +@@ -1672,12 +1673,88 @@ public class WorldServer extends World implements GeneratorAccessSeed { return ((PersistentIdCounts) this.getMinecraftServer().E().getWorldPersistentData().a(PersistentIdCounts::new, "idcounts")).a(); } diff --git a/Spigot-Server-Patches/0357-Chunk-debug-command.patch b/Spigot-Server-Patches/0357-Chunk-debug-command.patch index 5094f6fa9f..a8b19fb2f7 100644 --- a/Spigot-Server-Patches/0357-Chunk-debug-command.patch +++ b/Spigot-Server-Patches/0357-Chunk-debug-command.patch @@ -208,12 +208,26 @@ index b67bd98cca4a06bc0ebaed577195dffc3b3251ec..a7a02072e5c7ce62cbecbb638fcc74ab * Ported from MinecraftForge - author: LexManos - License: LGPLv2.1 */ diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java -index 67806eaab081e938cd99a0d74225b1b7744ff2d7..5f8b8b5fac14983fbeb64ce3f09bf9a885179e8c 100644 +index 35d1444c5b75d9a3a6cface5dd70aea0a08ac89d..fbd33aef21b4539d249c367609a36491530fb7ca 100644 --- a/src/main/java/net/minecraft/server/MCUtil.java +++ b/src/main/java/net/minecraft/server/MCUtil.java -@@ -13,7 +13,13 @@ import net.minecraft.world.level.ChunkCoordIntPair; +@@ -9,13 +9,27 @@ import net.minecraft.core.BlockPosition; + import net.minecraft.core.EnumDirection; + import net.minecraft.nbt.NBTTagCompound; + import net.minecraft.network.chat.IChatBaseComponent; ++import net.minecraft.server.level.ChunkMapDistance; ++import net.minecraft.server.level.ChunkProviderServer; ++import net.minecraft.server.level.EntityPlayer; ++import net.minecraft.server.level.PlayerChunk; ++import net.minecraft.server.level.PlayerChunkMap; ++import net.minecraft.server.level.Ticket; + import net.minecraft.server.level.WorldServer; + import net.minecraft.world.entity.Entity; + import net.minecraft.world.level.ChunkCoordIntPair; import net.minecraft.world.level.RayTrace; import net.minecraft.world.level.World; ++import net.minecraft.world.level.chunk.ChunkStatus; ++import net.minecraft.world.level.chunk.IChunkAccess; import org.apache.commons.lang.exception.ExceptionUtils; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; @@ -225,7 +239,7 @@ index 67806eaab081e938cd99a0d74225b1b7744ff2d7..5f8b8b5fac14983fbeb64ce3f09bf9a8 import org.bukkit.Location; import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.CraftWorld; -@@ -22,8 +28,11 @@ import org.spigotmc.AsyncCatcher; +@@ -24,8 +38,11 @@ import org.spigotmc.AsyncCatcher; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -237,7 +251,7 @@ index 67806eaab081e938cd99a0d74225b1b7744ff2d7..5f8b8b5fac14983fbeb64ce3f09bf9a8 import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.LinkedBlockingQueue; -@@ -529,4 +538,170 @@ public final class MCUtil { +@@ -531,4 +548,170 @@ public final class MCUtil { return null; } @@ -409,7 +423,7 @@ index 67806eaab081e938cd99a0d74225b1b7744ff2d7..5f8b8b5fac14983fbeb64ce3f09bf9a8 + } } diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index eb576566708d50c002e73aa746d2bc58b9b04c2b..0b2973a7272890ebee205bd74e7d75c174ceeb9a 100644 +index eb576566708d50c002e73aa746d2bc58b9b04c2b..b80c3bd702141ca4a88078386845d731b3ecc539 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java @@ -46,7 +46,7 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; // Paper @@ -417,7 +431,7 @@ index eb576566708d50c002e73aa746d2bc58b9b04c2b..0b2973a7272890ebee205bd74e7d75c1 public class ChunkProviderServer extends IChunkProvider { - private static final List b = ChunkStatus.a(); -+ private static final List b = ChunkStatus.a(); static final List getPossibleChunkStatuses() { return ChunkProviderServer.b; } // Paper - OBFHELPER ++ private static final List b = ChunkStatus.a(); public static final List getPossibleChunkStatuses() { return ChunkProviderServer.b; } // Paper - OBFHELPER private final ChunkMapDistance chunkMapDistance; public final ChunkGenerator chunkGenerator; private final WorldServer world; @@ -435,15 +449,15 @@ index 2c3d9a5d118cc4f3b5e78daf943911bb7386488a..9891cf98f8c740f84f9135ee8176e67a private final ShortSet[] dirtyBlocks; private int r; diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 90a3ca4e92fefc1f20b2878686030e9123238384..bdcc4542eb5da0a80f00a1d41d4773bb3be3996a 100644 +index aeed11cfee42fbde2c2e5731f46ac24de6469e0e..a0fcd20d4a7e951437756edb60a44c627612e04c 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -104,7 +104,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -106,7 +106,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public final Long2ObjectLinkedOpenHashMap updatingChunks = new Long2ObjectLinkedOpenHashMap(); public volatile Long2ObjectLinkedOpenHashMap visibleChunks; private final Long2ObjectLinkedOpenHashMap pendingUnload; - private final LongSet loadedChunks; -+ final LongSet loadedChunks; // Paper - private -> package ++ public final LongSet loadedChunks; // Paper - private -> public public final WorldServer world; private final LightEngineThreaded lightEngine; private final IAsyncTaskHandler executor; diff --git a/Spigot-Server-Patches/0359-Fix-World-isChunkGenerated-calls.patch b/Spigot-Server-Patches/0359-Fix-World-isChunkGenerated-calls.patch index b921c3b65e..0e8c6f91d3 100644 --- a/Spigot-Server-Patches/0359-Fix-World-isChunkGenerated-calls.patch +++ b/Spigot-Server-Patches/0359-Fix-World-isChunkGenerated-calls.patch @@ -8,7 +8,7 @@ This patch also adds a chunk status cache on region files (note that its only purpose is to cache the status on DISK) diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 0b2973a7272890ebee205bd74e7d75c174ceeb9a..24b7b76e11cf2b389c6f40fb4046294f356164c5 100644 +index b80c3bd702141ca4a88078386845d731b3ecc539..c6acc429fd0a599c1c1ab676054d9e3f720fbd39 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java @@ -52,7 +52,7 @@ public class ChunkProviderServer extends IChunkProvider { @@ -67,10 +67,10 @@ index 9891cf98f8c740f84f9135ee8176e67abb648b3a..6bced8533df49d7bfdb32dfa0caad9d7 public CompletableFuture> getStatusFutureUnchecked(ChunkStatus chunkstatus) { diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index bdcc4542eb5da0a80f00a1d41d4773bb3be3996a..c8b2013791ce0ac4438243998b43bbd781405254 100644 +index a0fcd20d4a7e951437756edb60a44c627612e04c..ccfde274edfe1b611ccf8c583c92b16d52e4518d 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -983,12 +983,61 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -985,12 +985,61 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } @Nullable @@ -200,10 +200,18 @@ index 247d14a3ca56734bbbf4dc0ec247d60a1f241e7a..d785f44cd503d4d91589f3fc4bc8dc80 @Nullable private PersistentStructureLegacy c; diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -index 7491c09b3d8fdd27fa83d850ff097e44e1bb0eee..299806b73e44a7128e829b35cc2b017a321d7926 100644 +index a9cbe17f6ccf0ce4ace97ba4b951b3fd7415d71b..39d3a71f3945b1c97df35e28d1011b9d42b162f5 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -@@ -41,6 +41,30 @@ public class RegionFile implements AutoCloseable { +@@ -26,6 +26,7 @@ import net.minecraft.SystemUtils; + import net.minecraft.nbt.NBTCompressedStreamTools; + import net.minecraft.nbt.NBTTagCompound; + import net.minecraft.world.level.ChunkCoordIntPair; ++import net.minecraft.world.level.chunk.ChunkStatus; + import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; + +@@ -43,6 +44,30 @@ public class RegionFile implements AutoCloseable { protected final RegionFileBitSet freeSectors; public final File file; // Paper @@ -234,7 +242,7 @@ index 7491c09b3d8fdd27fa83d850ff097e44e1bb0eee..299806b73e44a7128e829b35cc2b017a public RegionFile(File file, File file1, boolean flag) throws IOException { this(file.toPath(), file1.toPath(), RegionFileCompression.b, flag); } -@@ -377,11 +401,13 @@ public class RegionFile implements AutoCloseable { +@@ -379,11 +404,13 @@ public class RegionFile implements AutoCloseable { return this.getOffset(chunkcoordintpair) != 0; } @@ -249,10 +257,10 @@ index 7491c09b3d8fdd27fa83d850ff097e44e1bb0eee..299806b73e44a7128e829b35cc2b017a this.d(); } finally { diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java -index 571b34cd30bb76dcfac928e29a1cafd5824d4772..8ceebe1f5ca8821228faf65e1d26fa205ec1e56c 100644 +index ab9f4d40fd1126a3d7ba5b16fdc6ab09de4a7fdb..55e7e983d2c760a8052d7b3ddbdc8447f619a60f 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java -@@ -25,7 +25,14 @@ public final class RegionFileCache implements AutoCloseable { +@@ -28,7 +28,14 @@ public final class RegionFileCache implements AutoCloseable { this.c = flag; } @@ -268,7 +276,7 @@ index 571b34cd30bb76dcfac928e29a1cafd5824d4772..8ceebe1f5ca8821228faf65e1d26fa20 long i = ChunkCoordIntPair.pair(chunkcoordintpair.getRegionX(), chunkcoordintpair.getRegionZ()); RegionFile regionfile = (RegionFile) this.cache.getAndMoveToFirst(i); -@@ -172,6 +179,7 @@ public final class RegionFileCache implements AutoCloseable { +@@ -175,6 +182,7 @@ public final class RegionFileCache implements AutoCloseable { try { NBTCompressedStreamTools.a(nbttagcompound, (DataOutput) dataoutputstream); diff --git a/Spigot-Server-Patches/0362-incremental-chunk-saving.patch b/Spigot-Server-Patches/0362-incremental-chunk-saving.patch index 67b733edcb..cf96f49f51 100644 --- a/Spigot-Server-Patches/0362-incremental-chunk-saving.patch +++ b/Spigot-Server-Patches/0362-incremental-chunk-saving.patch @@ -71,7 +71,7 @@ index e4b7bd30117e0a3af50ec28aada604df837ebb02..1d8695ac6692194c9a1cfd46c9d73512 this.methodProfiler.enter("snooper"); if (((DedicatedServer) this).getDedicatedServerProperties().snooperEnabled && !this.snooper.d() && this.ticks > 100) { // Spigot diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 24b7b76e11cf2b389c6f40fb4046294f356164c5..0b967cc5a86b357ff808621abcb96239bd09d077 100644 +index c6acc429fd0a599c1c1ab676054d9e3f720fbd39..2a3c2f4f6d581cff82e0cb69fd6e6fb75435e953 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java @@ -557,6 +557,15 @@ public class ChunkProviderServer extends IChunkProvider { @@ -158,10 +158,10 @@ index 6bced8533df49d7bfdb32dfa0caad9d788ffc2c8..75d4a8fc394449ccc006fe67a8842edc public void a(ProtoChunkExtension protochunkextension) { for (int i = 0; i < this.statusFutures.length(); ++i) { diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index c8b2013791ce0ac4438243998b43bbd781405254..ec9b765a09500c4e4e5dde8b7856e2b752e7fdc2 100644 +index ccfde274edfe1b611ccf8c583c92b16d52e4518d..1f32ab230d650bb5f652efbacdd5e4b90dc4de89 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -91,6 +91,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.DefinedStruct +@@ -93,6 +93,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.DefinedStruct import net.minecraft.world.level.storage.Convertable; import net.minecraft.world.level.storage.WorldPersistentData; import net.minecraft.world.phys.Vec3D; @@ -169,7 +169,7 @@ index c8b2013791ce0ac4438243998b43bbd781405254..ec9b765a09500c4e4e5dde8b7856e2b7 import org.apache.commons.lang3.mutable.MutableBoolean; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -@@ -378,6 +379,64 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -380,6 +381,64 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } @@ -234,7 +234,7 @@ index c8b2013791ce0ac4438243998b43bbd781405254..ec9b765a09500c4e4e5dde8b7856e2b7 protected void save(boolean flag) { if (flag) { List list = (List) this.visibleChunks.values().stream().filter(PlayerChunk::hasBeenLoaded).peek(PlayerChunk::m).collect(Collectors.toList()); -@@ -488,6 +547,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -490,6 +549,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.world.unloadChunk(chunk); } @@ -242,7 +242,7 @@ index c8b2013791ce0ac4438243998b43bbd781405254..ec9b765a09500c4e4e5dde8b7856e2b7 this.lightEngine.a(ichunkaccess.getPos()); this.lightEngine.queueUpdate(); -@@ -680,6 +740,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -682,6 +742,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { playerchunk.a(new ProtoChunkExtension(chunk)); } @@ -252,10 +252,10 @@ index c8b2013791ce0ac4438243998b43bbd781405254..ec9b765a09500c4e4e5dde8b7856e2b7 return PlayerChunk.getChunkState(playerchunk.getTicketLevel()); }); diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index bfcd40c0cf7f3b41601d4c422e75690a20860bf0..2d2857b301377d45ca5c63e6d855304b3e605f78 100644 +index 16441006736abdea0120570557348be4919c82ad..5da94d3c2498c84da81f41c37249159d1c3a9ca2 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -885,11 +885,43 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -886,11 +886,43 @@ public class WorldServer extends World implements GeneratorAccessSeed { return !this.server.a(this, blockposition, entityhuman) && this.getWorldBorder().a(blockposition); } @@ -300,7 +300,7 @@ index bfcd40c0cf7f3b41601d4c422e75690a20860bf0..2d2857b301377d45ca5c63e6d855304b try (co.aikar.timings.Timing ignored = timings.worldSave.startTiming()) { // Paper if (iprogressupdate != null) { iprogressupdate.a(new ChatMessage("menu.savingLevel")); -@@ -915,6 +947,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -916,6 +948,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { // CraftBukkit end } diff --git a/Spigot-Server-Patches/0363-Anti-Xray.patch b/Spigot-Server-Patches/0363-Anti-Xray.patch index 8336ac8a98..fe928bad58 100644 --- a/Spigot-Server-Patches/0363-Anti-Xray.patch +++ b/Spigot-Server-Patches/0363-Anti-Xray.patch @@ -59,22 +59,22 @@ index 1278d09f70c1e97607ef20d87a178dc252c7f723..c45493e88bf7e8811be2759ff9ac19e3 } diff --git a/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockController.java b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockController.java new file mode 100644 -index 0000000000000000000000000000000000000000..2bfab782472b0b4f3a9cbb2b51183f286c314dcf +index 0000000000000000000000000000000000000000..83a023ae018cbb79b5f151b1c7a5c8ba0c3bf1bf --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockController.java @@ -0,0 +1,45 @@ +package com.destroystokyo.paper.antixray; + -+import net.minecraft.server.BlockPosition; -+import net.minecraft.server.Chunk; -+import net.minecraft.server.ChunkSection; -+import net.minecraft.server.EntityPlayer; -+import net.minecraft.server.EnumDirection; -+import net.minecraft.server.IBlockData; -+import net.minecraft.server.IChunkAccess; ++import net.minecraft.core.BlockPosition; ++import net.minecraft.core.EnumDirection; +import net.minecraft.network.protocol.game.PacketPlayOutMapChunk; -+import net.minecraft.server.PlayerInteractManager; -+import net.minecraft.server.World; ++import net.minecraft.server.level.EntityPlayer; ++import net.minecraft.server.level.PlayerInteractManager; ++import net.minecraft.world.level.World; ++import net.minecraft.world.level.block.state.IBlockData; ++import net.minecraft.world.level.chunk.Chunk; ++import net.minecraft.world.level.chunk.ChunkSection; ++import net.minecraft.world.level.chunk.IChunkAccess; + +public class ChunkPacketBlockController { + @@ -110,10 +110,10 @@ index 0000000000000000000000000000000000000000..2bfab782472b0b4f3a9cbb2b51183f28 +} diff --git a/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java new file mode 100644 -index 0000000000000000000000000000000000000000..a6e2e3ac478801c30459a39e020a0f4354f4636b +index 0000000000000000000000000000000000000000..cd3b5b62d470ab6753b44f9b13dcf5522e4cbd15 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java -@@ -0,0 +1,632 @@ +@@ -0,0 +1,650 @@ +package com.destroystokyo.paper.antixray; + +import java.util.ArrayList; @@ -125,7 +125,25 @@ index 0000000000000000000000000000000000000000..a6e2e3ac478801c30459a39e020a0f43 +import java.util.concurrent.ThreadLocalRandom; +import java.util.function.IntSupplier; + -+import net.minecraft.server.*; ++import net.minecraft.core.BlockPosition; ++import net.minecraft.core.EnumDirection; ++import net.minecraft.core.IRegistry; ++import net.minecraft.network.protocol.game.PacketPlayOutMapChunk; ++import net.minecraft.resources.MinecraftKey; ++import net.minecraft.server.MinecraftServer; ++import net.minecraft.server.level.EntityPlayer; ++import net.minecraft.server.level.PlayerInteractManager; ++import net.minecraft.server.level.WorldServer; ++import net.minecraft.world.level.ChunkCoordIntPair; ++import net.minecraft.world.level.World; ++import net.minecraft.world.level.block.Block; ++import net.minecraft.world.level.block.Blocks; ++import net.minecraft.world.level.block.state.IBlockData; ++import net.minecraft.world.level.chunk.Chunk; ++import net.minecraft.world.level.chunk.ChunkEmpty; ++import net.minecraft.world.level.chunk.ChunkSection; ++import net.minecraft.world.level.chunk.DataPalette; ++import net.minecraft.world.level.chunk.IChunkAccess; +import org.bukkit.Bukkit; +import org.bukkit.World.Environment; + @@ -748,15 +766,15 @@ index 0000000000000000000000000000000000000000..a6e2e3ac478801c30459a39e020a0f43 +} diff --git a/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketInfo.java b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketInfo.java new file mode 100644 -index 0000000000000000000000000000000000000000..41618994b463267e41a9eb312db682e497c68e1b +index 0000000000000000000000000000000000000000..22c9adefc3e51e9e4b8d611a40d1497d2a16a8d2 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketInfo.java @@ -0,0 +1,81 @@ +package com.destroystokyo.paper.antixray; + -+import net.minecraft.server.Chunk; -+import net.minecraft.server.DataPalette; +import net.minecraft.network.protocol.game.PacketPlayOutMapChunk; ++import net.minecraft.world.level.chunk.Chunk; ++import net.minecraft.world.level.chunk.DataPalette; + +public class ChunkPacketInfo { + @@ -835,15 +853,15 @@ index 0000000000000000000000000000000000000000..41618994b463267e41a9eb312db682e4 +} diff --git a/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketInfoAntiXray.java b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketInfoAntiXray.java new file mode 100644 -index 0000000000000000000000000000000000000000..e61421d87a19bf2f6ce8836b48c445ffdb6772df +index 0000000000000000000000000000000000000000..4b64964e52b11bea4d2c0d0f64f55ad08d2189be --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketInfoAntiXray.java @@ -0,0 +1,30 @@ +package com.destroystokyo.paper.antixray; + -+import net.minecraft.server.Chunk; -+import net.minecraft.server.IBlockData; +import net.minecraft.network.protocol.game.PacketPlayOutMapChunk; ++import net.minecraft.world.level.block.state.IBlockData; ++import net.minecraft.world.level.chunk.Chunk; + +public final class ChunkPacketInfoAntiXray extends ChunkPacketInfo implements Runnable { + @@ -1012,7 +1030,7 @@ index 0000000000000000000000000000000000000000..333763936897befda5bb6c077944d266 + } +} diff --git a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java -index 31a6f687a8a75b055a32a686c870d3898aae54c3..fe1910486ffc6acc54b565dc68b9873820053701 100644 +index a7d10d124021f3427f23fcd533f885367b64515c..3047cf8c4ec1b664d6b790f18d2b1657e4b00435 100644 --- a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java +++ b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutMapChunk.java @@ -1,5 +1,6 @@ @@ -1022,7 +1040,15 @@ index 31a6f687a8a75b055a32a686c870d3898aae54c3..fe1910486ffc6acc54b565dc68b98738 import com.google.common.collect.Lists; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; -@@ -32,7 +33,13 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -16,6 +17,7 @@ import net.minecraft.network.protocol.Packet; + import net.minecraft.world.level.ChunkCoordIntPair; + import net.minecraft.world.level.block.entity.TileEntity; + import net.minecraft.world.level.block.entity.TileEntitySkull; ++import net.minecraft.world.level.block.state.IBlockData; + import net.minecraft.world.level.chunk.BiomeStorage; + import net.minecraft.world.level.chunk.Chunk; + import net.minecraft.world.level.chunk.ChunkSection; +@@ -33,7 +35,13 @@ public class PacketPlayOutMapChunk implements Packet { private List g; private boolean h; @@ -1037,7 +1063,7 @@ index 31a6f687a8a75b055a32a686c870d3898aae54c3..fe1910486ffc6acc54b565dc68b98738 // Paper start private final java.util.List extraPackets = new java.util.ArrayList<>(); private static final int TE_LIMIT = Integer.getInteger("Paper.excessiveTELimit", 750); -@@ -42,7 +49,11 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -43,7 +51,11 @@ public class PacketPlayOutMapChunk implements Packet { return extraPackets; } // Paper end @@ -1050,7 +1076,7 @@ index 31a6f687a8a75b055a32a686c870d3898aae54c3..fe1910486ffc6acc54b565dc68b98738 ChunkCoordIntPair chunkcoordintpair = chunk.getPos(); this.a = chunkcoordintpair.x; -@@ -65,7 +76,12 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -66,7 +78,12 @@ public class PacketPlayOutMapChunk implements Packet { } this.f = new byte[this.a(chunk, i)]; @@ -1064,7 +1090,7 @@ index 31a6f687a8a75b055a32a686c870d3898aae54c3..fe1910486ffc6acc54b565dc68b98738 this.g = Lists.newArrayList(); iterator = chunk.getTileEntities().entrySet().iterator(); int totalTileEntities = 0; // Paper -@@ -92,8 +108,19 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -93,8 +110,19 @@ public class PacketPlayOutMapChunk implements Packet { this.g.add(nbttagcompound); } } @@ -1084,7 +1110,7 @@ index 31a6f687a8a75b055a32a686c870d3898aae54c3..fe1910486ffc6acc54b565dc68b98738 @Override public void a(PacketDataSerializer packetdataserializer) throws IOException { -@@ -159,8 +186,12 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -160,8 +188,12 @@ public class PacketPlayOutMapChunk implements Packet { return bytebuf; } @@ -1099,7 +1125,7 @@ index 31a6f687a8a75b055a32a686c870d3898aae54c3..fe1910486ffc6acc54b565dc68b98738 int j = 0; ChunkSection[] achunksection = chunk.getSections(); int k = 0; -@@ -170,7 +201,7 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -171,7 +203,7 @@ public class PacketPlayOutMapChunk implements Packet { if (chunksection != Chunk.a && (!this.f() || !chunksection.c()) && (i & 1 << k) != 0) { j |= 1 << k; @@ -1109,10 +1135,10 @@ index 31a6f687a8a75b055a32a686c870d3898aae54c3..fe1910486ffc6acc54b565dc68b98738 } diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index ec9b765a09500c4e4e5dde8b7856e2b752e7fdc2..78e2c2bab951a8f7759ea5badc3275ef4f00e9ba 100644 +index 1f32ab230d650bb5f652efbacdd5e4b90dc4de89..71c2792d7eede35485cc36ac929cf295bcd4646b 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -654,7 +654,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -656,7 +656,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } this.g(chunkcoordintpair); @@ -1121,7 +1147,7 @@ index ec9b765a09500c4e4e5dde8b7856e2b752e7fdc2..78e2c2bab951a8f7759ea5badc3275ef }, this.executor); } -@@ -1394,9 +1394,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1396,9 +1396,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } @@ -1147,10 +1173,10 @@ index 0d32d7e9fc6bf6a05f3975fe225022a9e176e47b..3dcfb2326af92eb7a9cd16fd4725b3ae public void a(BlockPosition blockposition, PacketPlayInBlockDig.EnumPlayerDigType packetplayinblockdig_enumplayerdigtype, String s) { diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 2d2857b301377d45ca5c63e6d855304b3e605f78..8b7e6dfa146abc3b4c8a5b0646e0ef1453ddb68c 100644 +index 5da94d3c2498c84da81f41c37249159d1c3a9ca2..280ecd3634d77b93cf0923f4c4a5cfd7f114e848 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -209,7 +209,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -210,7 +210,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { // Add env and gen to constructor, WorldData -> WorldDataServer public WorldServer(MinecraftServer minecraftserver, Executor executor, Convertable.ConversionSession convertable_conversionsession, IWorldDataServer iworlddataserver, ResourceKey resourcekey, DimensionManager dimensionmanager, WorldLoadListener worldloadlistener, ChunkGenerator chunkgenerator, boolean flag, long i, List list, boolean flag1, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen) { @@ -1160,7 +1186,7 @@ index 2d2857b301377d45ca5c63e6d855304b3e605f78..8b7e6dfa146abc3b4c8a5b0646e0ef14 convertable = convertable_conversionsession; uuid = WorldUUID.getUUID(convertable_conversionsession.folder.toFile()); diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 12330f20a8550ec044562e2135c465a9fc8e1d60..81f657084afdfcace67a2245230b0cb91dd919bd 100644 +index 12ac3608736b45447afe6b0d35ead1441390be5e..15da3511a9e57c320f4cf409852bee07109095bc 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java @@ -2,6 +2,8 @@ package net.minecraft.world.level; @@ -1172,7 +1198,7 @@ index 12330f20a8550ec044562e2135c465a9fc8e1d60..81f657084afdfcace67a2245230b0cb9 import com.destroystokyo.paper.event.server.ServerExceptionEvent; import com.destroystokyo.paper.exception.ServerInternalException; import com.google.common.base.MoreObjects; -@@ -136,6 +138,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -144,6 +146,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot public final com.destroystokyo.paper.PaperWorldConfig paperConfig; // Paper @@ -1180,7 +1206,7 @@ index 12330f20a8550ec044562e2135c465a9fc8e1d60..81f657084afdfcace67a2245230b0cb9 public final co.aikar.timings.WorldTimingsHandler timings; // Paper public static BlockPosition lastPhysicsProblem; // Spigot -@@ -157,9 +160,10 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -165,9 +168,10 @@ public abstract class World implements GeneratorAccess, AutoCloseable { return typeKey; } @@ -1192,7 +1218,7 @@ index 12330f20a8550ec044562e2135c465a9fc8e1d60..81f657084afdfcace67a2245230b0cb9 this.generator = gen; this.world = new CraftWorld((WorldServer) this, gen, env); this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit -@@ -425,6 +429,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -433,6 +437,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { // CraftBukkit end IBlockData iblockdata1 = chunk.setType(blockposition, iblockdata, (i & 64) != 0, (i & 1024) == 0); // CraftBukkit custom NO_PLACE flag @@ -1227,10 +1253,10 @@ index 89efd0b68b04457e1cd617dcc8bb1a6ea1c4717c..a8f4c1468759fe44c28957e0e733dee7 // Paper start diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java -index eea4a30428293eaf7afbe303a37adec60b44c2b4..00658974083a97d74e3336d9c719892f25aa22a9 100644 +index eea4a30428293eaf7afbe303a37adec60b44c2b4..0b4e346daaea91565fde2f789fafa8b431a7b042 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java -@@ -1,6 +1,7 @@ +@@ -1,9 +1,11 @@ package net.minecraft.world.level.chunk; import java.util.function.Predicate; @@ -1238,7 +1264,11 @@ index eea4a30428293eaf7afbe303a37adec60b44c2b4..00658974083a97d74e3336d9c719892f import javax.annotation.Nullable; import net.minecraft.nbt.GameProfileSerializer; import net.minecraft.network.PacketDataSerializer; -@@ -18,16 +19,22 @@ public class ChunkSection { ++import net.minecraft.world.level.World; + import net.minecraft.world.level.block.Block; + import net.minecraft.world.level.block.Blocks; + import net.minecraft.world.level.block.state.IBlockData; +@@ -18,16 +20,22 @@ public class ChunkSection { private short e; final DataPaletteBlock blockIds; // Paper - package-private @@ -1265,7 +1295,7 @@ index eea4a30428293eaf7afbe303a37adec60b44c2b4..00658974083a97d74e3336d9c719892f } public final IBlockData getType(int i, int j, int k) { // Paper -@@ -139,10 +146,14 @@ public class ChunkSection { +@@ -139,10 +147,14 @@ public class ChunkSection { return this.blockIds; } diff --git a/Spigot-Server-Patches/0366-Mark-entities-as-being-ticked-when-notifying-navigat.patch b/Spigot-Server-Patches/0366-Mark-entities-as-being-ticked-when-notifying-navigat.patch index 6a6a5226e3..c98ba61e51 100644 --- a/Spigot-Server-Patches/0366-Mark-entities-as-being-ticked-when-notifying-navigat.patch +++ b/Spigot-Server-Patches/0366-Mark-entities-as-being-ticked-when-notifying-navigat.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Mark entities as being ticked when notifying navigation diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 8b7e6dfa146abc3b4c8a5b0646e0ef1453ddb68c..86e6a11c760b2ec47711bd8327b185ae902c4527 100644 +index 280ecd3634d77b93cf0923f4c4a5cfd7f114e848..7282ac286e4f1333c25a8515275b27b9efb19343 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -1473,6 +1473,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1474,6 +1474,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { VoxelShape voxelshape1 = iblockdata1.getCollisionShape(this, blockposition); if (VoxelShapes.c(voxelshape, voxelshape1, OperatorBoolean.NOT_SAME)) { @@ -16,7 +16,7 @@ index 8b7e6dfa146abc3b4c8a5b0646e0ef1453ddb68c..86e6a11c760b2ec47711bd8327b185ae Iterator iterator = this.navigators.iterator(); while (iterator.hasNext()) { -@@ -1494,6 +1495,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1495,6 +1496,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } } diff --git a/Spigot-Server-Patches/0369-Asynchronous-chunk-IO-and-loading.patch b/Spigot-Server-Patches/0369-Asynchronous-chunk-IO-and-loading.patch index a2d7b9c369..1e53b4f823 100644 --- a/Spigot-Server-Patches/0369-Asynchronous-chunk-IO-and-loading.patch +++ b/Spigot-Server-Patches/0369-Asynchronous-chunk-IO-and-loading.patch @@ -121,7 +121,7 @@ tasks required to be executed by the chunk load task (i.e lighting and some poi tasks). diff --git a/src/main/java/co/aikar/timings/WorldTimingsHandler.java b/src/main/java/co/aikar/timings/WorldTimingsHandler.java -index 944fd203e9f39d6c6fc9e270940c76c98067273a..a27dc38d1a29ed1d63d2f44b7984c2b65be487d9 100644 +index fa154ed68187a2020e814db6345a8cc1119ab4ba..2da28784ee427001b1137c859f0b4c350abd3110 100644 --- a/src/main/java/co/aikar/timings/WorldTimingsHandler.java +++ b/src/main/java/co/aikar/timings/WorldTimingsHandler.java @@ -58,6 +58,17 @@ public class WorldTimingsHandler { @@ -326,17 +326,17 @@ index 0000000000000000000000000000000000000000..5af0ac3d9e87c06053e65433060f1577 +} diff --git a/src/main/java/com/destroystokyo/paper/io/PaperFileIOThread.java b/src/main/java/com/destroystokyo/paper/io/PaperFileIOThread.java new file mode 100644 -index 0000000000000000000000000000000000000000..1917d7be7dfddc93c95b9fd864cf13f9a24c8f96 +index 0000000000000000000000000000000000000000..9fe91f9512ee8c2589fc8da76bda5f6d70c9fac4 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/io/PaperFileIOThread.java @@ -0,0 +1,606 @@ +package com.destroystokyo.paper.io; + -+import net.minecraft.server.ChunkCoordIntPair; ++import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; -+import net.minecraft.server.NBTTagCompound; -+import net.minecraft.server.RegionFile; -+import net.minecraft.server.WorldServer; ++import net.minecraft.server.level.WorldServer; ++import net.minecraft.world.level.ChunkCoordIntPair; ++import net.minecraft.world.level.chunk.storage.RegionFile; +import org.apache.logging.log4j.Logger; + +import java.io.IOException; @@ -1468,7 +1468,7 @@ index 0000000000000000000000000000000000000000..ee906b594b306906c170180a29a8b619 +} diff --git a/src/main/java/com/destroystokyo/paper/io/chunk/ChunkLoadTask.java b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkLoadTask.java new file mode 100644 -index 0000000000000000000000000000000000000000..6367092663a213793367ccb65733afc119e4883c +index 0000000000000000000000000000000000000000..9a2b51d005efc9d31b3685e8298fd00b341c7dc7 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkLoadTask.java @@ -0,0 +1,146 @@ @@ -1477,10 +1477,10 @@ index 0000000000000000000000000000000000000000..6367092663a213793367ccb65733afc1 +import co.aikar.timings.Timing; +import com.destroystokyo.paper.io.PaperFileIOThread; +import com.destroystokyo.paper.io.IOUtil; -+import net.minecraft.server.ChunkCoordIntPair; -+import net.minecraft.server.ChunkRegionLoader; -+import net.minecraft.server.PlayerChunkMap; -+import net.minecraft.server.WorldServer; ++import net.minecraft.server.level.PlayerChunkMap; ++import net.minecraft.server.level.WorldServer; ++import net.minecraft.world.level.ChunkCoordIntPair; ++import net.minecraft.world.level.chunk.storage.ChunkRegionLoader; + +import java.util.ArrayDeque; +import java.util.function.Consumer; @@ -1620,24 +1620,23 @@ index 0000000000000000000000000000000000000000..6367092663a213793367ccb65733afc1 +} diff --git a/src/main/java/com/destroystokyo/paper/io/chunk/ChunkSaveTask.java b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkSaveTask.java new file mode 100644 -index 0000000000000000000000000000000000000000..60312b85f9e7070378458f29afee0ebb7850d8a5 +index 0000000000000000000000000000000000000000..e3ad8f50b51c4e9bf38ffa5911444cc88d3f67eb --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkSaveTask.java -@@ -0,0 +1,112 @@ +@@ -0,0 +1,111 @@ +package com.destroystokyo.paper.io.chunk; + +import co.aikar.timings.Timing; +import com.destroystokyo.paper.io.PaperFileIOThread; +import com.destroystokyo.paper.io.IOUtil; +import com.destroystokyo.paper.io.PrioritizedTaskQueue; -+import net.minecraft.server.ChunkRegionLoader; -+import net.minecraft.server.IAsyncTaskHandler; -+import net.minecraft.server.IChunkAccess; -+import net.minecraft.server.NBTTagCompound; -+import net.minecraft.server.WorldServer; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicInteger; ++import net.minecraft.nbt.NBTTagCompound; ++import net.minecraft.server.level.WorldServer; ++import net.minecraft.world.level.chunk.IChunkAccess; ++import net.minecraft.world.level.chunk.storage.ChunkRegionLoader; + +public final class ChunkSaveTask extends ChunkTask { + @@ -1738,7 +1737,7 @@ index 0000000000000000000000000000000000000000..60312b85f9e7070378458f29afee0ebb +} diff --git a/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTask.java b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTask.java new file mode 100644 -index 0000000000000000000000000000000000000000..1dfa8abfd869ca97e4cc566d44e509b444dbcdc5 +index 0000000000000000000000000000000000000000..9c1370c7d85262da9d64871e03e5a8a8c5e087d7 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTask.java @@ -0,0 +1,40 @@ @@ -1746,7 +1745,7 @@ index 0000000000000000000000000000000000000000..1dfa8abfd869ca97e4cc566d44e509b4 + +import com.destroystokyo.paper.io.PaperFileIOThread; +import com.destroystokyo.paper.io.PrioritizedTaskQueue; -+import net.minecraft.server.WorldServer; ++import net.minecraft.server.level.WorldServer; + +abstract class ChunkTask extends PrioritizedTaskQueue.PrioritizedTask implements Runnable { + @@ -1784,23 +1783,25 @@ index 0000000000000000000000000000000000000000..1dfa8abfd869ca97e4cc566d44e509b4 +} diff --git a/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTaskManager.java b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTaskManager.java new file mode 100644 -index 0000000000000000000000000000000000000000..49a594e5f345096cb3b9913b8ee2760795c5f012 +index 0000000000000000000000000000000000000000..8e642f450b974d81f128d26edfd40915554db638 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTaskManager.java -@@ -0,0 +1,511 @@ +@@ -0,0 +1,513 @@ +package com.destroystokyo.paper.io.chunk; + +import com.destroystokyo.paper.io.PaperFileIOThread; +import com.destroystokyo.paper.io.IOUtil; +import com.destroystokyo.paper.io.PrioritizedTaskQueue; +import com.destroystokyo.paper.io.QueueExecutorThread; -+import net.minecraft.server.ChunkRegionLoader; -+import net.minecraft.server.IAsyncTaskHandler; -+import net.minecraft.server.IChunkAccess; ++import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; -+import net.minecraft.server.NBTTagCompound; -+import net.minecraft.server.PlayerChunk; -+import net.minecraft.server.WorldServer; ++import net.minecraft.server.level.ChunkProviderServer; ++import net.minecraft.server.level.PlayerChunk; ++import net.minecraft.server.level.WorldServer; ++import net.minecraft.util.thread.IAsyncTaskHandler; ++import net.minecraft.world.level.chunk.ChunkStatus; ++import net.minecraft.world.level.chunk.IChunkAccess; ++import net.minecraft.world.level.chunk.storage.ChunkRegionLoader; +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.Level; +import org.bukkit.Bukkit; @@ -1888,7 +1889,7 @@ index 0000000000000000000000000000000000000000..49a594e5f345096cb3b9913b8ee27607 + PaperFileIOThread.LOGGER.log(Level.ERROR, "Load Task - " + (loadTask == null ? "none" : loadTask.toString())); + PaperFileIOThread.LOGGER.log(Level.ERROR, "Save Task - " + (saveTask == null ? "none" : saveTask.toString())); + // log current status of chunk to indicate whether we're waiting on generation or loading -+ net.minecraft.server.PlayerChunk chunkHolder = chunkInfo.world.getChunkProvider().playerChunkMap.getVisibleChunk(key); ++ PlayerChunk chunkHolder = chunkInfo.world.getChunkProvider().playerChunkMap.getVisibleChunk(key); + + dumpChunkInfo(new HashSet<>(), chunkHolder, chunkInfo.chunkX, chunkInfo.chunkZ); + } @@ -1912,7 +1913,7 @@ index 0000000000000000000000000000000000000000..49a594e5f345096cb3b9913b8ee27607 + PaperFileIOThread.LOGGER.log(Level.ERROR, indentStr + "Chunk Holder - null for (" + x +"," + z +")"); + } else { + IChunkAccess chunk = chunkHolder.getAvailableChunkNow(); -+ net.minecraft.server.ChunkStatus holderStatus = chunkHolder.getChunkHolderStatus(); ++ ChunkStatus holderStatus = chunkHolder.getChunkHolderStatus(); + PaperFileIOThread.LOGGER.log(Level.ERROR, indentStr + "Chunk Holder - non-null"); + PaperFileIOThread.LOGGER.log(Level.ERROR, indentStr + "Chunk Status - " + ((chunk == null) ? "null chunk" : chunk.getChunkStatus().toString())); + PaperFileIOThread.LOGGER.log(Level.ERROR, indentStr + "Chunk Ticket Status - " + PlayerChunk.getChunkStatus(chunkHolder.getTicketLevel())); @@ -1955,7 +1956,7 @@ index 0000000000000000000000000000000000000000..49a594e5f345096cb3b9913b8ee27607 + * less-than or equal to 0, then this chunk task manager will operate off of the world's chunk task queue. + * @param world Specified world. + * @param threads Specified number of threads. -+ * @see net.minecraft.server.ChunkProviderServer#serverThreadQueue ++ * @see ChunkProviderServer#serverThreadQueue + */ + public ChunkTaskManager(final WorldServer world, final int threads) { + this.world = world; @@ -1980,7 +1981,7 @@ index 0000000000000000000000000000000000000000..49a594e5f345096cb3b9913b8ee27607 + * the global queue is not shutdown. If the global workers is configured to be disabled or use 0 threads, then + * this chunk task manager will operate off of the world's chunk task queue. + * @param world The world that this task manager is responsible for -+ * @see net.minecraft.server.ChunkProviderServer#serverThreadQueue ++ * @see ChunkProviderServer#serverThreadQueue + */ + public ChunkTaskManager(final WorldServer world) { + this.world = world; @@ -2088,7 +2089,7 @@ index 0000000000000000000000000000000000000000..49a594e5f345096cb3b9913b8ee27607 + * @param chunkX Chunk's x coordinate + * @param chunkZ Chunk's z coordinate + * @param priority Priority for this task -+ * @param onComplete The consumer to invoke with the {@link net.minecraft.server.ChunkRegionLoader.InProgressChunkHolder} object once this task is complete ++ * @param onComplete The consumer to invoke with the {@link ChunkRegionLoader.InProgressChunkHolder} object once this task is complete + * @param intendingToBlock Whether the caller is intending to block on this task completing (this is a performance tune, and has no adverse side-effects) + * @return The {@link ChunkLoadTask} associated with + */ @@ -2313,10 +2314,10 @@ index e201e4efd4ecc65ec3c38528a4ec5336e2d51ab2..45f3f8964a587c382b6ea82560e9da30 @Override diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java -index 5f8b8b5fac14983fbeb64ce3f09bf9a885179e8c..2489a29e344145f3ce4ff3c9fe08d6ee64a47acb 100644 +index fbd33aef21b4539d249c367609a36491530fb7ca..5a410550cfb48505c9de9979465ed1528c8fbf05 100644 --- a/src/main/java/net/minecraft/server/MCUtil.java +++ b/src/main/java/net/minecraft/server/MCUtil.java -@@ -704,4 +704,9 @@ public final class MCUtil { +@@ -714,4 +714,9 @@ public final class MCUtil { out.print(fileData); } } @@ -2352,10 +2353,18 @@ index 1d8695ac6692194c9a1cfd46c9d735120ca75245..eafee14262ac8abb482bdd0fa52a8a33 public String getServerIp() { diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 0b967cc5a86b357ff808621abcb96239bd09d077..32ef8b2e52b47c2fdeb13d00df5107fa7c3b540e 100644 +index 2a3c2f4f6d581cff82e0cb69fd6e6fb75435e953..df71f8c42ac488153257614b58202bb5d7083251 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -332,11 +332,138 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -38,6 +38,7 @@ import net.minecraft.world.level.chunk.ChunkGenerator; + import net.minecraft.world.level.chunk.ChunkStatus; + import net.minecraft.world.level.chunk.IChunkAccess; + import net.minecraft.world.level.chunk.IChunkProvider; ++import net.minecraft.world.level.chunk.ProtoChunkExtension; + import net.minecraft.world.level.levelgen.structure.templatesystem.DefinedStructureManager; + import net.minecraft.world.level.storage.Convertable; + import net.minecraft.world.level.storage.WorldData; +@@ -332,11 +333,138 @@ public class ChunkProviderServer extends IChunkProvider { return playerChunk.getAvailableChunkNow(); } @@ -2417,7 +2426,7 @@ index 0b967cc5a86b357ff808621abcb96239bd09d077..32ef8b2e52b47c2fdeb13d00df5107fa + + IChunkAccess current = this.getChunkAtImmediately(x, z); // we want to bypass ticket restrictions + if (current != null) { -+ if (!(current instanceof ProtoChunkExtension) && !(current instanceof net.minecraft.server.Chunk)) { ++ if (!(current instanceof ProtoChunkExtension) && !(current instanceof Chunk)) { + return CompletableFuture.completedFuture(PlayerChunk.UNLOADED_CHUNK_ACCESS); + } + // we know the chunk is at full status here (either in read-only mode or the real thing) @@ -2494,7 +2503,7 @@ index 0b967cc5a86b357ff808621abcb96239bd09d077..32ef8b2e52b47c2fdeb13d00df5107fa if (Thread.currentThread() != this.serverThread) { return (IChunkAccess) CompletableFuture.supplyAsync(() -> { return this.getChunkAt(i, j, chunkstatus, flag); -@@ -359,11 +486,16 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -359,11 +487,16 @@ public class ChunkProviderServer extends IChunkProvider { } gameprofilerfiller.c("getChunkCacheMiss"); @@ -2512,7 +2521,7 @@ index 0b967cc5a86b357ff808621abcb96239bd09d077..32ef8b2e52b47c2fdeb13d00df5107fa this.world.timings.syncChunkLoad.stopTiming(); // Paper } // Paper ichunkaccess = (IChunkAccess) ((Either) completablefuture.join()).map((ichunkaccess1) -> { -@@ -429,6 +561,11 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -429,6 +562,11 @@ public class ChunkProviderServer extends IChunkProvider { } private CompletableFuture> getChunkFutureMainThread(int i, int j, ChunkStatus chunkstatus, boolean flag) { @@ -2524,7 +2533,7 @@ index 0b967cc5a86b357ff808621abcb96239bd09d077..32ef8b2e52b47c2fdeb13d00df5107fa ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i, j); long k = chunkcoordintpair.pair(); int l = 33 + ChunkStatus.a(chunkstatus); -@@ -828,11 +965,12 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -828,11 +966,12 @@ public class ChunkProviderServer extends IChunkProvider { protected boolean executeNext() { // CraftBukkit start - process pending Chunk loadCallback() and unloadCallback() after each run task try { @@ -2584,10 +2593,18 @@ index 75d4a8fc394449ccc006fe67a8842edcd9f36854..6433463938d8bb717840c8f57fe6e707 completablefuture = (CompletableFuture) this.statusFutures.get(i); if (completablefuture != null) { diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdadf833b0c1 100644 +index 71c2792d7eede35485cc36ac929cf295bcd4646b..a6c3bed5824d112042536a5666098d4d80173c3b 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -110,7 +110,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -88,6 +88,7 @@ import net.minecraft.world.level.chunk.ProtoChunk; + import net.minecraft.world.level.chunk.ProtoChunkExtension; + import net.minecraft.world.level.chunk.storage.ChunkRegionLoader; + import net.minecraft.world.level.chunk.storage.IChunkLoader; ++import net.minecraft.world.level.chunk.storage.RegionFile; + import net.minecraft.world.level.levelgen.structure.StructureStart; + import net.minecraft.world.level.levelgen.structure.templatesystem.DefinedStructureManager; + import net.minecraft.world.level.storage.Convertable; +@@ -112,7 +113,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { private final LightEngineThreaded lightEngine; private final IAsyncTaskHandler executor; public final ChunkGenerator chunkGenerator; @@ -2596,7 +2613,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad private final VillagePlace m; public final LongSet unloadQueue; private boolean updatingChunksModified; -@@ -120,7 +120,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -122,7 +123,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public final WorldLoadListener worldLoadListener; public final PlayerChunkMap.a chunkDistanceManager; private final AtomicInteger u; @@ -2605,7 +2622,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad private final File w; private final PlayerMap playerMap; public final Int2ObjectMap trackedEntities; -@@ -203,7 +203,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -205,7 +206,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.lightEngine = new LightEngineThreaded(ilightaccess, this, this.world.getDimensionManager().hasSkyLight(), threadedmailbox1, this.p.a(threadedmailbox1, false)); this.chunkDistanceManager = new PlayerChunkMap.a(executor, iasynctaskhandler); this.l = supplier; @@ -2614,7 +2631,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad this.setViewDistance(i); } -@@ -245,12 +245,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -247,12 +248,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } @Nullable @@ -2629,7 +2646,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad return (PlayerChunk) this.visibleChunks.get(i); } -@@ -372,6 +372,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -374,6 +375,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public void close() throws IOException { try { this.p.close(); @@ -2637,7 +2654,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad this.m.close(); } finally { super.close(); -@@ -463,7 +464,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -465,7 +467,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.b(() -> { return true; }); @@ -2647,7 +2664,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad PlayerChunkMap.LOGGER.info("ThreadedAnvilChunkStorage ({}): All chunks are saved", this.w.getName()); } else { this.visibleChunks.values().stream().filter(PlayerChunk::hasBeenLoaded).forEach((playerchunk) -> { -@@ -479,16 +481,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -481,16 +484,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } @@ -2669,7 +2686,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad } gameprofilerfiller.exit(); -@@ -509,12 +515,13 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -511,12 +518,13 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { if (playerchunk != null) { this.pendingUnload.put(j, playerchunk); this.updatingChunksModified = true; @@ -2684,7 +2701,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad } } activityAccountant.endActivity(); // Spigot -@@ -528,6 +535,60 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -530,6 +538,60 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } @@ -2745,7 +2762,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad private void a(long i, PlayerChunk playerchunk) { CompletableFuture completablefuture = playerchunk.getChunkSave(); Consumer consumer = (ichunkaccess) -> { // CraftBukkit - decompile error -@@ -541,7 +602,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -543,7 +605,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { ((Chunk) ichunkaccess).setLoaded(false); } @@ -2754,7 +2771,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad if (this.loadedChunks.remove(i) && ichunkaccess instanceof Chunk) { Chunk chunk = (Chunk) ichunkaccess; -@@ -549,6 +610,13 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -551,6 +613,13 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } this.autoSaveQueue.remove(playerchunk); // Paper @@ -2768,7 +2785,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad this.lightEngine.a(ichunkaccess.getPos()); this.lightEngine.queueUpdate(); this.worldLoadListener.a(ichunkaccess.getPos(), (ChunkStatus) null); -@@ -619,19 +687,23 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -621,19 +690,23 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } private CompletableFuture> f(ChunkCoordIntPair chunkcoordintpair) { @@ -2801,7 +2818,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad protochunk.setLastSaved(this.world.getTime()); this.a(chunkcoordintpair, protochunk.getChunkStatus().getType()); -@@ -655,7 +727,32 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -657,7 +730,32 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.g(chunkcoordintpair); return Either.left(new ProtoChunk(chunkcoordintpair, ChunkConverter.a, this.world)); // Paper - Anti-Xray - Add parameter @@ -2835,7 +2852,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad } private void g(ChunkCoordIntPair chunkcoordintpair) { -@@ -882,6 +979,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -884,6 +982,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } public boolean saveChunk(IChunkAccess ichunkaccess) { @@ -2843,7 +2860,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad this.m.a(ichunkaccess.getPos()); if (!ichunkaccess.isNeedsSaving()) { return false; -@@ -894,6 +992,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -896,6 +995,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { ChunkStatus chunkstatus = ichunkaccess.getChunkStatus(); if (chunkstatus.getType() != ChunkStatus.Type.LEVELCHUNK) { @@ -2851,7 +2868,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad if (this.h(chunkcoordintpair)) { return false; } -@@ -901,12 +1000,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -903,12 +1003,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { if (chunkstatus == ChunkStatus.EMPTY && ichunkaccess.h().values().stream().noneMatch(StructureStart::e)) { return false; } @@ -2874,7 +2891,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad this.a(chunkcoordintpair, chunkstatus.getType()); return true; } catch (Exception exception) { -@@ -915,6 +1022,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -917,6 +1025,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return false; } } @@ -2882,7 +2899,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad } private boolean h(ChunkCoordIntPair chunkcoordintpair) { -@@ -1044,6 +1152,35 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1046,6 +1155,35 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } } @@ -2918,7 +2935,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad @Nullable public NBTTagCompound readChunkData(ChunkCoordIntPair chunkcoordintpair) throws IOException { // Paper - private -> public NBTTagCompound nbttagcompound = this.read(chunkcoordintpair); -@@ -1065,33 +1202,55 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1067,33 +1205,55 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Paper start - chunk status cache "api" public ChunkStatus getChunkStatusOnDiskIfCached(ChunkCoordIntPair chunkPos) { @@ -2985,7 +3002,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad } public IChunkAccess getUnloadingChunk(int chunkX, int chunkZ) { -@@ -1100,6 +1259,39 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1102,6 +1262,39 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } // Paper end @@ -3001,17 +3018,17 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad + } + // Paper end + // Paper start - async io -+ net.minecraft.server.NBTTagCompound inProgressWrite = com.destroystokyo.paper.io.PaperFileIOThread.Holder.INSTANCE ++ NBTTagCompound inProgressWrite = com.destroystokyo.paper.io.PaperFileIOThread.Holder.INSTANCE + .getPendingWrite(this.world, x, z, false); + + if (inProgressWrite != null) { -+ return net.minecraft.server.ChunkRegionLoader.getStatus(inProgressWrite); ++ return ChunkRegionLoader.getStatus(inProgressWrite); + } + // Paper end + // variant of PlayerChunkMap#getChunkStatusOnDisk that does not load data off disk, but loads the region file + ChunkCoordIntPair chunkPos = new ChunkCoordIntPair(x, z); + synchronized (world.getChunkProvider().playerChunkMap) { -+ net.minecraft.server.RegionFile file; ++ RegionFile file; + try { + file = world.getChunkProvider().playerChunkMap.regionFileCache.getFile(chunkPos, false); + } catch (IOException ex) { @@ -3025,7 +3042,7 @@ index 78e2c2bab951a8f7759ea5badc3275ef4f00e9ba..a9c970f6a3227c37e55549488ab9bdad boolean isOutsideOfRange(ChunkCoordIntPair chunkcoordintpair) { // Spigot start return isOutsideOfRange(chunkcoordintpair, false); -@@ -1446,6 +1638,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1448,6 +1641,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } @@ -3046,10 +3063,26 @@ index 285a03b57431bd6a4d26bb84e916d2c6e1eb0213..218dc900e125a11548485887b1918742 public static TicketType a(String s, Comparator comparator) { return new TicketType<>(s, comparator, 0L); diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 86e6a11c760b2ec47711bd8327b185ae902c4527..ea89392698cd712844cde6976d60a1c2ba6f1b15 100644 +index 7282ac286e4f1333c25a8515275b27b9efb19343..1ceff988080b47352edf9cdf3c4f8e69421765d2 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -207,6 +207,79 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -51,6 +51,7 @@ import net.minecraft.core.IRegistry; + import net.minecraft.core.IRegistryCustom; + import net.minecraft.core.SectionPosition; + import net.minecraft.core.particles.ParticleParam; ++import net.minecraft.nbt.NBTTagCompound; + import net.minecraft.network.chat.ChatMessage; + import net.minecraft.network.chat.IChatBaseComponent; + import net.minecraft.network.protocol.Packet; +@@ -126,6 +127,7 @@ import net.minecraft.world.level.chunk.ChunkGenerator; + import net.minecraft.world.level.chunk.ChunkSection; + import net.minecraft.world.level.chunk.ChunkStatus; + import net.minecraft.world.level.chunk.IChunkAccess; ++import net.minecraft.world.level.chunk.storage.RegionFile; + import net.minecraft.world.level.dimension.DimensionManager; + import net.minecraft.world.level.dimension.end.EnderDragonBattle; + import net.minecraft.world.level.levelgen.HeightMap; +@@ -208,6 +210,79 @@ public class WorldServer extends World implements GeneratorAccessSeed { return this.chunkProvider.getChunkAt(x, z, false); } @@ -3129,7 +3162,7 @@ index 86e6a11c760b2ec47711bd8327b185ae902c4527..ea89392698cd712844cde6976d60a1c2 // Add env and gen to constructor, WorldData -> WorldDataServer public WorldServer(MinecraftServer minecraftserver, Executor executor, Convertable.ConversionSession convertable_conversionsession, IWorldDataServer iworlddataserver, ResourceKey resourcekey, DimensionManager dimensionmanager, WorldLoadListener worldloadlistener, ChunkGenerator chunkgenerator, boolean flag, long i, List list, boolean flag1, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen) { super(iworlddataserver, resourcekey, dimensionmanager, minecraftserver::getMethodProfiler, false, flag, i, gen, env, executor); // Paper pass executor -@@ -254,6 +327,8 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -255,6 +330,8 @@ public class WorldServer extends World implements GeneratorAccessSeed { this.dragonBattle = null; } this.getServer().addWorld(this.getWorld()); // CraftBukkit @@ -3138,7 +3171,7 @@ index 86e6a11c760b2ec47711bd8327b185ae902c4527..ea89392698cd712844cde6976d60a1c2 } // CraftBukkit start -@@ -1741,7 +1816,10 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1742,7 +1819,10 @@ public class WorldServer extends World implements GeneratorAccessSeed { } MCUtil.getSpiralOutChunks(spawn, radiusInBlocks >> 4).forEach(pair -> { @@ -3151,7 +3184,7 @@ index 86e6a11c760b2ec47711bd8327b185ae902c4527..ea89392698cd712844cde6976d60a1c2 } public void removeTicketsForSpawn(int radiusInBlocks, BlockPosition spawn) { diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 1cfa8a4066baaf86f10e3f709d9b1d60aba4dec5..24184c88f354baa082e2ceb0674a4a1a4e1eb65b 100644 +index 6a00d53e01f5f169a5e9d58ba6bd3fb067722c63..12d98c82b93658d1246bfe267bbfc87d3a56bbaa 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java @@ -728,6 +728,13 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -3182,10 +3215,20 @@ index e5641f2b41d89a57285fc072a48b951aa03a14a7..ca23ca14d8011fc8daa7e20f2eaa550a ; } diff --git a/src/main/java/net/minecraft/world/entity/ai/village/poi/VillagePlace.java b/src/main/java/net/minecraft/world/entity/ai/village/poi/VillagePlace.java -index aa1d948e6aebef25f0f4c4c07f5131d2e8387e59..6f3f968b30fdc210e47cb8d99139173869df1638 100644 +index aa1d948e6aebef25f0f4c4c07f5131d2e8387e59..04b01cb841dc4f34ded5aaa4ea7a8e6d4b470183 100644 --- a/src/main/java/net/minecraft/world/entity/ai/village/poi/VillagePlace.java +++ b/src/main/java/net/minecraft/world/entity/ai/village/poi/VillagePlace.java -@@ -36,8 +36,16 @@ public class VillagePlace extends RegionFileSection { +@@ -22,7 +22,9 @@ import java.util.stream.Stream; + import net.minecraft.SystemUtils; + import net.minecraft.core.BlockPosition; + import net.minecraft.core.SectionPosition; ++import net.minecraft.nbt.NBTTagCompound; + import net.minecraft.server.level.LightEngineGraphSection; ++import net.minecraft.server.level.WorldServer; + import net.minecraft.util.datafix.DataFixTypes; + import net.minecraft.world.level.ChunkCoordIntPair; + import net.minecraft.world.level.IWorldReader; +@@ -36,8 +38,16 @@ public class VillagePlace extends RegionFileSection { private final VillagePlace.a a = new VillagePlace.a(); private final LongSet b = new LongOpenHashSet(); @@ -3202,7 +3245,7 @@ index aa1d948e6aebef25f0f4c4c07f5131d2e8387e59..6f3f968b30fdc210e47cb8d991391738 } public void a(BlockPosition blockposition, VillagePlaceType villageplacetype) { -@@ -155,7 +163,23 @@ public class VillagePlace extends RegionFileSection { +@@ -155,7 +165,23 @@ public class VillagePlace extends RegionFileSection { @Override public void a(BooleanSupplier booleansupplier) { @@ -3227,7 +3270,7 @@ index aa1d948e6aebef25f0f4c4c07f5131d2e8387e59..6f3f968b30fdc210e47cb8d991391738 this.a.a(); } -@@ -255,6 +279,35 @@ public class VillagePlace extends RegionFileSection { +@@ -255,6 +281,35 @@ public class VillagePlace extends RegionFileSection { } } @@ -3604,7 +3647,7 @@ index 2853f9e06064a5c0fe2b0e5df75223d1275eae20..42dc430d948dbab38ad1a1788aaff840 nbttagcompound1.set("PostProcessing", a(ichunkaccess.l())); diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/IChunkLoader.java b/src/main/java/net/minecraft/world/level/chunk/storage/IChunkLoader.java -index d785f44cd503d4d91589f3fc4bc8dc805dff3d41..65c2bbeb4d77b9accbfa0e26504fdec3f581fa6a 100644 +index d785f44cd503d4d91589f3fc4bc8dc805dff3d41..01ae13385dd0208c9f34da8b3897b571f86305d0 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/IChunkLoader.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/IChunkLoader.java @@ -3,6 +3,10 @@ package net.minecraft.world.level.chunk.storage; @@ -3630,7 +3673,7 @@ index d785f44cd503d4d91589f3fc4bc8dc805dff3d41..65c2bbeb4d77b9accbfa0e26504fdec3 + private volatile PersistentStructureLegacy c; // Paper - async chunk loading + + private final Object persistentDataLock = new Object(); // Paper -+ protected final RegionFileCache regionFileCache; ++ public final RegionFileCache regionFileCache; public IChunkLoader(File file, DataFixer datafixer, boolean flag) { + this.regionFileCache = new RegionFileCache(file, flag); // Paper - nuke IOWorker @@ -3716,10 +3759,10 @@ index d785f44cd503d4d91589f3fc4bc8dc805dff3d41..65c2bbeb4d77b9accbfa0e26504fdec3 } } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -index 299806b73e44a7128e829b35cc2b017a321d7926..1b9836672a82ee3bb8f8df96f7b4d5d493fb9e95 100644 +index 39d3a71f3945b1c97df35e28d1011b9d42b162f5..4999ba61fb04713ffe3d23c556f732dc4abbf0bc 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -@@ -41,6 +41,8 @@ public class RegionFile implements AutoCloseable { +@@ -44,6 +44,8 @@ public class RegionFile implements AutoCloseable { protected final RegionFileBitSet freeSectors; public final File file; // Paper @@ -3728,7 +3771,7 @@ index 299806b73e44a7128e829b35cc2b017a321d7926..1b9836672a82ee3bb8f8df96f7b4d5d4 // Paper start - Cache chunk status private final ChunkStatus[] statuses = new ChunkStatus[32 * 32]; -@@ -247,7 +249,7 @@ public class RegionFile implements AutoCloseable { +@@ -250,7 +252,7 @@ public class RegionFile implements AutoCloseable { return (i + 4096 - 1) / 4096; } @@ -3737,7 +3780,7 @@ index 299806b73e44a7128e829b35cc2b017a321d7926..1b9836672a82ee3bb8f8df96f7b4d5d4 int i = this.getOffset(chunkcoordintpair); if (i == 0) { -@@ -407,6 +409,11 @@ public class RegionFile implements AutoCloseable { +@@ -410,6 +412,11 @@ public class RegionFile implements AutoCloseable { } public void close() throws IOException { @@ -3749,7 +3792,7 @@ index 299806b73e44a7128e829b35cc2b017a321d7926..1b9836672a82ee3bb8f8df96f7b4d5d4 this.closed = true; // Paper try { this.d(); -@@ -417,6 +424,10 @@ public class RegionFile implements AutoCloseable { +@@ -420,6 +427,10 @@ public class RegionFile implements AutoCloseable { this.dataFile.close(); } } @@ -3761,10 +3804,10 @@ index 299806b73e44a7128e829b35cc2b017a321d7926..1b9836672a82ee3bb8f8df96f7b4d5d4 } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java -index 8ceebe1f5ca8821228faf65e1d26fa205ec1e56c..53500c2643279fdae73c4cfce2a0d7fb684366df 100644 +index 55e7e983d2c760a8052d7b3ddbdc8447f619a60f..ebb0d6988f87013ea5d523ab4a1b31cb669ccc43 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java -@@ -14,7 +14,7 @@ import net.minecraft.nbt.NBTTagCompound; +@@ -17,7 +17,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.util.ExceptionSuppressor; import net.minecraft.world.level.ChunkCoordIntPair; @@ -3773,7 +3816,7 @@ index 8ceebe1f5ca8821228faf65e1d26fa205ec1e56c..53500c2643279fdae73c4cfce2a0d7fb public final Long2ObjectLinkedOpenHashMap cache = new Long2ObjectLinkedOpenHashMap(); private final File b; -@@ -27,16 +27,27 @@ public final class RegionFileCache implements AutoCloseable { +@@ -30,16 +30,27 @@ public final class RegionFileCache implements AutoCloseable { // Paper start @@ -3803,7 +3846,7 @@ index 8ceebe1f5ca8821228faf65e1d26fa205ec1e56c..53500c2643279fdae73c4cfce2a0d7fb return regionfile; } else { if (this.cache.size() >= com.destroystokyo.paper.PaperConfig.regionFileCacheSize) { // Paper - configurable -@@ -52,6 +63,12 @@ public final class RegionFileCache implements AutoCloseable { +@@ -55,6 +66,12 @@ public final class RegionFileCache implements AutoCloseable { RegionFile regionfile1 = new RegionFile(file, this.b, this.c); this.cache.putAndMoveToFirst(i, regionfile1); @@ -3816,7 +3859,7 @@ index 8ceebe1f5ca8821228faf65e1d26fa205ec1e56c..53500c2643279fdae73c4cfce2a0d7fb return regionfile1; } } -@@ -127,11 +144,12 @@ public final class RegionFileCache implements AutoCloseable { +@@ -130,11 +147,12 @@ public final class RegionFileCache implements AutoCloseable { @Nullable public NBTTagCompound read(ChunkCoordIntPair chunkcoordintpair) throws IOException { // CraftBukkit start - SPIGOT-5680: There's no good reason to preemptively create files on read, save that for writing @@ -3830,7 +3873,7 @@ index 8ceebe1f5ca8821228faf65e1d26fa205ec1e56c..53500c2643279fdae73c4cfce2a0d7fb DataInputStream datainputstream = regionfile.a(chunkcoordintpair); // Paper start if (regionfile.isOversized(chunkcoordintpair.x, chunkcoordintpair.z)) { -@@ -169,10 +187,14 @@ public final class RegionFileCache implements AutoCloseable { +@@ -172,10 +190,14 @@ public final class RegionFileCache implements AutoCloseable { } return nbttagcompound; @@ -3846,7 +3889,7 @@ index 8ceebe1f5ca8821228faf65e1d26fa205ec1e56c..53500c2643279fdae73c4cfce2a0d7fb int attempts = 0; Exception laste = null; while (attempts++ < 5) { try { // Paper DataOutputStream dataoutputstream = regionfile.c(chunkcoordintpair); Throwable throwable = null; -@@ -211,9 +233,12 @@ public final class RegionFileCache implements AutoCloseable { +@@ -214,9 +236,12 @@ public final class RegionFileCache implements AutoCloseable { MinecraftServer.LOGGER.error("Failed to save chunk", laste); } // Paper end @@ -3860,7 +3903,7 @@ index 8ceebe1f5ca8821228faf65e1d26fa205ec1e56c..53500c2643279fdae73c4cfce2a0d7fb ExceptionSuppressor exceptionsuppressor = new ExceptionSuppressor<>(); ObjectIterator objectiterator = this.cache.values().iterator(); -@@ -240,4 +265,12 @@ public final class RegionFileCache implements AutoCloseable { +@@ -243,4 +268,12 @@ public final class RegionFileCache implements AutoCloseable { } } @@ -3874,7 +3917,7 @@ index 8ceebe1f5ca8821228faf65e1d26fa205ec1e56c..53500c2643279fdae73c4cfce2a0d7fb + // CraftBukkit end } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileSection.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileSection.java -index 8ad97a8a2189553da88810380b1c240079eacc93..40cf6af57c9fad294dd502f797d23e6d908087c2 100644 +index 8ad97a8a2189553da88810380b1c240079eacc93..d3b9a9e4695655860c72db5f2188472681e8d37a 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileSection.java @@ -30,28 +30,29 @@ import net.minecraft.world.level.World; @@ -3889,7 +3932,7 @@ index 8ad97a8a2189553da88810380b1c240079eacc93..40cf6af57c9fad294dd502f797d23e6d + // Paper - nuke IOWorker private final Long2ObjectMap> c = new Long2ObjectOpenHashMap(); - private final LongLinkedOpenHashSet d = new LongLinkedOpenHashSet(); -+ protected final LongLinkedOpenHashSet d = new LongLinkedOpenHashSet(); // Paper - private -> protected ++ public final LongLinkedOpenHashSet d = new LongLinkedOpenHashSet(); // Paper - private -> public private final Function> e; private final Function f; private final DataFixer g; diff --git a/Spigot-Server-Patches/0370-Use-getChunkIfLoadedImmediately-in-places.patch b/Spigot-Server-Patches/0370-Use-getChunkIfLoadedImmediately-in-places.patch index b011cf62ad..15f39d2fe8 100644 --- a/Spigot-Server-Patches/0370-Use-getChunkIfLoadedImmediately-in-places.patch +++ b/Spigot-Server-Patches/0370-Use-getChunkIfLoadedImmediately-in-places.patch @@ -8,10 +8,10 @@ ticket level 33 (yes getChunkIfLoaded will actually perform a chunk load in that case). diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index ea89392698cd712844cde6976d60a1c2ba6f1b15..cc24b2fa12ba998fa7c41376ec442c05eb754375 100644 +index 1ceff988080b47352edf9cdf3c4f8e69421765d2..a67462e10c6f8cb0eecb9a81fdc55f353c258368 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -204,7 +204,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -207,7 +207,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } @Override public Chunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI @@ -21,7 +21,7 @@ index ea89392698cd712844cde6976d60a1c2ba6f1b15..cc24b2fa12ba998fa7c41376ec442c05 // Paper start - Asynchronous IO diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 24184c88f354baa082e2ceb0674a4a1a4e1eb65b..0ac3df7c0b9f49a7bb4dfcf97df74e9caeddc1f7 100644 +index 12d98c82b93658d1246bfe267bbfc87d3a56bbaa..bae1fb41b1559373f73d4ed3ba145d81a71cabeb 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java @@ -1242,7 +1242,7 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -34,10 +34,10 @@ index 24184c88f354baa082e2ceb0674a4a1a4e1eb65b..0ac3df7c0b9f49a7bb4dfcf97df74e9c return; } diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 81f657084afdfcace67a2245230b0cb91dd919bd..dbe1de86ea8d638f90adaf8ff78a34c2e95d0691 100644 +index 15da3511a9e57c320f4cf409852bee07109095bc..b620d7e0d824c8d0758a66a8fbe872c3e45103d2 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -156,6 +156,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -164,6 +164,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable { return (CraftServer) Bukkit.getServer(); } @@ -51,7 +51,7 @@ index 81f657084afdfcace67a2245230b0cb91dd919bd..dbe1de86ea8d638f90adaf8ff78a34c2 public ResourceKey getTypeKey() { return typeKey; } -@@ -1054,14 +1061,14 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1062,14 +1069,14 @@ public abstract class World implements GeneratorAccess, AutoCloseable { } public boolean p(BlockPosition blockposition) { @@ -68,7 +68,7 @@ index 81f657084afdfcace67a2245230b0cb91dd919bd..dbe1de86ea8d638f90adaf8ff78a34c2 return ichunkaccess == null ? false : ichunkaccess.getType(blockposition).a((IBlockAccess) this, blockposition, entity, enumdirection); } -@@ -1182,7 +1189,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1190,7 +1197,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { for (int i1 = i; i1 < j; ++i1) { for (int j1 = k; j1 < l; ++j1) { diff --git a/Spigot-Server-Patches/0371-Reduce-sync-loads.patch b/Spigot-Server-Patches/0371-Reduce-sync-loads.patch index e9346712b3..d52a10aa0d 100644 --- a/Spigot-Server-Patches/0371-Reduce-sync-loads.patch +++ b/Spigot-Server-Patches/0371-Reduce-sync-loads.patch @@ -105,10 +105,10 @@ index f657e9b6bb3d24a6c77ef584711a003d1eea0341..eb1e86e8bb0f421e3686ffa02a4015a5 if (args.length < 2 || args[1].equals("*")) { diff --git a/src/main/java/com/destroystokyo/paper/io/SyncLoadFinder.java b/src/main/java/com/destroystokyo/paper/io/SyncLoadFinder.java new file mode 100644 -index 0000000000000000000000000000000000000000..1a68a8012f83bab9e814159c76b8c3710c7b1112 +index 0000000000000000000000000000000000000000..d381f91cf105bfc01846ada90da8971a3618e784 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/io/SyncLoadFinder.java -@@ -0,0 +1,172 @@ +@@ -0,0 +1,171 @@ +package com.destroystokyo.paper.io; + +import com.google.gson.JsonArray; @@ -116,14 +116,13 @@ index 0000000000000000000000000000000000000000..1a68a8012f83bab9e814159c76b8c371 +import com.mojang.datafixers.util.Pair; +import it.unimi.dsi.fastutil.longs.Long2IntMap; +import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap; -+import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -+import net.minecraft.server.World; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.WeakHashMap; ++import net.minecraft.world.level.World; + +public class SyncLoadFinder { + @@ -282,10 +281,10 @@ index 0000000000000000000000000000000000000000..1a68a8012f83bab9e814159c76b8c371 + } +} diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 32ef8b2e52b47c2fdeb13d00df5107fa7c3b540e..3d3c58cef3a92355caa6dad7053d129f2e8e0732 100644 +index df71f8c42ac488153257614b58202bb5d7083251..2530c5ddfc8469329b411ad5c98ed718a3771890 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -493,6 +493,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -494,6 +494,7 @@ public class ChunkProviderServer extends IChunkProvider { this.world.asyncChunkTaskManager.raisePriority(x, z, com.destroystokyo.paper.io.PrioritizedTaskQueue.HIGHEST_PRIORITY); com.destroystokyo.paper.io.chunk.ChunkTaskManager.pushChunkWait(this.world, x, z); // Paper end @@ -294,10 +293,10 @@ index 32ef8b2e52b47c2fdeb13d00df5107fa7c3b540e..3d3c58cef3a92355caa6dad7053d129f this.serverThreadQueue.awaitTasks(completablefuture::isDone); com.destroystokyo.paper.io.chunk.ChunkTaskManager.popChunkWait(); // Paper - async chunk debug diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index cc24b2fa12ba998fa7c41376ec442c05eb754375..04cbcb6a872c0b595a691f705131100341e0ec63 100644 +index a67462e10c6f8cb0eecb9a81fdc55f353c258368..23f88bd794b2c738463e1aa1180b6826d33f3b77 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -279,6 +279,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -282,6 +282,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { }; public final com.destroystokyo.paper.io.chunk.ChunkTaskManager asyncChunkTaskManager; // Paper end @@ -311,10 +310,10 @@ index cc24b2fa12ba998fa7c41376ec442c05eb754375..04cbcb6a872c0b595a691f7051311003 // Add env and gen to constructor, WorldData -> WorldDataServer public WorldServer(MinecraftServer minecraftserver, Executor executor, Convertable.ConversionSession convertable_conversionsession, IWorldDataServer iworlddataserver, ResourceKey resourcekey, DimensionManager dimensionmanager, WorldLoadListener worldloadlistener, ChunkGenerator chunkgenerator, boolean flag, long i, List list, boolean flag1, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen) { diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index dbe1de86ea8d638f90adaf8ff78a34c2e95d0691..3c66c1920119fdf6208e0d545f6b8bbd4e5d9a6d 100644 +index b620d7e0d824c8d0758a66a8fbe872c3e45103d2..6781b25cc8e15be2556bb1bb8dc8c18c106b40ec 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -1122,7 +1122,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1130,7 +1130,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { for (int i1 = i; i1 <= j; ++i1) { for (int j1 = k; j1 <= l; ++j1) { @@ -323,7 +322,7 @@ index dbe1de86ea8d638f90adaf8ff78a34c2e95d0691..3c66c1920119fdf6208e0d545f6b8bbd if (chunk != null) { chunk.a(entity, axisalignedbb, list, predicate); -@@ -1143,7 +1143,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1151,7 +1151,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { for (int i1 = i; i1 < j; ++i1) { for (int j1 = k; j1 < l; ++j1) { @@ -332,7 +331,7 @@ index dbe1de86ea8d638f90adaf8ff78a34c2e95d0691..3c66c1920119fdf6208e0d545f6b8bbd if (chunk != null) { chunk.a(entitytypes, axisalignedbb, list, predicate); -@@ -1166,7 +1166,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1174,7 +1174,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { for (int i1 = i; i1 < j; ++i1) { for (int j1 = k; j1 < l; ++j1) { diff --git a/Spigot-Server-Patches/0374-Fix-MC-158900.patch b/Spigot-Server-Patches/0374-Fix-MC-158900.patch index df7c5e7a4b..4a59df3b05 100644 --- a/Spigot-Server-Patches/0374-Fix-MC-158900.patch +++ b/Spigot-Server-Patches/0374-Fix-MC-158900.patch @@ -7,10 +7,10 @@ The problem was we were checking isExpired() on the entry, but if it was expired at that point, then it would be null. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 85bb7fc6d4b65ffb2923d5a6776ebe7a89605024..7386c30b4455deb4e8916bb721e9505ad0aded15 100644 +index ae0aaaf129c44901ac72c67e50c663333ab57f9d..f1dd51f30a40613a1fa1e00be43d21684ea9c274 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -605,8 +605,10 @@ public abstract class PlayerList { +@@ -607,8 +607,10 @@ public abstract class PlayerList { Player player = entity.getBukkitEntity(); PlayerLoginEvent event = new PlayerLoginEvent(player, hostname, ((java.net.InetSocketAddress) socketaddress).getAddress(), ((java.net.InetSocketAddress) loginlistener.networkManager.getRawAddress()).getAddress()); diff --git a/Spigot-Server-Patches/0375-implement-optional-per-player-mob-spawns.patch b/Spigot-Server-Patches/0375-implement-optional-per-player-mob-spawns.patch index 058fd94b4c..4068ba842a 100644 --- a/Spigot-Server-Patches/0375-implement-optional-per-player-mob-spawns.patch +++ b/Spigot-Server-Patches/0375-implement-optional-per-player-mob-spawns.patch @@ -5,7 +5,7 @@ Subject: [PATCH] implement optional per player mob spawns diff --git a/src/main/java/co/aikar/timings/WorldTimingsHandler.java b/src/main/java/co/aikar/timings/WorldTimingsHandler.java -index a27dc38d1a29ed1d63d2f44b7984c2b65be487d9..96aaaab5b7685c874463505f9d25e8a0a01a6e7c 100644 +index 2da28784ee427001b1137c859f0b4c350abd3110..c5f594d45012016d99b83a778a2b9d20a7c086ac 100644 --- a/src/main/java/co/aikar/timings/WorldTimingsHandler.java +++ b/src/main/java/co/aikar/timings/WorldTimingsHandler.java @@ -57,6 +57,7 @@ public class WorldTimingsHandler { @@ -40,23 +40,22 @@ index b913cd2dd0cd1b369b3f7b5a9d8b1be73f6d7920..6aec502eb529d4090306e12e837117cd } diff --git a/src/main/java/com/destroystokyo/paper/util/PlayerMobDistanceMap.java b/src/main/java/com/destroystokyo/paper/util/PlayerMobDistanceMap.java new file mode 100644 -index 0000000000000000000000000000000000000000..9ebd7ecb7a0ac73ccacf34c097056598bb5d26e8 +index 0000000000000000000000000000000000000000..6124b54d99adbb2a5bb9bb09dfd02522a67ab3ba --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/util/PlayerMobDistanceMap.java -@@ -0,0 +1,253 @@ +@@ -0,0 +1,252 @@ +package com.destroystokyo.paper.util; + +import it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet; -+import net.minecraft.server.ChunkCoordIntPair; -+import net.minecraft.server.EntityPlayer; -+import net.minecraft.server.SectionPosition; -+import org.spigotmc.AsyncCatcher; -+import java.util.HashMap; +import java.util.List; +import java.util.Map; -+import java.util.Set; ++import net.minecraft.core.SectionPosition; ++import net.minecraft.server.level.EntityPlayer; ++import net.minecraft.world.level.ChunkCoordIntPair; ++import org.spigotmc.AsyncCatcher; ++import java.util.HashMap; + +/** @author Spottedleaf */ +public final class PlayerMobDistanceMap { @@ -545,10 +544,10 @@ index 0000000000000000000000000000000000000000..4f13d3ff8391793a99f067189f854078 + } +} diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 3d3c58cef3a92355caa6dad7053d129f2e8e0732..a20c1df6d0cc7b869bcd4094c1627a16c33604d7 100644 +index 2530c5ddfc8469329b411ad5c98ed718a3771890..4998fad49755c08e20ebfb1dc97b558e1cf10b50 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -766,7 +766,22 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -767,7 +767,22 @@ public class ChunkProviderServer extends IChunkProvider { this.world.getMethodProfiler().enter("naturalSpawnCount"); this.world.timings.countNaturalMobs.startTiming(); // Paper - timings int l = this.chunkMapDistance.b(); @@ -573,10 +572,18 @@ index 3d3c58cef3a92355caa6dad7053d129f2e8e0732..a20c1df6d0cc7b869bcd4094c1627a16 this.p = spawnercreature_d; diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 689063b7f1e57d691f130ddb399177566edcad2e..4a03432a644763dc3a56788e69ee2580a9e15254 100644 +index 3105ec935e6fb2cf36b95e63dc9dc09dbfb45029..d66956b879ad7b05ea2a0252ca14b2d06dba135c 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -218,6 +218,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -94,6 +94,7 @@ import net.minecraft.world.effect.MobEffects; + import net.minecraft.world.entity.Entity; + import net.minecraft.world.entity.EntityInsentient; + import net.minecraft.world.entity.EntityLiving; ++import net.minecraft.world.entity.EnumCreatureType; + import net.minecraft.world.entity.EnumMainHand; + import net.minecraft.world.entity.IEntityAngerable; + import net.minecraft.world.entity.animal.horse.EntityHorseAbstract; +@@ -218,6 +219,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public boolean queueHealthUpdatePacket = false; public net.minecraft.network.protocol.game.PacketPlayOutUpdateHealth queuedHealthUpdatePacket; // Paper end @@ -588,7 +595,7 @@ index 689063b7f1e57d691f130ddb399177566edcad2e..4a03432a644763dc3a56788e69ee2580 // CraftBukkit start public String displayName; -@@ -256,6 +261,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -256,6 +262,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { this.adventure$displayName = net.kyori.adventure.text.Component.text(this.getName()); // Paper this.canPickUpLoot = true; this.maxHealthCache = this.getMaxHealth(); @@ -596,7 +603,7 @@ index 689063b7f1e57d691f130ddb399177566edcad2e..4a03432a644763dc3a56788e69ee2580 } // Yes, this doesn't match Vanilla, but it's the best we can do for now. -@@ -2051,6 +2057,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -2051,6 +2058,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } @@ -605,10 +612,18 @@ index 689063b7f1e57d691f130ddb399177566edcad2e..4a03432a644763dc3a56788e69ee2580 return this.cj; } diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index a9c970f6a3227c37e55549488ab9bdadf833b0c1..207c8343815991c687c411cb374081fb485dd0b7 100644 +index a6c3bed5824d112042536a5666098d4d80173c3b..9c5b1dd305567f09a23a3f189d4dadba323b643e 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -126,7 +126,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -72,6 +72,7 @@ import net.minecraft.util.thread.ThreadedMailbox; + import net.minecraft.world.entity.Entity; + import net.minecraft.world.entity.EntityInsentient; + import net.minecraft.world.entity.EntityTypes; ++import net.minecraft.world.entity.EnumCreatureType; + import net.minecraft.world.entity.ai.village.poi.VillagePlace; + import net.minecraft.world.entity.boss.EntityComplexPart; + import net.minecraft.world.entity.player.EntityHuman; +@@ -129,7 +130,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public final Int2ObjectMap trackedEntities; private final Long2ByteMap z; private final Queue A; private final Queue getUnloadQueueTasks() { return this.A; } // Paper - OBFHELPER @@ -618,7 +633,7 @@ index a9c970f6a3227c37e55549488ab9bdadf833b0c1..207c8343815991c687c411cb374081fb // CraftBukkit start - recursion-safe executor for Chunk loadCallback() and unloadCallback() public final CallbackExecutor callbackExecutor = new CallbackExecutor(); -@@ -205,6 +206,24 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -208,6 +210,24 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.l = supplier; this.m = new VillagePlace(new File(this.w, "poi"), datafixer, flag, this.world); // Paper this.setViewDistance(i); @@ -644,10 +659,10 @@ index a9c970f6a3227c37e55549488ab9bdadf833b0c1..207c8343815991c687c411cb374081fb private static double a(ChunkCoordIntPair chunkcoordintpair, Entity entity) { diff --git a/src/main/java/net/minecraft/world/entity/EntityTypes.java b/src/main/java/net/minecraft/world/entity/EntityTypes.java -index 8ba75c847efa0633e7b8cb718e3a9b55e0b8ad77..82f42f73b9696220be6d8003ec8c108a4ba3f082 100644 +index 1355c074353611669c947cb0f06c67be0ab418aa..9d2955f05aadd4bbc6dcfec068a55d7fe6950ba0 100644 --- a/src/main/java/net/minecraft/world/entity/EntityTypes.java +++ b/src/main/java/net/minecraft/world/entity/EntityTypes.java -@@ -425,6 +425,7 @@ public class EntityTypes { +@@ -426,6 +426,7 @@ public class EntityTypes { return this.bl; } diff --git a/Spigot-Server-Patches/0376-Prevent-consuming-the-wrong-itemstack.patch b/Spigot-Server-Patches/0376-Prevent-consuming-the-wrong-itemstack.patch index dba977497d..743d331f2f 100644 --- a/Spigot-Server-Patches/0376-Prevent-consuming-the-wrong-itemstack.patch +++ b/Spigot-Server-Patches/0376-Prevent-consuming-the-wrong-itemstack.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent consuming the wrong itemstack diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index 8a0d125bc1cf3a75141a286f0c9fb553827e556f..f0feb60b95eed9e7445bb37f60231ae1ac108963 100644 +index ecceb272028e1ae1dd40c0c39d6f687fccfabb58..903c3cfdaae3dd1750aa2f32f6cdbb423909eb47 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java -@@ -3200,10 +3200,13 @@ public abstract class EntityLiving extends Entity { +@@ -3201,10 +3201,13 @@ public abstract class EntityLiving extends Entity { this.datawatcher.set(EntityLiving.ag, (byte) j); } @@ -24,7 +24,7 @@ index 8a0d125bc1cf3a75141a286f0c9fb553827e556f..f0feb60b95eed9e7445bb37f60231ae1 this.activeItem = itemstack; this.bd = itemstack.k(); if (!this.world.isClientSide) { -@@ -3281,6 +3284,7 @@ public abstract class EntityLiving extends Entity { +@@ -3282,6 +3285,7 @@ public abstract class EntityLiving extends Entity { this.releaseActiveItem(); } else { if (!this.activeItem.isEmpty() && this.isHandRaised()) { @@ -32,7 +32,7 @@ index 8a0d125bc1cf3a75141a286f0c9fb553827e556f..f0feb60b95eed9e7445bb37f60231ae1 this.b(this.activeItem, 16); // CraftBukkit start - fire PlayerItemConsumeEvent ItemStack itemstack; -@@ -3315,8 +3319,8 @@ public abstract class EntityLiving extends Entity { +@@ -3316,8 +3320,8 @@ public abstract class EntityLiving extends Entity { } this.clearActiveItem(); diff --git a/Spigot-Server-Patches/0383-Fix-stuck-in-sneak-when-changing-worlds-MC-10657.patch b/Spigot-Server-Patches/0383-Fix-stuck-in-sneak-when-changing-worlds-MC-10657.patch index 88ed547850..b9757db297 100644 --- a/Spigot-Server-Patches/0383-Fix-stuck-in-sneak-when-changing-worlds-MC-10657.patch +++ b/Spigot-Server-Patches/0383-Fix-stuck-in-sneak-when-changing-worlds-MC-10657.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix stuck in sneak when changing worlds (MC-10657) diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 4a03432a644763dc3a56788e69ee2580a9e15254..77f1a2a5b1c172c5bc991d27aaa3e19a53de72c0 100644 +index d66956b879ad7b05ea2a0252ca14b2d06dba135c..4ab293c49eba44ee3533b07866c5bdd68b1e849b 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -1071,6 +1071,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1072,6 +1072,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { this.lastHealthSent = -1.0F; this.lastFoodSent = -1; @@ -18,10 +18,10 @@ index 4a03432a644763dc3a56788e69ee2580a9e15254..77f1a2a5b1c172c5bc991d27aaa3e19a PlayerChangedWorldEvent changeEvent = new PlayerChangedWorldEvent(this.getBukkitEntity(), worldserver1.getWorld()); this.world.getServer().getPluginManager().callEvent(changeEvent); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 7386c30b4455deb4e8916bb721e9505ad0aded15..0c51f90c103600be8881f204bdd18fb12e0ef11c 100644 +index f1dd51f30a40613a1fa1e00be43d21684ea9c274..1f74fddfc6d9d9ae38fd35f83fa668e38591b222 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -844,6 +844,8 @@ public abstract class PlayerList { +@@ -846,6 +846,8 @@ public abstract class PlayerList { entityplayer.playerConnection.sendPacket(new PacketPlayOutEntityEffect(entityplayer.getId(), mobEffect)); } diff --git a/Spigot-Server-Patches/0385-Fix-AssertionError-when-player-hand-set-to-empty-typ.patch b/Spigot-Server-Patches/0385-Fix-AssertionError-when-player-hand-set-to-empty-typ.patch index d77ec9555a..bcf97dc96b 100644 --- a/Spigot-Server-Patches/0385-Fix-AssertionError-when-player-hand-set-to-empty-typ.patch +++ b/Spigot-Server-Patches/0385-Fix-AssertionError-when-player-hand-set-to-empty-typ.patch @@ -7,7 +7,7 @@ Fixes an AssertionError when setting the player's item in hand to null or a new Fixes GH-2718 diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 0ac3df7c0b9f49a7bb4dfcf97df74e9caeddc1f7..fef5b401a168c5b2be26c834e03b014d6231daf9 100644 +index bae1fb41b1559373f73d4ed3ba145d81a71cabeb..28106cc6acbdcd026c646c030491d74049306861 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java @@ -1705,6 +1705,10 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -22,10 +22,10 @@ index 0ac3df7c0b9f49a7bb4dfcf97df74e9caeddc1f7..fef5b401a168c5b2be26c834e03b014d if (enuminteractionresult.b()) { diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index f0feb60b95eed9e7445bb37f60231ae1ac108963..1102659557ea9f0ab4fe6225cbf1dc1006661caf 100644 +index 903c3cfdaae3dd1750aa2f32f6cdbb423909eb47..58cf4bb4c6267c4d8d71bbd29ed34575eb93aed3 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java -@@ -2155,6 +2155,7 @@ public abstract class EntityLiving extends Entity { +@@ -2156,6 +2156,7 @@ public abstract class EntityLiving extends Entity { return predicate.test(this.getItemInMainHand().getItem()) || predicate.test(this.getItemInOffHand().getItem()); } diff --git a/Spigot-Server-Patches/0390-Optimize-Hoppers.patch b/Spigot-Server-Patches/0390-Optimize-Hoppers.patch index 6a6905b5e0..92ec649147 100644 --- a/Spigot-Server-Patches/0390-Optimize-Hoppers.patch +++ b/Spigot-Server-Patches/0390-Optimize-Hoppers.patch @@ -63,10 +63,10 @@ index 5da20483ed352ac6d9695287f840ed643a2bf302..8a2ff2ef17aba806a63be3aaebfa779d itemstack.d(this.D()); if (this.tag != null) { diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 3c66c1920119fdf6208e0d545f6b8bbd4e5d9a6d..03d521444178aa6d3291f4177cdca993c8a251fc 100644 +index 6781b25cc8e15be2556bb1bb8dc8c18c106b40ec..d1738b57efd3f5e6c51603553a773173e4b09bb5 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -1154,8 +1154,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1162,8 +1162,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { return list; } @@ -78,10 +78,18 @@ index 3c66c1920119fdf6208e0d545f6b8bbd4e5d9a6d..03d521444178aa6d3291f4177cdca993 int i = MathHelper.floor((axisalignedbb.minX - 2.0D) / 16.0D); int j = MathHelper.f((axisalignedbb.maxX + 2.0D) / 16.0D); diff --git a/src/main/java/net/minecraft/world/level/block/entity/IHopper.java b/src/main/java/net/minecraft/world/level/block/entity/IHopper.java -index d0943ae1f372784716195666212ff83e6ee4873e..885ca0a12d3514212bd03392c7da6891efc05b0b 100644 +index d0943ae1f372784716195666212ff83e6ee4873e..1db7b7bfe98658d0b20800a4178556f8daaf881a 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/IHopper.java +++ b/src/main/java/net/minecraft/world/level/block/entity/IHopper.java -@@ -17,12 +17,13 @@ public interface IHopper extends IInventory { +@@ -1,6 +1,7 @@ + package net.minecraft.world.level.block.entity; + + import javax.annotation.Nullable; ++import net.minecraft.core.BlockPosition; + import net.minecraft.world.IInventory; + import net.minecraft.world.level.World; + import net.minecraft.world.level.block.Block; +@@ -17,12 +18,13 @@ public interface IHopper extends IInventory { return IHopper.c; } @@ -100,10 +108,10 @@ index d0943ae1f372784716195666212ff83e6ee4873e..885ca0a12d3514212bd03392c7da6891 + double A(); default double getZ() { return this.A(); } // Paper - OBFHELPER } diff --git a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -index 642ed6e5788a79f7bc7d6185564bdf0df07e492c..a497d23de7ff0dba9e0ac10a63e77fc514599d51 100644 +index 3ff9e389fcf15044c2740fb884c9438428d7a681..9088fd324207f2abc9ba04cf510b519f4fbb8cc9 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TileEntity.java -@@ -76,6 +76,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / +@@ -77,6 +77,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / public void setCurrentChunk(Chunk chunk) { this.currentChunk = chunk != null ? new java.lang.ref.WeakReference<>(chunk) : null; } @@ -111,7 +119,7 @@ index 642ed6e5788a79f7bc7d6185564bdf0df07e492c..a497d23de7ff0dba9e0ac10a63e77fc5 // Paper end @Nullable -@@ -154,6 +155,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / +@@ -155,6 +156,7 @@ public abstract class TileEntity implements net.minecraft.server.KeyedObject { / public void update() { if (this.world != null) { diff --git a/Spigot-Server-Patches/0391-PlayerDeathEvent-shouldDropExperience.patch b/Spigot-Server-Patches/0391-PlayerDeathEvent-shouldDropExperience.patch index c9081f7cbb..9961c720cb 100644 --- a/Spigot-Server-Patches/0391-PlayerDeathEvent-shouldDropExperience.patch +++ b/Spigot-Server-Patches/0391-PlayerDeathEvent-shouldDropExperience.patch @@ -5,10 +5,10 @@ Subject: [PATCH] PlayerDeathEvent#shouldDropExperience diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 77f1a2a5b1c172c5bc991d27aaa3e19a53de72c0..a3195ab0c447d5532642b430411434abaa168306 100644 +index 4ab293c49eba44ee3533b07866c5bdd68b1e849b..3b3c0b32f4f7b3d97ffc63cc5a9878f96a32712e 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -820,7 +820,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -821,7 +821,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { this.eW(); } // SPIGOT-5478 must be called manually now diff --git a/Spigot-Server-Patches/0395-Optimise-IEntityAccess-getPlayerByUUID.patch b/Spigot-Server-Patches/0395-Optimise-IEntityAccess-getPlayerByUUID.patch index 325f5cedf4..f1ffe9ac54 100644 --- a/Spigot-Server-Patches/0395-Optimise-IEntityAccess-getPlayerByUUID.patch +++ b/Spigot-Server-Patches/0395-Optimise-IEntityAccess-getPlayerByUUID.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Optimise IEntityAccess#getPlayerByUUID Use the world entity map instead of iterating over all players diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 04cbcb6a872c0b595a691f705131100341e0ec63..7eec1b181ed99e78cfd43a6f48327133fdfbeee7 100644 +index 23f88bd794b2c738463e1aa1180b6826d33f3b77..f11617dc37771f65d574cd14ae9cea09103d11e1 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -286,6 +286,15 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -289,6 +289,15 @@ public class WorldServer extends World implements GeneratorAccessSeed { } // Paper end diff --git a/Spigot-Server-Patches/0397-Lag-compensate-eating.patch b/Spigot-Server-Patches/0397-Lag-compensate-eating.patch index e1bb679444..274f4b8ebb 100644 --- a/Spigot-Server-Patches/0397-Lag-compensate-eating.patch +++ b/Spigot-Server-Patches/0397-Lag-compensate-eating.patch @@ -7,10 +7,10 @@ When the server is lagging, players will wait longer when eating. Change to also use a time check instead if it passes. diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index 1102659557ea9f0ab4fe6225cbf1dc1006661caf..e1d8217e48e7c5e7870e46f43074c79efc298ccc 100644 +index 58cf4bb4c6267c4d8d71bbd29ed34575eb93aed3..00f94e94aa302e24d286164ae829c935d2bcce95 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java -@@ -213,7 +213,7 @@ public abstract class EntityLiving extends Entity { +@@ -214,7 +214,7 @@ public abstract class EntityLiving extends Entity { private int jumpTicks; private float bw; public ItemStack activeItem; // Paper - public @@ -19,7 +19,7 @@ index 1102659557ea9f0ab4fe6225cbf1dc1006661caf..e1d8217e48e7c5e7870e46f43074c79e protected int be; private BlockPosition bx; private Optional by; -@@ -3150,6 +3150,11 @@ public abstract class EntityLiving extends Entity { +@@ -3151,6 +3151,11 @@ public abstract class EntityLiving extends Entity { return ((Byte) this.datawatcher.get(EntityLiving.ag) & 2) > 0 ? EnumHand.OFF_HAND : EnumHand.MAIN_HAND; } @@ -31,7 +31,7 @@ index 1102659557ea9f0ab4fe6225cbf1dc1006661caf..e1d8217e48e7c5e7870e46f43074c79e private void t() { if (this.isHandRaised()) { if (ItemStack.d(this.b(this.getRaisedHand()), this.activeItem)) { -@@ -3159,7 +3164,12 @@ public abstract class EntityLiving extends Entity { +@@ -3160,7 +3165,12 @@ public abstract class EntityLiving extends Entity { this.b(this.activeItem, 5); } @@ -45,7 +45,7 @@ index 1102659557ea9f0ab4fe6225cbf1dc1006661caf..e1d8217e48e7c5e7870e46f43074c79e this.s(); } } else { -@@ -3209,7 +3219,10 @@ public abstract class EntityLiving extends Entity { +@@ -3210,7 +3220,10 @@ public abstract class EntityLiving extends Entity { if (!itemstack.isEmpty() && !this.isHandRaised() || forceUpdate) { // Paper use override flag this.activeItem = itemstack; @@ -57,7 +57,7 @@ index 1102659557ea9f0ab4fe6225cbf1dc1006661caf..e1d8217e48e7c5e7870e46f43074c79e if (!this.world.isClientSide) { this.c(1, true); this.c(2, enumhand == EnumHand.OFF_HAND); -@@ -3233,7 +3246,10 @@ public abstract class EntityLiving extends Entity { +@@ -3234,7 +3247,10 @@ public abstract class EntityLiving extends Entity { } } else if (!this.isHandRaised() && !this.activeItem.isEmpty()) { this.activeItem = ItemStack.b; @@ -69,7 +69,7 @@ index 1102659557ea9f0ab4fe6225cbf1dc1006661caf..e1d8217e48e7c5e7870e46f43074c79e } } -@@ -3361,7 +3377,10 @@ public abstract class EntityLiving extends Entity { +@@ -3362,7 +3378,10 @@ public abstract class EntityLiving extends Entity { } this.activeItem = ItemStack.b; diff --git a/Spigot-Server-Patches/0401-Tracking-Range-Improvements.patch b/Spigot-Server-Patches/0401-Tracking-Range-Improvements.patch index 0861ffab17..2e20c11638 100644 --- a/Spigot-Server-Patches/0401-Tracking-Range-Improvements.patch +++ b/Spigot-Server-Patches/0401-Tracking-Range-Improvements.patch @@ -8,10 +8,10 @@ Sets tracking range of watermobs to animals instead of misc and simplifies code Also ignores Enderdragon, defaulting it to Mojang's setting diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 207c8343815991c687c411cb374081fb485dd0b7..faec8a9a535d6b122c57cda8be3e4f8f3e52852b 100644 +index 9c5b1dd305567f09a23a3f189d4dadba323b643e..4be5f3be285b1944eee66684c1a565ac1eceb024 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -1785,6 +1785,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1789,6 +1789,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { while (iterator.hasNext()) { Entity entity = (Entity) iterator.next(); int j = entity.getEntityType().getChunkRange() * 16; diff --git a/Spigot-Server-Patches/0402-Entity-Activation-Range-2.0.patch b/Spigot-Server-Patches/0402-Entity-Activation-Range-2.0.patch index ebb8a0eb6a..cf9973597e 100644 --- a/Spigot-Server-Patches/0402-Entity-Activation-Range-2.0.patch +++ b/Spigot-Server-Patches/0402-Entity-Activation-Range-2.0.patch @@ -14,10 +14,10 @@ Adds flying monsters to control ghast and phantoms Adds villagers as separate config diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 7eec1b181ed99e78cfd43a6f48327133fdfbeee7..270d45c017e835cc6f13be01352925b42e08f66e 100644 +index f11617dc37771f65d574cd14ae9cea09103d11e1..c4adf5d3c2389d3344e179562eee6817cd4fb298 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -856,17 +856,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -859,17 +859,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { ++TimingHistory.entityTicks; // Paper - timings // Spigot start co.aikar.timings.Timing timer; // Paper @@ -39,7 +39,7 @@ index 7eec1b181ed99e78cfd43a6f48327133fdfbeee7..270d45c017e835cc6f13be01352925b4 try { // Paper end - timings entity.g(entity.locX(), entity.locY(), entity.locZ()); -@@ -880,12 +880,16 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -883,12 +883,16 @@ public class WorldServer extends World implements GeneratorAccessSeed { return IRegistry.ENTITY_TYPE.getKey(entity.getEntityType()).toString(); }); gameprofilerfiller.c("tickNonPassenger"); @@ -56,7 +56,7 @@ index 7eec1b181ed99e78cfd43a6f48327133fdfbeee7..270d45c017e835cc6f13be01352925b4 if (entity.inChunk) { Iterator iterator = entity.getPassengers().iterator(); -@@ -895,7 +899,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -898,7 +902,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { this.a(entity, entity1); } } @@ -65,7 +65,7 @@ index 7eec1b181ed99e78cfd43a6f48327133fdfbeee7..270d45c017e835cc6f13be01352925b4 } } -@@ -903,6 +907,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -906,6 +910,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { public void a(Entity entity, Entity entity1) { if (!entity1.dead && entity1.getVehicle() == entity) { if (entity1 instanceof EntityHuman || this.getChunkProvider().a(entity1)) { @@ -77,7 +77,7 @@ index 7eec1b181ed99e78cfd43a6f48327133fdfbeee7..270d45c017e835cc6f13be01352925b4 entity1.g(entity1.locX(), entity1.locY(), entity1.locZ()); entity1.lastYaw = entity1.yaw; entity1.lastPitch = entity1.pitch; -@@ -914,8 +923,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -917,8 +926,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { return IRegistry.ENTITY_TYPE.getKey(entity1.getEntityType()).toString(); }); gameprofilerfiller.c("tickPassenger"); @@ -95,7 +95,7 @@ index 7eec1b181ed99e78cfd43a6f48327133fdfbeee7..270d45c017e835cc6f13be01352925b4 gameprofilerfiller.exit(); } -@@ -928,7 +946,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -931,7 +949,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { this.a(entity1, entity2); } @@ -105,10 +105,18 @@ index 7eec1b181ed99e78cfd43a6f48327133fdfbeee7..270d45c017e835cc6f13be01352925b4 } } else { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index abfda88ab1d0353bbb14ae99dea212941ab2e899..02a39915e8aa1e04066f92f32479e9c161124a64 100644 +index 63268bc3e04ef334a750f83a8e39acc0919f7906..664ccd8fc43cbf1c9417670d14c937314379ccf9 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -248,7 +248,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -68,6 +68,7 @@ import net.minecraft.world.entity.animal.EntityFish; + import net.minecraft.world.entity.item.EntityItem; + import net.minecraft.world.entity.player.EntityHuman; + import net.minecraft.world.entity.vehicle.EntityBoat; ++import net.minecraft.world.entity.vehicle.EntityMinecartAbstract; + import net.minecraft.world.item.ItemStack; + import net.minecraft.world.item.enchantment.EnchantmentManager; + import net.minecraft.world.item.enchantment.EnchantmentProtection; +@@ -251,7 +252,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public boolean Y; public boolean impulse; public int portalCooldown; @@ -117,7 +125,7 @@ index abfda88ab1d0353bbb14ae99dea212941ab2e899..02a39915e8aa1e04066f92f32479e9c1 protected int portalTicks; protected BlockPosition ac; private boolean invulnerable; -@@ -272,6 +272,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -275,6 +276,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public final org.spigotmc.ActivationRange.ActivationType activationType = org.spigotmc.ActivationRange.initializeEntityActivationType(this); public final boolean defaultActivationState; public long activatedTick = Integer.MIN_VALUE; @@ -125,7 +133,7 @@ index abfda88ab1d0353bbb14ae99dea212941ab2e899..02a39915e8aa1e04066f92f32479e9c1 public boolean spawnedViaMobSpawner; // Paper - Yes this name is similar to above, upstream took the better one protected int numCollisions = 0; // Paper public void inactiveTick() { } -@@ -662,6 +663,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -665,6 +667,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne this.recalcPosition(); } else { if (enummovetype == EnumMoveType.PISTON) { @@ -133,7 +141,7 @@ index abfda88ab1d0353bbb14ae99dea212941ab2e899..02a39915e8aa1e04066f92f32479e9c1 vec3d = this.b(vec3d); if (vec3d.equals(Vec3D.ORIGIN)) { return; -@@ -674,6 +676,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -677,6 +680,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne this.x = Vec3D.ORIGIN; this.setMot(Vec3D.ORIGIN); } @@ -147,7 +155,7 @@ index abfda88ab1d0353bbb14ae99dea212941ab2e899..02a39915e8aa1e04066f92f32479e9c1 vec3d = this.a(vec3d, enummovetype); Vec3D vec3d1 = this.g(vec3d); -@@ -2004,6 +2013,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2007,6 +2017,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } } @@ -155,7 +163,7 @@ index abfda88ab1d0353bbb14ae99dea212941ab2e899..02a39915e8aa1e04066f92f32479e9c1 public void k(Entity entity) { this.a(entity, Entity::setPosition); } -@@ -2814,6 +2824,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2817,6 +2828,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return this.ae; } @@ -176,10 +184,10 @@ index a9322e7cd8e07a2d5578c861991d53ec85fbfbcc..bbf0f345bfdd8a3a1f7fe902a42b2b18 protected EntityCreature(EntityTypes entitytypes, World world) { super(entitytypes, world); diff --git a/src/main/java/net/minecraft/world/entity/EntityInsentient.java b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -index a0857de5a14db5580bc047c401a006c9466c49b2..54d72f211b964a42009eb4d07060a35e3b91017a 100644 +index db72b685f4a4b95f345f1d34f9eeb83b8731120a..89d24d7532a256434513a45c901946e28db396bd 100644 --- a/src/main/java/net/minecraft/world/entity/EntityInsentient.java +++ b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -@@ -112,7 +112,7 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -115,7 +115,7 @@ public abstract class EntityInsentient extends EntityLiving { public MinecraftKey lootTableKey; public long lootTableSeed; @Nullable @@ -188,7 +196,7 @@ index a0857de5a14db5580bc047c401a006c9466c49b2..54d72f211b964a42009eb4d07060a35e private int bx; @Nullable private NBTTagCompound by; -@@ -193,6 +193,19 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -196,6 +196,19 @@ public abstract class EntityInsentient extends EntityLiving { return this.lookController; } @@ -209,10 +217,10 @@ index a0857de5a14db5580bc047c401a006c9466c49b2..54d72f211b964a42009eb4d07060a35e if (this.isPassenger() && this.getVehicle() instanceof EntityInsentient) { EntityInsentient entityinsentient = (EntityInsentient) this.getVehicle(); diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index e1d8217e48e7c5e7870e46f43074c79efc298ccc..61dc6cdd4e692319d2a82646b92bf625d1a3f87d 100644 +index 00f94e94aa302e24d286164ae829c935d2bcce95..750c568201acf447f598343437e67cb039423111 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java -@@ -191,7 +191,7 @@ public abstract class EntityLiving extends Entity { +@@ -192,7 +192,7 @@ public abstract class EntityLiving extends Entity { protected float aN; protected int aO;protected int getKillCount() { return this.aO; } // Paper - OBFHELPER public float lastDamage; @@ -423,10 +431,10 @@ index 190411d6fcee8bed686a2bcfd088aa7c2513fc26..3dd80fcf9237f15bb3bf38d1529340e1 this.datawatcher.set(EntityVillagerAbstract.bp, i); } diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 03d521444178aa6d3291f4177cdca993c8a251fc..60ad2b638d67ecd023b3a00b3609131b66d150e9 100644 +index d1738b57efd3f5e6c51603553a773173e4b09bb5..c4680142bf23d30169555abe7db78d85811e042b 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -134,6 +134,12 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -142,6 +142,12 @@ public abstract class World implements GeneratorAccess, AutoCloseable { public long ticksPerWaterSpawns; public long ticksPerWaterAmbientSpawns; public long ticksPerAmbientSpawns; diff --git a/Spigot-Server-Patches/0403-Fix-items-vanishing-through-end-portal.patch b/Spigot-Server-Patches/0403-Fix-items-vanishing-through-end-portal.patch index a2008e8e44..6d7c89e57a 100644 --- a/Spigot-Server-Patches/0403-Fix-items-vanishing-through-end-portal.patch +++ b/Spigot-Server-Patches/0403-Fix-items-vanishing-through-end-portal.patch @@ -13,10 +13,10 @@ Quickly loading the exact world spawn chunk before searching the heightmap resolves the issue without having to load all spawn chunks. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 02a39915e8aa1e04066f92f32479e9c161124a64..82e025776b0b6a01c35940df63f334b1d1fbdeb1 100644 +index 664ccd8fc43cbf1c9417670d14c937314379ccf9..cc50c0025a98ed1192fdc2e507c63c747e796dc6 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2726,6 +2726,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2730,6 +2730,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne BlockPosition blockposition1; if (flag1) { diff --git a/Spigot-Server-Patches/0405-Optimise-getChunkAt-calls-for-loaded-chunks.patch b/Spigot-Server-Patches/0405-Optimise-getChunkAt-calls-for-loaded-chunks.patch index f001e5d5a3..4228022274 100644 --- a/Spigot-Server-Patches/0405-Optimise-getChunkAt-calls-for-loaded-chunks.patch +++ b/Spigot-Server-Patches/0405-Optimise-getChunkAt-calls-for-loaded-chunks.patch @@ -7,10 +7,10 @@ bypass the need to get a player chunk, then get the either, then unwrap it... diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index a20c1df6d0cc7b869bcd4094c1627a16c33604d7..d6f897bf045ad00792e57adfe233548e9bd54877 100644 +index 4998fad49755c08e20ebfb1dc97b558e1cf10b50..2f172f38f817f48fe2e62235c3859b91e60bc0df 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -469,6 +469,12 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -470,6 +470,12 @@ public class ChunkProviderServer extends IChunkProvider { return this.getChunkAt(i, j, chunkstatus, flag); }, this.serverThreadQueue).join(); } else { @@ -23,7 +23,7 @@ index a20c1df6d0cc7b869bcd4094c1627a16c33604d7..d6f897bf045ad00792e57adfe233548e GameProfilerFiller gameprofilerfiller = this.world.getMethodProfiler(); gameprofilerfiller.c("getChunk"); -@@ -519,39 +525,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -520,39 +526,7 @@ public class ChunkProviderServer extends IChunkProvider { if (Thread.currentThread() != this.serverThread) { return null; } else { diff --git a/Spigot-Server-Patches/0408-Optimise-random-block-ticking.patch b/Spigot-Server-Patches/0408-Optimise-random-block-ticking.patch index 59ab9d936b..c62852f7ad 100644 --- a/Spigot-Server-Patches/0408-Optimise-random-block-ticking.patch +++ b/Spigot-Server-Patches/0408-Optimise-random-block-ticking.patch @@ -83,10 +83,10 @@ index 4c9ec211470f95d538d1d95c74796190edf99b87..8c0aeb51f5e230fd6109e750732eb545 return this.d(baseblockposition.getX(), baseblockposition.getY(), baseblockposition.getZ()); } diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 270d45c017e835cc6f13be01352925b42e08f66e..2b58f4b80f10b93868a686bc9d2630a02832d1dd 100644 +index c4adf5d3c2389d3344e179562eee6817cd4fb298..f666b281926876636672e76a7a5e6386a9701b6a 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -670,7 +670,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -673,7 +673,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { }); } @@ -100,7 +100,7 @@ index 270d45c017e835cc6f13be01352925b42e08f66e..2b58f4b80f10b93868a686bc9d2630a0 ChunkCoordIntPair chunkcoordintpair = chunk.getPos(); boolean flag = this.isRaining(); int j = chunkcoordintpair.d(); -@@ -678,10 +683,10 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -681,10 +686,10 @@ public class WorldServer extends World implements GeneratorAccessSeed { GameProfilerFiller gameprofilerfiller = this.getMethodProfiler(); gameprofilerfiller.enter("thunder"); @@ -113,7 +113,7 @@ index 270d45c017e835cc6f13be01352925b42e08f66e..2b58f4b80f10b93868a686bc9d2630a0 if (this.isRainingAt(blockposition)) { DifficultyDamageScaler difficultydamagescaler = this.getDamageScaler(blockposition); boolean flag1 = this.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.b() * paperConfig.skeleHorseSpawnChance; // Paper -@@ -704,59 +709,77 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -707,59 +712,77 @@ public class WorldServer extends World implements GeneratorAccessSeed { } gameprofilerfiller.exitEnter("iceandsnow"); @@ -272,10 +272,10 @@ index 38588e59f26dd1f3a43fc229195e4fb8484e3705..6fa8176530af23903f8e6ad33ab63f1b public BlockPosition getHomePos() { // Paper - public diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 60ad2b638d67ecd023b3a00b3609131b66d150e9..0fd8550ebcb2c1b8ef5132155528ac32c75741bb 100644 +index c4680142bf23d30169555abe7db78d85811e042b..cc41dcd85760b57bb8076b37e9a907d1cb4e12c7 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -1464,10 +1464,18 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1472,10 +1472,18 @@ public abstract class World implements GeneratorAccess, AutoCloseable { public abstract ITagRegistry p(); public BlockPosition a(int i, int j, int k, int l) { @@ -311,10 +311,10 @@ index 46467230aac994e2b3864b7a1eddc701c4ade91c..09d157bd2795b7e4374778cbd1e554de } diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java -index 00658974083a97d74e3336d9c719892f25aa22a9..c89905b7fc30988dc3624270eac96bc1f06cd0cb 100644 +index 0b4e346daaea91565fde2f789fafa8b431a7b042..4bc26a7a4ae91aac90c256758ec8868d83027c0c 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java -@@ -13,12 +13,14 @@ import net.minecraft.world.level.material.Fluid; +@@ -14,12 +14,14 @@ import net.minecraft.world.level.material.Fluid; public class ChunkSection { public static final DataPalette GLOBAL_PALETTE = new DataPaletteGlobal<>(Block.REGISTRY_ID, Blocks.AIR.getBlockData()); @@ -326,12 +326,12 @@ index 00658974083a97d74e3336d9c719892f25aa22a9..c89905b7fc30988dc3624270eac96bc1 private short e; final DataPaletteBlock blockIds; // Paper - package-private -+ final com.destroystokyo.paper.util.maplist.IBlockDataList tickingList = new com.destroystokyo.paper.util.maplist.IBlockDataList(); // Paper ++ public final com.destroystokyo.paper.util.maplist.IBlockDataList tickingList = new com.destroystokyo.paper.util.maplist.IBlockDataList(); // Paper + // Paper start - Anti-Xray - Add parameters @Deprecated public ChunkSection(int i) { this(i, null, null, true); } // Notice for updates: Please make sure this constructor isn't used anywhere public ChunkSection(int i, IChunkAccess chunk, World world, boolean initializeBlocks) { -@@ -73,6 +75,9 @@ public class ChunkSection { +@@ -74,6 +76,9 @@ public class ChunkSection { --this.nonEmptyBlockCount; if (iblockdata1.isTicking()) { --this.tickingBlockCount; @@ -341,7 +341,7 @@ index 00658974083a97d74e3336d9c719892f25aa22a9..c89905b7fc30988dc3624270eac96bc1 } } -@@ -84,6 +89,9 @@ public class ChunkSection { +@@ -85,6 +90,9 @@ public class ChunkSection { ++this.nonEmptyBlockCount; if (iblockdata.isTicking()) { ++this.tickingBlockCount; @@ -351,7 +351,7 @@ index 00658974083a97d74e3336d9c719892f25aa22a9..c89905b7fc30988dc3624270eac96bc1 } } -@@ -119,23 +127,29 @@ public class ChunkSection { +@@ -120,23 +128,29 @@ public class ChunkSection { } public void recalcBlockCounts() { diff --git a/Spigot-Server-Patches/0409-Entity-Jump-API.patch b/Spigot-Server-Patches/0409-Entity-Jump-API.patch index b6fe855fbd..ff34d8f05a 100644 --- a/Spigot-Server-Patches/0409-Entity-Jump-API.patch +++ b/Spigot-Server-Patches/0409-Entity-Jump-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entity Jump API diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index 61dc6cdd4e692319d2a82646b92bf625d1a3f87d..21952ce66729946fb306fd15e9da4a3311551bec 100644 +index 750c568201acf447f598343437e67cb039423111..89abfdd32f47eed07080ff9d70440f0940628b4d 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java -@@ -2875,8 +2875,10 @@ public abstract class EntityLiving extends Entity { +@@ -2876,8 +2876,10 @@ public abstract class EntityLiving extends Entity { } else if (this.aQ() && (!this.onGround || d7 > d8)) { this.c((Tag) TagsFluid.LAVA); } else if ((this.onGround || flag && d7 <= d8) && this.jumpTicks == 0) { @@ -34,10 +34,10 @@ index f755607872920caae1410d38c431c16b5238c00f..711b322007a0973ff0aebf3c25efbae8 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index aa08ca83a105627b7e257ac664c29d899b557e9e..f0fb9954c9fc7ccf31e3c4bc633ce48c85ba49dd 100644 +index ff586b8366a6298f1906551b068e8abb26fcabc7..b18292ef2e00b4ef8a0b2da5f63a596dbd04b1fd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -789,5 +789,20 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -799,5 +799,20 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { public boolean isHandRaised() { return getHandle().isHandRaised(); } diff --git a/Spigot-Server-Patches/0410-Add-option-to-nerf-pigmen-from-nether-portals.patch b/Spigot-Server-Patches/0410-Add-option-to-nerf-pigmen-from-nether-portals.patch index 2100a66b07..0d3de5119b 100644 --- a/Spigot-Server-Patches/0410-Add-option-to-nerf-pigmen-from-nether-portals.patch +++ b/Spigot-Server-Patches/0410-Add-option-to-nerf-pigmen-from-nether-portals.patch @@ -19,10 +19,10 @@ index 7fbd501d70dccf869a4454e2789a5d68f2e15754..9e4591ddc4b755f4ff5a6f1078b51cb1 + } } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 82e025776b0b6a01c35940df63f334b1d1fbdeb1..c89c56a6d116526e11f4ba9ad3333d8cceafc3e8 100644 +index cc50c0025a98ed1192fdc2e507c63c747e796dc6..19322c00422ac53de9903b3492994ce6e3c3bef4 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -274,6 +274,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -278,6 +278,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public long activatedTick = Integer.MIN_VALUE; public boolean isTemporarilyActive = false; // Paper public boolean spawnedViaMobSpawner; // Paper - Yes this name is similar to above, upstream took the better one @@ -30,7 +30,7 @@ index 82e025776b0b6a01c35940df63f334b1d1fbdeb1..c89c56a6d116526e11f4ba9ad3333d8c protected int numCollisions = 0; // Paper public void inactiveTick() { } // Spigot end -@@ -1689,6 +1690,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1693,6 +1694,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne if (spawnedViaMobSpawner) { nbttagcompound.setBoolean("Paper.FromMobSpawner", true); } @@ -40,7 +40,7 @@ index 82e025776b0b6a01c35940df63f334b1d1fbdeb1..c89c56a6d116526e11f4ba9ad3333d8c // Paper end return nbttagcompound; } catch (Throwable throwable) { -@@ -1819,6 +1823,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1823,6 +1827,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } spawnedViaMobSpawner = nbttagcompound.getBoolean("Paper.FromMobSpawner"); // Restore entity's from mob spawner status diff --git a/Spigot-Server-Patches/0411-Make-the-GUI-graph-fancier.patch b/Spigot-Server-Patches/0411-Make-the-GUI-graph-fancier.patch index 9877b30ce6..72e312fc76 100644 --- a/Spigot-Server-Patches/0411-Make-the-GUI-graph-fancier.patch +++ b/Spigot-Server-Patches/0411-Make-the-GUI-graph-fancier.patch @@ -156,15 +156,14 @@ index 0000000000000000000000000000000000000000..0f29ad583e798c09b2fe3f568ed50cbc +} diff --git a/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java b/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java new file mode 100644 -index 0000000000000000000000000000000000000000..e463a86a6ad6c4f2885f4df159411bad294e1208 +index 0000000000000000000000000000000000000000..67d064e3959ed8d886df30ce9d97f86c2443fa39 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java -@@ -0,0 +1,74 @@ +@@ -0,0 +1,73 @@ +package com.destroystokyo.paper.gui; + ++import net.minecraft.SystemUtils; +import net.minecraft.server.MinecraftServer; -+import net.minecraft.server.SystemUtils; -+import org.bukkit.Bukkit; + +import javax.swing.DefaultListCellRenderer; +import javax.swing.DefaultListSelectionModel; @@ -177,7 +176,7 @@ index 0000000000000000000000000000000000000000..e463a86a6ad6c4f2885f4df159411bad +import java.util.Vector; + +public class RAMDetails extends JList { -+ public static final DecimalFormat DECIMAL_FORMAT = SystemUtils.a(new DecimalFormat("########0.000"), (format) ++ public static final DecimalFormat DECIMAL_FORMAT = SystemUtils.peek(new DecimalFormat("########0.000"), (format) + -> format.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.ROOT))); + + private final MinecraftServer server; @@ -384,6 +383,18 @@ index 0000000000000000000000000000000000000000..c3e54da4ab6440811aab2f9dd1e21880 + timer.stop(); + } +} +diff --git a/src/main/java/net/minecraft/SystemUtils.java b/src/main/java/net/minecraft/SystemUtils.java +index 46d82c1548088b8305f758699388edf0d5d4d050..397194b3e90c9df39cfae17b401c7ac891b0dbb7 100644 +--- a/src/main/java/net/minecraft/SystemUtils.java ++++ b/src/main/java/net/minecraft/SystemUtils.java +@@ -260,6 +260,7 @@ public class SystemUtils { + return supplier.get(); + } + ++ public static T peek(T t0, Consumer consumer) { return a(t0, consumer); } // Paper - OBFHELPER + public static T a(T t0, Consumer consumer) { + consumer.accept(t0); + return t0; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index ef6559190c336822149560d2f2748b2c90dfad86..928a801493003e3ab034f65ac501f5b7e1cb6c75 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/Spigot-Server-Patches/0412-add-hand-to-BlockMultiPlaceEvent.patch b/Spigot-Server-Patches/0412-add-hand-to-BlockMultiPlaceEvent.patch index c881fe0a7e..8d6a90aa7d 100644 --- a/Spigot-Server-Patches/0412-add-hand-to-BlockMultiPlaceEvent.patch +++ b/Spigot-Server-Patches/0412-add-hand-to-BlockMultiPlaceEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] add hand to BlockMultiPlaceEvent diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index b0f6ae131082dcccaca13797eb07efc7bb9e738d..9ee00daced670accc379f2b87d930751238172d6 100644 +index 0f8764f16b0719e9e370731dc02627e1a55e9708..b1db56faffebbf46ac871f5f77af0d47d7cf4a8f 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -329,13 +329,18 @@ public class CraftEventFactory { +@@ -331,13 +331,18 @@ public class CraftEventFactory { } org.bukkit.inventory.ItemStack item; diff --git a/Spigot-Server-Patches/0417-Optimise-Chunk-getFluid.patch b/Spigot-Server-Patches/0417-Optimise-Chunk-getFluid.patch index be0772fe92..8a93c47014 100644 --- a/Spigot-Server-Patches/0417-Optimise-Chunk-getFluid.patch +++ b/Spigot-Server-Patches/0417-Optimise-Chunk-getFluid.patch @@ -48,10 +48,10 @@ index 09d157bd2795b7e4374778cbd1e554de70f397bd..bd56cac7ce01942704d566c2cd8c1775 // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java -index c89905b7fc30988dc3624270eac96bc1f06cd0cb..506b79c67454e41d32ad18003f066681d47e50f5 100644 +index 4bc26a7a4ae91aac90c256758ec8868d83027c0c..973aa060d6964c7d470bc7aff89b879daf1df153 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java -@@ -44,7 +44,7 @@ public class ChunkSection { +@@ -45,7 +45,7 @@ public class ChunkSection { } public Fluid b(int i, int j, int k) { diff --git a/Spigot-Server-Patches/0418-Optimise-TickListServer-by-rewriting-it.patch b/Spigot-Server-Patches/0418-Optimise-TickListServer-by-rewriting-it.patch index fc53a4b879..ec933de0d8 100644 --- a/Spigot-Server-Patches/0418-Optimise-TickListServer-by-rewriting-it.patch +++ b/Spigot-Server-Patches/0418-Optimise-TickListServer-by-rewriting-it.patch @@ -61,31 +61,24 @@ index 8bf4d2b8c38c02d6a5b2fea37113689a252f1571..da93d38fe63035e4ff198ada84a4431f ConfigurationSection section; diff --git a/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java b/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java new file mode 100644 -index 0000000000000000000000000000000000000000..e7624948ea4aa1a07d84ed3d295cfe2dd354fd14 +index 0000000000000000000000000000000000000000..8918bad880d6eeed30db39b6326b2f65e24edf45 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java @@ -0,0 +1,628 @@ +package com.destroystokyo.paper.server.ticklist; + ++import java.util.function.Function; ++import net.minecraft.CrashReport; ++import net.minecraft.CrashReportSystemDetails; ++import net.minecraft.ReportedException; ++import net.minecraft.core.BlockPosition; ++import net.minecraft.nbt.NBTTagList; ++import net.minecraft.resources.MinecraftKey; +import net.minecraft.server.MCUtil; +import net.minecraft.server.MinecraftServer; +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectRBTreeSet; -+import net.minecraft.server.BlockPosition; -+import net.minecraft.server.ChunkCoordIntPair; -+import net.minecraft.server.ChunkProviderServer; -+import net.minecraft.server.CrashReport; -+import net.minecraft.server.CrashReportSystemDetails; -+import net.minecraft.server.IBlockData; -+import net.minecraft.server.MinecraftKey; -+import net.minecraft.server.NBTTagList; -+import net.minecraft.server.NextTickListEntry; -+import net.minecraft.server.ReportedException; -+import net.minecraft.server.StructureBoundingBox; -+import net.minecraft.server.TickListPriority; -+import net.minecraft.server.TickListServer; -+import net.minecraft.server.WorldServer; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collections; @@ -93,8 +86,15 @@ index 0000000000000000000000000000000000000000..e7624948ea4aa1a07d84ed3d295cfe2d +import java.util.Iterator; +import java.util.List; +import java.util.function.Consumer; -+import java.util.function.Function; +import java.util.function.Predicate; ++import net.minecraft.server.level.ChunkProviderServer; ++import net.minecraft.server.level.WorldServer; ++import net.minecraft.world.level.ChunkCoordIntPair; ++import net.minecraft.world.level.NextTickListEntry; ++import net.minecraft.world.level.TickListPriority; ++import net.minecraft.world.level.TickListServer; ++import net.minecraft.world.level.block.state.IBlockData; ++import net.minecraft.world.level.levelgen.structure.StructureBoundingBox; + +public final class PaperTickList extends TickListServer { // extend to avoid breaking ABI + @@ -334,7 +334,7 @@ index 0000000000000000000000000000000000000000..e7624948ea4aa1a07d84ed3d295cfe2d + private boolean warnedAboutDesync; + + @Override -+ protected void nextTick() { ++ public void nextTick() { + ++this.currentTick; + if (this.currentTick != this.world.getTime()) { + if (!this.warnedAboutDesync) { @@ -695,16 +695,16 @@ index 0000000000000000000000000000000000000000..e7624948ea4aa1a07d84ed3d295cfe2d +} diff --git a/src/main/java/com/destroystokyo/paper/server/ticklist/TickListServerInterval.java b/src/main/java/com/destroystokyo/paper/server/ticklist/TickListServerInterval.java new file mode 100644 -index 0000000000000000000000000000000000000000..13cf1a55a9babbffccbca1acfbe1c496e8925521 +index 0000000000000000000000000000000000000000..b58432a8b60670562baf00cf5279c702aaad4557 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/server/ticklist/TickListServerInterval.java @@ -0,0 +1,41 @@ +package com.destroystokyo.paper.server.ticklist; + +import com.destroystokyo.paper.util.set.LinkedSortedSet; -+import net.minecraft.server.NextTickListEntry; -+import net.minecraft.server.TickListPriority; +import java.util.Comparator; ++import net.minecraft.world.level.NextTickListEntry; ++import net.minecraft.world.level.TickListPriority; + +// represents a set of entries to tick at a specified time +public final class TickListServerInterval { @@ -901,10 +901,18 @@ index 8c0aeb51f5e230fd6109e750732eb54559bc9637..1fb931d4c0720a5e496030e25c865771 return this.b(baseblockposition.getX(), baseblockposition.getY(), baseblockposition.getZ()); } diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index d6f897bf045ad00792e57adfe233548e9bd54877..071151b774564f25ad08f47a8ffd67434d5bf940 100644 +index 2f172f38f817f48fe2e62235c3859b91e60bc0df..911b733d32400a6f963a20f10de3802e70dd8823 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -216,6 +216,13 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -21,6 +21,7 @@ import net.minecraft.SystemUtils; + import net.minecraft.core.BlockPosition; + import net.minecraft.core.SectionPosition; + import net.minecraft.network.protocol.Packet; ++import net.minecraft.server.MCUtil; + import net.minecraft.server.level.progress.WorldLoadListener; + import net.minecraft.util.MathHelper; + import net.minecraft.util.profiling.GameProfilerFiller; +@@ -217,6 +218,13 @@ public class ChunkProviderServer extends IChunkProvider { } // Paper end @@ -934,10 +942,10 @@ index 6433463938d8bb717840c8f57fe6e7079e1030f2..445dba8ed210407664904b707c36c78a } }); diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 2b58f4b80f10b93868a686bc9d2630a02832d1dd..bb66597eb882d6937c02982dd252951f1f37bb42 100644 +index f666b281926876636672e76a7a5e6386a9701b6a..74aef9741cc3ebf36749dc510bc4ef9d8f5580b0 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -295,6 +295,15 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -298,6 +298,15 @@ public class WorldServer extends World implements GeneratorAccessSeed { } // Paper end @@ -953,7 +961,7 @@ index 2b58f4b80f10b93868a686bc9d2630a02832d1dd..bb66597eb882d6937c02982dd252951f // Add env and gen to constructor, WorldData -> WorldDataServer public WorldServer(MinecraftServer minecraftserver, Executor executor, Convertable.ConversionSession convertable_conversionsession, IWorldDataServer iworlddataserver, ResourceKey resourcekey, DimensionManager dimensionmanager, WorldLoadListener worldloadlistener, ChunkGenerator chunkgenerator, boolean flag, long i, List list, boolean flag1, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen) { super(iworlddataserver, resourcekey, dimensionmanager, minecraftserver::getMethodProfiler, false, flag, i, gen, env, executor); // Paper pass executor -@@ -302,12 +311,21 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -305,12 +314,21 @@ public class WorldServer extends World implements GeneratorAccessSeed { convertable = convertable_conversionsession; uuid = WorldUUID.getUUID(convertable_conversionsession.folder.toFile()); // CraftBukkit end @@ -981,7 +989,7 @@ index 2b58f4b80f10b93868a686bc9d2630a02832d1dd..bb66597eb882d6937c02982dd252951f this.navigators = Sets.newHashSet(); this.L = new ObjectLinkedOpenHashSet(); this.Q = flag1; -@@ -640,7 +658,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -643,7 +661,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { if (this.Q) { long i = this.worldData.getTime() + 1L; @@ -1093,7 +1101,7 @@ index c3cb513d0d107ecb43e98960b25054626aa6a03f..d7f532388b65161f8dcced02aebba6b0 } diff --git a/src/main/java/net/minecraft/world/level/TickListServer.java b/src/main/java/net/minecraft/world/level/TickListServer.java -index c221e5caf518b8c588390e438346fa58fa8c5a38..8a78a03ccf5b688ae3fd4616ae9f495f00a7cb30 100644 +index c221e5caf518b8c588390e438346fa58fa8c5a38..4fd89bbe6ce578fd3a166bcfbbe41908a7bb4753 100644 --- a/src/main/java/net/minecraft/world/level/TickListServer.java +++ b/src/main/java/net/minecraft/world/level/TickListServer.java @@ -50,7 +50,16 @@ public class TickListServer implements TickList { @@ -1101,7 +1109,7 @@ index c221e5caf518b8c588390e438346fa58fa8c5a38..8a78a03ccf5b688ae3fd4616ae9f495f // Paper end + // Paper start -+ protected void nextTick() {} ++ public void nextTick() {} + // Paper end + public void b() { diff --git a/Spigot-Server-Patches/0419-Pillager-patrol-spawn-settings-and-per-player-option.patch b/Spigot-Server-Patches/0419-Pillager-patrol-spawn-settings-and-per-player-option.patch index 65cf9fd127..99eea71ef7 100644 --- a/Spigot-Server-Patches/0419-Pillager-patrol-spawn-settings-and-per-player-option.patch +++ b/Spigot-Server-Patches/0419-Pillager-patrol-spawn-settings-and-per-player-option.patch @@ -36,10 +36,10 @@ index 525d702d78a609af987ebd2c32169b873e5c05ed..6c8e9d498c9a30a1aa88494ba09c3cae private void entitiesTargetWithFollowRange() { entitiesTargetWithFollowRange = getBoolean("entities-target-with-follow-range", entitiesTargetWithFollowRange); diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index a3195ab0c447d5532642b430411434abaa168306..8c91e44252366445ad393221825ec9c2591a9490 100644 +index 3b3c0b32f4f7b3d97ffc63cc5a9878f96a32712e..84b0f40edaff726e63f16611b364a692b332ae2b 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -214,6 +214,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -215,6 +215,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public boolean viewingCredits; private int containerUpdateDelay; // Paper public long loginTime; // Paper diff --git a/Spigot-Server-Patches/0420-Ensure-Entity-is-never-double-registered.patch b/Spigot-Server-Patches/0420-Ensure-Entity-is-never-double-registered.patch index 0254d4a95f..39ea97d5a5 100644 --- a/Spigot-Server-Patches/0420-Ensure-Entity-is-never-double-registered.patch +++ b/Spigot-Server-Patches/0420-Ensure-Entity-is-never-double-registered.patch @@ -11,10 +11,10 @@ Vs behavior of non ticking of just overwriting state. We will now simply log a warning when this happens instead of crashing the server. diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index bb66597eb882d6937c02982dd252951f1f37bb42..f493dcbe178149084afb5ae8002250c7de111c37 100644 +index 74aef9741cc3ebf36749dc510bc4ef9d8f5580b0..ae4db654658675f05b678a3d2d6c4a6be503761e 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -644,6 +644,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -647,6 +647,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { Entity entity2; while ((entity2 = (Entity) this.entitiesToAdd.poll()) != null) { @@ -22,7 +22,7 @@ index bb66597eb882d6937c02982dd252951f1f37bb42..f493dcbe178149084afb5ae8002250c7 this.registerEntity(entity2); } -@@ -1401,6 +1402,19 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1404,6 +1405,19 @@ public class WorldServer extends World implements GeneratorAccessSeed { public void unregisterEntity(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity unregister"); // Spigot @@ -42,7 +42,7 @@ index bb66597eb882d6937c02982dd252951f1f37bb42..f493dcbe178149084afb5ae8002250c7 // Spigot start if ( entity instanceof EntityHuman ) { -@@ -1467,9 +1481,21 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1470,9 +1484,21 @@ public class WorldServer extends World implements GeneratorAccessSeed { private void registerEntity(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity register"); // Spigot @@ -66,14 +66,14 @@ index bb66597eb882d6937c02982dd252951f1f37bb42..f493dcbe178149084afb5ae8002250c7 if (entity instanceof EntityEnderDragon) { EntityComplexPart[] aentitycomplexpart = ((EntityEnderDragon) entity).eJ(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index c89c56a6d116526e11f4ba9ad3333d8cceafc3e8..bded403c87c2dfe4bcaab21be56e7b120efb112a 100644 +index 19322c00422ac53de9903b3492994ce6e3c3bef4..44886357da22f0e7f74b1739028ae0c7a81dd525 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -144,6 +144,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -148,6 +148,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } // Paper start -+ boolean isQueuedForRegister = false; ++ public boolean isQueuedForRegister = false; public static Random SHARED_RANDOM = new Random() { private boolean locked = false; @Override diff --git a/Spigot-Server-Patches/0421-Fix-unregistering-entities-from-unloading-chunks.patch b/Spigot-Server-Patches/0421-Fix-unregistering-entities-from-unloading-chunks.patch index 4c5c335f71..1b480d89a0 100644 --- a/Spigot-Server-Patches/0421-Fix-unregistering-entities-from-unloading-chunks.patch +++ b/Spigot-Server-Patches/0421-Fix-unregistering-entities-from-unloading-chunks.patch @@ -15,10 +15,10 @@ Combine that with a buggy detail of the previous implementation of the Dupe UUID patch, then this was the likely source of the "Ghost entities" diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index f493dcbe178149084afb5ae8002250c7de111c37..6f39f1a389b2e310780456bd7685fd9c4da31aae 100644 +index ae4db654658675f05b678a3d2d6c4a6be503761e..928d884dcdf1ff6aa1aa4a0e7f6d68f7ae5bce13 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -1560,9 +1560,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1563,9 +1563,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { } private void removeEntityFromChunk(Entity entity) { diff --git a/Spigot-Server-Patches/0424-Prevent-Double-PlayerChunkMap-adds-crashing-server.patch b/Spigot-Server-Patches/0424-Prevent-Double-PlayerChunkMap-adds-crashing-server.patch index 714df6fbe3..b9885b71f3 100644 --- a/Spigot-Server-Patches/0424-Prevent-Double-PlayerChunkMap-adds-crashing-server.patch +++ b/Spigot-Server-Patches/0424-Prevent-Double-PlayerChunkMap-adds-crashing-server.patch @@ -7,10 +7,10 @@ Suspected case would be around the technique used in .stopRiding Stack will identify any causer of this and warn instead of crashing. diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index faec8a9a535d6b122c57cda8be3e4f8f3e52852b..8d8d2ac73b3e8d5fb59245bfe551a6985870dec9 100644 +index 4be5f3be285b1944eee66684c1a565ac1eceb024..12cfe9f3c89316557e94c8b944b4f82277fb8877 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -1491,6 +1491,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1495,6 +1495,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { protected void addEntity(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity track"); // Spigot @@ -26,10 +26,10 @@ index faec8a9a535d6b122c57cda8be3e4f8f3e52852b..8d8d2ac73b3e8d5fb59245bfe551a698 EntityTypes entitytypes = entity.getEntityType(); int i = entitytypes.getChunkRange() * 16; diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 6f39f1a389b2e310780456bd7685fd9c4da31aae..6ebedf392d2e5aad220e403806d4742e18f0428c 100644 +index 928d884dcdf1ff6aa1aa4a0e7f6d68f7ae5bce13..ddc0057e0bd77bf7187df45b9bac9ac025f297b1 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -1526,7 +1526,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1529,7 +1529,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } } @@ -38,7 +38,7 @@ index 6f39f1a389b2e310780456bd7685fd9c4da31aae..6ebedf392d2e5aad220e403806d4742e // CraftBukkit start - SPIGOT-5278 if (entity instanceof EntityDrowned) { this.navigators.add(((EntityDrowned) entity).navigationWater); -@@ -1537,6 +1537,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1540,6 +1540,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { this.navigators.add(((EntityInsentient) entity).getNavigation()); } entity.valid = true; // CraftBukkit diff --git a/Spigot-Server-Patches/0425-Optimize-Collision-to-not-load-chunks.patch b/Spigot-Server-Patches/0425-Optimize-Collision-to-not-load-chunks.patch index 8a3665e584..fb11b1063a 100644 --- a/Spigot-Server-Patches/0425-Optimize-Collision-to-not-load-chunks.patch +++ b/Spigot-Server-Patches/0425-Optimize-Collision-to-not-load-chunks.patch @@ -14,10 +14,26 @@ movement will load only the chunk the player enters anyways and avoids loading massive amounts of surrounding chunks due to large AABB lookups. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 0c51f90c103600be8881f204bdd18fb12e0ef11c..a1597b45c93a70bb5308985040f2bd19cef5325c 100644 +index 1f74fddfc6d9d9ae38fd35f83fa668e38591b222..f7a44104c09e4b2ebd5e1a3d7a08267c865c405d 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -807,6 +807,7 @@ public abstract class PlayerList { +@@ -61,6 +61,7 @@ import net.minecraft.server.ScoreboardServer; + import net.minecraft.server.level.DemoPlayerInteractManager; + import net.minecraft.server.level.EntityPlayer; + import net.minecraft.server.level.PlayerInteractManager; ++import net.minecraft.server.level.TicketType; + import net.minecraft.server.level.WorldServer; + import net.minecraft.server.network.PlayerConnection; + import net.minecraft.sounds.SoundCategory; +@@ -74,6 +75,7 @@ import net.minecraft.world.effect.MobEffect; + import net.minecraft.world.entity.Entity; + import net.minecraft.world.entity.EntityTypes; + import net.minecraft.world.entity.player.EntityHuman; ++import net.minecraft.world.level.ChunkCoordIntPair; + import net.minecraft.world.level.EnumGamemode; + import net.minecraft.world.level.GameRules; + import net.minecraft.world.level.World; +@@ -809,6 +811,7 @@ public abstract class PlayerList { entityplayer1.forceSetPositionRotation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); // CraftBukkit end @@ -26,15 +42,15 @@ index 0c51f90c103600be8881f204bdd18fb12e0ef11c..a1597b45c93a70bb5308985040f2bd19 entityplayer1.setPosition(entityplayer1.locX(), entityplayer1.locY() + 1.0D, entityplayer1.locZ()); } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index bded403c87c2dfe4bcaab21be56e7b120efb112a..1aaebe236255f19cf4798ab1dce3493e703bcb7e 100644 +index 44886357da22f0e7f74b1739028ae0c7a81dd525..1824dac8f3015e4b86685374ad98b1650c319479 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -165,6 +165,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -169,6 +169,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne private CraftEntity bukkitEntity; PlayerChunkMap.EntityTracker tracker; // Paper -+ boolean collisionLoadChunks = false; // Paper - Throwable addedToWorldStack; // Paper - entity debug ++ public boolean collisionLoadChunks = false; // Paper + public Throwable addedToWorldStack; // Paper - entity debug public CraftEntity getBukkitEntity() { if (bukkitEntity == null) { diff --git a/src/main/java/net/minecraft/world/level/ICollisionAccess.java b/src/main/java/net/minecraft/world/level/ICollisionAccess.java diff --git a/Spigot-Server-Patches/0426-Don-t-tick-dead-players.patch b/Spigot-Server-Patches/0426-Don-t-tick-dead-players.patch index a40344e8a5..6f34d67a7e 100644 --- a/Spigot-Server-Patches/0426-Don-t-tick-dead-players.patch +++ b/Spigot-Server-Patches/0426-Don-t-tick-dead-players.patch @@ -7,10 +7,10 @@ Causes sync chunk loads and who knows what all else. This is safe because Spectators are skipped in unloaded chunks too in vanilla. diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 8c91e44252366445ad393221825ec9c2591a9490..dace185f5945d05abdb6fa2be361dcb0c6e3d84a 100644 +index 84b0f40edaff726e63f16611b364a692b332ae2b..da16b5773e182a10dca8c91b53b9aba7e924d22b 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -607,7 +607,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -608,7 +608,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public void playerTick() { try { diff --git a/Spigot-Server-Patches/0427-Dead-Player-s-shouldn-t-be-able-to-move.patch b/Spigot-Server-Patches/0427-Dead-Player-s-shouldn-t-be-able-to-move.patch index 1d6b7f7fe4..04592576bc 100644 --- a/Spigot-Server-Patches/0427-Dead-Player-s-shouldn-t-be-able-to-move.patch +++ b/Spigot-Server-Patches/0427-Dead-Player-s-shouldn-t-be-able-to-move.patch @@ -7,10 +7,10 @@ This fixes a lot of game state issues where packets were delayed for processing due to 1.15's new queue but processed while dead. diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index 6dc1d03e755cd4c268de71ebba7e771a640938c2..4a2d2c9f4066d9fd1198b21f0d0f1a7a84e50069 100644 +index 564dfa98c166fde509044e6e1938efb321ece53d..8981dfacd10cae9de052e1b36ce5181cd0e6752d 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -1046,7 +1046,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1049,7 +1049,7 @@ public abstract class EntityHuman extends EntityLiving { @Override protected boolean isFrozen() { diff --git a/Spigot-Server-Patches/0428-Optimize-PlayerChunkMap-memory-use-for-visibleChunks.patch b/Spigot-Server-Patches/0428-Optimize-PlayerChunkMap-memory-use-for-visibleChunks.patch index 8939cff436..8c621b9dca 100644 --- a/Spigot-Server-Patches/0428-Optimize-PlayerChunkMap-memory-use-for-visibleChunks.patch +++ b/Spigot-Server-Patches/0428-Optimize-PlayerChunkMap-memory-use-for-visibleChunks.patch @@ -57,10 +57,10 @@ index 0000000000000000000000000000000000000000..f6ff4d8132a95895680f5bc81f8f873e + } +} diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java -index 2489a29e344145f3ce4ff3c9fe08d6ee64a47acb..9999f4efd39668bfd900c7db75a19ff6b95d359c 100644 +index 5a410550cfb48505c9de9979465ed1528c8fbf05..9edbde8299bcd127e1727d34ed441f638e716b2a 100644 --- a/src/main/java/net/minecraft/server/MCUtil.java +++ b/src/main/java/net/minecraft/server/MCUtil.java -@@ -606,7 +606,7 @@ public final class MCUtil { +@@ -616,7 +616,7 @@ public final class MCUtil { WorldServer world = ((org.bukkit.craftbukkit.CraftWorld)bukkitWorld).getHandle(); PlayerChunkMap chunkMap = world.getChunkProvider().playerChunkMap; @@ -70,10 +70,10 @@ index 2489a29e344145f3ce4ff3c9fe08d6ee64a47acb..9999f4efd39668bfd900c7db75a19ff6 List allChunks = new ArrayList<>(visibleChunks.values()); List players = world.players; diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 071151b774564f25ad08f47a8ffd67434d5bf940..841c6ef5c7147f32d3fab26e1062a92b05bac355 100644 +index 911b733d32400a6f963a20f10de3802e70dd8823..af6309899dcb4fe09b765bf1073e482d16b0fb24 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -778,7 +778,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -780,7 +780,7 @@ public class ChunkProviderServer extends IChunkProvider { entityPlayer.playerNaturallySpawnedEvent.callEvent(); }; // Paper end @@ -83,10 +83,10 @@ index 071151b774564f25ad08f47a8ffd67434d5bf940..841c6ef5c7147f32d3fab26e1062a92b if (optional.isPresent()) { diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 8d8d2ac73b3e8d5fb59245bfe551a6985870dec9..a057fb945f9562c52ce5dada26933aefa14e569f 100644 +index 12cfe9f3c89316557e94c8b944b4f82277fb8877..8050be2ed04fb0b8141f92595680407bba65dad5 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -102,8 +102,33 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -106,8 +106,33 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { private static final Logger LOGGER = LogManager.getLogger(); public static final int GOLDEN_TICKET = 33 + ChunkStatus.b(); @@ -120,9 +120,9 @@ index 8d8d2ac73b3e8d5fb59245bfe551a6985870dec9..a057fb945f9562c52ce5dada26933aef + public final com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy pendingVisibleChunks = new com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy(); // Paper - this is used if the visible chunks is updated while iterating only + public transient com.destroystokyo.paper.util.map.Long2ObjectLinkedOpenHashMapFastCopy visibleChunksClone; // Paper - used for async access of visible chunks, clone and cache only when needed private final Long2ObjectLinkedOpenHashMap pendingUnload; - final LongSet loadedChunks; // Paper - private -> package + public final LongSet loadedChunks; // Paper - private -> public public final WorldServer world; -@@ -176,7 +201,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -180,7 +205,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public PlayerChunkMap(WorldServer worldserver, Convertable.ConversionSession convertable_conversionsession, DataFixer datafixer, DefinedStructureManager definedstructuremanager, Executor executor, IAsyncTaskHandler iasynctaskhandler, ILightAccess ilightaccess, ChunkGenerator chunkgenerator, WorldLoadListener worldloadlistener, Supplier supplier, int i, boolean flag) { super(new File(convertable_conversionsession.a(worldserver.getDimensionKey()), "region"), datafixer, flag); @@ -131,7 +131,7 @@ index 8d8d2ac73b3e8d5fb59245bfe551a6985870dec9..a057fb945f9562c52ce5dada26933aef this.pendingUnload = new Long2ObjectLinkedOpenHashMap(); this.loadedChunks = new LongOpenHashSet(); this.unloadQueue = new LongOpenHashSet(); -@@ -268,9 +293,52 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -272,9 +297,52 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return (PlayerChunk) this.updatingChunks.get(i); } @@ -185,7 +185,7 @@ index 8d8d2ac73b3e8d5fb59245bfe551a6985870dec9..a057fb945f9562c52ce5dada26933aef } protected IntSupplier c(long i) { -@@ -458,8 +526,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -462,8 +530,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Paper end protected void save(boolean flag) { @@ -196,7 +196,7 @@ index 8d8d2ac73b3e8d5fb59245bfe551a6985870dec9..a057fb945f9562c52ce5dada26933aef MutableBoolean mutableboolean = new MutableBoolean(); do { -@@ -487,7 +556,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -491,7 +560,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // this.i(); // Paper - nuke IOWorker PlayerChunkMap.LOGGER.info("ThreadedAnvilChunkStorage ({}): All chunks are saved", this.w.getName()); } else { @@ -205,7 +205,7 @@ index 8d8d2ac73b3e8d5fb59245bfe551a6985870dec9..a057fb945f9562c52ce5dada26933aef IChunkAccess ichunkaccess = (IChunkAccess) playerchunk.getChunkSave().getNow(null); // CraftBukkit - decompile error if (ichunkaccess instanceof ProtoChunkExtension || ichunkaccess instanceof Chunk) { -@@ -658,7 +727,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -662,7 +731,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { if (!this.updatingChunksModified) { return false; } else { @@ -227,7 +227,7 @@ index 8d8d2ac73b3e8d5fb59245bfe551a6985870dec9..a057fb945f9562c52ce5dada26933aef this.updatingChunksModified = false; return true; } -@@ -1129,12 +1211,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1133,12 +1215,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } protected Iterable f() { diff --git a/Spigot-Server-Patches/0430-Mid-Tick-Chunk-Tasks-Speed-up-processing-of-chunk-lo.patch b/Spigot-Server-Patches/0430-Mid-Tick-Chunk-Tasks-Speed-up-processing-of-chunk-lo.patch index c028915c76..ef557b85ca 100644 --- a/Spigot-Server-Patches/0430-Mid-Tick-Chunk-Tasks-Speed-up-processing-of-chunk-lo.patch +++ b/Spigot-Server-Patches/0430-Mid-Tick-Chunk-Tasks-Speed-up-processing-of-chunk-lo.patch @@ -147,10 +147,18 @@ index dcd5a3ec07e2269cb86e7feb706b738bcf1abe56..cbec7410fcbd81bc0958bb3e94d0beac // Spigot Start CrashReport crashreport; diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 841c6ef5c7147f32d3fab26e1062a92b05bac355..7ef3778eac779f3042116cfa4b4ac9e3752faa98 100644 +index af6309899dcb4fe09b765bf1073e482d16b0fb24..08e7b20d3ad3a02cab74864cce6fd2a31d80fe59 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -716,6 +716,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -22,6 +22,7 @@ import net.minecraft.core.BlockPosition; + import net.minecraft.core.SectionPosition; + import net.minecraft.network.protocol.Packet; + import net.minecraft.server.MCUtil; ++import net.minecraft.server.MinecraftServer; + import net.minecraft.server.level.progress.WorldLoadListener; + import net.minecraft.util.MathHelper; + import net.minecraft.util.profiling.GameProfilerFiller; +@@ -718,6 +719,7 @@ public class ChunkProviderServer extends IChunkProvider { this.world.getMethodProfiler().enter("purge"); this.world.timings.doChunkMap.startTiming(); // Spigot this.chunkMapDistance.purgeTickets(); @@ -158,7 +166,7 @@ index 841c6ef5c7147f32d3fab26e1062a92b05bac355..7ef3778eac779f3042116cfa4b4ac9e3 this.tickDistanceManager(); this.world.timings.doChunkMap.stopTiming(); // Spigot this.world.getMethodProfiler().exitEnter("chunks"); -@@ -725,6 +726,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -727,6 +729,7 @@ public class ChunkProviderServer extends IChunkProvider { this.world.timings.doChunkUnload.startTiming(); // Spigot this.world.getMethodProfiler().exitEnter("unload"); this.playerChunkMap.unloadChunks(booleansupplier); @@ -166,7 +174,7 @@ index 841c6ef5c7147f32d3fab26e1062a92b05bac355..7ef3778eac779f3042116cfa4b4ac9e3 this.world.timings.doChunkUnload.stopTiming(); // Spigot this.world.getMethodProfiler().exit(); this.clearCache(); -@@ -778,7 +780,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -780,7 +783,7 @@ public class ChunkProviderServer extends IChunkProvider { entityPlayer.playerNaturallySpawnedEvent.callEvent(); }; // Paper end @@ -175,7 +183,7 @@ index 841c6ef5c7147f32d3fab26e1062a92b05bac355..7ef3778eac779f3042116cfa4b4ac9e3 Optional optional = ((Either) playerchunk.a().getNow(PlayerChunk.UNLOADED_CHUNK)).left(); if (optional.isPresent()) { -@@ -802,6 +804,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -804,6 +807,7 @@ public class ChunkProviderServer extends IChunkProvider { this.world.timings.chunkTicks.startTiming(); // Spigot // Paper this.world.a(chunk, k); this.world.timings.chunkTicks.stopTiming(); // Spigot // Paper @@ -183,7 +191,7 @@ index 841c6ef5c7147f32d3fab26e1062a92b05bac355..7ef3778eac779f3042116cfa4b4ac9e3 } } } -@@ -958,6 +961,41 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -960,6 +964,41 @@ public class ChunkProviderServer extends IChunkProvider { super.executeTask(runnable); } @@ -226,10 +234,10 @@ index 841c6ef5c7147f32d3fab26e1062a92b05bac355..7ef3778eac779f3042116cfa4b4ac9e3 protected boolean executeNext() { // CraftBukkit start - process pending Chunk loadCallback() and unloadCallback() after each run task diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 6ebedf392d2e5aad220e403806d4742e18f0428c..3825e05025b42a38d6e473b75a90475f0c62585f 100644 +index ddc0057e0bd77bf7187df45b9bac9ac025f297b1..3ad428dd85ec0cbf37a24711004f9a54052c5c93 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -566,6 +566,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -569,6 +569,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } timings.scheduledBlocks.stopTiming(); // Paper @@ -237,7 +245,7 @@ index 6ebedf392d2e5aad220e403806d4742e18f0428c..3825e05025b42a38d6e473b75a90475f gameprofilerfiller.exitEnter("raid"); this.timings.raids.startTiming(); // Paper - timings this.persistentRaid.a(); -@@ -574,6 +575,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -577,6 +578,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { timings.doSounds.startTiming(); // Spigot this.ak(); timings.doSounds.stopTiming(); // Spigot @@ -245,7 +253,7 @@ index 6ebedf392d2e5aad220e403806d4742e18f0428c..3825e05025b42a38d6e473b75a90475f this.ticking = false; gameprofilerfiller.exitEnter("entities"); boolean flag3 = true || !this.players.isEmpty() || !this.getForceLoadedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players -@@ -640,6 +642,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -643,6 +645,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { timings.entityTick.stopTiming(); // Spigot this.tickingEntities = false; @@ -253,7 +261,7 @@ index 6ebedf392d2e5aad220e403806d4742e18f0428c..3825e05025b42a38d6e473b75a90475f Entity entity2; -@@ -649,6 +652,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -652,6 +655,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } timings.tickEntities.stopTiming(); // Spigot diff --git a/Spigot-Server-Patches/0431-Don-t-move-existing-players-to-world-spawn.patch b/Spigot-Server-Patches/0431-Don-t-move-existing-players-to-world-spawn.patch index 2349cfde1c..37e2933dda 100644 --- a/Spigot-Server-Patches/0431-Don-t-move-existing-players-to-world-spawn.patch +++ b/Spigot-Server-Patches/0431-Don-t-move-existing-players-to-world-spawn.patch @@ -10,10 +10,10 @@ larger than the keep loaded range. By skipping this, we avoid potential for a large spike on server start. diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index dace185f5945d05abdb6fa2be361dcb0c6e3d84a..438b73982ce79732273148985f36c4c531e48389 100644 +index da16b5773e182a10dca8c91b53b9aba7e924d22b..8371d5ac694f469804ad55669fdedb8b3fc627bd 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -252,7 +252,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -253,7 +253,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { this.serverStatisticManager = minecraftserver.getPlayerList().getStatisticManager(this); this.advancementDataPlayer = minecraftserver.getPlayerList().f(this); this.G = 1.0F; @@ -22,7 +22,7 @@ index dace185f5945d05abdb6fa2be361dcb0c6e3d84a..438b73982ce79732273148985f36c4c5 this.co = minecraftserver.a(this); this.cachedSingleHashSet = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<>(this); // Paper -@@ -304,6 +304,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -305,6 +305,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } // CraftBukkit end @@ -30,7 +30,7 @@ index dace185f5945d05abdb6fa2be361dcb0c6e3d84a..438b73982ce79732273148985f36c4c5 private void c(WorldServer worldserver) { BlockPosition blockposition = worldserver.getSpawn(); -@@ -481,7 +482,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -482,7 +483,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { position = Vec3D.a(((WorldServer) world).getSpawn()); } this.world = world; @@ -40,10 +40,10 @@ index dace185f5945d05abdb6fa2be361dcb0c6e3d84a..438b73982ce79732273148985f36c4c5 this.playerInteractManager.a((WorldServer) world); } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index a1597b45c93a70bb5308985040f2bd19cef5325c..3477a006102f4dba3579905551e037fff3cbea06 100644 +index f7a44104c09e4b2ebd5e1a3d7a08267c865c405d..d6a6321e936ce803a3e52e7420ba2bcd096f4649 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -204,6 +204,8 @@ public abstract class PlayerList { +@@ -208,6 +208,8 @@ public abstract class PlayerList { worldserver1 = worldserver; } diff --git a/Spigot-Server-Patches/0436-Delay-unsafe-actions-until-after-entity-ticking-is-d.patch b/Spigot-Server-Patches/0436-Delay-unsafe-actions-until-after-entity-ticking-is-d.patch index ac75ee4835..ae2e586009 100644 --- a/Spigot-Server-Patches/0436-Delay-unsafe-actions-until-after-entity-ticking-is-d.patch +++ b/Spigot-Server-Patches/0436-Delay-unsafe-actions-until-after-entity-ticking-is-d.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Delay unsafe actions until after entity ticking is done This will help prevent many cases of unregistering entities during entity ticking diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 3825e05025b42a38d6e473b75a90475f0c62585f..2d01ae0fa137ad414a9a9b6c0864a713fed93e17 100644 +index 3ad428dd85ec0cbf37a24711004f9a54052c5c93..c69eef0d523fc75dce2c2606f3e447591c7cf6dc 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -175,6 +175,16 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -178,6 +178,16 @@ public class WorldServer extends World implements GeneratorAccessSeed { public final List players = Lists.newArrayList(); // Paper - private -> public public final ChunkProviderServer chunkProvider; // Paper - public boolean tickingEntities; @@ -26,7 +26,7 @@ index 3825e05025b42a38d6e473b75a90475f0c62585f..2d01ae0fa137ad414a9a9b6c0864a713 private final MinecraftServer server; public final WorldDataServer worldDataServer; // CraftBukkit - type public boolean savingDisabled; -@@ -642,6 +652,16 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -645,6 +655,16 @@ public class WorldServer extends World implements GeneratorAccessSeed { timings.entityTick.stopTiming(); // Spigot this.tickingEntities = false; diff --git a/Spigot-Server-Patches/0438-Improved-Watchdog-Support.patch b/Spigot-Server-Patches/0438-Improved-Watchdog-Support.patch index 4c14097e53..dba5021931 100644 --- a/Spigot-Server-Patches/0438-Improved-Watchdog-Support.patch +++ b/Spigot-Server-Patches/0438-Improved-Watchdog-Support.patch @@ -71,10 +71,10 @@ index d0fdb9ce57b22a1f582cddec9afcc35b75d58cc6..9b7a51890c667601b195ff15b2bf0d6c throwable = throwable.getCause(); } diff --git a/src/main/java/net/minecraft/SystemUtils.java b/src/main/java/net/minecraft/SystemUtils.java -index c7cbf132bfcb5c5e49b269ebfe5ef9a049ff327f..5523615d8cb69f1c6d7207a928d9d9702d2aa1f4 100644 +index 397194b3e90c9df39cfae17b401c7ac891b0dbb7..61b4c42e95994343772a91640b243b8e8224e09b 100644 --- a/src/main/java/net/minecraft/SystemUtils.java +++ b/src/main/java/net/minecraft/SystemUtils.java -@@ -129,6 +129,7 @@ public class SystemUtils { +@@ -130,6 +130,7 @@ public class SystemUtils { return SystemUtils.f; } @@ -275,10 +275,10 @@ index 557f80accfa36b495c9a8cffdab2e248c1cbb514..ec1f36736d79d4054ad7ff4da4e3659f @Override diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index a057fb945f9562c52ce5dada26933aefa14e569f..b69caa785b39f6d1aa55b42ab96b0e5740e6b5e5 100644 +index 8050be2ed04fb0b8141f92595680407bba65dad5..bb9c6e9aeb1f30af01338476ba1dd618b14124d5 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -532,6 +532,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -536,6 +536,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { MutableBoolean mutableboolean = new MutableBoolean(); do { @@ -287,10 +287,10 @@ index a057fb945f9562c52ce5dada26933aefa14e569f..b69caa785b39f6d1aa55b42ab96b0e57 list.stream().map((playerchunk) -> { CompletableFuture completablefuture; diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 2d01ae0fa137ad414a9a9b6c0864a713fed93e17..b294337a586193870fcdbfe1697703137f4ae626 100644 +index c69eef0d523fc75dce2c2606f3e447591c7cf6dc..da3614a4a59884e7cbc8758cfdad9698eb15424f 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 { +@@ -177,7 +177,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { private final Queue entitiesToAdd = Queues.newArrayDeque(); public final List players = Lists.newArrayList(); // Paper - private -> public public final ChunkProviderServer chunkProvider; // Paper - public @@ -300,10 +300,10 @@ index 2d01ae0fa137ad414a9a9b6c0864a713fed93e17..b294337a586193870fcdbfe169770313 List afterEntityTickingTasks = Lists.newArrayList(); public void doIfNotEntityTicking(java.lang.Runnable run) { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 3477a006102f4dba3579905551e037fff3cbea06..53261da8b7f0c7a59cacc48636d6c9d707ce372e 100644 +index d6a6321e936ce803a3e52e7420ba2bcd096f4649..f58dd78e5984ace42ccd6121a5836fed29b82af0 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -503,7 +503,7 @@ public abstract class PlayerList { +@@ -507,7 +507,7 @@ public abstract class PlayerList { cserver.getPluginManager().callEvent(playerQuitEvent); entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage()); @@ -325,18 +325,18 @@ index ca23ca14d8011fc8daa7e20f2eaa550a8ff92c53..158ea6d77698d62ba795aff6c061a806 } diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 0fd8550ebcb2c1b8ef5132155528ac32c75741bb..845836efb968fac2ab6f9927b336e10c19630ef5 100644 +index cc41dcd85760b57bb8076b37e9a907d1cb4e12c7..efcfc8f0f45901d14ac8fdf8ed7b0bd67f8f94da 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -850,6 +850,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -858,6 +858,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { gameprofilerfiller.exit(); } catch (Throwable throwable) { + if (throwable instanceof ThreadDeath) throw throwable; // Paper // Paper start - Prevent tile entity and entity crashes - String msg = "TileEntity threw exception at " + tileentity.world.getWorld().getName() + ":" + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ(); + String msg = "TileEntity threw exception at " + tileentity.getWorld().getWorld().getName() + ":" + tileentity.getPosition().getX() + "," + tileentity.getPosition().getY() + "," + tileentity.getPosition().getZ(); System.err.println(msg); -@@ -924,6 +925,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -932,6 +933,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { try { consumer.accept(entity); } catch (Throwable throwable) { diff --git a/Spigot-Server-Patches/0443-Prevent-opening-inventories-when-frozen.patch b/Spigot-Server-Patches/0443-Prevent-opening-inventories-when-frozen.patch index a82e1504cf..d71e7b136c 100644 --- a/Spigot-Server-Patches/0443-Prevent-opening-inventories-when-frozen.patch +++ b/Spigot-Server-Patches/0443-Prevent-opening-inventories-when-frozen.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent opening inventories when frozen diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 438b73982ce79732273148985f36c4c531e48389..c9c18fa9dffc3f53213f46cfdf582dccb85d308a 100644 +index 8371d5ac694f469804ad55669fdedb8b3fc627bd..320be04d9e3284d728adb2df9da7edb63e5f71d1 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -558,7 +558,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -559,7 +559,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { containerUpdateDelay = world.paperConfig.containerUpdateTickRate; } // Paper end @@ -17,7 +17,7 @@ index 438b73982ce79732273148985f36c4c531e48389..c9c18fa9dffc3f53213f46cfdf582dcc this.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.CANT_USE); // Paper this.activeContainer = this.defaultContainer; } -@@ -1397,7 +1397,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1398,7 +1398,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } else { // CraftBukkit start this.activeContainer = container; @@ -26,7 +26,7 @@ index 438b73982ce79732273148985f36c4c531e48389..c9c18fa9dffc3f53213f46cfdf582dcc // CraftBukkit end container.addSlotListener(this); return OptionalInt.of(this.containerCounter); -@@ -2198,7 +2198,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -2199,7 +2199,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } @Override diff --git a/Spigot-Server-Patches/0445-Don-t-run-entity-collision-code-if-not-needed.patch b/Spigot-Server-Patches/0445-Don-t-run-entity-collision-code-if-not-needed.patch index fa4b894eda..852ccda440 100644 --- a/Spigot-Server-Patches/0445-Don-t-run-entity-collision-code-if-not-needed.patch +++ b/Spigot-Server-Patches/0445-Don-t-run-entity-collision-code-if-not-needed.patch @@ -7,10 +7,10 @@ Will not run if max entity craming is disabled and the max collisions per entity is less than or equal to 0 diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index 21952ce66729946fb306fd15e9da4a3311551bec..f0782ad11883feaf6ffa0b7bdff6e43e529e47af 100644 +index 89abfdd32f47eed07080ff9d70440f0940628b4d..b33f57bc72333a2fee785cb95eb6be09892b136d 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java -@@ -2943,10 +2943,16 @@ public abstract class EntityLiving extends Entity { +@@ -2944,10 +2944,16 @@ public abstract class EntityLiving extends Entity { protected void doTick() {} protected void collideNearby() { diff --git a/Spigot-Server-Patches/0446-Optimize-ChunkProviderServer-s-chunk-level-checking-.patch b/Spigot-Server-Patches/0446-Optimize-ChunkProviderServer-s-chunk-level-checking-.patch index 88984a860c..ab0046658f 100644 --- a/Spigot-Server-Patches/0446-Optimize-ChunkProviderServer-s-chunk-level-checking-.patch +++ b/Spigot-Server-Patches/0446-Optimize-ChunkProviderServer-s-chunk-level-checking-.patch @@ -9,10 +9,10 @@ so inline where possible, and avoid the abstraction of the Either class. diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 7ef3778eac779f3042116cfa4b4ac9e3752faa98..cd4e4b957c166c6e82b58da61154542232900cf7 100644 +index 08e7b20d3ad3a02cab74864cce6fd2a31d80fe59..ff93fd88b1d30ac70ebd1130981e4aa042358f30 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -640,21 +640,29 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -643,21 +643,29 @@ public class ChunkProviderServer extends IChunkProvider { public final boolean isInEntityTickingChunk(Entity entity) { return this.a(entity); } // Paper - OBFHELPER @Override public boolean a(Entity entity) { diff --git a/Spigot-Server-Patches/0448-Implement-Player-Client-Options-API.patch b/Spigot-Server-Patches/0448-Implement-Player-Client-Options-API.patch index 0750c2cc8d..488dd3e5f0 100644 --- a/Spigot-Server-Patches/0448-Implement-Player-Client-Options-API.patch +++ b/Spigot-Server-Patches/0448-Implement-Player-Client-Options-API.patch @@ -107,7 +107,7 @@ index 90842b27f64afcdd8eb7d0e52df8cfcb418b5b5a..f47cd43f96f61475bd1d5da11bdbc7c5 return this.e; } diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index c9c18fa9dffc3f53213f46cfdf582dccb85d308a..b3df6032d42ac7f933d3843b7cd758219590b985 100644 +index 320be04d9e3284d728adb2df9da7edb63e5f71d1..5b9778c0a7a52ddb05ca7a6864e3b8852cec03e4 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java @@ -2,6 +2,7 @@ package net.minecraft.server.level; @@ -118,7 +118,7 @@ index c9c18fa9dffc3f53213f46cfdf582dccb85d308a..b3df6032d42ac7f933d3843b7cd75821 import com.mojang.authlib.GameProfile; import com.mojang.datafixers.util.Either; import com.mojang.serialization.DataResult; -@@ -189,7 +190,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -190,7 +191,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public int lastSentExp = -99999999; public int invulnerableTicks = 60; private EnumChatVisibility bY; @@ -127,7 +127,7 @@ index c9c18fa9dffc3f53213f46cfdf582dccb85d308a..b3df6032d42ac7f933d3843b7cd75821 private long ca = SystemUtils.getMonotonicMillis(); private Entity spectatedEntity; public boolean worldChangeInvuln; -@@ -1799,6 +1800,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1800,6 +1801,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public String locale = null; // CraftBukkit - add, lowercase // Paper - default to null public java.util.Locale adventure$locale = java.util.Locale.US; // Paper public void a(PacketPlayInSettings packetplayinsettings) { @@ -136,10 +136,10 @@ index c9c18fa9dffc3f53213f46cfdf582dccb85d308a..b3df6032d42ac7f933d3843b7cd75821 if (getMainHand() != packetplayinsettings.getMainHand()) { PlayerChangedMainHandEvent event = new PlayerChangedMainHandEvent(getBukkitEntity(), getMainHand() == EnumMainHand.LEFT ? MainHand.LEFT : MainHand.RIGHT); diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index 4a2d2c9f4066d9fd1198b21f0d0f1a7a84e50069..6ee896113993bf97593d127c341bd8a728c0e43e 100644 +index 8981dfacd10cae9de052e1b36ce5181cd0e6752d..202fa94d5dc55b549475ae0309bbcfca8f1b2c96 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -130,7 +130,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -133,7 +133,7 @@ public abstract class EntityHuman extends EntityLiving { private static final Map b = ImmutableMap.builder().put(EntityPose.STANDING, EntityHuman.bh).put(EntityPose.SLEEPING, EntityHuman.ah).put(EntityPose.FALL_FLYING, EntitySize.b(0.6F, 0.6F)).put(EntityPose.SWIMMING, EntitySize.b(0.6F, 0.6F)).put(EntityPose.SPIN_ATTACK, EntitySize.b(0.6F, 0.6F)).put(EntityPose.CROUCHING, EntitySize.b(0.6F, 1.5F)).put(EntityPose.DYING, EntitySize.c(0.2F, 0.2F)).build(); private static final DataWatcherObject c = DataWatcher.a(EntityHuman.class, DataWatcherRegistry.c); private static final DataWatcherObject d = DataWatcher.a(EntityHuman.class, DataWatcherRegistry.b); @@ -149,7 +149,7 @@ index 4a2d2c9f4066d9fd1198b21f0d0f1a7a84e50069..6ee896113993bf97593d127c341bd8a7 protected static final DataWatcherObject bk = DataWatcher.a(EntityHuman.class, DataWatcherRegistry.p); protected static final DataWatcherObject bl = DataWatcher.a(EntityHuman.class, DataWatcherRegistry.p); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 3b7be01513f9851b50585fca2e7e2f21e03ca253..ebdb72c7967cd0091a47c1634be011cd81b555f9 100644 +index 78310e4a1fe4fd240350963c80463687b209d37b..f512a78c1fee21e90dfbb3af2ebbeeb89ae6b8f1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1,5 +1,8 @@ diff --git a/Spigot-Server-Patches/0449-Fix-Chunk-Post-Processing-deadlock-risk.patch b/Spigot-Server-Patches/0449-Fix-Chunk-Post-Processing-deadlock-risk.patch index 7ff3e14239..9c719ad246 100644 --- a/Spigot-Server-Patches/0449-Fix-Chunk-Post-Processing-deadlock-risk.patch +++ b/Spigot-Server-Patches/0449-Fix-Chunk-Post-Processing-deadlock-risk.patch @@ -25,10 +25,10 @@ This successfully fixed a reoccurring and highly reproduceable crash for heightmaps. diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index cd4e4b957c166c6e82b58da61154542232900cf7..0d093c4babc16493185eac8069ab2cfb4a2d6787 100644 +index ff93fd88b1d30ac70ebd1130981e4aa042358f30..612a05f493981f9fb22522da4f3a5379bce4b786 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -1016,6 +1016,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -1019,6 +1019,7 @@ public class ChunkProviderServer extends IChunkProvider { return super.executeNext() || execChunkTask; // Paper } } finally { @@ -37,10 +37,10 @@ index cd4e4b957c166c6e82b58da61154542232900cf7..0d093c4babc16493185eac8069ab2cfb } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index b69caa785b39f6d1aa55b42ab96b0e5740e6b5e5..5b9011fa9cf9fd023c1b64a0d6eecfc424747ef4 100644 +index bb9c6e9aeb1f30af01338476ba1dd618b14124d5..80c7ff059b78f55ec9c390bd728186a94074e603 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -179,6 +179,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -183,6 +183,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { }; // CraftBukkit end @@ -49,7 +49,7 @@ index b69caa785b39f6d1aa55b42ab96b0e5740e6b5e5..5b9011fa9cf9fd023c1b64a0d6eecfc4 // Paper start - distance maps private final com.destroystokyo.paper.util.misc.PooledLinkedHashSets pooledLinkedPlayerHashSets = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets<>(); -@@ -1044,7 +1046,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1048,7 +1050,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return Either.left(chunk); }); }, (runnable) -> { diff --git a/Spigot-Server-Patches/0451-Broadcast-join-message-to-console.patch b/Spigot-Server-Patches/0451-Broadcast-join-message-to-console.patch index 51a9411f69..da5ea409a0 100644 --- a/Spigot-Server-Patches/0451-Broadcast-join-message-to-console.patch +++ b/Spigot-Server-Patches/0451-Broadcast-join-message-to-console.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Broadcast join message to console diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 53261da8b7f0c7a59cacc48636d6c9d707ce372e..d06d31207ce724a6318a87a37d26a7e30372aa22 100644 +index f58dd78e5984ace42ccd6121a5836fed29b82af0..b5600711c29b00f2d7863c0493a21f5080127e9c 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -284,7 +284,9 @@ public abstract class PlayerList { +@@ -288,7 +288,9 @@ public abstract class PlayerList { if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure joinMessage = PaperAdventure.asVanilla(jm); // Paper - Adventure diff --git a/Spigot-Server-Patches/0452-Fix-Longstanding-Broken-behavior-of-PlayerJoinEvent.patch b/Spigot-Server-Patches/0452-Fix-Longstanding-Broken-behavior-of-PlayerJoinEvent.patch index d1bb4a55bf..15b0b958f0 100644 --- a/Spigot-Server-Patches/0452-Fix-Longstanding-Broken-behavior-of-PlayerJoinEvent.patch +++ b/Spigot-Server-Patches/0452-Fix-Longstanding-Broken-behavior-of-PlayerJoinEvent.patch @@ -28,10 +28,10 @@ receives a deterministic result, and should no longer require 1 tick delays anymore. diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index b3df6032d42ac7f933d3843b7cd758219590b985..9ef603805019a7582f1b8f16a4a85a31ffbd8212 100644 +index 5b9778c0a7a52ddb05ca7a6864e3b8852cec03e4..eaeac60b2d54d8e7d298ea412d888471a7ea9e79 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -238,6 +238,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -239,6 +239,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public double maxHealthCache; public boolean joining = true; public boolean sentListPacket = false; @@ -40,10 +40,19 @@ index b3df6032d42ac7f933d3843b7cd758219590b985..9ef603805019a7582f1b8f16a4a85a31 // CraftBukkit end public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 5b9011fa9cf9fd023c1b64a0d6eecfc424747ef4..21cf7390e4564b28a25b2d28932b697bbf7d0e15 100644 +index 80c7ff059b78f55ec9c390bd728186a94074e603..94860c06717e8dcf969277562e88687e9a99aaa4 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -1583,6 +1583,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1578,7 +1578,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + }); + } + +- protected void addEntity(Entity entity) { ++ public void addEntity(Entity entity) { // Paper - protected -> public + org.spigotmc.AsyncCatcher.catchOp("entity track"); // Spigot + // Paper start - ignore and warn about illegal addEntity calls instead of crashing server + if (!entity.valid || entity.world != this.world || this.trackedEntities.containsKey(entity.getId())) { +@@ -1587,6 +1587,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { .printStackTrace(); return; } @@ -52,10 +61,10 @@ index 5b9011fa9cf9fd023c1b64a0d6eecfc424747ef4..21cf7390e4564b28a25b2d28932b697b if (!(entity instanceof EntityComplexPart)) { EntityTypes entitytypes = entity.getEntityType(); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index d06d31207ce724a6318a87a37d26a7e30372aa22..12de64d34f5011771a5515710839f60098f56ad8 100644 +index b5600711c29b00f2d7863c0493a21f5080127e9c..c9a8e5c04a10c28ce79368a783dfe3c8e3709583 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -272,6 +272,12 @@ public abstract class PlayerList { +@@ -276,6 +276,12 @@ public abstract class PlayerList { this.j.put(entityplayer.getUniqueID(), entityplayer); // this.sendAll(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, new EntityPlayer[]{entityplayer})); // CraftBukkit - replaced with loop below @@ -68,7 +77,7 @@ index d06d31207ce724a6318a87a37d26a7e30372aa22..12de64d34f5011771a5515710839f600 // CraftBukkit start PlayerJoinEvent playerJoinEvent = new org.bukkit.event.player.PlayerJoinEvent(cserver.getPlayer(entityplayer), PaperAdventure.asAdventure(chatmessage)); // Paper - Adventure cserver.getPluginManager().callEvent(playerJoinEvent); -@@ -307,6 +313,8 @@ public abstract class PlayerList { +@@ -311,6 +317,8 @@ public abstract class PlayerList { entityplayer.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, new EntityPlayer[] { entityplayer1})); } entityplayer.sentListPacket = true; @@ -77,7 +86,7 @@ index d06d31207ce724a6318a87a37d26a7e30372aa22..12de64d34f5011771a5515710839f600 // CraftBukkit end entityplayer.playerConnection.sendPacket(new PacketPlayOutEntityMetadata(entityplayer.getId(), entityplayer.getDataWatcher(), true)); // CraftBukkit - BungeeCord#2321, send complete data to self on spawn -@@ -332,6 +340,11 @@ public abstract class PlayerList { +@@ -336,6 +344,11 @@ public abstract class PlayerList { playerconnection.sendPacket(new PacketPlayOutEntityEffect(entityplayer.getId(), mobeffect)); } @@ -89,7 +98,7 @@ index d06d31207ce724a6318a87a37d26a7e30372aa22..12de64d34f5011771a5515710839f600 if (nbttagcompound != null && nbttagcompound.hasKeyOfType("RootVehicle", 10)) { NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("RootVehicle"); // CraftBukkit start -@@ -380,6 +393,10 @@ public abstract class PlayerList { +@@ -384,6 +397,10 @@ public abstract class PlayerList { } } diff --git a/Spigot-Server-Patches/0453-Load-Chunks-for-Login-Asynchronously.patch b/Spigot-Server-Patches/0453-Load-Chunks-for-Login-Asynchronously.patch index 95ae0638c5..edc3a56b8d 100644 --- a/Spigot-Server-Patches/0453-Load-Chunks-for-Login-Asynchronously.patch +++ b/Spigot-Server-Patches/0453-Load-Chunks-for-Login-Asynchronously.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Load Chunks for Login Asynchronously diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 0d093c4babc16493185eac8069ab2cfb4a2d6787..9e1b2c6466edff3cfeb3bf8172f4589d2cb712ad 100644 +index 612a05f493981f9fb22522da4f3a5379bce4b786..bc642671292a753484e47f87bef4eee724353f07 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -626,7 +626,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -629,7 +629,7 @@ public class ChunkProviderServer extends IChunkProvider { return this.serverThreadQueue.executeNext(); } @@ -18,10 +18,10 @@ index 0d093c4babc16493185eac8069ab2cfb4a2d6787..9e1b2c6466edff3cfeb3bf8172f4589d boolean flag1 = this.playerChunkMap.b(); diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 9ef603805019a7582f1b8f16a4a85a31ffbd8212..3c75a74292858ccff0357fb11a92673ae6a5129b 100644 +index eaeac60b2d54d8e7d298ea412d888471a7ea9e79..2ca9335129465ffb67617b42534db530c1d78923 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -173,6 +173,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -174,6 +174,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { private static final Logger LOGGER = LogManager.getLogger(); public PlayerConnection playerConnection; @@ -29,7 +29,7 @@ index 9ef603805019a7582f1b8f16a4a85a31ffbd8212..3c75a74292858ccff0357fb11a92673a public final MinecraftServer server; public final PlayerInteractManager playerInteractManager; public final Deque removeQueue = new ArrayDeque<>(); // Paper -@@ -239,6 +240,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -240,6 +241,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public boolean joining = true; public boolean sentListPacket = false; public boolean supressTrackerForLogin = false; // Paper @@ -50,10 +50,10 @@ index 218dc900e125a11548485887b1918742072c7a77..2c932d36f982e7f8713aabff9a6c6310 public static final TicketType UNKNOWN = a("unknown", Comparator.comparingLong(ChunkCoordIntPair::pair), 1); public static final TicketType PLUGIN = a("plugin", (a, b) -> 0); // CraftBukkit diff --git a/src/main/java/net/minecraft/server/network/LoginListener.java b/src/main/java/net/minecraft/server/network/LoginListener.java -index 98ae77269b5aaad951b0e26da61e6f5eb7ec2818..6bfb703ffafd707fb83743abc7d1bfbb96f867f1 100644 +index 4dd2f7fb32b8618d752e0988acadcb41223c0e4c..78a8eb89e9113a1002ba6177f96d5734a10e8d7d 100644 --- a/src/main/java/net/minecraft/server/network/LoginListener.java +++ b/src/main/java/net/minecraft/server/network/LoginListener.java -@@ -86,7 +86,7 @@ public class LoginListener implements PacketLoginInListener { +@@ -88,7 +88,7 @@ public class LoginListener implements PacketLoginInListener { } // Paper end } else if (this.g == LoginListener.EnumProtocolState.DELAY_ACCEPT) { @@ -62,7 +62,7 @@ index 98ae77269b5aaad951b0e26da61e6f5eb7ec2818..6bfb703ffafd707fb83743abc7d1bfbb if (entityplayer == null) { this.g = LoginListener.EnumProtocolState.READY_TO_ACCEPT; -@@ -185,7 +185,7 @@ public class LoginListener implements PacketLoginInListener { +@@ -187,7 +187,7 @@ public class LoginListener implements PacketLoginInListener { } this.networkManager.sendPacket(new PacketLoginOutSuccess(this.i)); @@ -72,14 +72,14 @@ index 98ae77269b5aaad951b0e26da61e6f5eb7ec2818..6bfb703ffafd707fb83743abc7d1bfbb if (entityplayer != null) { this.g = LoginListener.EnumProtocolState.DELAY_ACCEPT; diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 31fb6eda544568b14255aede0a981d065bdf3aee..8bfc26eb12cc5523c64a210383c9156aef6883b3 100644 +index 3285a4248a7c5352454a64c6a84658f585932548..6a0e3bd8641c895decd83b80e3a715ea31a5cce7 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java @@ -220,6 +220,7 @@ public class PlayerConnection implements PacketListenerPlayIn { private static final Logger LOGGER = LogManager.getLogger(); public final NetworkManager networkManager; private final MinecraftServer minecraftServer; -+ Runnable playerJoinReady; // Paper ++ public Runnable playerJoinReady; // Paper public EntityPlayer player; private int e; private long lastKeepAlive = SystemUtils.getMonotonicMillis(); private void setLastPing(long lastPing) { this.lastKeepAlive = lastPing;}; private long getLastPing() { return this.lastKeepAlive;}; // Paper - OBFHELPER @@ -109,10 +109,27 @@ index 31fb6eda544568b14255aede0a981d065bdf3aee..8bfc26eb12cc5523c64a210383c9156a this.minecraftServer.getMethodProfiler().enter("keepAlive"); // Paper Start - give clients a longer time to respond to pings as per pre 1.12.2 timings diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 12de64d34f5011771a5515710839f60098f56ad8..beb18eb9e7e37020ebd7bb03e9a65e090dcfdb4b 100644 +index c9a8e5c04a10c28ce79368a783dfe3c8e3709583..b5a1f2ca1ad1e48ee61df394ef01e1bee768aea7 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -124,11 +124,12 @@ public abstract class PlayerList { +@@ -41,6 +41,7 @@ import net.minecraft.network.protocol.game.PacketPlayOutEntityStatus; + import net.minecraft.network.protocol.game.PacketPlayOutExperience; + import net.minecraft.network.protocol.game.PacketPlayOutGameStateChange; + import net.minecraft.network.protocol.game.PacketPlayOutHeldItemSlot; ++import net.minecraft.network.protocol.game.PacketPlayOutKickDisconnect; + import net.minecraft.network.protocol.game.PacketPlayOutLogin; + import net.minecraft.network.protocol.game.PacketPlayOutNamedSoundEffect; + import net.minecraft.network.protocol.game.PacketPlayOutPlayerInfo; +@@ -60,6 +61,8 @@ import net.minecraft.server.MinecraftServer; + import net.minecraft.server.ScoreboardServer; + import net.minecraft.server.level.DemoPlayerInteractManager; + import net.minecraft.server.level.EntityPlayer; ++import net.minecraft.server.level.PlayerChunk; ++import net.minecraft.server.level.PlayerChunkMap; + import net.minecraft.server.level.PlayerInteractManager; + import net.minecraft.server.level.TicketType; + import net.minecraft.server.level.WorldServer; +@@ -128,11 +131,12 @@ public abstract class PlayerList { private static final SimpleDateFormat g = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z"); private final MinecraftServer server; public final List players = new java.util.concurrent.CopyOnWriteArrayList(); // CraftBukkit - ArrayList -> CopyOnWriteArrayList: Iterator safety @@ -126,7 +143,7 @@ index 12de64d34f5011771a5515710839f60098f56ad8..beb18eb9e7e37020ebd7bb03e9a65e09 // CraftBukkit start // private final Map o; // private final Map p; -@@ -167,6 +168,11 @@ public abstract class PlayerList { +@@ -171,6 +175,11 @@ public abstract class PlayerList { } public void a(NetworkManager networkmanager, EntityPlayer entityplayer) { @@ -138,7 +155,7 @@ index 12de64d34f5011771a5515710839f60098f56ad8..beb18eb9e7e37020ebd7bb03e9a65e09 entityplayer.loginTime = System.currentTimeMillis(); // Paper GameProfile gameprofile = entityplayer.getProfile(); UserCache usercache = this.server.getUserCache(); -@@ -180,7 +186,7 @@ public abstract class PlayerList { +@@ -184,7 +193,7 @@ public abstract class PlayerList { if (nbttagcompound != null && nbttagcompound.hasKey("bukkit")) { NBTTagCompound bukkit = nbttagcompound.getCompound("bukkit"); s = bukkit.hasKeyOfType("lastKnownName", 8) ? bukkit.getString("lastKnownName") : s; @@ -147,7 +164,7 @@ index 12de64d34f5011771a5515710839f60098f56ad8..beb18eb9e7e37020ebd7bb03e9a65e09 // CraftBukkit end if (nbttagcompound != null) { -@@ -255,6 +261,51 @@ public abstract class PlayerList { +@@ -259,6 +268,51 @@ public abstract class PlayerList { entityplayer.getRecipeBook().a(entityplayer); this.sendScoreboard(worldserver1.getScoreboard(), entityplayer); this.server.invalidatePingSample(); @@ -176,7 +193,7 @@ index 12de64d34f5011771a5515710839f60098f56ad8..beb18eb9e7e37020ebd7bb03e9a65e09 + }); + } + -+ EntityPlayer getActivePlayer(UUID uuid) { ++ public EntityPlayer getActivePlayer(UUID uuid) { + EntityPlayer player = this.getUUIDMap().get(uuid); + return player != null ? player : pendingPlayers.get(uuid); + } @@ -199,7 +216,7 @@ index 12de64d34f5011771a5515710839f60098f56ad8..beb18eb9e7e37020ebd7bb03e9a65e09 ChatMessage chatmessage; if (entityplayer.getProfile().getName().equalsIgnoreCase(s)) { -@@ -492,6 +543,7 @@ public abstract class PlayerList { +@@ -496,6 +550,7 @@ public abstract class PlayerList { protected void savePlayerFile(EntityPlayer entityplayer) { if (!entityplayer.getBukkitEntity().isPersistent()) return; // CraftBukkit @@ -207,7 +224,7 @@ index 12de64d34f5011771a5515710839f60098f56ad8..beb18eb9e7e37020ebd7bb03e9a65e09 this.playerFileData.save(entityplayer); ServerStatisticManager serverstatisticmanager = (ServerStatisticManager) entityplayer.getStatisticManager(); // CraftBukkit -@@ -519,7 +571,7 @@ public abstract class PlayerList { +@@ -523,7 +578,7 @@ public abstract class PlayerList { } PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(cserver.getPlayer(entityplayer), net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, com.destroystokyo.paper.PaperConfig.useDisplayNameInQuit ? entityplayer.getBukkitEntity().displayName() : net.kyori.adventure.text.Component.text(entityplayer.getName()))); @@ -216,7 +233,7 @@ index 12de64d34f5011771a5515710839f60098f56ad8..beb18eb9e7e37020ebd7bb03e9a65e09 entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage()); if (server.isMainThread()) entityplayer.playerTick(); // SPIGOT-924 // Paper - don't tick during emergency shutdowns (Watchdog) -@@ -572,6 +624,13 @@ public abstract class PlayerList { +@@ -576,6 +631,13 @@ public abstract class PlayerList { // this.p.remove(uuid); // CraftBukkit end } @@ -230,7 +247,7 @@ index 12de64d34f5011771a5515710839f60098f56ad8..beb18eb9e7e37020ebd7bb03e9a65e09 // CraftBukkit start // this.sendAll(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, new EntityPlayer[]{entityplayer})); -@@ -589,7 +648,7 @@ public abstract class PlayerList { +@@ -593,7 +655,7 @@ public abstract class PlayerList { cserver.getScoreboardManager().removePlayer(entityplayer.getBukkitEntity()); // CraftBukkit end @@ -239,7 +256,7 @@ index 12de64d34f5011771a5515710839f60098f56ad8..beb18eb9e7e37020ebd7bb03e9a65e09 } // CraftBukkit start - Whole method, SocketAddress to LoginListener, added hostname to signature, return EntityPlayer -@@ -608,6 +667,13 @@ public abstract class PlayerList { +@@ -612,6 +674,13 @@ public abstract class PlayerList { list.add(entityplayer); } } @@ -254,10 +271,10 @@ index 12de64d34f5011771a5515710839f60098f56ad8..beb18eb9e7e37020ebd7bb03e9a65e09 Iterator iterator = list.iterator(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1aaebe236255f19cf4798ab1dce3493e703bcb7e..84c2488a432f2c306567dd4576dd522efcf073ef 100644 +index 1824dac8f3015e4b86685374ad98b1650c319479..c7786e8d100cb872b10664b9c16de332ada3e3fe 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1368,7 +1368,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1372,7 +1372,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne this.lastY = d1; this.lastZ = d4; this.setPosition(d3, d1, d4); diff --git a/Spigot-Server-Patches/0454-Move-player-to-spawn-point-if-spawn-in-unloaded-worl.patch b/Spigot-Server-Patches/0454-Move-player-to-spawn-point-if-spawn-in-unloaded-worl.patch index 7bafff07e0..0bb982be8d 100644 --- a/Spigot-Server-Patches/0454-Move-player-to-spawn-point-if-spawn-in-unloaded-worl.patch +++ b/Spigot-Server-Patches/0454-Move-player-to-spawn-point-if-spawn-in-unloaded-worl.patch @@ -7,10 +7,10 @@ The code following this has better support for null worlds to move them back to the world spawn. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 84c2488a432f2c306567dd4576dd522efcf073ef..4766bdb3ff915cac2eb38870a5357441bc64b99a 100644 +index c7786e8d100cb872b10664b9c16de332ada3e3fe..167c9eb09a2fc9ac6db19b90723feacee52ec39e 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1804,9 +1804,11 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1808,9 +1808,11 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne bworld = server.getWorld(worldName); } diff --git a/Spigot-Server-Patches/0455-Add-PlayerAttackEntityCooldownResetEvent.patch b/Spigot-Server-Patches/0455-Add-PlayerAttackEntityCooldownResetEvent.patch index 4c7b733d3d..90f040857e 100644 --- a/Spigot-Server-Patches/0455-Add-PlayerAttackEntityCooldownResetEvent.patch +++ b/Spigot-Server-Patches/0455-Add-PlayerAttackEntityCooldownResetEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add PlayerAttackEntityCooldownResetEvent diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index f0782ad11883feaf6ffa0b7bdff6e43e529e47af..a0060264c3f31ab499d44d1055403af8eca07fff 100644 +index b33f57bc72333a2fee785cb95eb6be09892b136d..f2721cf55dd8edc7376b27250f83029e2b3b4e93 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java -@@ -1930,7 +1930,16 @@ public abstract class EntityLiving extends Entity { +@@ -1931,7 +1931,16 @@ public abstract class EntityLiving extends Entity { EntityDamageEvent event = CraftEventFactory.handleLivingEntityDamageEvent(this, damagesource, originalDamage, hardHatModifier, blockingModifier, armorModifier, resistanceModifier, magicModifier, absorptionModifier, hardHat, blocking, armor, resistance, magic, absorption); if (damagesource.getEntity() instanceof EntityHuman) { diff --git a/Spigot-Server-Patches/0456-Allow-multiple-callbacks-to-schedule-for-Callback-Ex.patch b/Spigot-Server-Patches/0456-Allow-multiple-callbacks-to-schedule-for-Callback-Ex.patch index 0bf0d830d8..efd92293d7 100644 --- a/Spigot-Server-Patches/0456-Allow-multiple-callbacks-to-schedule-for-Callback-Ex.patch +++ b/Spigot-Server-Patches/0456-Allow-multiple-callbacks-to-schedule-for-Callback-Ex.patch @@ -14,10 +14,10 @@ Use an ArrayDeque to store this Queue We make sure to also implement a pattern that is recursion safe too. diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 21cf7390e4564b28a25b2d28932b697bbf7d0e15..c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5 100644 +index 94860c06717e8dcf969277562e88687e9a99aaa4..1b309682b58a2ef52b973181aefb0136f1aa3e80 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -158,24 +158,32 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -162,24 +162,32 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public final CallbackExecutor callbackExecutor = new CallbackExecutor(); public static final class CallbackExecutor implements java.util.concurrent.Executor, Runnable { diff --git a/Spigot-Server-Patches/0457-Don-t-fire-BlockFade-on-worldgen-threads.patch b/Spigot-Server-Patches/0457-Don-t-fire-BlockFade-on-worldgen-threads.patch index f8f76985c2..895675ad80 100644 --- a/Spigot-Server-Patches/0457-Don-t-fire-BlockFade-on-worldgen-threads.patch +++ b/Spigot-Server-Patches/0457-Don-t-fire-BlockFade-on-worldgen-threads.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Don't fire BlockFade on worldgen threads Caused a deadlock diff --git a/src/main/java/net/minecraft/world/level/block/BlockFire.java b/src/main/java/net/minecraft/world/level/block/BlockFire.java -index d2d59cc1acc7f67de62ac8d765f2b6b491b69053..f940d93c5bceb4b130a40c1cde06ab8d2e82cd74 100644 +index 5ef38414d87fbce453e3ab11579c89a8ff089ae0..e6ea1d29c7f3f4cb6039df0e35c8db94b6f38c3e 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockFire.java +++ b/src/main/java/net/minecraft/world/level/block/BlockFire.java -@@ -93,6 +93,7 @@ public class BlockFire extends BlockFireAbstract { +@@ -94,6 +94,7 @@ public class BlockFire extends BlockFireAbstract { @Override public IBlockData updateState(IBlockData iblockdata, EnumDirection enumdirection, IBlockData iblockdata1, GeneratorAccess generatoraccess, BlockPosition blockposition, BlockPosition blockposition1) { // CraftBukkit start @@ -17,7 +17,7 @@ index d2d59cc1acc7f67de62ac8d765f2b6b491b69053..f940d93c5bceb4b130a40c1cde06ab8d if (!this.canPlace(iblockdata, generatoraccess, blockposition)) { // Suppress during worldgen if (!(generatoraccess instanceof World)) { -@@ -108,7 +109,7 @@ public class BlockFire extends BlockFireAbstract { +@@ -109,7 +110,7 @@ public class BlockFire extends BlockFireAbstract { return blockState.getHandle(); } } diff --git a/Spigot-Server-Patches/0459-Fix-numerous-item-duplication-issues-and-teleport-is.patch b/Spigot-Server-Patches/0459-Fix-numerous-item-duplication-issues-and-teleport-is.patch index dc332cd5b4..31ffc97867 100644 --- a/Spigot-Server-Patches/0459-Fix-numerous-item-duplication-issues-and-teleport-is.patch +++ b/Spigot-Server-Patches/0459-Fix-numerous-item-duplication-issues-and-teleport-is.patch @@ -16,10 +16,10 @@ So even if something NEW comes up, it would be impossible to drop the same item twice because the source was destroyed. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4766bdb3ff915cac2eb38870a5357441bc64b99a..b4bf64610bc595bc3ea36410fd878144ed761740 100644 +index 167c9eb09a2fc9ac6db19b90723feacee52ec39e..b57888b2b53a8cf6d1e8af0f6e779bbcf748cd61 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1965,11 +1965,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1969,11 +1969,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } else { // CraftBukkit start - Capture drops for death event if (this instanceof EntityLiving && !((EntityLiving) this).forceDrops) { @@ -34,7 +34,7 @@ index 4766bdb3ff915cac2eb38870a5357441bc64b99a..b4bf64610bc595bc3ea36410fd878144 entityitem.defaultPickupDelay(); // CraftBukkit start -@@ -2617,6 +2618,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2621,6 +2622,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne @Nullable public Entity teleportTo(WorldServer worldserver, BlockPosition location) { // CraftBukkit end @@ -47,7 +47,7 @@ index 4766bdb3ff915cac2eb38870a5357441bc64b99a..b4bf64610bc595bc3ea36410fd878144 if (this.world instanceof WorldServer && !this.dead) { this.world.getMethodProfiler().enter("changeDimension"); // CraftBukkit start -@@ -2637,6 +2644,11 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2641,6 +2648,11 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne // CraftBukkit end this.world.getMethodProfiler().exitEnter("reloading"); @@ -59,7 +59,7 @@ index 4766bdb3ff915cac2eb38870a5357441bc64b99a..b4bf64610bc595bc3ea36410fd878144 Entity entity = this.getEntityType().a((World) worldserver); if (entity != null) { -@@ -2650,10 +2662,6 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2654,10 +2666,6 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne // CraftBukkit start - Forward the CraftEntity to the new entity this.getBukkitEntity().setHandle(entity); entity.bukkitEntity = this.getBukkitEntity(); @@ -70,7 +70,7 @@ index 4766bdb3ff915cac2eb38870a5357441bc64b99a..b4bf64610bc595bc3ea36410fd878144 // CraftBukkit end } -@@ -2778,7 +2786,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2782,7 +2790,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } public boolean canPortal() { @@ -80,10 +80,10 @@ index 4766bdb3ff915cac2eb38870a5357441bc64b99a..b4bf64610bc595bc3ea36410fd878144 public float a(Explosion explosion, IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata, Fluid fluid, float f) { diff --git a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -index b93d04cd23a3a3616d1594c69174ea1271a204fb..6c5dc2ee5e720b574557ffbae539ec42dfbfe6cc 100644 +index 69361caebf0d3caa5195b519a16691705ac5e16a..5eb900619951083b9a777b1645cb5495b99968ec 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -@@ -601,7 +601,7 @@ public class EntityArmorStand extends EntityLiving { +@@ -602,7 +602,7 @@ public class EntityArmorStand extends EntityLiving { for (i = 0; i < this.handItems.size(); ++i) { itemstack = (ItemStack) this.handItems.get(i); if (!itemstack.isEmpty()) { @@ -92,7 +92,7 @@ index b93d04cd23a3a3616d1594c69174ea1271a204fb..6c5dc2ee5e720b574557ffbae539ec42 this.handItems.set(i, ItemStack.b); } } -@@ -609,7 +609,7 @@ public class EntityArmorStand extends EntityLiving { +@@ -610,7 +610,7 @@ public class EntityArmorStand extends EntityLiving { for (i = 0; i < this.armorItems.size(); ++i) { itemstack = (ItemStack) this.armorItems.get(i); if (!itemstack.isEmpty()) { @@ -102,10 +102,10 @@ index b93d04cd23a3a3616d1594c69174ea1271a204fb..6c5dc2ee5e720b574557ffbae539ec42 } } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index eedfc7839be258750d25d942b26e85a032115448..18fd2b60e0a6b8aeb753bf836e220b09c453b069 100644 +index b1db56faffebbf46ac871f5f77af0d47d7cf4a8f..4fc9d8af25808a53bf479b085c82047ede6c5360 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -804,7 +804,8 @@ public class CraftEventFactory { +@@ -806,7 +806,8 @@ public class CraftEventFactory { for (org.bukkit.inventory.ItemStack stack : event.getDrops()) { if (stack == null || stack.getType() == Material.AIR || stack.getAmount() == 0) continue; diff --git a/Spigot-Server-Patches/0466-Implement-Mob-Goal-API.patch b/Spigot-Server-Patches/0466-Implement-Mob-Goal-API.patch index 92dfb84125..3e78756a26 100644 --- a/Spigot-Server-Patches/0466-Implement-Mob-Goal-API.patch +++ b/Spigot-Server-Patches/0466-Implement-Mob-Goal-API.patch @@ -24,31 +24,205 @@ index 42dd78821c061b0384b5b8feaea7b9590ae39bd4..806832714739d3ae264ba7c3d2ca64a5 diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java new file mode 100644 -index 0000000000000000000000000000000000000000..89b56de7567ae54be75e0735b712e4dd713f1bf4 +index 0000000000000000000000000000000000000000..f62d0ee49ebda2b0c7a136562b24ee038502d048 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java -@@ -0,0 +1,356 @@ +@@ -0,0 +1,530 @@ +package com.destroystokyo.paper.entity.ai; + ++import com.destroystokyo.paper.entity.RangedEntity; ++import com.destroystokyo.paper.util.set.OptimizedSmallEnumSet; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; -+ -+import com.destroystokyo.paper.entity.RangedEntity; -+import com.destroystokyo.paper.entity.ai.GoalKey; -+import com.destroystokyo.paper.entity.ai.GoalType; -+import com.destroystokyo.paper.util.set.OptimizedSmallEnumSet; -+ -+import net.minecraft.server.*; // intentional star import -+ +import java.lang.reflect.Constructor; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; -+ ++import net.minecraft.world.entity.EntityAgeable; ++import net.minecraft.world.entity.EntityCreature; ++import net.minecraft.world.entity.EntityFlying; ++import net.minecraft.world.entity.EntityInsentient; ++import net.minecraft.world.entity.EntityTameableAnimal; ++import net.minecraft.world.entity.ai.goal.PathfinderGoal; ++import net.minecraft.world.entity.ambient.EntityAmbient; ++import net.minecraft.world.entity.ambient.EntityBat; ++import net.minecraft.world.entity.animal.EntityAnimal; ++import net.minecraft.world.entity.animal.EntityBee; ++import net.minecraft.world.entity.animal.EntityCat; ++import net.minecraft.world.entity.animal.EntityChicken; ++import net.minecraft.world.entity.animal.EntityCod; ++import net.minecraft.world.entity.animal.EntityCow; ++import net.minecraft.world.entity.animal.EntityDolphin; ++import net.minecraft.world.entity.animal.EntityFish; ++import net.minecraft.world.entity.animal.EntityFishSchool; ++import net.minecraft.world.entity.animal.EntityFox; ++import net.minecraft.world.entity.animal.EntityGolem; ++import net.minecraft.world.entity.animal.EntityIronGolem; ++import net.minecraft.world.entity.animal.EntityMushroomCow; ++import net.minecraft.world.entity.animal.EntityOcelot; ++import net.minecraft.world.entity.animal.EntityPanda; ++import net.minecraft.world.entity.animal.EntityParrot; ++import net.minecraft.world.entity.animal.EntityPerchable; ++import net.minecraft.world.entity.animal.EntityPig; ++import net.minecraft.world.entity.animal.EntityPolarBear; ++import net.minecraft.world.entity.animal.EntityPufferFish; ++import net.minecraft.world.entity.animal.EntityRabbit; ++import net.minecraft.world.entity.animal.EntitySalmon; ++import net.minecraft.world.entity.animal.EntitySheep; ++import net.minecraft.world.entity.animal.EntitySnowman; ++import net.minecraft.world.entity.animal.EntitySquid; ++import net.minecraft.world.entity.animal.EntityTropicalFish; ++import net.minecraft.world.entity.animal.EntityTurtle; ++import net.minecraft.world.entity.animal.EntityWaterAnimal; ++import net.minecraft.world.entity.animal.EntityWolf; ++import net.minecraft.world.entity.animal.horse.EntityHorse; ++import net.minecraft.world.entity.animal.horse.EntityHorseAbstract; ++import net.minecraft.world.entity.animal.horse.EntityHorseChestedAbstract; ++import net.minecraft.world.entity.animal.horse.EntityHorseDonkey; ++import net.minecraft.world.entity.animal.horse.EntityHorseMule; ++import net.minecraft.world.entity.animal.horse.EntityHorseSkeleton; ++import net.minecraft.world.entity.animal.horse.EntityHorseZombie; ++import net.minecraft.world.entity.animal.horse.EntityLlama; ++import net.minecraft.world.entity.animal.horse.EntityLlamaTrader; ++import net.minecraft.world.entity.boss.enderdragon.EntityEnderDragon; ++import net.minecraft.world.entity.boss.wither.EntityWither; ++import net.minecraft.world.entity.monster.EntityBlaze; ++import net.minecraft.world.entity.monster.EntityCaveSpider; ++import net.minecraft.world.entity.monster.EntityCreeper; ++import net.minecraft.world.entity.monster.EntityDrowned; ++import net.minecraft.world.entity.monster.EntityEnderman; ++import net.minecraft.world.entity.monster.EntityEndermite; ++import net.minecraft.world.entity.monster.EntityEvoker; ++import net.minecraft.world.entity.monster.EntityGhast; ++import net.minecraft.world.entity.monster.EntityGiantZombie; ++import net.minecraft.world.entity.monster.EntityGuardian; ++import net.minecraft.world.entity.monster.EntityGuardianElder; ++import net.minecraft.world.entity.monster.EntityIllagerAbstract; ++import net.minecraft.world.entity.monster.EntityIllagerIllusioner; ++import net.minecraft.world.entity.monster.EntityIllagerWizard; ++import net.minecraft.world.entity.monster.EntityMagmaCube; ++import net.minecraft.world.entity.monster.EntityMonster; ++import net.minecraft.world.entity.monster.EntityMonsterPatrolling; ++import net.minecraft.world.entity.monster.EntityPhantom; ++import net.minecraft.world.entity.monster.EntityPigZombie; ++import net.minecraft.world.entity.monster.EntityPillager; ++import net.minecraft.world.entity.monster.EntityRavager; ++import net.minecraft.world.entity.monster.EntityShulker; ++import net.minecraft.world.entity.monster.EntitySilverfish; ++import net.minecraft.world.entity.monster.EntitySkeleton; ++import net.minecraft.world.entity.monster.EntitySkeletonAbstract; ++import net.minecraft.world.entity.monster.EntitySkeletonStray; ++import net.minecraft.world.entity.monster.EntitySkeletonWither; ++import net.minecraft.world.entity.monster.EntitySlime; ++import net.minecraft.world.entity.monster.EntitySpider; ++import net.minecraft.world.entity.monster.EntityStrider; ++import net.minecraft.world.entity.monster.EntityVex; ++import net.minecraft.world.entity.monster.EntityVindicator; ++import net.minecraft.world.entity.monster.EntityWitch; ++import net.minecraft.world.entity.monster.EntityZoglin; ++import net.minecraft.world.entity.monster.EntityZombie; ++import net.minecraft.world.entity.monster.EntityZombieHusk; ++import net.minecraft.world.entity.monster.EntityZombieVillager; ++import net.minecraft.world.entity.monster.IRangedEntity; ++import net.minecraft.world.entity.monster.hoglin.EntityHoglin; ++import net.minecraft.world.entity.monster.piglin.EntityPiglin; ++import net.minecraft.world.entity.monster.piglin.EntityPiglinAbstract; ++import net.minecraft.world.entity.monster.piglin.EntityPiglinBrute; ++import net.minecraft.world.entity.npc.EntityVillager; ++import net.minecraft.world.entity.npc.EntityVillagerAbstract; ++import net.minecraft.world.entity.npc.EntityVillagerTrader; ++import net.minecraft.world.entity.raid.EntityRaider; +import org.bukkit.NamespacedKey; -+import org.bukkit.entity.*; // intentional star import ++import org.bukkit.entity.AbstractHorse; ++import org.bukkit.entity.AbstractVillager; ++import org.bukkit.entity.Ageable; ++import org.bukkit.entity.Ambient; ++import org.bukkit.entity.Animals; ++import org.bukkit.entity.Bat; ++import org.bukkit.entity.Bee; ++import org.bukkit.entity.Blaze; ++import org.bukkit.entity.Cat; ++import org.bukkit.entity.CaveSpider; ++import org.bukkit.entity.ChestedHorse; ++import org.bukkit.entity.Chicken; ++import org.bukkit.entity.Cod; ++import org.bukkit.entity.Cow; ++import org.bukkit.entity.Creature; ++import org.bukkit.entity.Creeper; ++import org.bukkit.entity.Dolphin; ++import org.bukkit.entity.Donkey; ++import org.bukkit.entity.Drowned; ++import org.bukkit.entity.ElderGuardian; ++import org.bukkit.entity.EnderDragon; ++import org.bukkit.entity.Enderman; ++import org.bukkit.entity.Endermite; ++import org.bukkit.entity.Evoker; ++import org.bukkit.entity.Fish; ++import org.bukkit.entity.Flying; ++import org.bukkit.entity.Fox; ++import org.bukkit.entity.Ghast; ++import org.bukkit.entity.Giant; ++import org.bukkit.entity.Golem; ++import org.bukkit.entity.Guardian; ++import org.bukkit.entity.Hoglin; ++import org.bukkit.entity.Horse; ++import org.bukkit.entity.Husk; ++import org.bukkit.entity.Illager; ++import org.bukkit.entity.Illusioner; ++import org.bukkit.entity.IronGolem; ++import org.bukkit.entity.Llama; ++import org.bukkit.entity.MagmaCube; ++import org.bukkit.entity.Mob; ++import org.bukkit.entity.Monster; ++import org.bukkit.entity.Mule; ++import org.bukkit.entity.MushroomCow; ++import org.bukkit.entity.Ocelot; ++import org.bukkit.entity.Panda; ++import org.bukkit.entity.Parrot; ++import org.bukkit.entity.Phantom; ++import org.bukkit.entity.Pig; ++import org.bukkit.entity.PigZombie; ++import org.bukkit.entity.Piglin; ++import org.bukkit.entity.PiglinAbstract; ++import org.bukkit.entity.PiglinBrute; ++import org.bukkit.entity.Pillager; ++import org.bukkit.entity.PolarBear; ++import org.bukkit.entity.PufferFish; ++import org.bukkit.entity.Rabbit; ++import org.bukkit.entity.Raider; ++import org.bukkit.entity.Ravager; ++import org.bukkit.entity.Salmon; ++import org.bukkit.entity.Sheep; ++import org.bukkit.entity.Shulker; ++import org.bukkit.entity.Silverfish; ++import org.bukkit.entity.Skeleton; ++import org.bukkit.entity.SkeletonHorse; ++import org.bukkit.entity.Slime; ++import org.bukkit.entity.Snowman; ++import org.bukkit.entity.Spellcaster; ++import org.bukkit.entity.Spider; ++import org.bukkit.entity.Squid; ++import org.bukkit.entity.Stray; ++import org.bukkit.entity.Strider; ++import org.bukkit.entity.Tameable; ++import org.bukkit.entity.TraderLlama; ++import org.bukkit.entity.TropicalFish; ++import org.bukkit.entity.Turtle; ++import org.bukkit.entity.Vex; ++import org.bukkit.entity.Villager; ++import org.bukkit.entity.Vindicator; ++import org.bukkit.entity.WanderingTrader; ++import org.bukkit.entity.WaterMob; ++import org.bukkit.entity.Witch; ++import org.bukkit.entity.Wither; ++import org.bukkit.entity.WitherSkeleton; ++import org.bukkit.entity.Wolf; ++import org.bukkit.entity.Zoglin; ++import org.bukkit.entity.Zombie; ++import org.bukkit.entity.ZombieHorse; ++import org.bukkit.entity.ZombieVillager; + +public class MobGoalHelper { + @@ -386,14 +560,13 @@ index 0000000000000000000000000000000000000000..89b56de7567ae54be75e0735b712e4dd +} diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/PaperCustomGoal.java b/src/main/java/com/destroystokyo/paper/entity/ai/PaperCustomGoal.java new file mode 100644 -index 0000000000000000000000000000000000000000..5720feaaf92fc8b6a70e7f6e2d25163c42d231c1 +index 0000000000000000000000000000000000000000..0b963f80857209bc73ece917203447d8839860b6 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/entity/ai/PaperCustomGoal.java -@@ -0,0 +1,55 @@ +@@ -0,0 +1,54 @@ +package com.destroystokyo.paper.entity.ai; + -+import net.minecraft.server.PathfinderGoal; -+ ++import net.minecraft.world.entity.ai.goal.PathfinderGoal; +import org.bukkit.entity.Mob; + +/** @@ -447,16 +620,12 @@ index 0000000000000000000000000000000000000000..5720feaaf92fc8b6a70e7f6e2d25163c +} diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/PaperMobGoals.java b/src/main/java/com/destroystokyo/paper/entity/ai/PaperMobGoals.java new file mode 100644 -index 0000000000000000000000000000000000000000..45b383f4d118d076e41c42b5b158b2a3713341a8 +index 0000000000000000000000000000000000000000..bf792c013fe3b9a0b5800a35308b9aaa36e5350d --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/entity/ai/PaperMobGoals.java -@@ -0,0 +1,224 @@ +@@ -0,0 +1,222 @@ +package com.destroystokyo.paper.entity.ai; + -+import net.minecraft.server.PathfinderGoal; -+import net.minecraft.server.PathfinderGoalSelector; -+import net.minecraft.server.PathfinderGoalWrapped; -+ +import java.util.Collection; +import java.util.EnumSet; +import java.util.HashMap; @@ -465,7 +634,9 @@ index 0000000000000000000000000000000000000000..45b383f4d118d076e41c42b5b158b2a3 +import java.util.List; +import java.util.Map; +import java.util.Set; -+ ++import net.minecraft.world.entity.ai.goal.PathfinderGoal; ++import net.minecraft.world.entity.ai.goal.PathfinderGoalSelector; ++import net.minecraft.world.entity.ai.goal.PathfinderGoalWrapped; +import org.bukkit.craftbukkit.entity.CraftMob; +import org.bukkit.entity.Mob; + @@ -589,7 +760,7 @@ index 0000000000000000000000000000000000000000..45b383f4d118d076e41c42b5b158b2a3 + CraftMob craftMob = (CraftMob) mob; + Set> goals = new HashSet<>(); + for (GoalType internalType : GoalType.values()) { -+ if(internalType == type) { ++ if (internalType == type) { + continue; + } + for (PathfinderGoalWrapped item : getHandle(craftMob, internalType).getTasks()) { @@ -677,16 +848,15 @@ index 0000000000000000000000000000000000000000..45b383f4d118d076e41c42b5b158b2a3 +} diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/PaperVanillaGoal.java b/src/main/java/com/destroystokyo/paper/entity/ai/PaperVanillaGoal.java new file mode 100644 -index 0000000000000000000000000000000000000000..2988e3d1b37d73b6d1ef514acd237e88a5cc079e +index 0000000000000000000000000000000000000000..1ed6e7273bc84a406ca843bc47bb69314bb2dd74 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/entity/ai/PaperVanillaGoal.java -@@ -0,0 +1,63 @@ +@@ -0,0 +1,62 @@ +package com.destroystokyo.paper.entity.ai; + -+import net.minecraft.server.PathfinderGoal; -+ +import java.util.EnumSet; + ++import net.minecraft.world.entity.ai.goal.PathfinderGoal; +import org.bukkit.entity.Mob; + +/** diff --git a/Spigot-Server-Patches/0467-Use-distance-map-to-optimise-entity-tracker.patch b/Spigot-Server-Patches/0467-Use-distance-map-to-optimise-entity-tracker.patch index afc40cc5fa..4e5c3ad53e 100644 --- a/Spigot-Server-Patches/0467-Use-distance-map-to-optimise-entity-tracker.patch +++ b/Spigot-Server-Patches/0467-Use-distance-map-to-optimise-entity-tracker.patch @@ -30,10 +30,18 @@ index bcc1103e21cc10d5b405a2b89f3dfe78eda271bd..4c82266656d0a60a166faa082a9aaaae List list = this.tracker.getPassengers(); diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5..631f3a8b62a7842bd8d360e98643d6b6efdfcf91 100644 +index 1b309682b58a2ef52b973181aefb0136f1aa3e80..3e5c3d33a2d031915305abd37d1ba6e1ebfd089e 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -191,21 +191,55 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -61,6 +61,7 @@ import net.minecraft.network.protocol.game.PacketPlayOutMapChunk; + import net.minecraft.network.protocol.game.PacketPlayOutMount; + import net.minecraft.network.protocol.game.PacketPlayOutViewCentre; + import net.minecraft.server.MCUtil; ++import net.minecraft.server.MinecraftServer; + import net.minecraft.server.level.progress.WorldLoadListener; + import net.minecraft.util.CSVWriter; + import net.minecraft.util.EntitySlice; +@@ -195,21 +196,55 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Paper start - distance maps private final com.destroystokyo.paper.util.misc.PooledLinkedHashSets pooledLinkedPlayerHashSets = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets<>(); @@ -44,7 +52,7 @@ index c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5..631f3a8b62a7842bd8d360e98643d6b6 + + // inlined EnumMap, TrackingRange.TrackingRangeType + static final org.spigotmc.TrackingRange.TrackingRangeType[] TRACKING_RANGE_TYPES = org.spigotmc.TrackingRange.TrackingRangeType.values(); -+ final com.destroystokyo.paper.util.misc.PlayerAreaMap[] playerEntityTrackerTrackMaps; ++ public final com.destroystokyo.paper.util.misc.PlayerAreaMap[] playerEntityTrackerTrackMaps; + final int[] entityTrackerTrackRanges; + + private int convertSpigotRangeToVanilla(final int vanilla) { @@ -90,7 +98,7 @@ index c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5..631f3a8b62a7842bd8d360e98643d6b6 } // Paper end -@@ -242,6 +276,45 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -246,6 +281,45 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.m = new VillagePlace(new File(this.w, "poi"), datafixer, flag, this.world); // Paper this.setViewDistance(i); this.playerMobDistanceMap = this.world.paperConfig.perPlayerMobSpawns ? new com.destroystokyo.paper.util.PlayerMobDistanceMap() : null; // Paper @@ -136,7 +144,7 @@ index c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5..631f3a8b62a7842bd8d360e98643d6b6 } public void updatePlayerMobTypeMap(Entity entity) { -@@ -1480,17 +1553,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1484,17 +1558,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } public void movePlayer(EntityPlayer entityplayer) { @@ -155,7 +163,7 @@ index c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5..631f3a8b62a7842bd8d360e98643d6b6 int i = MathHelper.floor(entityplayer.locX()) >> 4; int j = MathHelper.floor(entityplayer.locZ()) >> 4; -@@ -1606,7 +1669,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1610,7 +1674,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { entity.tracker = playerchunkmap_entitytracker; // Paper - Fast access to tracker this.trackedEntities.put(entity.getId(), playerchunkmap_entitytracker); @@ -164,7 +172,7 @@ index c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5..631f3a8b62a7842bd8d360e98643d6b6 if (entity instanceof EntityPlayer) { EntityPlayer entityplayer = (EntityPlayer) entity; -@@ -1649,7 +1712,37 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1653,7 +1717,37 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { entity.tracker = null; // Paper - We're no longer tracked } @@ -202,7 +210,7 @@ index c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5..631f3a8b62a7842bd8d360e98643d6b6 List list = Lists.newArrayList(); List list1 = this.world.getPlayers(); -@@ -1718,23 +1811,31 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1722,23 +1816,31 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { PacketDebug.a(this.world, chunk.getPos()); List list = Lists.newArrayList(); List list1 = Lists.newArrayList(); @@ -246,7 +254,7 @@ index c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5..631f3a8b62a7842bd8d360e98643d6b6 Iterator iterator; Entity entity1; -@@ -1772,7 +1873,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1776,7 +1878,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public class EntityTracker { @@ -255,7 +263,7 @@ index c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5..631f3a8b62a7842bd8d360e98643d6b6 private final Entity tracker; private final int trackingDistance; private SectionPosition e; -@@ -1789,6 +1890,42 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1793,6 +1895,42 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.e = SectionPosition.a(entity); } @@ -298,7 +306,7 @@ index c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5..631f3a8b62a7842bd8d360e98643d6b6 public boolean equals(Object object) { return object instanceof PlayerChunkMap.EntityTracker ? ((PlayerChunkMap.EntityTracker) object).tracker.getId() == this.tracker.getId() : false; } -@@ -1889,7 +2026,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1893,7 +2031,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { int j = entity.getEntityType().getChunkRange() * 16; j = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, j); // Paper @@ -308,23 +316,31 @@ index c6a66273cc14dbb8c02e96a6eb9ea64e540b4ec5..631f3a8b62a7842bd8d360e98643d6b6 } } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b4bf64610bc595bc3ea36410fd878144ed761740..031b754079dc1944b232014c28c64cdb6bcad2fb 100644 +index b57888b2b53a8cf6d1e8af0f6e779bbcf748cd61..8a1a7a465f007109f8e3b5359cac8ea9d9673049 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -291,6 +291,21 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -46,6 +46,7 @@ import net.minecraft.network.syncher.DataWatcherObject; + import net.minecraft.network.syncher.DataWatcherRegistry; + import net.minecraft.resources.MinecraftKey; + import net.minecraft.resources.ResourceKey; ++import net.minecraft.server.MCUtil; + import net.minecraft.server.MinecraftServer; + import net.minecraft.server.level.EntityPlayer; + import net.minecraft.server.level.PlayerChunkMap; +@@ -295,6 +296,21 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } // CraftBukkit end + // Paper start - optimise entity tracking + final org.spigotmc.TrackingRange.TrackingRangeType trackingRangeType = org.spigotmc.TrackingRange.getTrackingRangeType(this); + -+ boolean isLegacyTrackingEntity = false; ++ public boolean isLegacyTrackingEntity = false; + + public final void setLegacyTrackingEntity(final boolean isLegacyTrackingEntity) { + this.isLegacyTrackingEntity = isLegacyTrackingEntity; + } + -+ final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet getPlayersInTrackRange() { ++ public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet getPlayersInTrackRange() { + return ((WorldServer)this.world).getChunkProvider().playerChunkMap.playerEntityTrackerTrackMaps[this.trackingRangeType.ordinal()] + .getObjectsInRange(MCUtil.getCoordinateKey(this)); + } diff --git a/Spigot-Server-Patches/0468-Optimize-isOutsideRange-to-use-distance-maps.patch b/Spigot-Server-Patches/0468-Optimize-isOutsideRange-to-use-distance-maps.patch index 078a0dfb39..472f84ab69 100644 --- a/Spigot-Server-Patches/0468-Optimize-isOutsideRange-to-use-distance-maps.patch +++ b/Spigot-Server-Patches/0468-Optimize-isOutsideRange-to-use-distance-maps.patch @@ -77,10 +77,10 @@ index 60fcea78bf617559114b1ca1c0bf2d4cd9075a8c..335666db1854e8aa4b2ba71d5bdc2658 public String c() { diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 9e1b2c6466edff3cfeb3bf8172f4589d2cb712ad..031979ed14b93f2c5b9567c53c269740ef956de5 100644 +index bc642671292a753484e47f87bef4eee724353f07..b24a96dddf50029e4b40a47d49e3278cacaf42ce 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -750,6 +750,37 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -753,6 +753,37 @@ public class ChunkProviderServer extends IChunkProvider { boolean flag1 = this.world.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING) && !world.getPlayers().isEmpty(); // CraftBukkit if (!flag) { @@ -118,7 +118,7 @@ index 9e1b2c6466edff3cfeb3bf8172f4589d2cb712ad..031979ed14b93f2c5b9567c53c269740 this.world.getMethodProfiler().enter("pollingChunks"); int k = this.world.getGameRules().getInt(GameRules.RANDOM_TICK_SPEED); boolean flag2 = world.ticksPerAnimalSpawns != 0L && worlddata.getTime() % world.ticksPerAnimalSpawns == 0L; // CraftBukkit -@@ -779,15 +810,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -782,15 +813,7 @@ public class ChunkProviderServer extends IChunkProvider { this.world.getMethodProfiler().exit(); //List list = Lists.newArrayList(this.playerChunkMap.f()); // Paper //Collections.shuffle(list); // Paper @@ -135,7 +135,7 @@ index 9e1b2c6466edff3cfeb3bf8172f4589d2cb712ad..031979ed14b93f2c5b9567c53c269740 final int[] chunksTicked = {0}; this.playerChunkMap.forEachVisibleChunk((playerchunk) -> { // Paper - safe iterator incase chunk loads, also no wrapping Optional optional = ((Either) playerchunk.a().getNow(PlayerChunk.UNLOADED_CHUNK)).left(); -@@ -803,9 +826,9 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -806,9 +829,9 @@ public class ChunkProviderServer extends IChunkProvider { Chunk chunk = (Chunk) optional1.get(); ChunkCoordIntPair chunkcoordintpair = playerchunk.i(); @@ -148,10 +148,10 @@ index 9e1b2c6466edff3cfeb3bf8172f4589d2cb712ad..031979ed14b93f2c5b9567c53c269740 } diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 3c75a74292858ccff0357fb11a92673ae6a5129b..3505215bb46a48823a31f8fce12844859df8e459 100644 +index 2ca9335129465ffb67617b42534db530c1d78923..996e86d44c4d2a4451d9cb7cbc2fa699e229b6ca 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -247,6 +247,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -248,6 +248,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet cachedSingleHashSet; // Paper @@ -192,10 +192,10 @@ index 445dba8ed210407664904b707c36c78a76f25510..25484cac9c62e49de39fbbf506fcb3ed // Paper start diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 631f3a8b62a7842bd8d360e98643d6b6efdfcf91..7b34241553794f62785cb3ea67e7aad62e2e0dae 100644 +index 3e5c3d33a2d031915305abd37d1ba6e1ebfd089e..ad6cfce582e319314134eff4571519aa7325d783 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -205,6 +205,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -210,6 +210,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return MinecraftServer.getServer().applyTrackingRangeScale(vanilla); } // Paper end - use distance map to optimise tracker @@ -213,7 +213,7 @@ index 631f3a8b62a7842bd8d360e98643d6b6efdfcf91..7b34241553794f62785cb3ea67e7aad6 void addPlayerToDistanceMaps(EntityPlayer player) { int chunkX = MCUtil.getChunkCoordinate(player.locX()); -@@ -218,6 +229,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -223,6 +234,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { trackMap.add(player, chunkX, chunkZ, Math.min(trackRange, this.getEffectiveViewDistance())); } // Paper end - use distance map to optimise entity tracker @@ -223,7 +223,7 @@ index 631f3a8b62a7842bd8d360e98643d6b6efdfcf91..7b34241553794f62785cb3ea67e7aad6 } void removePlayerFromDistanceMaps(EntityPlayer player) { -@@ -226,6 +240,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -231,6 +245,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.playerEntityTrackerTrackMaps[i].remove(player); } // Paper end - use distance map to optimise tracker @@ -234,7 +234,7 @@ index 631f3a8b62a7842bd8d360e98643d6b6efdfcf91..7b34241553794f62785cb3ea67e7aad6 } void updateMaps(EntityPlayer player) { -@@ -240,6 +258,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -245,6 +263,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { trackMap.update(player, chunkX, chunkZ, Math.min(trackRange, this.getEffectiveViewDistance())); } // Paper end - use distance map to optimise entity tracker @@ -244,7 +244,7 @@ index 631f3a8b62a7842bd8d360e98643d6b6efdfcf91..7b34241553794f62785cb3ea67e7aad6 } // Paper end -@@ -271,7 +292,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -276,7 +297,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.mailboxWorldGen = this.p.a(threadedmailbox, false); this.mailboxMain = this.p.a(mailbox, false); this.lightEngine = new LightEngineThreaded(ilightaccess, this, this.world.getDimensionManager().hasSkyLight(), threadedmailbox1, this.p.a(threadedmailbox1, false)); @@ -253,7 +253,7 @@ index 631f3a8b62a7842bd8d360e98643d6b6efdfcf91..7b34241553794f62785cb3ea67e7aad6 this.l = supplier; this.m = new VillagePlace(new File(this.w, "poi"), datafixer, flag, this.world); // Paper this.setViewDistance(i); -@@ -315,6 +336,38 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -320,6 +341,38 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.playerEntityTrackerTrackMaps[ordinal] = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets); } // Paper end - use distance map to optimise entity tracker @@ -292,7 +292,7 @@ index 631f3a8b62a7842bd8d360e98643d6b6efdfcf91..7b34241553794f62785cb3ea67e7aad6 } public void updatePlayerMobTypeMap(Entity entity) { -@@ -334,6 +387,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -339,6 +392,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return entityPlayer.mobCounts[enumCreatureType.ordinal()]; } @@ -300,7 +300,7 @@ index 631f3a8b62a7842bd8d360e98643d6b6efdfcf91..7b34241553794f62785cb3ea67e7aad6 private static double a(ChunkCoordIntPair chunkcoordintpair, Entity entity) { double d0 = (double) (chunkcoordintpair.x * 16 + 8); double d1 = (double) (chunkcoordintpair.z * 16 + 8); -@@ -512,6 +566,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -517,6 +571,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } else { if (playerchunk != null) { playerchunk.a(j); @@ -308,7 +308,7 @@ index 631f3a8b62a7842bd8d360e98643d6b6efdfcf91..7b34241553794f62785cb3ea67e7aad6 } if (playerchunk != null) { -@@ -1482,30 +1537,53 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1487,30 +1542,53 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return isOutsideOfRange(chunkcoordintpair, false); } diff --git a/Spigot-Server-Patches/0470-No-Tick-view-distance-implementation.patch b/Spigot-Server-Patches/0470-No-Tick-view-distance-implementation.patch index d8ec59d0b1..47baa4de4e 100644 --- a/Spigot-Server-Patches/0470-No-Tick-view-distance-implementation.patch +++ b/Spigot-Server-Patches/0470-No-Tick-view-distance-implementation.patch @@ -37,10 +37,10 @@ index 46ac6d91422423f1e03b86d3efa3241f2599000d..6463d3e4837d032a35654a035f42b8a8 + } } diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java -index 9999f4efd39668bfd900c7db75a19ff6b95d359c..3e08aa34e01c629083b1e6520b3eed83993b82d2 100644 +index 9edbde8299bcd127e1727d34ed441f638e716b2a..17de074111a174f3a39a4477afc3ad62e04a73b5 100644 --- a/src/main/java/net/minecraft/server/MCUtil.java +++ b/src/main/java/net/minecraft/server/MCUtil.java -@@ -628,7 +628,8 @@ public final class MCUtil { +@@ -638,7 +638,8 @@ public final class MCUtil { }); worldData.addProperty("name", world.getWorld().getName()); @@ -73,10 +73,10 @@ index 335666db1854e8aa4b2ba71d5bdc2658305cb70a..2bbdcedf4856080ea9232effdf3bdae9 if (flag1) { ChunkMapDistance.this.j.a(ChunkTaskQueueSorter.a(() -> { diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 3505215bb46a48823a31f8fce12844859df8e459..4c8a324a70dac11251643263eb03e9939bbd1b62 100644 +index 996e86d44c4d2a4451d9cb7cbc2fa699e229b6ca..2def7680367e4a20d7402b27bff7242afdc250e2 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -249,6 +249,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -250,6 +250,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { double lastEntitySpawnRadiusSquared; // Paper - optimise isOutsideRange, this field is in blocks @@ -179,10 +179,22 @@ index 25484cac9c62e49de39fbbf506fcb3edc4ba6e65..1f6333c2c26ad04e23d2881235ed1dcf public CompletableFuture> a(ChunkStatus chunkstatus, PlayerChunkMap playerchunkmap) { diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387bb6c72075 100644 +index ad6cfce582e319314134eff4571519aa7325d783..8c4325e2f6e8a63b42580f2ac55dfb79557d6780 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -141,7 +141,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -60,9 +60,11 @@ import net.minecraft.network.protocol.game.PacketPlayOutLightUpdate; + import net.minecraft.network.protocol.game.PacketPlayOutMapChunk; + import net.minecraft.network.protocol.game.PacketPlayOutMount; + import net.minecraft.network.protocol.game.PacketPlayOutViewCentre; ++import net.minecraft.network.protocol.game.PacketPlayOutViewDistance; + import net.minecraft.server.MCUtil; + import net.minecraft.server.MinecraftServer; + import net.minecraft.server.level.progress.WorldLoadListener; ++import net.minecraft.server.network.PlayerConnection; + import net.minecraft.util.CSVWriter; + import net.minecraft.util.EntitySlice; + import net.minecraft.util.MathHelper; +@@ -146,7 +148,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { private boolean updatingChunksModified; private final ChunkTaskQueueSorter p; private final Mailbox> mailboxWorldGen; @@ -191,7 +203,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b public final WorldLoadListener worldLoadListener; public final PlayerChunkMap.a chunkDistanceManager; private final AtomicInteger u; -@@ -216,6 +216,22 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -221,6 +223,22 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobSpawnMap; // this map is absent from updateMaps since it's controlled at the start of the chunkproviderserver tick public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerChunkTickRangeMap; // Paper end - optimise PlayerChunkMap#isOutsideRange @@ -214,7 +226,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b void addPlayerToDistanceMaps(EntityPlayer player) { int chunkX = MCUtil.getChunkCoordinate(player.locX()); -@@ -232,6 +248,19 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -237,6 +255,19 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Paper start - optimise PlayerChunkMap#isOutsideRange this.playerChunkTickRangeMap.add(player, chunkX, chunkZ, ChunkMapDistance.MOB_SPAWN_RANGE); // Paper end - optimise PlayerChunkMap#isOutsideRange @@ -234,7 +246,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b } void removePlayerFromDistanceMaps(EntityPlayer player) { -@@ -244,6 +273,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -249,6 +280,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.playerMobSpawnMap.remove(player); this.playerChunkTickRangeMap.remove(player); // Paper end - optimise PlayerChunkMap#isOutsideRange @@ -246,7 +258,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b } void updateMaps(EntityPlayer player) { -@@ -261,6 +295,19 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -266,6 +302,19 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Paper start - optimise PlayerChunkMap#isOutsideRange this.playerChunkTickRangeMap.update(player, chunkX, chunkZ, ChunkMapDistance.MOB_SPAWN_RANGE); // Paper end - optimise PlayerChunkMap#isOutsideRange @@ -266,7 +278,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b } // Paper end -@@ -368,6 +415,45 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -373,6 +422,45 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } }); // Paper end - optimise PlayerChunkMap#isOutsideRange @@ -312,7 +324,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b } public void updatePlayerMobTypeMap(Entity entity) { -@@ -1188,15 +1274,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1193,15 +1281,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { completablefuture1.thenAcceptAsync((either) -> { either.mapLeft((chunk) -> { this.u.getAndIncrement(); @@ -330,7 +342,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b }); return completablefuture1; } -@@ -1291,32 +1373,38 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1296,32 +1380,38 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } } @@ -384,7 +396,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b protected void sendChunk(EntityPlayer entityplayer, ChunkCoordIntPair chunkcoordintpair, Packet[] apacket, boolean flag, boolean flag1) { if (entityplayer.world == this.world) { -@@ -1324,7 +1412,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1329,7 +1419,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { PlayerChunk playerchunk = this.getVisibleChunk(chunkcoordintpair.pair()); if (playerchunk != null) { @@ -393,7 +405,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b if (chunk != null) { this.a(entityplayer, apacket, chunk); -@@ -1585,6 +1673,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1590,6 +1680,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } // Paper end - optimise isOutsideOfRange @@ -401,7 +413,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b private boolean b(EntityPlayer entityplayer) { return entityplayer.isSpectator() && !this.world.getGameRules().getBoolean(GameRules.SPECTATORS_GENERATE_CHUNKS); } -@@ -1612,13 +1701,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1617,13 +1708,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.removePlayerFromDistanceMaps(entityplayer); // Paper - distance maps } @@ -416,7 +428,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b } -@@ -1626,7 +1709,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1631,7 +1716,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { SectionPosition sectionposition = SectionPosition.a((Entity) entityplayer); entityplayer.a(sectionposition); @@ -425,7 +437,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b return sectionposition; } -@@ -1671,6 +1754,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1676,6 +1761,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { int k1; int l1; @@ -433,7 +445,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b if (Math.abs(i1 - i) <= this.viewDistance * 2 && Math.abs(j1 - j) <= this.viewDistance * 2) { k1 = Math.min(i, i1) - this.viewDistance; l1 = Math.min(j, j1) - this.viewDistance; -@@ -1708,7 +1792,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1713,7 +1799,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.sendChunk(entityplayer, chunkcoordintpair1, new Packet[2], false, true); } } @@ -442,7 +454,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b this.updateMaps(entityplayer); // Paper - distance maps -@@ -1716,11 +1800,46 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1721,11 +1807,46 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { @Override public Stream a(ChunkCoordIntPair chunkcoordintpair, boolean flag) { @@ -492,8 +504,8 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b + // Paper end - per player view distance } - protected void addEntity(Entity entity) { -@@ -1878,7 +1997,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + public void addEntity(Entity entity) { // Paper - protected -> public +@@ -1883,7 +2004,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } @@ -502,7 +514,7 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b private void a(EntityPlayer entityplayer, Packet[] apacket, Chunk chunk) { if (apacket[0] == null) { apacket[0] = new PacketPlayOutMapChunk(chunk, 65535, chunk.world.chunkPacketBlockController.shouldModify(entityplayer, chunk, 65535)); // Paper - Anti-Xray - Bypass -@@ -2064,7 +2183,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2069,7 +2190,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(this.tracker.chunkX, this.tracker.chunkZ); PlayerChunk playerchunk = PlayerChunkMap.this.getVisibleChunk(chunkcoordintpair.pair()); @@ -512,10 +524,10 @@ index 7b34241553794f62785cb3ea67e7aad62e2e0dae..01e2ff962754861424d6b611ffec387b } } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index beb18eb9e7e37020ebd7bb03e9a65e090dcfdb4b..2067213bdf592a0882e82c1fe247ad73d8a316da 100644 +index b5a1f2ca1ad1e48ee61df394ef01e1bee768aea7..79c37b86370b8247480eed272d2cc77af4445084 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -247,7 +247,7 @@ public abstract class PlayerList { +@@ -254,7 +254,7 @@ public abstract class PlayerList { boolean flag1 = gamerules.getBoolean(GameRules.REDUCED_DEBUG_INFO); // Spigot - view distance @@ -524,7 +536,7 @@ index beb18eb9e7e37020ebd7bb03e9a65e090dcfdb4b..2067213bdf592a0882e82c1fe247ad73 entityplayer.getBukkitEntity().sendSupportedChannels(); // CraftBukkit playerconnection.sendPacket(new PacketPlayOutCustomPayload(PacketPlayOutCustomPayload.a, (new PacketDataSerializer(Unpooled.buffer())).a(this.getServer().getServerModName()))); playerconnection.sendPacket(new PacketPlayOutServerDifficulty(worlddata.getDifficulty(), worlddata.isDifficultyLocked())); -@@ -901,7 +901,7 @@ public abstract class PlayerList { +@@ -908,7 +908,7 @@ public abstract class PlayerList { // CraftBukkit start WorldData worlddata = worldserver1.getWorldData(); entityplayer1.playerConnection.sendPacket(new PacketPlayOutRespawn(worldserver1.getDimensionManager(), worldserver1.getDimensionKey(), BiomeManager.a(worldserver1.getSeed()), entityplayer1.playerInteractManager.getGameMode(), entityplayer1.playerInteractManager.c(), worldserver1.isDebugWorld(), worldserver1.isFlatWorld(), flag)); @@ -533,7 +545,7 @@ index beb18eb9e7e37020ebd7bb03e9a65e090dcfdb4b..2067213bdf592a0882e82c1fe247ad73 entityplayer1.spawnIn(worldserver1); entityplayer1.dead = false; entityplayer1.playerConnection.teleport(new Location(worldserver1.getWorld(), entityplayer1.locX(), entityplayer1.locY(), entityplayer1.locZ(), entityplayer1.yaw, entityplayer1.pitch)); -@@ -1369,7 +1369,7 @@ public abstract class PlayerList { +@@ -1376,7 +1376,7 @@ public abstract class PlayerList { public void a(int i) { this.viewDistance = i; @@ -543,10 +555,10 @@ index beb18eb9e7e37020ebd7bb03e9a65e090dcfdb4b..2067213bdf592a0882e82c1fe247ad73 while (iterator.hasNext()) { diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 845836efb968fac2ab6f9927b336e10c19630ef5..58949567c8e691a1cc08647d757e497ad7dde7a8 100644 +index efcfc8f0f45901d14ac8fdf8ed7b0bd67f8f94da..7ead848342bfbb5b20e95d716805f4b4fd36eb63 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -517,8 +517,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -525,8 +525,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable { this.b(blockposition, iblockdata1, iblockdata2); } diff --git a/Spigot-Server-Patches/0472-Fix-Light-Command.patch b/Spigot-Server-Patches/0472-Fix-Light-Command.patch index f0aac0a3d0..ff6d9af4dd 100644 --- a/Spigot-Server-Patches/0472-Fix-Light-Command.patch +++ b/Spigot-Server-Patches/0472-Fix-Light-Command.patch @@ -166,10 +166,10 @@ index 1f6333c2c26ad04e23d2881235ed1dcf707be038..e53054fc46e528f9c713eb4c03add613 // Paper start - per player view distance // there can be potential desync with player's last mapped section and the view distance map, so use the diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 01e2ff962754861424d6b611ffec387bb6c72075..79572b2367639f84d3f1ef24e6ee8d69310b8e1c 100644 +index 8c4325e2f6e8a63b42580f2ac55dfb79557d6780..c299bbc814bc0571f17b0c3b843df0fcbb181bfb 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -142,6 +142,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -149,6 +149,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { private final ChunkTaskQueueSorter p; private final Mailbox> mailboxWorldGen; final Mailbox> mailboxMain; // Paper - private -> package private @@ -182,7 +182,7 @@ index 01e2ff962754861424d6b611ffec387bb6c72075..79572b2367639f84d3f1ef24e6ee8d69 public final WorldLoadListener worldLoadListener; public final PlayerChunkMap.a chunkDistanceManager; private final AtomicInteger u; -@@ -333,11 +339,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -340,11 +346,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { Mailbox mailbox = Mailbox.a("main", iasynctaskhandler::a); this.worldLoadListener = worldloadlistener; diff --git a/Spigot-Server-Patches/0473-Fix-PotionEffect-ignores-icon-flag.patch b/Spigot-Server-Patches/0473-Fix-PotionEffect-ignores-icon-flag.patch index 91bee2ef35..790460d707 100644 --- a/Spigot-Server-Patches/0473-Fix-PotionEffect-ignores-icon-flag.patch +++ b/Spigot-Server-Patches/0473-Fix-PotionEffect-ignores-icon-flag.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix PotionEffect ignores icon flag diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index b8e29172a17ad7e30134ff8c63815c71ff1d19d1..97cc5b6b8bf1f44804e2c0528b631c51c75ab325 100644 +index b18292ef2e00b4ef8a0b2da5f63a596dbd04b1fd..5563e7c1ecc9e607ba0be21ae16a544b24d6f030 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -410,7 +410,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -420,7 +420,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @Override public boolean addPotionEffect(PotionEffect effect, boolean force) { diff --git a/Spigot-Server-Patches/0478-Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch b/Spigot-Server-Patches/0478-Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch index f11500b854..23ea26bd65 100644 --- a/Spigot-Server-Patches/0478-Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch +++ b/Spigot-Server-Patches/0478-Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch @@ -56,10 +56,10 @@ index a9ecc2b4da587ca3d3c99f8c8af38092a02fb572..0b3479aae8f7cad7bd0b8b64aa2dead4 this.world.getMethodProfiler().enter("explosion_blocks"); diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 58949567c8e691a1cc08647d757e497ad7dde7a8..ada4a04506a32421bd4b9e661dfe87aa8a2b98bd 100644 +index 7ead848342bfbb5b20e95d716805f4b4fd36eb63..9369a0c6c0ae2d8518ebfb17f2c93ead2647ab8d 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -414,6 +414,10 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -422,6 +422,10 @@ public abstract class World implements GeneratorAccess, AutoCloseable { public boolean a(BlockPosition blockposition, IBlockData iblockdata, int i, int j) { // CraftBukkit start - tree generation if (this.captureTreeGeneration) { diff --git a/Spigot-Server-Patches/0479-Optimize-NibbleArray-to-use-pooled-buffers.patch b/Spigot-Server-Patches/0479-Optimize-NibbleArray-to-use-pooled-buffers.patch index ca39873d05..5097f10e47 100644 --- a/Spigot-Server-Patches/0479-Optimize-NibbleArray-to-use-pooled-buffers.patch +++ b/Spigot-Server-Patches/0479-Optimize-NibbleArray-to-use-pooled-buffers.patch @@ -9,10 +9,10 @@ an object pool for these. Uses lots of advanced new capabilities of the Paper codebase :) diff --git a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutLightUpdate.java b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutLightUpdate.java -index 247d969e7d1aa59d9650fce1032aaa09db3903e5..f6cb758500f7ffc46c7255f980d196eb1095a6b0 100644 +index 247d969e7d1aa59d9650fce1032aaa09db3903e5..9050ff7180f63c1f5756570446c4d0a8cc767779 100644 --- a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutLightUpdate.java +++ b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutLightUpdate.java -@@ -1,6 +1,8 @@ +@@ -1,12 +1,16 @@ package net.minecraft.network.protocol.game; import com.google.common.collect.Lists; @@ -21,7 +21,15 @@ index 247d969e7d1aa59d9650fce1032aaa09db3903e5..f6cb758500f7ffc46c7255f980d196eb import java.io.IOException; import java.util.Iterator; import java.util.List; -@@ -24,14 +26,43 @@ public class PacketPlayOutLightUpdate implements Packet { + import net.minecraft.core.SectionPosition; + import net.minecraft.network.PacketDataSerializer; + import net.minecraft.network.protocol.Packet; ++import net.minecraft.server.MCUtil; ++import net.minecraft.server.level.EntityPlayer; + import net.minecraft.world.level.ChunkCoordIntPair; + import net.minecraft.world.level.EnumSkyBlock; + import net.minecraft.world.level.chunk.NibbleArray; +@@ -24,14 +28,43 @@ public class PacketPlayOutLightUpdate implements Packet { private List h; private boolean i; @@ -67,7 +75,7 @@ index 247d969e7d1aa59d9650fce1032aaa09db3903e5..f6cb758500f7ffc46c7255f980d196eb for (int i = 0; i < 18; ++i) { NibbleArray nibblearray = lightengine.a(EnumSkyBlock.SKY).a(SectionPosition.a(chunkcoordintpair, -1 + i)); -@@ -42,7 +73,7 @@ public class PacketPlayOutLightUpdate implements Packet { +@@ -42,7 +75,7 @@ public class PacketPlayOutLightUpdate implements Packet { this.e |= 1 << i; } else { this.c |= 1 << i; @@ -76,7 +84,7 @@ index 247d969e7d1aa59d9650fce1032aaa09db3903e5..f6cb758500f7ffc46c7255f980d196eb } } -@@ -51,7 +82,7 @@ public class PacketPlayOutLightUpdate implements Packet { +@@ -51,7 +84,7 @@ public class PacketPlayOutLightUpdate implements Packet { this.f |= 1 << i; } else { this.d |= 1 << i; @@ -85,7 +93,7 @@ index 247d969e7d1aa59d9650fce1032aaa09db3903e5..f6cb758500f7ffc46c7255f980d196eb } } } -@@ -64,8 +95,8 @@ public class PacketPlayOutLightUpdate implements Packet { +@@ -64,8 +97,8 @@ public class PacketPlayOutLightUpdate implements Packet { this.i = flag; this.c = i; this.d = j; @@ -96,7 +104,7 @@ index 247d969e7d1aa59d9650fce1032aaa09db3903e5..f6cb758500f7ffc46c7255f980d196eb for (int k = 0; k < 18; ++k) { NibbleArray nibblearray; -@@ -73,7 +104,7 @@ public class PacketPlayOutLightUpdate implements Packet { +@@ -73,7 +106,7 @@ public class PacketPlayOutLightUpdate implements Packet { if ((this.c & 1 << k) != 0) { nibblearray = lightengine.a(EnumSkyBlock.SKY).a(SectionPosition.a(chunkcoordintpair, -1 + k)); if (nibblearray != null && !nibblearray.c()) { @@ -105,7 +113,7 @@ index 247d969e7d1aa59d9650fce1032aaa09db3903e5..f6cb758500f7ffc46c7255f980d196eb } else { this.c &= ~(1 << k); if (nibblearray != null) { -@@ -85,7 +116,7 @@ public class PacketPlayOutLightUpdate implements Packet { +@@ -85,7 +118,7 @@ public class PacketPlayOutLightUpdate implements Packet { if ((this.d & 1 << k) != 0) { nibblearray = lightengine.a(EnumSkyBlock.BLOCK).a(SectionPosition.a(chunkcoordintpair, -1 + k)); if (nibblearray != null && !nibblearray.c()) { diff --git a/Spigot-Server-Patches/0481-Reduce-allocation-of-Vec3D-by-entity-tracker.patch b/Spigot-Server-Patches/0481-Reduce-allocation-of-Vec3D-by-entity-tracker.patch index 5654541532..4b3fc10f62 100644 --- a/Spigot-Server-Patches/0481-Reduce-allocation-of-Vec3D-by-entity-tracker.patch +++ b/Spigot-Server-Patches/0481-Reduce-allocation-of-Vec3D-by-entity-tracker.patch @@ -39,10 +39,10 @@ index 4c82266656d0a60a166faa082a9aaaaed7f062d3..aa5ba862f18ff706f11b0b26cea55a90 if (!flag4 && this.o <= 400 && !this.q && this.r == this.tracker.isOnGround()) { diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 79572b2367639f84d3f1ef24e6ee8d69310b8e1c..406331bf57182355c6d7428b0986baad4248cf9d 100644 +index c299bbc814bc0571f17b0c3b843df0fcbb181bfb..a6e794a77110b670ace4003b7d1156801cf35b6e 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -2179,9 +2179,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2186,9 +2186,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public void updatePlayer(EntityPlayer entityplayer) { org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot if (entityplayer != this.tracker) { diff --git a/Spigot-Server-Patches/0483-Add-option-for-console-having-all-permissions.patch b/Spigot-Server-Patches/0483-Add-option-for-console-having-all-permissions.patch index bce41a3192..908755e004 100644 --- a/Spigot-Server-Patches/0483-Add-option-for-console-having-all-permissions.patch +++ b/Spigot-Server-Patches/0483-Add-option-for-console-having-all-permissions.patch @@ -18,6 +18,19 @@ index 5f3b0d95cc7e6a0434d78ea7305a70689c41c71c..7f140333c2e62012fa572c1a061d8443 + } + } +diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +index 202fa94d5dc55b549475ae0309bbcfca8f1b2c96..ec0956a98c133bcd3d4f92f696c667eab6ff98f1 100644 +--- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java ++++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +@@ -1889,7 +1889,7 @@ public abstract class EntityHuman extends EntityLiving { + } + } + +- protected void releaseShoulderEntities() { ++ public void releaseShoulderEntities() { // Paper - protected -> public + if (this.e + 20L < this.world.getTime()) { + // CraftBukkit start + if (this.spawnEntityFromShoulder(this.getShoulderEntityLeft())) { diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java index af986adfdb547cb61fbd52f0f89858f1a9e52cc3..80a67deaeaae3b3f0ceb9a298de5bb38b8ee707b 100644 --- a/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java @@ -39,7 +52,7 @@ index af986adfdb547cb61fbd52f0f89858f1a9e52cc3..80a67deaeaae3b3f0ceb9a298de5bb38 // Paper end } diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java -index 655bdbc37d0b95622206569229d4f4ea9496c69d..5562a7199f9b73d6af539360d4912d1dbde5d6cf 100644 +index 24662d58cb4a9bf2f3b252858b504165d91d4419..a6f3594def0abe076ff44fcfa61dd05bee729387 100644 --- a/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java +++ b/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java @@ -39,4 +39,16 @@ public class CraftRemoteConsoleCommandSender extends ServerCommandSender impleme diff --git a/Spigot-Server-Patches/0485-Workaround-for-Client-Lag-Spikes-MC-162253.patch b/Spigot-Server-Patches/0485-Workaround-for-Client-Lag-Spikes-MC-162253.patch index 994d215160..be689a86b3 100644 --- a/Spigot-Server-Patches/0485-Workaround-for-Client-Lag-Spikes-MC-162253.patch +++ b/Spigot-Server-Patches/0485-Workaround-for-Client-Lag-Spikes-MC-162253.patch @@ -12,10 +12,18 @@ to the client, so that it doesn't attempt to calculate them. This mitigates the frametime impact to a minimum (but it's still there). diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 406331bf57182355c6d7428b0986baad4248cf9d..76a5310ea35dc6fe482ecfdea8866df0598444c8 100644 +index a6e794a77110b670ace4003b7d1156801cf35b6e..6db110aaa2c1e08808eb80c333ceb8ab0377ca39 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -2004,12 +2004,112 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -85,6 +85,7 @@ import net.minecraft.world.level.World; + import net.minecraft.world.level.chunk.Chunk; + import net.minecraft.world.level.chunk.ChunkConverter; + import net.minecraft.world.level.chunk.ChunkGenerator; ++import net.minecraft.world.level.chunk.ChunkSection; + import net.minecraft.world.level.chunk.ChunkStatus; + import net.minecraft.world.level.chunk.IChunkAccess; + import net.minecraft.world.level.chunk.ILightAccess; +@@ -2011,12 +2012,112 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } @@ -142,10 +150,10 @@ index 92f40f759f625a46288388a3853cf996a0685b18..e056d198a530a830aeebf7ebb51ac927 Object temp = backingSet[index]; if (!(temp instanceof EntityPlayer)) { diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java -index 506b79c67454e41d32ad18003f066681d47e50f5..e81a6b9538f5c770cbfb4d71439db31f8e97face 100644 +index 973aa060d6964c7d470bc7aff89b879daf1df153..8fe060c3b2ad0873f96218eb7d02cdff3279224e 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkSection.java -@@ -106,6 +106,7 @@ public class ChunkSection { +@@ -107,6 +107,7 @@ public class ChunkSection { return this.nonEmptyBlockCount == 0; } diff --git a/Spigot-Server-Patches/0486-Implement-Chunk-Priority-Urgency-System-for-Chunks.patch b/Spigot-Server-Patches/0486-Implement-Chunk-Priority-Urgency-System-for-Chunks.patch index 174c47f467..db47c1167a 100644 --- a/Spigot-Server-Patches/0486-Implement-Chunk-Priority-Urgency-System-for-Chunks.patch +++ b/Spigot-Server-Patches/0486-Implement-Chunk-Priority-Urgency-System-for-Chunks.patch @@ -23,21 +23,10 @@ Chunks in front of the player have higher priority, to help with fast traveling players keep up with their movement. diff --git a/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTaskManager.java b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTaskManager.java -index 49a594e5f345096cb3b9913b8ee2760795c5f012..bcb7ce2692c5bc1a6214c3a384949666107864fb 100644 +index 8e642f450b974d81f128d26edfd40915554db638..dc641664abe8ff6b36c69c7d21a3200d160ff1b6 100644 --- a/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTaskManager.java +++ b/src/main/java/com/destroystokyo/paper/io/chunk/ChunkTaskManager.java -@@ -4,7 +4,10 @@ import com.destroystokyo.paper.io.PaperFileIOThread; - import com.destroystokyo.paper.io.IOUtil; - import com.destroystokyo.paper.io.PrioritizedTaskQueue; - import com.destroystokyo.paper.io.QueueExecutorThread; -+import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -+import net.minecraft.server.ChunkCoordIntPair; - import net.minecraft.server.ChunkRegionLoader; -+import net.minecraft.server.ChunkStatus; - import net.minecraft.server.IAsyncTaskHandler; - import net.minecraft.server.IChunkAccess; - import net.minecraft.server.MinecraftServer; -@@ -106,7 +109,7 @@ public final class ChunkTaskManager { +@@ -108,7 +108,7 @@ public final class ChunkTaskManager { } static void dumpChunkInfo(Set seenChunks, PlayerChunk chunkHolder, int x, int z) { @@ -46,7 +35,7 @@ index 49a594e5f345096cb3b9913b8ee2760795c5f012..bcb7ce2692c5bc1a6214c3a384949666 } static void dumpChunkInfo(Set seenChunks, PlayerChunk chunkHolder, int x, int z, int indent, int maxDepth) { -@@ -127,6 +130,30 @@ public final class ChunkTaskManager { +@@ -129,6 +129,30 @@ public final class ChunkTaskManager { PaperFileIOThread.LOGGER.log(Level.ERROR, indentStr + "Chunk Status - " + ((chunk == null) ? "null chunk" : chunk.getChunkStatus().toString())); PaperFileIOThread.LOGGER.log(Level.ERROR, indentStr + "Chunk Ticket Status - " + PlayerChunk.getChunkStatus(chunkHolder.getTicketLevel())); PaperFileIOThread.LOGGER.log(Level.ERROR, indentStr + "Chunk Holder Status - " + ((holderStatus == null) ? "null" : holderStatus.toString())); @@ -78,10 +67,10 @@ index 49a594e5f345096cb3b9913b8ee2760795c5f012..bcb7ce2692c5bc1a6214c3a384949666 } diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java -index 3e08aa34e01c629083b1e6520b3eed83993b82d2..f1eddf0c8a4c8755c11716c7dbf06c84222fe544 100644 +index 17de074111a174f3a39a4477afc3ad62e04a73b5..1d72af9cace7aa8f1d20c7c1c5be621f533e2dad 100644 --- a/src/main/java/net/minecraft/server/MCUtil.java +++ b/src/main/java/net/minecraft/server/MCUtil.java -@@ -663,6 +663,7 @@ public final class MCUtil { +@@ -673,6 +673,7 @@ public final class MCUtil { chunkData.addProperty("x", playerChunk.location.x); chunkData.addProperty("z", playerChunk.location.z); chunkData.addProperty("ticket-level", playerChunk.getTicketLevel()); @@ -90,10 +79,21 @@ index 3e08aa34e01c629083b1e6520b3eed83993b82d2..f1eddf0c8a4c8755c11716c7dbf06c84 chunkData.addProperty("queued-for-unload", chunkMap.unloadQueue.contains(playerChunk.location.pair())); chunkData.addProperty("status", status == null ? "unloaded" : status.toString()); diff --git a/src/main/java/net/minecraft/server/level/ChunkMapDistance.java b/src/main/java/net/minecraft/server/level/ChunkMapDistance.java -index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe747c7574 100644 +index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..fb4e587e86c76ea720bddcdbb969f21d50aa7527 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMapDistance.java +++ b/src/main/java/net/minecraft/server/level/ChunkMapDistance.java -@@ -29,6 +29,7 @@ import net.minecraft.world.level.chunk.Chunk; +@@ -21,7 +21,10 @@ import java.util.Set; + import java.util.concurrent.CompletableFuture; + import java.util.concurrent.Executor; + import javax.annotation.Nullable; ++import net.minecraft.core.BlockPosition; + import net.minecraft.core.SectionPosition; ++import net.minecraft.server.MCUtil; ++import net.minecraft.server.MinecraftServer; + import net.minecraft.util.ArraySetSorted; + import net.minecraft.util.thread.Mailbox; + import net.minecraft.world.level.ChunkCoordIntPair; +@@ -29,6 +32,7 @@ import net.minecraft.world.level.chunk.Chunk; import net.minecraft.world.level.chunk.ChunkStatus; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -101,7 +101,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe public abstract class ChunkMapDistance { -@@ -52,7 +53,7 @@ public abstract class ChunkMapDistance { +@@ -52,7 +56,7 @@ public abstract class ChunkMapDistance { private final ChunkTaskQueueSorter i; private final Mailbox> j; private final Mailbox k; @@ -110,7 +110,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe private final Executor m; private long currentTick; -@@ -90,6 +91,7 @@ public abstract class ChunkMapDistance { +@@ -90,6 +94,7 @@ public abstract class ChunkMapDistance { } private static int getLowestTicketLevel(ArraySetSorted> arraysetsorted) { @@ -118,7 +118,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe return !arraysetsorted.isEmpty() ? ((Ticket) arraysetsorted.b()).b() : PlayerChunkMap.GOLDEN_TICKET + 1; } -@@ -103,6 +105,7 @@ public abstract class ChunkMapDistance { +@@ -103,6 +108,7 @@ public abstract class ChunkMapDistance { public boolean a(PlayerChunkMap playerchunkmap) { //this.f.a(); // Paper - no longer used @@ -126,7 +126,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe this.g.a(); int i = Integer.MAX_VALUE - this.ticketLevelTracker.a(Integer.MAX_VALUE); boolean flag = i != 0; -@@ -113,11 +116,13 @@ public abstract class ChunkMapDistance { +@@ -113,11 +119,13 @@ public abstract class ChunkMapDistance { // Paper start if (!this.pendingChunkUpdates.isEmpty()) { @@ -140,7 +140,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe // Paper end return true; } else { -@@ -153,8 +158,10 @@ public abstract class ChunkMapDistance { +@@ -153,8 +161,10 @@ public abstract class ChunkMapDistance { return flag; } } @@ -151,7 +151,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe ArraySetSorted> arraysetsorted = this.e(i); int j = getLowestTicketLevel(arraysetsorted); Ticket ticket1 = (Ticket) arraysetsorted.a(ticket); // CraftBukkit - decompile error -@@ -168,7 +175,9 @@ public abstract class ChunkMapDistance { +@@ -168,7 +178,9 @@ public abstract class ChunkMapDistance { } private boolean removeTicket(long i, Ticket ticket) { // CraftBukkit - void -> boolean @@ -161,7 +161,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe boolean removed = false; // CraftBukkit if (arraysetsorted.remove(ticket)) { -@@ -179,7 +188,8 @@ public abstract class ChunkMapDistance { +@@ -179,7 +191,8 @@ public abstract class ChunkMapDistance { this.tickets.remove(i); } @@ -171,7 +171,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe return removed; // CraftBukkit } -@@ -188,6 +198,135 @@ public abstract class ChunkMapDistance { +@@ -188,6 +201,135 @@ public abstract class ChunkMapDistance { this.addTicketAtLevel(tickettype, chunkcoordintpair, i, t0); } @@ -307,7 +307,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe public boolean addTicketAtLevel(TicketType ticketType, ChunkCoordIntPair chunkcoordintpair, int level, T identifier) { return this.addTicket(chunkcoordintpair.pair(), new Ticket<>(ticketType, level, identifier)); // CraftBukkit end -@@ -388,27 +527,50 @@ public abstract class ChunkMapDistance { +@@ -388,27 +530,50 @@ public abstract class ChunkMapDistance { private void a(long i, int j, boolean flag, boolean flag1) { if (flag != flag1) { @@ -364,7 +364,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe }); }, i, true)); } -@@ -416,6 +578,101 @@ public abstract class ChunkMapDistance { +@@ -416,6 +581,101 @@ public abstract class ChunkMapDistance { } @@ -466,7 +466,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe @Override public void a() { super.a(); -@@ -447,6 +704,7 @@ public abstract class ChunkMapDistance { +@@ -447,6 +707,7 @@ public abstract class ChunkMapDistance { } @@ -474,7 +474,7 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe private boolean c(int i) { return i <= this.e - 2; } -@@ -463,6 +721,7 @@ public abstract class ChunkMapDistance { +@@ -463,6 +724,7 @@ public abstract class ChunkMapDistance { this.a.defaultReturnValue((byte) (i + 2)); } @@ -483,10 +483,10 @@ index 2bbdcedf4856080ea9232effdf3bdae9c26c425b..f30939f345c75b8c7d71b6afe8f008fe protected int c(long i) { return this.a.get(i); diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 031979ed14b93f2c5b9567c53c269740ef956de5..0905aa93425a9c85f77ac2f4ffe28ec4ddb9f8b4 100644 +index b24a96dddf50029e4b40a47d49e3278cacaf42ce..9a3f552789b6972982ab28e7edb16ca302e9ff7b 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -465,6 +465,26 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -468,6 +468,26 @@ public class ChunkProviderServer extends IChunkProvider { public void removeTicketAtLevel(TicketType ticketType, ChunkCoordIntPair chunkPos, int ticketLevel, T identifier) { this.chunkMapDistance.removeTicketAtLevel(ticketType, chunkPos, ticketLevel, identifier); } @@ -513,7 +513,7 @@ index 031979ed14b93f2c5b9567c53c269740ef956de5..0905aa93425a9c85f77ac2f4ffe28ec4 // Paper end @Nullable -@@ -503,6 +523,8 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -506,6 +526,8 @@ public class ChunkProviderServer extends IChunkProvider { if (!completablefuture.isDone()) { // Paper // Paper start - async chunk io/loading @@ -522,7 +522,7 @@ index 031979ed14b93f2c5b9567c53c269740ef956de5..0905aa93425a9c85f77ac2f4ffe28ec4 this.world.asyncChunkTaskManager.raisePriority(x, z, com.destroystokyo.paper.io.PrioritizedTaskQueue.HIGHEST_PRIORITY); com.destroystokyo.paper.io.chunk.ChunkTaskManager.pushChunkWait(this.world, x, z); // Paper end -@@ -511,6 +533,8 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -514,6 +536,8 @@ public class ChunkProviderServer extends IChunkProvider { this.serverThreadQueue.awaitTasks(completablefuture::isDone); com.destroystokyo.paper.io.chunk.ChunkTaskManager.popChunkWait(); // Paper - async chunk debug this.world.timings.syncChunkLoad.stopTiming(); // Paper @@ -531,7 +531,7 @@ index 031979ed14b93f2c5b9567c53c269740ef956de5..0905aa93425a9c85f77ac2f4ffe28ec4 } // Paper ichunkaccess = (IChunkAccess) ((Either) completablefuture.join()).map((ichunkaccess1) -> { return ichunkaccess1; -@@ -563,10 +587,12 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -566,10 +590,12 @@ public class ChunkProviderServer extends IChunkProvider { if (flag && !currentlyUnloading) { // CraftBukkit end this.chunkMapDistance.a(TicketType.UNKNOWN, chunkcoordintpair, l, chunkcoordintpair); @@ -544,7 +544,7 @@ index 031979ed14b93f2c5b9567c53c269740ef956de5..0905aa93425a9c85f77ac2f4ffe28ec4 this.tickDistanceManager(); playerchunk = this.getChunk(k); gameprofilerfiller.exit(); -@@ -575,8 +601,13 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -578,8 +604,13 @@ public class ChunkProviderServer extends IChunkProvider { } } } @@ -560,7 +560,7 @@ index 031979ed14b93f2c5b9567c53c269740ef956de5..0905aa93425a9c85f77ac2f4ffe28ec4 } private boolean a(@Nullable PlayerChunk playerchunk, int i) { -@@ -627,6 +658,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -630,6 +661,7 @@ public class ChunkProviderServer extends IChunkProvider { } public boolean tickDistanceManager() { // Paper - private -> public @@ -569,10 +569,18 @@ index 031979ed14b93f2c5b9567c53c269740ef956de5..0905aa93425a9c85f77ac2f4ffe28ec4 boolean flag1 = this.playerChunkMap.b(); diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 4c8a324a70dac11251643263eb03e9939bbd1b62..9c30a74dae5df5a187b3384e36cdabc227edd1b9 100644 +index 2def7680367e4a20d7402b27bff7242afdc250e2..5d6865fd7b67c2031440a8bd862099244d2ea407 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -185,6 +185,12 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -72,6 +72,7 @@ import net.minecraft.network.protocol.game.PacketPlayOutWorldEvent; + import net.minecraft.resources.MinecraftKey; + import net.minecraft.resources.ResourceKey; + import net.minecraft.server.AdvancementDataPlayer; ++import net.minecraft.server.MCUtil; + import net.minecraft.server.MinecraftServer; + import net.minecraft.server.network.ITextFilter; + import net.minecraft.server.network.PlayerConnection; +@@ -186,6 +187,12 @@ public class EntityPlayer extends EntityHuman implements ICrafting { private int lastArmorScored = Integer.MIN_VALUE; private int lastExpLevelScored = Integer.MIN_VALUE; private int lastExpTotalScored = Integer.MIN_VALUE; @@ -585,7 +593,7 @@ index 4c8a324a70dac11251643263eb03e9939bbd1b62..9c30a74dae5df5a187b3384e36cdabc2 private float lastHealthSent = -1.0E8F; private int lastFoodSent = -99999999; private boolean lastSentSaturationZero = true; -@@ -272,6 +278,21 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -273,6 +280,21 @@ public class EntityPlayer extends EntityHuman implements ICrafting { this.maxHealthCache = this.getMaxHealth(); this.cachedSingleMobDistanceMap = new com.destroystokyo.paper.util.PooledHashSets.PooledObjectLinkedOpenHashSet<>(this); // Paper } @@ -607,7 +615,7 @@ index 4c8a324a70dac11251643263eb03e9939bbd1b62..9c30a74dae5df5a187b3384e36cdabc2 // Yes, this doesn't match Vanilla, but it's the best we can do for now. // If this is an issue, PRs are welcome -@@ -619,6 +640,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -620,6 +642,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { if (valid && !this.isSpectator() || this.world.isLoaded(this.getChunkCoordinates())) { // Paper - don't tick dead players that are not in the world currently (pending respawn) super.tick(); } @@ -877,7 +885,7 @@ index e53054fc46e528f9c713eb4c03add61316e19396..cd2c2a680a93d92b1814ce88892bfc76 } diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1ddb54a7bd0 100644 +index 6db110aaa2c1e08808eb80c333ceb8ab0377ca39..ff47dbe63a60adae11660578f4e0bf1b7fab48d4 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java @@ -14,6 +14,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; @@ -888,7 +896,15 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd import it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2ObjectMap.Entry; import it.unimi.dsi.fastutil.longs.LongIterator; -@@ -97,6 +98,7 @@ import org.apache.logging.log4j.LogManager; +@@ -51,6 +52,7 @@ import net.minecraft.CrashReport; + import net.minecraft.CrashReportSystemDetails; + import net.minecraft.ReportedException; + import net.minecraft.SystemUtils; ++import net.minecraft.core.BlockPosition; + import net.minecraft.core.SectionPosition; + import net.minecraft.nbt.NBTTagCompound; + import net.minecraft.network.protocol.Packet; +@@ -105,6 +107,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.bukkit.entity.Player; // CraftBukkit @@ -896,7 +912,7 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { -@@ -134,6 +136,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -142,6 +145,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public final WorldServer world; private final LightEngineThreaded lightEngine; private final IAsyncTaskHandler executor; @@ -904,7 +920,7 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd public final ChunkGenerator chunkGenerator; private final Supplier l; public final Supplier getWorldPersistentDataSupplier() { return this.l; } // Paper - OBFHELPER private final VillagePlace m; -@@ -171,6 +174,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -179,6 +183,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { @Override public void execute(Runnable runnable) { @@ -912,7 +928,7 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd if (queued == null) { queued = new java.util.ArrayDeque<>(); } -@@ -179,6 +183,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -187,6 +192,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { @Override public void run() { @@ -920,7 +936,7 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd if (queued == null) { return; } -@@ -333,6 +338,15 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -341,6 +347,15 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.world = worldserver; this.chunkGenerator = chunkgenerator; this.executor = iasynctaskhandler; @@ -936,7 +952,7 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd ThreadedMailbox threadedmailbox = ThreadedMailbox.a(executor, "worldgen"); iasynctaskhandler.getClass(); -@@ -427,6 +441,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -435,6 +450,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.playerViewDistanceTickMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets, (EntityPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ, com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet newState) -> { @@ -944,7 +960,7 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd if (newState.size() != 1) { return; } -@@ -445,7 +460,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -453,7 +469,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } ChunkCoordIntPair chunkPos = new ChunkCoordIntPair(rangeX, rangeZ); PlayerChunkMap.this.world.getChunkProvider().removeTicketAtLevel(TicketType.PLAYER, chunkPos, 31, chunkPos); // entity ticking level, TODO check on update @@ -957,7 +973,7 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd this.playerViewDistanceNoTickMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets); this.playerViewDistanceBroadcastMap = new com.destroystokyo.paper.util.misc.PlayerAreaMap(this.pooledLinkedPlayerHashSets, (EntityPlayer player, int rangeX, int rangeZ, int currPosX, int currPosZ, int prevPosX, int prevPosZ, -@@ -462,6 +481,115 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -470,6 +490,115 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { }); // Paper end - no-tick view distance } @@ -1073,7 +1089,7 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd public void updatePlayerMobTypeMap(Entity entity) { if (!this.world.paperConfig.perPlayerMobSpawns) { -@@ -591,6 +719,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -599,6 +728,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { List>> list = Lists.newArrayList(); int j = chunkcoordintpair.x; int k = chunkcoordintpair.z; @@ -1081,7 +1097,7 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd for (int l = -i; l <= i; ++l) { for (int i1 = -i; i1 <= i; ++i1) { -@@ -609,6 +738,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -617,6 +747,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { ChunkStatus chunkstatus = (ChunkStatus) intfunction.apply(j1); CompletableFuture> completablefuture = playerchunk.a(chunkstatus, this); @@ -1096,7 +1112,7 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd list.add(completablefuture); } -@@ -1076,14 +1213,22 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1084,14 +1222,22 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { }; CompletableFuture chunkSaveFuture = this.world.asyncChunkTaskManager.getChunkSaveFuture(chunkcoordintpair.x, chunkcoordintpair.z); @@ -1124,7 +1140,7 @@ index 76a5310ea35dc6fe482ecfdea8866df0598444c8..8585e5da1fed256038f41d50c6ecd1dd return ret; // Paper end } -@@ -1220,7 +1365,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1228,7 +1374,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { long i = playerchunk.i().pair(); playerchunk.getClass(); @@ -1167,7 +1183,7 @@ index 2c932d36f982e7f8713aabff9a6c631055810366..f5d18834e0e2ee0e3bcf55810456766d public static TicketType a(String s, Comparator comparator) { return new TicketType<>(s, comparator, 0L); diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 5cd8ee9a9099cd435735c3d9a2194f86232db45f..c42b981038fcca80de0ac293bef6a78697d3818f 100644 +index 41d4c3533119cc80cb4c93771db344531c8dd106..d8be5ff9620da8d96a0d157fb99145d3b43299df 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java @@ -1527,6 +1527,7 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -1179,10 +1195,10 @@ index 5cd8ee9a9099cd435735c3d9a2194f86232db45f..c42b981038fcca80de0ac293bef6a786 } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 2067213bdf592a0882e82c1fe247ad73d8a316da..141166a4e3aaf811debdd20694c953ef771fc8ac 100644 +index 79c37b86370b8247480eed272d2cc77af4445084..86e50a90e524bd8e77efd9e5641fa4e59560df11 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -268,8 +268,8 @@ public abstract class PlayerList { +@@ -275,8 +275,8 @@ public abstract class PlayerList { final ChunkCoordIntPair pos = new ChunkCoordIntPair(chunkX, chunkZ); PlayerChunkMap playerChunkMap = worldserver1.getChunkProvider().playerChunkMap; playerChunkMap.chunkDistanceManager.addTicketAtLevel(TicketType.LOGIN, pos, 31, pos.pair()); @@ -1193,7 +1209,7 @@ index 2067213bdf592a0882e82c1fe247ad73d8a316da..141166a4e3aaf811debdd20694c953ef PlayerChunk updatingChunk = playerChunkMap.getUpdatingChunk(pos.pair()); if (updatingChunk != null) { return updatingChunk.getEntityTickingFuture(); -@@ -689,6 +689,7 @@ public abstract class PlayerList { +@@ -696,6 +696,7 @@ public abstract class PlayerList { SocketAddress socketaddress = loginlistener.networkManager.getSocketAddress(); EntityPlayer entity = new EntityPlayer(this.server, this.server.getWorldServer(World.OVERWORLD), gameprofile, new PlayerInteractManager(this.server.getWorldServer(World.OVERWORLD))); @@ -1201,7 +1217,7 @@ index 2067213bdf592a0882e82c1fe247ad73d8a316da..141166a4e3aaf811debdd20694c953ef Player player = entity.getBukkitEntity(); PlayerLoginEvent event = new PlayerLoginEvent(player, hostname, ((java.net.InetSocketAddress) socketaddress).getAddress(), ((java.net.InetSocketAddress) loginlistener.networkManager.getRawAddress()).getAddress()); -@@ -895,6 +896,7 @@ public abstract class PlayerList { +@@ -902,6 +903,7 @@ public abstract class PlayerList { // CraftBukkit end worldserver1.getChunkProvider().addTicket(TicketType.POST_TELEPORT, new ChunkCoordIntPair(location.getBlockX() >> 4, location.getBlockZ() >> 4), 1, entityplayer.getId()); // Paper @@ -1237,7 +1253,7 @@ index 70002819b0c18cce4e907678ca3d3e4e8f7cc70a..fa2f6f737b41157b90f455b65d41b1e5 net.minecraft.world.level.chunk.Chunk chunk = (net.minecraft.world.level.chunk.Chunk) either.left().orElse(null); return CompletableFuture.completedFuture(chunk == null ? null : chunk.getBukkitChunk()); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index ebdb72c7967cd0091a47c1634be011cd81b555f9..b00f8dbe7398ea7711b50adaa6061b3e2026b8b6 100644 +index f512a78c1fee21e90dfbb3af2ebbeeb89ae6b8f1..bfca937a85ea8249f81b746a15835520a3b22dd1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -848,6 +848,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/Spigot-Server-Patches/0487-Optimize-sending-packets-to-nearby-locations-sounds-.patch b/Spigot-Server-Patches/0487-Optimize-sending-packets-to-nearby-locations-sounds-.patch index 8a241bbb80..35e5870d65 100644 --- a/Spigot-Server-Patches/0487-Optimize-sending-packets-to-nearby-locations-sounds-.patch +++ b/Spigot-Server-Patches/0487-Optimize-sending-packets-to-nearby-locations-sounds-.patch @@ -11,10 +11,10 @@ This will drastically cut down on packet sending cost for worlds with lots of players in them. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 141166a4e3aaf811debdd20694c953ef771fc8ac..ead0079e3d6f338c34f8589067c4d1bf0be2b83f 100644 +index 86e50a90e524bd8e77efd9e5641fa4e59560df11..abfe8b929ddc9dd397fa342f77186aebb982adb4 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1146,16 +1146,40 @@ public abstract class PlayerList { +@@ -1153,16 +1153,40 @@ public abstract class PlayerList { } public void sendPacketNearby(@Nullable EntityHuman entityhuman, double d0, double d1, double d2, double d3, ResourceKey resourcekey, Packet packet) { diff --git a/Spigot-Server-Patches/0488-Improve-Chunk-Status-Transition-Speed.patch b/Spigot-Server-Patches/0488-Improve-Chunk-Status-Transition-Speed.patch index 2894032e28..fbea350ad2 100644 --- a/Spigot-Server-Patches/0488-Improve-Chunk-Status-Transition-Speed.patch +++ b/Spigot-Server-Patches/0488-Improve-Chunk-Status-Transition-Speed.patch @@ -54,10 +54,10 @@ index cd2c2a680a93d92b1814ce88892bfc763313ca1f..48b87ed945a71b97d8a88cbaf4099dc9 // Paper start - no-tick view distance public final Chunk getSendingChunk() { diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 8585e5da1fed256038f41d50c6ecd1ddb54a7bd0..4441af38184adefdf686429d1d147b9bbb76b5a6 100644 +index ff47dbe63a60adae11660578f4e0bf1b7fab48d4..488a7f6849036310d5831ab9cb29ec79bc226e2b 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -786,7 +786,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -795,7 +795,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return either.mapLeft((list) -> { return (Chunk) list.get(list.size() / 2); }); @@ -66,7 +66,7 @@ index 8585e5da1fed256038f41d50c6ecd1ddb54a7bd0..4441af38184adefdf686429d1d147b9b } @Nullable -@@ -1136,7 +1136,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1145,7 +1145,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { IChunkAccess ichunkaccess = (IChunkAccess) optional.get(); if (ichunkaccess.getChunkStatus().b(chunkstatus)) { @@ -75,7 +75,7 @@ index 8585e5da1fed256038f41d50c6ecd1ddb54a7bd0..4441af38184adefdf686429d1d147b9b if (chunkstatus == ChunkStatus.LIGHT) { completablefuture1 = this.b(playerchunk, chunkstatus); -@@ -1152,7 +1152,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1161,7 +1161,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return this.b(playerchunk, chunkstatus); } } @@ -84,7 +84,7 @@ index 8585e5da1fed256038f41d50c6ecd1ddb54a7bd0..4441af38184adefdf686429d1d147b9b } } -@@ -1273,6 +1273,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1282,6 +1282,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return CompletableFuture.completedFuture(Either.right(playerchunk_failure)); }); }, (runnable) -> { diff --git a/Spigot-Server-Patches/0491-Use-seed-based-lookup-for-Treasure-Maps-Fixes-lag-fr.patch b/Spigot-Server-Patches/0491-Use-seed-based-lookup-for-Treasure-Maps-Fixes-lag-fr.patch index 590f6fd281..103f8f2479 100644 --- a/Spigot-Server-Patches/0491-Use-seed-based-lookup-for-Treasure-Maps-Fixes-lag-fr.patch +++ b/Spigot-Server-Patches/0491-Use-seed-based-lookup-for-Treasure-Maps-Fixes-lag-fr.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Use seed based lookup for Treasure Maps - Fixes lag from diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index b294337a586193870fcdbfe1697703137f4ae626..117772867eede63646d80bb7af4792a2db16d815 100644 +index da3614a4a59884e7cbc8758cfdad9698eb15424f..e7cebe1277cb8fc54a080b93b34a66a2e962119b 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -416,8 +416,8 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -419,8 +419,8 @@ public class WorldServer extends World implements GeneratorAccessSeed { this.worldDataServer.setThundering(flag1); } diff --git a/Spigot-Server-Patches/0493-Optimize-Light-Engine.patch b/Spigot-Server-Patches/0493-Optimize-Light-Engine.patch index a85f37e515..5994394fd8 100644 --- a/Spigot-Server-Patches/0493-Optimize-Light-Engine.patch +++ b/Spigot-Server-Patches/0493-Optimize-Light-Engine.patch @@ -25,10 +25,10 @@ Massive update to light to improve performance and chunk loading/generation. 8) Fix NPE risk that crashes server in getting nibble data diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 0905aa93425a9c85f77ac2f4ffe28ec4ddb9f8b4..3a7b7df4080c04b618dfaf0b47cc54293332c41d 100644 +index 9a3f552789b6972982ab28e7edb16ca302e9ff7b..f7e684e550ac531a978113c6f5861fd912d3cfd1 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -1067,7 +1067,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -1070,7 +1070,7 @@ public class ChunkProviderServer extends IChunkProvider { if (ChunkProviderServer.this.tickDistanceManager()) { return true; } else { @@ -379,10 +379,18 @@ index 48b87ed945a71b97d8a88cbaf4099dc966a8ab88..b19c3bdbf64dc44f01487a3d17236a03 if (getCurrentPriority() != priority) { this.u.a(this.location, this::getCurrentPriority, priority, this::setPriority); // use preferred priority diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 4441af38184adefdf686429d1d147b9bbb76b5a6..f3f906d8ffa195b100d5bd2d232ae8489d48d60d 100644 +index 488a7f6849036310d5831ab9cb29ec79bc226e2b..033dee28da5b788b90b6c6651b2ab92efd1d2f21 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -322,6 +322,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -99,6 +99,7 @@ import net.minecraft.world.level.chunk.storage.RegionFile; + import net.minecraft.world.level.levelgen.structure.StructureStart; + import net.minecraft.world.level.levelgen.structure.templatesystem.DefinedStructureManager; + import net.minecraft.world.level.storage.Convertable; ++import net.minecraft.world.level.storage.WorldDataServer; + import net.minecraft.world.level.storage.WorldPersistentData; + import net.minecraft.world.phys.Vec3D; + import it.unimi.dsi.fastutil.objects.ObjectRBTreeSet; // Paper +@@ -331,6 +332,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } // Paper end @@ -390,7 +398,7 @@ index 4441af38184adefdf686429d1d147b9bbb76b5a6..f3f906d8ffa195b100d5bd2d232ae848 public PlayerChunkMap(WorldServer worldserver, Convertable.ConversionSession convertable_conversionsession, DataFixer datafixer, DefinedStructureManager definedstructuremanager, Executor executor, IAsyncTaskHandler iasynctaskhandler, ILightAccess ilightaccess, ChunkGenerator chunkgenerator, WorldLoadListener worldloadlistener, Supplier supplier, int i, boolean flag) { super(new File(convertable_conversionsession.a(worldserver.getDimensionKey()), "region"), datafixer, flag); //this.visibleChunks = this.updatingChunks.clone(); // Paper - no more cloning -@@ -353,7 +354,15 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -362,7 +364,15 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { Mailbox mailbox = Mailbox.a("main", iasynctaskhandler::a); this.worldLoadListener = worldloadlistener; @@ -407,7 +415,7 @@ index 4441af38184adefdf686429d1d147b9bbb76b5a6..f3f906d8ffa195b100d5bd2d232ae848 this.p = new ChunkTaskQueueSorter(ImmutableList.of(threadedmailbox, mailbox, threadedmailbox1), executor, Integer.MAX_VALUE); this.mailboxWorldGen = this.p.a(threadedmailbox, false); -@@ -699,6 +708,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -708,6 +718,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Paper end } @@ -415,7 +423,7 @@ index 4441af38184adefdf686429d1d147b9bbb76b5a6..f3f906d8ffa195b100d5bd2d232ae848 protected IntSupplier c(long i) { return () -> { PlayerChunk playerchunk = this.getVisibleChunk(i); -@@ -826,6 +836,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -835,6 +846,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { @Override public void close() throws IOException { try { @@ -424,10 +432,10 @@ index 4441af38184adefdf686429d1d147b9bbb76b5a6..f3f906d8ffa195b100d5bd2d232ae848 this.world.asyncChunkTaskManager.close(true); // Paper - Required since we're closing regionfiles in the next line this.m.close(); diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 117772867eede63646d80bb7af4792a2db16d815..2181fbc31e96c74679185a49abbb3d7a2d5b6e9f 100644 +index e7cebe1277cb8fc54a080b93b34a66a2e962119b..0e738ace7d37011547378954aae91f79c7ebd544 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -823,6 +823,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -826,6 +826,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } gameprofilerfiller.exit(); timings.chunkTicksBlocks.stopTiming(); // Paper @@ -596,10 +604,18 @@ index f6198069e3ca421b4f551939263c7cf8bd5b754e..e8d2415033c5db3c27e10a38e1ea75e6 if (l > k2) { l = k2; diff --git a/src/main/java/net/minecraft/world/level/lighting/LightEngineLayer.java b/src/main/java/net/minecraft/world/level/lighting/LightEngineLayer.java -index 944a8c295ff9df0d96800ddc4f6763598cf61d0d..896020d7d680a2456c190cc2463248a908046ddc 100644 +index 944a8c295ff9df0d96800ddc4f6763598cf61d0d..64dad8ed7c16011d9cb3e9d22ac6f892c638e3b2 100644 --- a/src/main/java/net/minecraft/world/level/lighting/LightEngineLayer.java +++ b/src/main/java/net/minecraft/world/level/lighting/LightEngineLayer.java -@@ -23,10 +23,37 @@ public abstract class LightEngineLayer, S e +@@ -10,6 +10,7 @@ import net.minecraft.world.level.EnumSkyBlock; + import net.minecraft.world.level.IBlockAccess; + import net.minecraft.world.level.block.Blocks; + import net.minecraft.world.level.block.state.IBlockData; ++import net.minecraft.world.level.chunk.IChunkAccess; + import net.minecraft.world.level.chunk.ILightAccess; + import net.minecraft.world.level.chunk.NibbleArray; + import net.minecraft.world.phys.shapes.VoxelShape; +@@ -23,10 +24,37 @@ public abstract class LightEngineLayer, S e protected final EnumSkyBlock b; protected final S c; private boolean f; @@ -639,7 +655,7 @@ index 944a8c295ff9df0d96800ddc4f6763598cf61d0d..896020d7d680a2456c190cc2463248a9 public LightEngineLayer(ILightAccess ilightaccess, EnumSkyBlock enumskyblock, S s0) { super(16, 256, 8192); this.a = ilightaccess; -@@ -45,7 +72,7 @@ public abstract class LightEngineLayer, S e +@@ -45,7 +73,7 @@ public abstract class LightEngineLayer, S e } @Nullable @@ -648,7 +664,7 @@ index 944a8c295ff9df0d96800ddc4f6763598cf61d0d..896020d7d680a2456c190cc2463248a9 long k = ChunkCoordIntPair.pair(i, j); for (int l = 0; l < 2; ++l) { -@@ -54,7 +81,7 @@ public abstract class LightEngineLayer, S e +@@ -54,7 +82,7 @@ public abstract class LightEngineLayer, S e } } @@ -657,7 +673,7 @@ index 944a8c295ff9df0d96800ddc4f6763598cf61d0d..896020d7d680a2456c190cc2463248a9 for (int i1 = 1; i1 > 0; --i1) { this.g[i1] = this.g[i1 - 1]; -@@ -71,37 +98,39 @@ public abstract class LightEngineLayer, S e +@@ -71,37 +99,39 @@ public abstract class LightEngineLayer, S e Arrays.fill(this.h, (Object) null); } @@ -728,7 +744,7 @@ index 944a8c295ff9df0d96800ddc4f6763598cf61d0d..896020d7d680a2456c190cc2463248a9 protected VoxelShape a(IBlockData iblockdata, long i, EnumDirection enumdirection) { return iblockdata.l() ? iblockdata.a(this.a.getWorld(), this.d.g(i), enumdirection) : VoxelShapes.a(); -@@ -136,8 +165,9 @@ public abstract class LightEngineLayer, S e +@@ -136,8 +166,9 @@ public abstract class LightEngineLayer, S e return i == Long.MAX_VALUE ? 0 : 15 - this.c.i(i); } diff --git a/Spigot-Server-Patches/0494-Delay-Chunk-Unloads-based-on-Player-Movement.patch b/Spigot-Server-Patches/0494-Delay-Chunk-Unloads-based-on-Player-Movement.patch index 55bb5034fc..64b10f07f1 100644 --- a/Spigot-Server-Patches/0494-Delay-Chunk-Unloads-based-on-Player-Movement.patch +++ b/Spigot-Server-Patches/0494-Delay-Chunk-Unloads-based-on-Player-Movement.patch @@ -35,10 +35,10 @@ index 6463d3e4837d032a35654a035f42b8a805e0e286..1655bca0502e7b871de4addaa163536d + } } diff --git a/src/main/java/net/minecraft/server/level/ChunkMapDistance.java b/src/main/java/net/minecraft/server/level/ChunkMapDistance.java -index f30939f345c75b8c7d71b6afe8f008fe747c7574..982352a21d3834c1c1dba24fffa361806227bed5 100644 +index fb4e587e86c76ea720bddcdbb969f21d50aa7527..2f8bca35508640f6b8c312fff17d55f129431599 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMapDistance.java +++ b/src/main/java/net/minecraft/server/level/ChunkMapDistance.java -@@ -182,6 +182,27 @@ public abstract class ChunkMapDistance { +@@ -185,6 +185,27 @@ public abstract class ChunkMapDistance { boolean removed = false; // CraftBukkit if (arraysetsorted.remove(ticket)) { removed = true; // CraftBukkit diff --git a/Spigot-Server-Patches/0508-Ensure-Entity-AABB-s-are-never-invalid.patch b/Spigot-Server-Patches/0508-Ensure-Entity-AABB-s-are-never-invalid.patch index a1e705e26b..53647d4796 100644 --- a/Spigot-Server-Patches/0508-Ensure-Entity-AABB-s-are-never-invalid.patch +++ b/Spigot-Server-Patches/0508-Ensure-Entity-AABB-s-are-never-invalid.patch @@ -5,10 +5,18 @@ Subject: [PATCH] Ensure Entity AABB's are never invalid diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 031b754079dc1944b232014c28c64cdb6bcad2fb..b0ef4810a4526feec57f8bceb7562aa7629d15af 100644 +index 8a1a7a465f007109f8e3b5359cac8ea9d9673049..6b9c73265a987be4da9b1657ff594cde1f3e6304 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -474,7 +474,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -66,6 +66,7 @@ import net.minecraft.world.INamableTileEntity; + import net.minecraft.world.damagesource.DamageSource; + import net.minecraft.world.entity.animal.EntityAnimal; + import net.minecraft.world.entity.animal.EntityFish; ++import net.minecraft.world.entity.decoration.EntityHanging; + import net.minecraft.world.entity.item.EntityItem; + import net.minecraft.world.entity.player.EntityHuman; + import net.minecraft.world.entity.vehicle.EntityBoat; +@@ -479,7 +480,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public void setPosition(double d0, double d1, double d2) { this.setPositionRaw(d0, d1, d2); @@ -17,7 +25,7 @@ index 031b754079dc1944b232014c28c64cdb6bcad2fb..b0ef4810a4526feec57f8bceb7562aa7 if (valid) ((WorldServer) world).chunkCheck(this); // CraftBukkit } -@@ -2989,6 +2989,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2994,6 +2995,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return new AxisAlignedBB(vec3d, vec3d1); } @@ -25,7 +33,7 @@ index 031b754079dc1944b232014c28c64cdb6bcad2fb..b0ef4810a4526feec57f8bceb7562aa7 public void a(AxisAlignedBB axisalignedbb) { // CraftBukkit start - block invalid bounding boxes double minX = axisalignedbb.minX, -@@ -3427,6 +3428,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -3432,6 +3434,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } public void setPositionRaw(double d0, double d1, double d2) { diff --git a/Spigot-Server-Patches/0509-Optimize-WorldBorder-collision-checks-and-air.patch b/Spigot-Server-Patches/0509-Optimize-WorldBorder-collision-checks-and-air.patch index 84299812d0..b239f9dd96 100644 --- a/Spigot-Server-Patches/0509-Optimize-WorldBorder-collision-checks-and-air.patch +++ b/Spigot-Server-Patches/0509-Optimize-WorldBorder-collision-checks-and-air.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Optimize WorldBorder collision checks and air diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b0ef4810a4526feec57f8bceb7562aa7629d15af..4a8f6c9a08c4e5012fd17978bf3b8e87a71f607b 100644 +index 6b9c73265a987be4da9b1657ff594cde1f3e6304..2dc65047fcba5d498caf76ce2ceeebf7a914b8cd 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -903,7 +903,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -909,7 +909,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne AxisAlignedBB axisalignedbb = this.getBoundingBox(); VoxelShapeCollision voxelshapecollision = VoxelShapeCollision.a(this); VoxelShape voxelshape = this.world.getWorldBorder().c(); diff --git a/Spigot-Server-Patches/0517-Remove-some-streams-from-structures.patch b/Spigot-Server-Patches/0517-Remove-some-streams-from-structures.patch index 11c5f23cf0..b7d5cb5320 100644 --- a/Spigot-Server-Patches/0517-Remove-some-streams-from-structures.patch +++ b/Spigot-Server-Patches/0517-Remove-some-streams-from-structures.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Remove some streams from structures This showed up a lot in the spark profiler, should have a low-medium performance improvement. diff --git a/src/main/java/net/minecraft/world/level/StructureManager.java b/src/main/java/net/minecraft/world/level/StructureManager.java -index a6a3bd3d60c30859b5a59e057d430c826d93e83c..a21b19a8fc2ecf01a49f20b611280d878c1d9100 100644 +index a6a3bd3d60c30859b5a59e057d430c826d93e83c..1077f988e16688f74c9e40d6da517c954cb06ecb 100644 --- a/src/main/java/net/minecraft/world/level/StructureManager.java +++ b/src/main/java/net/minecraft/world/level/StructureManager.java @@ -1,6 +1,7 @@ @@ -17,7 +17,12 @@ index a6a3bd3d60c30859b5a59e057d430c826d93e83c..a21b19a8fc2ecf01a49f20b611280d87 import java.util.stream.Stream; import javax.annotation.Nullable; import net.minecraft.core.BaseBlockPosition; -@@ -15,7 +16,7 @@ import net.minecraft.world.level.levelgen.structure.StructureStart; +@@ -11,11 +12,12 @@ import net.minecraft.world.level.chunk.ChunkStatus; + import net.minecraft.world.level.chunk.IStructureAccess; + import net.minecraft.world.level.levelgen.GeneratorSettings; + import net.minecraft.world.level.levelgen.feature.StructureGenerator; ++import net.minecraft.world.level.levelgen.structure.StructurePiece; + import net.minecraft.world.level.levelgen.structure.StructureStart; public class StructureManager { @@ -26,7 +31,7 @@ index a6a3bd3d60c30859b5a59e057d430c826d93e83c..a21b19a8fc2ecf01a49f20b611280d87 private final GeneratorSettings b; public StructureManager(GeneratorAccess generatoraccess, GeneratorSettings generatorsettings) { -@@ -41,6 +42,20 @@ public class StructureManager { +@@ -41,6 +43,20 @@ public class StructureManager { }); } @@ -47,7 +52,7 @@ index a6a3bd3d60c30859b5a59e057d430c826d93e83c..a21b19a8fc2ecf01a49f20b611280d87 @Nullable public StructureStart a(SectionPosition sectionposition, StructureGenerator structuregenerator, IStructureAccess istructureaccess) { return istructureaccess.a(structuregenerator); -@@ -59,13 +74,21 @@ public class StructureManager { +@@ -59,13 +75,21 @@ public class StructureManager { } public StructureStart a(BlockPosition blockposition, boolean flag, StructureGenerator structuregenerator) { @@ -77,10 +82,18 @@ index a6a3bd3d60c30859b5a59e057d430c826d93e83c..a21b19a8fc2ecf01a49f20b611280d87 // Spigot start diff --git a/src/main/java/net/minecraft/world/level/biome/BiomeBase.java b/src/main/java/net/minecraft/world/level/biome/BiomeBase.java -index 7147cdda756ccb3d4f6880802128f68601783883..3a050fc7d7abeb3c85b6a5d4d3751cdd9a77c82f 100644 +index 7147cdda756ccb3d4f6880802128f68601783883..15096a9c2719b8b4c099f62d0a1c808e56b63a8e 100644 --- a/src/main/java/net/minecraft/world/level/biome/BiomeBase.java +++ b/src/main/java/net/minecraft/world/level/biome/BiomeBase.java -@@ -238,9 +238,11 @@ public final class BiomeBase { +@@ -39,6 +39,7 @@ import net.minecraft.world.level.levelgen.WorldGenStage; + import net.minecraft.world.level.levelgen.feature.StructureGenerator; + import net.minecraft.world.level.levelgen.feature.WorldGenFeatureConfigured; + import net.minecraft.world.level.levelgen.structure.StructureBoundingBox; ++import net.minecraft.world.level.levelgen.structure.StructureStart; + import net.minecraft.world.level.levelgen.surfacebuilders.WorldGenSurfaceComposite; + import net.minecraft.world.level.levelgen.synth.NoiseGenerator3; + import net.minecraft.world.level.material.Fluid; +@@ -238,9 +239,11 @@ public final class BiomeBase { int l1 = j1 << 4; try { diff --git a/Spigot-Server-Patches/0521-Add-entity-liquid-API.patch b/Spigot-Server-Patches/0521-Add-entity-liquid-API.patch index bb696277f1..e4451979e4 100644 --- a/Spigot-Server-Patches/0521-Add-entity-liquid-API.patch +++ b/Spigot-Server-Patches/0521-Add-entity-liquid-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add entity liquid API diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4a8f6c9a08c4e5012fd17978bf3b8e87a71f607b..1aa2f0f5c021345643c13fd9b6ef0a070c34c43c 100644 +index 2dc65047fcba5d498caf76ce2ceeebf7a914b8cd..f0e120e0d0da6949b7a5a12e5217b3d70ccec7fa 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1160,12 +1160,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1166,12 +1166,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return this.inWater; } @@ -23,7 +23,7 @@ index 4a8f6c9a08c4e5012fd17978bf3b8e87a71f607b..1aa2f0f5c021345643c13fd9b6ef0a07 private boolean k() { return this.world.getType(this.getChunkCoordinates()).a(Blocks.BUBBLE_COLUMN); } -@@ -1179,6 +1180,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1185,6 +1186,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return this.isInWater() || this.isInRain() || this.k(); } @@ -31,7 +31,7 @@ index 4a8f6c9a08c4e5012fd17978bf3b8e87a71f607b..1aa2f0f5c021345643c13fd9b6ef0a07 public boolean aH() { return this.isInWater() || this.k(); } -@@ -1321,6 +1323,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1327,6 +1329,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return this.O == tag; } diff --git a/Spigot-Server-Patches/0522-Update-itemstack-legacy-name-and-lore.patch b/Spigot-Server-Patches/0522-Update-itemstack-legacy-name-and-lore.patch index 56899b1db6..d173b27a54 100644 --- a/Spigot-Server-Patches/0522-Update-itemstack-legacy-name-and-lore.patch +++ b/Spigot-Server-Patches/0522-Update-itemstack-legacy-name-and-lore.patch @@ -5,10 +5,18 @@ Subject: [PATCH] Update itemstack legacy name and lore diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 3d5a4d662ae4880fa27bd681127ddf7d1f70b51c..8b5aaa18d278f20e32e25edddc2a10069c2ba5e6 100644 +index 3d5a4d662ae4880fa27bd681127ddf7d1f70b51c..9f0aad908cf662aa7ba1e62c0639abf06d30568c 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -137,6 +137,44 @@ public final class ItemStack { +@@ -27,6 +27,7 @@ import net.minecraft.core.IRegistry; + import net.minecraft.nbt.NBTBase; + import net.minecraft.nbt.NBTTagCompound; + import net.minecraft.nbt.NBTTagList; ++import net.minecraft.nbt.NBTTagString; + import net.minecraft.network.chat.ChatComponentText; + import net.minecraft.network.chat.ChatComponentUtils; + import net.minecraft.network.chat.ChatHoverable; +@@ -137,6 +138,44 @@ public final class ItemStack { list.sort((Comparator) enchantSorter); // Paper } catch (Exception ignored) {} } @@ -53,7 +61,7 @@ index 3d5a4d662ae4880fa27bd681127ddf7d1f70b51c..8b5aaa18d278f20e32e25edddc2a1006 // Paper end public ItemStack(IMaterial imaterial) { -@@ -182,6 +220,7 @@ public final class ItemStack { +@@ -182,6 +221,7 @@ public final class ItemStack { // CraftBukkit start - make defensive copy as this data may be coming from the save thread this.tag = (NBTTagCompound) nbttagcompound.getCompound("tag").clone(); processEnchantOrder(this.tag); // Paper @@ -61,7 +69,7 @@ index 3d5a4d662ae4880fa27bd681127ddf7d1f70b51c..8b5aaa18d278f20e32e25edddc2a1006 this.getItem().b(this.tag); // CraftBukkit end } -@@ -665,6 +704,7 @@ public final class ItemStack { +@@ -665,6 +705,7 @@ public final class ItemStack { } } diff --git a/Spigot-Server-Patches/0523-Spawn-player-in-correct-world-on-login.patch b/Spigot-Server-Patches/0523-Spawn-player-in-correct-world-on-login.patch index 5b7514dda2..2b1e7d5972 100644 --- a/Spigot-Server-Patches/0523-Spawn-player-in-correct-world-on-login.patch +++ b/Spigot-Server-Patches/0523-Spawn-player-in-correct-world-on-login.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Spawn player in correct world on login diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index ead0079e3d6f338c34f8589067c4d1bf0be2b83f..acaa3060aadf4f08f290b6de4ef80bb4905e6a4a 100644 +index abfe8b929ddc9dd397fa342f77186aebb982adb4..b24e3a1a323feba8c82d0933f06bb8565112e6b6 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -189,7 +189,18 @@ public abstract class PlayerList { +@@ -196,7 +196,18 @@ public abstract class PlayerList { }String lastKnownName = s; // Paper // CraftBukkit end diff --git a/Spigot-Server-Patches/0524-Add-PrepareResultEvent.patch b/Spigot-Server-Patches/0524-Add-PrepareResultEvent.patch index 8aec73fcee..95a7088ee9 100644 --- a/Spigot-Server-Patches/0524-Add-PrepareResultEvent.patch +++ b/Spigot-Server-Patches/0524-Add-PrepareResultEvent.patch @@ -106,10 +106,10 @@ index cfcb2469569edd51bbb74ca8d7a35a1ec0ecb434..1589d9ca201d386d11d9fd57fa8ba684 private void a(IInventory iinventory, ItemStack itemstack) { diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 18fd2b60e0a6b8aeb753bf836e220b09c453b069..09e90303395eae93dc89fbe8cfe6a1357307bc92 100644 +index 4fc9d8af25808a53bf479b085c82047ede6c5360..be2aa53a45b98d6d6de0c464653264399510d630 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1510,19 +1510,44 @@ public class CraftEventFactory { +@@ -1512,19 +1512,44 @@ public class CraftEventFactory { return event; } @@ -140,7 +140,7 @@ index 18fd2b60e0a6b8aeb753bf836e220b09c453b069..09e90303395eae93dc89fbe8cfe6a135 + // Paper end + + // Paper start - support specific overrides for prepare result -+ public static void callPrepareResultEvent(net.minecraft.server.Container container, int resultSlot) { ++ public static void callPrepareResultEvent(Container container, int resultSlot) { + com.destroystokyo.paper.event.inventory.PrepareResultEvent event; + InventoryView view = container.getBukkitView(); + org.bukkit.inventory.ItemStack origItem = view.getTopInventory().getItem(resultSlot); diff --git a/Spigot-Server-Patches/0526-Don-t-check-chunk-for-portal-on-world-gen-entity-add.patch b/Spigot-Server-Patches/0526-Don-t-check-chunk-for-portal-on-world-gen-entity-add.patch index ca08d71b30..2e684cdeaa 100644 --- a/Spigot-Server-Patches/0526-Don-t-check-chunk-for-portal-on-world-gen-entity-add.patch +++ b/Spigot-Server-Patches/0526-Don-t-check-chunk-for-portal-on-world-gen-entity-add.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Don't check chunk for portal on world gen entity add diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index a0060264c3f31ab499d44d1055403af8eca07fff..f6f43ef74086bd963432a0f40e7e01b92387b437 100644 +index f2721cf55dd8edc7376b27250f83029e2b3b4e93..593805ac08e783546be99b025b22e40c654e05d1 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java -@@ -3040,7 +3040,7 @@ public abstract class EntityLiving extends Entity { +@@ -3041,7 +3041,7 @@ public abstract class EntityLiving extends Entity { Entity entity = this.getVehicle(); super.stopRiding(suppressCancellation); // Paper - suppress diff --git a/Spigot-Server-Patches/0527-Optimize-NetworkManager-Exception-Handling.patch b/Spigot-Server-Patches/0527-Optimize-NetworkManager-Exception-Handling.patch index ff8f67ddb0..3d34422c4b 100644 --- a/Spigot-Server-Patches/0527-Optimize-NetworkManager-Exception-Handling.patch +++ b/Spigot-Server-Patches/0527-Optimize-NetworkManager-Exception-Handling.patch @@ -43,6 +43,21 @@ index 2c7de7ab6da2106394ec668cd7cb9be1f8dabeb3..e81bfd35b9a745eeb1457ceda5fda320 for (int i = 0; i < abyte.length; ++i) { if (!bytebuf.isReadable()) { +diff --git a/src/main/java/net/minecraft/network/protocol/Packet.java b/src/main/java/net/minecraft/network/protocol/Packet.java +index b644c91cecd8a347319dfe8c8923fd05919a9795..4c583593de4dc8ab27b3e1187f4dfe1740ef07a7 100644 +--- a/src/main/java/net/minecraft/network/protocol/Packet.java ++++ b/src/main/java/net/minecraft/network/protocol/Packet.java +@@ -2,8 +2,10 @@ package net.minecraft.network.protocol; + + import io.netty.channel.ChannelFuture; // Paper + import java.io.IOException; ++import net.minecraft.network.NetworkManager; + import net.minecraft.network.PacketDataSerializer; + import net.minecraft.network.PacketListener; ++import net.minecraft.server.level.EntityPlayer; + + public interface Packet { + diff --git a/src/main/java/net/minecraft/network/protocol/PlayerConnectionUtils.java b/src/main/java/net/minecraft/network/protocol/PlayerConnectionUtils.java index e47da20ab8ce4da34755e105bf55d8542fb50138..839fa47bea425edcd31bcbbef2535c1a5f118c71 100644 --- a/src/main/java/net/minecraft/network/protocol/PlayerConnectionUtils.java diff --git a/Spigot-Server-Patches/0533-Fix-SPIGOT-5989.patch b/Spigot-Server-Patches/0533-Fix-SPIGOT-5989.patch index 639b0205ca..7a71a252e1 100644 --- a/Spigot-Server-Patches/0533-Fix-SPIGOT-5989.patch +++ b/Spigot-Server-Patches/0533-Fix-SPIGOT-5989.patch @@ -10,10 +10,18 @@ This fixes that by checking if the modified spawn location is still at a respawn anchor. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index acaa3060aadf4f08f290b6de4ef80bb4905e6a4a..3c122087ecf53c517df415464af2742168f988d0 100644 +index b24e3a1a323feba8c82d0933f06bb8565112e6b6..503ad38073fd8334d6692df97ea3fb68ded694d5 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -843,6 +843,7 @@ public abstract class PlayerList { +@@ -83,6 +83,7 @@ import net.minecraft.world.level.EnumGamemode; + import net.minecraft.world.level.GameRules; + import net.minecraft.world.level.World; + import net.minecraft.world.level.biome.BiomeManager; ++import net.minecraft.world.level.block.BlockRespawnAnchor; + import net.minecraft.world.level.block.Blocks; + import net.minecraft.world.level.block.state.IBlockData; + import net.minecraft.world.level.border.IWorldBorderListener; +@@ -850,6 +851,7 @@ public abstract class PlayerList { // Paper start boolean isBedSpawn = false; boolean isRespawn = false; @@ -21,7 +29,7 @@ index acaa3060aadf4f08f290b6de4ef80bb4905e6a4a..3c122087ecf53c517df415464af27421 // Paper end // CraftBukkit start - fire PlayerRespawnEvent -@@ -853,7 +854,7 @@ public abstract class PlayerList { +@@ -860,7 +862,7 @@ public abstract class PlayerList { Optional optional; if (blockposition != null) { @@ -30,7 +38,7 @@ index acaa3060aadf4f08f290b6de4ef80bb4905e6a4a..3c122087ecf53c517df415464af27421 } else { optional = Optional.empty(); } -@@ -896,7 +897,12 @@ public abstract class PlayerList { +@@ -903,7 +905,12 @@ public abstract class PlayerList { } // Spigot End @@ -44,7 +52,7 @@ index acaa3060aadf4f08f290b6de4ef80bb4905e6a4a..3c122087ecf53c517df415464af27421 if (!flag) entityplayer.reset(); // SPIGOT-4785 isRespawn = true; // Paper } else { -@@ -934,8 +940,12 @@ public abstract class PlayerList { +@@ -941,8 +948,12 @@ public abstract class PlayerList { } // entityplayer1.syncInventory(); entityplayer1.setHealth(entityplayer1.getHealth()); @@ -59,3 +67,5783 @@ index acaa3060aadf4f08f290b6de4ef80bb4905e6a4a..3c122087ecf53c517df415464af27421 } // Added from changeDimension updateClient(entityplayer); // Update health, etc... +diff --git a/t b/t +new file mode 100644 +index 0000000000000000000000000000000000000000..12d6e26ec0b25bef42004c6632fca404c8b0c30b +--- /dev/null ++++ b/t +@@ -0,0 +1,5774 @@ ++* 3255b7a34 - (HEAD -> master) fixup! Optimize Collision to not load chunks (2021-03-16)  ++* 68c9202e1 - fixup! Fix villager boat exploit (2021-03-16)  ++* 65f1c1c27 - fixup! Configurable Player Collision (2021-03-16)  ++* 093b6fd70 - fixup! Fix Longstanding Broken behavior of PlayerJoinEvent (2021-03-16)  ++* f239bffc0 - fixup! Add PlayerConnectionCloseEvent (2021-03-16)  ++* 9e1089648 - fixup! Add Velocity IP Forwarding Support (2021-03-16)  ++* 51b459db9 - fixup! Load chunks asynchronously for players. (2021-03-16)  ++* a13e4afaa - Item Rarity API (2021-03-12)  ++* d2055a40f - Add fast alternative constructor for Vector3f (2021-03-10)  ++* f288684f2 - Implement Keyed on World (2021-01-06)  ++* 8702e6b74 - Allow using signs inside spawn protection (2020-04-15)  ++* 4bb15783c - Add Block#isValidTool (2020-07-06)  ++* 8e035c211 - Add recipe to cook events (2021-01-06)  ++* 00fb3334e - Prevent grindstones from overstacking items (2021-02-16)  ++* 7b10593b8 - added PlayerNameEntityEvent (2020-07-05)  ++* 8bd80e86d - Add worldborder events (2021-01-04)  ++* 795fb6af4 - fix converting txt to json file (2021-01-04)  ++* eb25d96b8 - stop firing pressure plate EntityInteractEvent for ignored entities (2021-02-02)  ++* 2da7e2f16 - Improve ServerGUI (2020-10-03)  ++* 6d99da98b - Throw proper exception on empty JsonList file (2020-11-01)  ++* 42f817d9c - MC-29274: Fix Wither hostility towards players (2020-10-01)  ++* 85097b62f - do not create unnecessary copies of passenger list (2020-12-13)  ++* ac2d642c1 - Remove streams from SensorNearest (2021-03-03)  ++* 185883ceb - Expose Tracked Players (2021-02-26)  ++* 0ebb65161 - Clear SyncLoadInfo (2021-02-26)  ++* 6e04a50b4 - Add support for hex color codes in console (2021-02-20)  ++* 41825d077 - misc debugging dumps (2021-02-18)  ++* af2c251be - Merchant#getRecipes should return an immutable list (2021-02-10)  ++* 72cdb72f5 - fix dead slime setSize invincibility (2021-02-05)  ++* 3735f7581 - living entity allow attribute registration (2020-10-24)  ++* a3c2172ea - Add getMainThreadExecutor to BukkitScheduler (2021-01-24)  ++* b4ec53b29 - Allow adding items to BlockDropItemEvent (2021-01-20)  ++* 991af986e - Inline shift direction fields (2021-01-18)  ++* 29fddb635 - added option to disable pathfinding updates on block changes (2021-01-25)  ++* b1719f5dc - EntityMoveEvent (2020-02-11)  ++* 6b0587b12 - add DragonEggFormEvent (2021-01-25)  ++* fe5cd2e8d - Reset shield blocking on dimension change (2021-01-24)  ++* 45c189cc6 - Skip distance map update when spawning disabled. (2020-02-14)  ++* 2ff69d70a - Add dropLeash variable to EntityUnleashEvent (2021-01-29)  ++* 7bf03002d - Added PlayerStonecutterRecipeSelectEvent (2020-11-27)  ++* 7da2a9ffb - Add toggle for always placing the dragon egg (2020-11-26)  ++* 91c24633e - Fix console spam when removing chests in water (2020-11-19)  ++* 7b33a4204 - Added firing of PlayerChangeBeaconEffectEvent (2020-06-24)  ++* 7c96598aa - added Wither API (2020-07-05)  ++* 171f638f7 - Added Vanilla Entity Tags (2021-01-03)  ++* 6071c10e6 - Implement BlockPreDispenseEvent (2021-01-17)  ++* f2d7afd9e - Configurable max leash distance (2021-01-03)  ++* 264eee5e7 - Make schedule command per-world (2021-01-04)  ++* b39b53a22 - Return chat component with empty text instead of throwing exception (2020-07-07)  ++* 0fb2f2222 - Make ProjectileHitEvent Cancellable (2021-01-16)  ++* bf85b6e89 - Collision option for requiring a player participant (2020-11-14)  ++* f1bf635b6 - Add StructureLocateEvent (2020-09-16)  ++* 8e1b7e250 - Add sendOpLevel API (2020-12-29)  ++* 9ad6d04c5 - Entity load/save limit per chunk (2020-11-18)  ++* e81b58c86 - Fix villager boat exploit (2021-01-11)  ++* f3d7213aa - Remove stale POIs (2021-01-09)  ++* 03e3adaf8 - Implement API to expose exact interaction point (2021-01-04)  ++* 83d2dced3 - Empty commands shall not be dispatched (2021-01-06)  ++* c4b9b0b42 - Configurable door breaking difficulty (2021-01-03)  ++* 9871652a0 - Added PlayerLoomPatternSelectEvent (2020-11-25)  ++* b78846cba - Fire event on GS4 query (2019-03-17)  ++* 87ba99287 - Added PlayerLecternPageChangeEvent (2020-11-23)  ++* 90b680af5 - Implemented BlockFailedDispenseEvent (2020-04-22)  ++* 4674e4452 - Added world settings for mobs picking up loot (2020-11-28)  ++* be5113ecf - Added ServerResourcesReloadedEvent (2020-12-02)  ++* 2f89f2cd6 - Added WorldGameRuleChangeEvent (2020-12-20)  ++* 65b5cc70d - Guardian beam workaround (2016-03-19)  ++* 0840fd475 - Add EntityLoadCrossbowEvent (2020-10-07)  ++* 2dd8be578 - Fix nerfed slime when splitting (2020-08-24)  ++* 76f7152e2 - Zombie API - breaking doors (2020-11-18)  ++* 1e709b111 - Fix interact event not being called in adventure (2020-06-21)  ++* 8ea6a35fc - Implement PlayerFlowerPotManipulateEvent (2019-08-13)  ++* caeecc228 - Allow disabling mob spawner spawn egg transformation (2020-10-09)  ++* e6f08bd44 - Cache burn durations (2020-12-27)  ++* 103701da6 - Optimized tick ready check (2020-12-27)  ++* f622307db - Implement API to get Material from Boats and Minecarts (2020-12-31)  ++* bf62ced17 - Fix harming potion dupe (2020-07-23)  ++* 527cb8991 - Additional Block Material API's (2020-12-30)  ++* 91b6565e4 - Implement TargetHitEvent (2020-11-25)  ++* 952cc4a61 - added PlayerTradeEvent (2020-07-02)  ++* 4a7292141 - Do not crash from invalid ingredient lists in VillagerAcquireTradeEvent (2020-12-27)  ++* 7c6f3822d - Add OBSTRUCTED reason to BedEnterResult (2020-12-24)  ++* 0fe5a2cd3 - Expose LivingEntity hurt direction (2020-12-13)  ++* 9c4efd78f - Optimize Dynamic#get Missing Keys (2020-12-21)  ++* b403fdfbd - Player Chunk Load/Unload Events (2020-10-05)  ++* b4c43ab4e - MC-4: Fix item position desync (2020-12-08)  ++* 4014f8aed - Fix CraftSound backwards compatibility (2020-12-17)  ++* 0e2abe833 - Limit recipe packets (2020-12-12)  ++* 8b6995c81 - Fix curing villager makes equipment disappear (2020-12-08)  ++* bd621e9cc - Fix curing zombie villager discount exploit (2020-12-08)  ++* 7e3221f99 - Set spigots verbose world setting to false by def (2020-12-02)  ++* 012e6419f - Add warning for servers not running on Java 11 (2020-12-02)  ++* 5c460eddb - Add PlayerShearBlockEvent (2020-08-27)  ++* b126998d4 - Added missing default perms for commands (2020-11-16)  ++* 69f0197cf - Climbing should not bypass cramming gamerule (2020-08-23)  ++* 9aef51ce8 - More lightning API (2020-07-26)  ++* 69491e525 - Add PlayerItemCooldownEvent (2020-08-25)  ++* 1519a9b9b - Add LivingEntity#clearActiveItem (2020-07-15)  ++* 771e76ab8 - Fix Player spawnParticle x/y/z precision loss (2020-10-03)  ++* 901b36701 - Add Destroy Speed API (2020-10-26)  ++* 0363e79c2 - Expose world spawn angle (2020-11-17)  ++* b8513e617 - Significantly improve performance of the end generation (2020-11-03)  ++* fc295e5d6 - Add Wandering Trader spawn rate config options (2020-08-20)  ++* fcedae0e6 - Seed based feature search (2020-01-13)  ++* a4d20d668 - Add API for quit reason (2020-11-14)  ++* 64248e0b2 - Beacon API - custom effect ranges (2020-06-24)  ++* 61c473692 - Item no age & no player pickup (2020-11-07)  ++* 39ae60610 - Fix client lag on advancement loading (2020-10-31)  ++* 4c4b9ce7a - Toggle for removing existing dragon (2020-09-30)  ++* e35bffd0b - Add ignore discounts API (2020-11-09)  ++* 5c560753e - Add getOfflinePlayerIfCached(String) (2020-10-25)  ++* 0cf39481e - Avoid error bubbling up when item stack is empty in fishing loot (2020-10-23)  ++* 1235efd37 - Fixed TileEntityBell memory leak (2020-10-10)  ++* f098ef07c - Player elytra boost API (2020-04-14)  ++* 0ff85a09b - Fix item locations dropped from campfires (2020-10-03)  ++* 275216c7b - Reduce blockpos allocation from pathfinding (2020-04-25)  ++* 2b03c08f8 - Retain block place order when capturing blockstates (2020-08-07)  ++* 3665995e2 - Improve inlinig for some hot IBlockData methods (2020-07-06)  ++* 582128a82 - Villager#resetOffers (2019-10-07)  ++* e53e96cd2 - Optimise getType calls (2020-06-03)  ++* 16ac12d5c - Fix for large move vectors crashing server (2020-05-17)  ++* dad6ba37c - Reset Ender Crystals on Dragon Spawn (2016-06-01)  ++* 46306e754 - MC-147729: Drop items that are extra from a crafting recipe (2020-03-18)  ++* 6637813b4 - Fix CME on adding a passenger in CreatureSpawnEvent (2020-10-04)  ++* a2222c69d - Fix "Not a string" Map Conversion spam (2020-10-08)  ++* 011ae8100 - Fix deop kicking non-whitelisted player when white list is not enabled (2020-10-03)  ++* d2f2ba26f - Entity#isTicking (2020-10-03)  ++* 9c8d252d4 - Lazily track plugin scoreboards by default (2020-10-03)  ++* 549f95f9a - Expose the Entity Counter to allow plugins to use valid and non-conflicting Entity Ids (2020-08-28)  ++* 1e6ff11ab - Don't mark dirty in invalid locations (SPIGOT-6086) (2020-09-27)  ++* db629c8eb - Extend block drop capture to capture all items added to the world (2020-09-17)  ++* 93c5e5491 - Cache DataFixerUpper Rewrite Rules on demand (2020-09-12)  ++* 8a9981d30 - Add additional open container api to HumanEntity (2020-08-26)  ++* d9578f366 - Fix Entity Teleportation and cancel velocity if teleported (2020-08-25)  ++* 76efe9175 - Cache block data strings (2018-12-06)  ++* 9bdcd16e0 - Create HoverEvent from ItemStack Entity (2020-07-06)  ++* 8a4927e0b - Add a way to get translation keys for blocks, entities and materials (2020-08-11)  ++* 2476438d8 - Add more Evoker API (2020-08-23)  ++* 9bfa5cc42 - Fix CraftTeam null check (2020-08-30)  ++* e1b8f0f83 - PortalCreateEvent needs to know its entity (2020-08-21)  ++* 600cc312c - Fix hex colors not working in some kick messages (2020-08-27)  ++* 486e2f870 - Optimize redstone algorithm (2018-09-27)  ++* b7ab21927 - Buffer joins to world (2020-08-19)  ++* 8fa3d9fec - Add zombie targets turtle egg config (2020-08-23)  ++* 2c0f7759d - Add BellRingEvent (2020-08-23)  ++* 60a1b0e95 - Brand support (2020-04-11)  ++* d1d0e3b02 - Prevent headless pistons from being created (2020-08-14)  ++* d633907e9 - Add moon phase API (2020-08-23)  ++* 1cf1b28bd - Fix SpawnChangeEvent not firing for all use-cases (2020-08-22)  ++* 2adce8771 - Don't require FACING data (2020-08-23)  ++* 8fbcaa7d1 - Add playPickupItemAnimation to LivingEntity (2020-08-23)  ++* 70a40721b - Add #setMaxPlayers API (2020-08-22)  ++* a6385db64 - MC-197883: Bandaid decode issue (2020-08-21)  ++* b3c0e0208 - Fix MC-197271 (2020-08-23)  ++* db243fb3d - Fix MC-99259 Wither Boss Bar doesn't update until invulnerability period is over (2020-08-20)  ++* 6ba082ebe - Brand support (2020-04-11)  ++* 039aba557 - Do not let the server load chunks from newer versions (2019-07-23)  ++* 9b5ab209e - Fix regex mistake in CB NBT int deserialization (2020-08-17)  ++* 68c18544b - Fix MC-187716 Use configured height (2020-08-15)  ++* bd8a71895 - Remove armour stand double add to world (2020-08-14)  ++* ad05a8ffd - Don't mark null chunk sections for block updates (2020-08-14)  ++* 5d0f3e6ef - Import fastutil classes (2020-08-12)  ++* 8862678a9 - Incremental player saving (2020-08-09)  ++* bc8b4361f - Optimize Pathfinder - Remove Streams / Optimized collections (2020-08-04)  ++* dfd745112 - Fix some rails connecting improperly (2020-07-24)  ++* 2c6129cf7 - Add missing strikeLighting call to World#spigot()#strikeLightningEffect (2020-07-26)  ++* 02941fa59 - Fix AdvancementDataPlayer leak due from quitting early in login (2020-07-13)  ++* 2f9ac7374 - Fix SPIGOT-5885 Unable to disable advancements (2020-07-10)  ++* 793573a46 - Fix SPIGOT-5824 Bukkit world-container is not used (2020-07-10)  ++* dde6610c6 - Fix SPIGOT-5989 (2020-07-15)  ++* f2fc6ea21 - Move range check for block placing up (2020-07-15)  ++* 17ac5ad48 - Thread Safe Vanilla Command permission checking (2020-07-11)  ++* c889e96dd - Fix arrows never despawning MC-125757 (2020-07-08)  ++* 41a727199 - Optimize the advancement data player iteration to be O(N) rather than O(N^2) (2020-07-04)  ++* a0900ca67 - Fix Concurrency issue in WeightedList (2020-07-06)  ++* 21832617b - Optimize NetworkManager Exception Handling (2020-07-05)  ++* de608b314 - Don't check chunk for portal on world gen entity add (2020-07-05)  ++* d9c8762cf - Allow delegation to vanilla chunk gen (2020-04-29)  ++* e1e26220d - Add PrepareResultEvent (2020-07-03)  ++* b93e156a5 - Spawn player in correct world on login (2020-07-03)  ++* f7b66188d - Update itemstack legacy name and lore (2020-07-01)  ++* 819390482 - Add entity liquid API (2020-07-02)  ++* 4c0d453f9 - Improve EntityTargetLivingEntityEvent for 1.16 mobs (2020-07-03)  ++* b1e7704f5 - Support components in ItemMeta (2020-06-06)  ++* 1ee860bca - Remove streams from classes related villager gossip (2020-07-01)  ++* 35c528d69 - Remove some streams from structures (2020-06-29)  ++* 121be5d8f - Convert legacy attributes in Item Meta (2020-07-01)  ++* c384c7167 - Clean up duplicated GameProfile Properties (2020-07-01)  ++* 8f9e99a2f - Support old UUID format for NBT (2020-06-29)  ++* 9c1e5e669 - Improve Legacy Component serialization size (2020-06-28)  ++* 0eb57bee7 - Don't allow null UUID's for chat (2020-06-28)  ++* 63fe52362 - Paper dumpitem command (2020-06-28)  ++* 7c565e474 - Fix Per World Difficulty / Remembering Difficulty (2020-06-28)  ++* 2082a343d - Optimize WorldBorder collision checks and air (2020-05-10)  ++* b2d484554 - Ensure Entity AABB's are never invalid (2020-05-10)  ++* 4635675c9 - Add permission for command blocks (2020-05-16)  ++* 06f6a8f10 - Limit lightning strike effect distance (2018-09-14)  ++* 06c442a8f - Hide sync chunk writes behind flag (2020-06-26)  ++* 20dd8f02f - Add and implement PlayerRecipeBookClickEvent (2020-06-05)  ++* ec8d7b6f6 - Expose Arrow getItemStack (2020-05-23)  ++* 97c9dbe64 - Inventory getHolder method without block snapshot (2020-06-10)  ++* d80a3f7fe - Fix enderdragon exp dupe (2020-06-12)  ++* 573f83e0d - Prevent position desync in playerconnection causing tp exploit (2020-06-12)  ++* 577f453d1 - Fix sand duping (2020-06-12)  ++* 93f413181 - Fix piston physics inconsistency - MC-188840 (2020-06-11)  ++* 32737ae98 - Fix CraftScheduler#runTaskTimerAsynchronously(Plugin, Consumer, long, long) scheduling a non-repeating task instead of a repeating one. (2020-06-12)  ++* 6b7945087 - Fix missing chunks due to integer overflow (2020-06-09)  ++* f23a16e35 - Add Plugin Tickets to API Chunk Methods (2020-06-09)  ++* e487b7b6e - Delay Chunk Unloads based on Player Movement (2016-06-18)  ++* ddcfff197 - Optimize Light Engine (2020-06-04)  ++* cca9c4ad4 - Optimize Bit Operations by inlining (2020-06-04)  ++* 9b529b3cc - Use seed based lookup for Treasure Maps - Fixes lag from carto/sunken maps (2020-06-07)  ++* a3075dd8e - Maps shouldn't load chunks (2020-06-07)  ++* b4393f3d1 - Fix villager trading demand - MC-163962 (2020-06-05)  ++* e5b277d69 - Improve Chunk Status Transition Speed (2020-05-29)  ++* 0f2c35518 - Optimize sending packets to nearby locations (sounds/effects) (2020-05-23)  ++* 71c5def48 - Implement Chunk Priority / Urgency System for Chunks (2020-04-11)  ++* 094114acb - Workaround for Client Lag Spikes (MC-162253) (2020-05-12)  ++* de38a7c13 - Fix Non Full Status Chunk NBT Memory Leak (2020-05-23)  ++* b898019bd - Add option for console having all permissions (2020-05-16)  ++* 6693a6ff7 - Ensure safe gateway teleport (2020-05-15)  ++* 61bec6ee4 - Reduce allocation of Vec3D by entity tracker (2020-04-27)  ++* 3f1258fb4 - Reduce MutableInt allocations from light engine (2020-04-27)  ++* b88e1f634 - Optimize NibbleArray to use pooled buffers (2020-05-06)  ++* 8593b37fe - Protect Bedrock and End Portal/Frames from being destroyed (2020-05-13)  ++* 72d7fafea - Ensure EntityRaider respects game and entity rules for picking up items (2020-05-09)  ++* e8b791914 - Wait for Async Tasks during shutdown (2020-05-10)  ++* 5c9e712be - Potential bed API (2020-05-10)  ++* e1f5ddf92 - Optimize brigadier child sorting performance (2020-04-16)  ++* 930f38f1a - Fix PotionEffect ignores icon flag (2020-05-08)  ++* c2de4917a - Fix Light Command (2020-05-07)  ++* 25708f233 - Add villager reputation API (2020-04-22)  ++* 6e28264ed - No-Tick view distance implementation (2020-05-05)  ++* a778945ec - Stop copy-on-write operations for updating light data (2020-04-27)  ++* 59a172ea3 - Optimize isOutsideRange to use distance maps (2020-05-05)  ++* 25dbe1592 - Use distance map to optimise entity tracker (2020-05-05)  ++* 22dfebc5b - Implement Mob Goal API (2020-01-03)  ++* 2adb22ccb - Set cap on JDK per-thread native byte buffer cache (2020-05-04)  ++* b8dd44535 - Optimize Voxel Shape Merging (2020-05-03)  ++* 99117c015 - Expose game version (2020-05-01)  ++* 7058d7d45 - Validate PickItem Packet and kick for invalid (2020-05-02)  ++* f7beec4b4 - Villager Restocks API (2020-04-26)  ++* f9b97228f - Implement Brigadier Mojang API (2020-04-19)  ++* 1b95125c0 - Fix numerous item duplication issues and teleport issues (2020-04-25)  ++* eb9f7d730 - Add phantom creative and insomniac controls (2020-04-25)  ++* c7e3b6a97 - Don't fire BlockFade on worldgen threads (2020-04-23)  ++* 4743aac28 - Allow multiple callbacks to schedule for Callback Executor (2020-04-21)  ++* 80d25a9df - Add PlayerAttackEntityCooldownResetEvent (2020-03-26)  ++* f3598c131 - Move player to spawn point if spawn in unloaded world (2020-03-31) <2277> ++* 73edbe5e7 - Load Chunks for Login Asynchronously (2020-04-19)  ++* 78b2653fb - Fix Longstanding Broken behavior of PlayerJoinEvent (2020-04-19)  ++* 8a8db2ef2 - Broadcast join message to console (2020-04-17)  ++* 153935b69 - Don't crash if player is attempted to be removed from untracked chunk. (2020-04-18)  ++* 1541fbfd3 - Fix Chunk Post Processing deadlock risk (2020-04-18)  ++* 5fde78a0b - Implement Player Client Options API (2020-01-20)  ++* 22af1b3c3 - Restrict vanilla teleport command to valid locations (2020-04-16)  ++* cd9c1c57a - Optimize ChunkProviderServer's chunk level checking helper methods (2020-04-16)  ++* 40cf1ee8e - Don't run entity collision code if not needed (2020-04-15)  ++* 6b4f22c09 - Optimise ArraySetSorted#removeIf (2020-04-15)  ++* 60e7059a5 - Prevent opening inventories when frozen (2020-04-13)  ++* 0ba481d6a - Reduce memory footprint of NBTTagCompound (2020-04-06)  ++* 026984b55 - Remove streams from PairedQueue (2020-04-06)  ++* eb4920be9 - Reduce Either Optional allocation (2020-04-06)  ++* 8c8311a81 - Optimize Pathfinding (2016-03-03)  ++* 0154d98bb - Improved Watchdog Support (2020-04-12)  ++* 7c4a38fa8 - Async command map building (2020-04-08)  ++* 3c0a08875 - Delay unsafe actions until after entity ticking is done (2020-04-11)  ++* 69c24198a - Remove streams from Mob AI System (2020-04-06)  ++* 03b74d471 - Add Raw Byte ItemStack Serialization (2020-04-30)  ++* 59cd4bb23 - Expose MinecraftServer#isRunning (2020-04-10)  ++* a67357e7a - Add tick times API and /mspt command (2020-04-05)  ++* e3d756450 - Don't move existing players to world spawn (2020-04-09)  ++* a090c79f3 - Mid Tick Chunk Tasks - Speed up processing of chunk loads and generation (2020-04-09)  ++* 6a0752e1a - Increase Light Queue Size (2020-04-08)  ++* 6fcbafa3b - Optimize PlayerChunkMap memory use for visibleChunks (2020-04-08)  ++* 4f12b1c19 - Dead Player's shouldn't be able to move (2020-04-02)  ++* c7b602a59 - Don't tick dead players (2020-04-02)  ++* b8d64cc9a - Optimize Collision to not load chunks (2020-04-02)  ++* 66e6238f1 - Prevent Double PlayerChunkMap adds crashing server (2020-04-02)  ++* f9ae9d756 - Do not allow bees to load chunks for beehives (2020-03-17)  ++* def250cb3 - Remote Connections shouldn't hold up shutdown (2020-03-31)  ++* f5d9af8c1 - Fix unregistering entities from unloading chunks (2020-03-31)  ++* 885ea185f - Ensure Entity is never double registered (2020-03-29)  ++* 49fe49ad4 - Pillager patrol spawn settings and per player options (2020-02-01)  ++* 72dbf3979 - Optimise TickListServer by rewriting it (2020-02-14)  ++* 1e0158d55 - Optimise Chunk#getFluid (2020-01-14)  ++* bba1a750a - Configurable chance of villager zombie infection (2020-02-22)  ++* 1c2568a37 - Add option to allow iron golems to spawn in air (2019-04-13)  ++* eaeb3186e - Validate tripwire hook placement before update (2020-03-07)  ++* 69f7d4a21 - Prevent teleporting dead entities (2020-03-03)  ++* bd0633008 - add hand to BlockMultiPlaceEvent (2020-03-01)  ++* 22d4d2168 - Make the GUI graph fancier (2020-02-02)  ++* f78d6480d - Add option to nerf pigmen from nether portals (2020-02-07)  ++* dcf6b7112 - Entity Jump API (2020-02-08)  ++* 67d60616d - Optimise random block ticking (2020-01-27)  ++* ccb8a1b64 - Add ThrownEggHatchEvent (2020-02-09)  ++* f1b5b07e8 - Allow overriding the java version check (2020-02-08)  ++* cdc3fe676 - Optimise getChunkAt calls for loaded chunks (2020-01-25)  ++* f256659e1 - Bees get gravity in void. Fixes MC-167279 (2020-01-26)  ++* 6c8957da3 - Fix items vanishing through end portal (2020-01-22)  ++* bd1df87cf - Entity Activation Range 2.0 (2016-05-13)  ++* a05fa42e9 - Tracking Range Improvements (2019-12-21)  ++* edeca2874 - Add effect to block break naturally (2020-01-02)  ++* ee2255de0 - Fix last firework in stack not having effects when dispensed - #2871 (2020-01-17)  ++* a7490a422 - Optimize call to getFluid for explosions (2020-01-14)  ++* a0345560d - Lag compensate eating (2020-01-14)  ++* b41ab4bf1 - Fix items not falling correctly (2020-01-17)  ++* aaf6a539a - Optimise IEntityAccess#getPlayerByUUID (2020-01-11)  ++* 0816bbf75 - Guard against serializing mismatching chunk coordinate (2019-12-27)  ++* 2a099760c - Don't load Chunks from Hoppers and other things (2016-11-03)  ++* 5f7b766b6 - Prevent bees loading chunks checking hive position (2020-01-05)  ++* f4c1aa9d0 - PlayerDeathEvent#shouldDropExperience (2019-12-24)  ++* 98ff6807c - Optimize Hoppers (2016-04-27)  ++* 0780e96e2 - MC-145656 Fix Follow Range Initial Target (2019-12-18)  ++* 0008bade1 - Prevent sync chunk loads when villagers try to find beds (2020-01-13)  ++* f3d11de65 - Add CraftMagicNumbers.isSupportedApiVersion() (2019-12-15)  ++* ebdea2a26 - PlayerLaunchProjectileEvent (2018-07-21)  ++* c49616f6b - Fix AssertionError when player hand set to empty type (2019-11-11)  ++* e4032da83 - Add option to disable pillager patrols (2019-10-09)  ++* d05e657eb - Fix stuck in sneak when changing worlds (MC-10657) (2019-10-09)  ++* e89e2a81e - Expose the internal current tick (2019-04-20)  ++* c8893bd57 - Fix spawning of hanging entities that are not ItemFrames and can not face UP or DOWN (2019-10-30)  ++* 3b942ad1b - Performance improvement for Chunk.getEntities (2019-10-10)  ++* f6aa2fd7a - Fix MC-161754 (2019-09-24)  ++* 9260d6f9c - Generator Settings (2016-03-02)  ++* c83f9039e - Fix nether portal creation (2019-09-09)  ++* 96621271a - Prevent consuming the wrong itemstack (2019-08-19)  ++* dc931489e - implement optional per player mob spawns (2019-08-19)  ++* 10e192818 - Fix MC-158900 (2019-08-13)  ++* 14d8529cd - Do less work if we have a custom Bukkit generator (2019-07-14)  ++* dd5c1f691 - Implement alternative item-despawn-rate (2019-06-03)  ++* 439d2f434 - Reduce sync loads (2019-07-19)  ++* ac01b5d89 - Use getChunkIfLoadedImmediately in places (2019-07-08)  ++* a5e2ae13d - Asynchronous chunk IO and loading (2019-07-13)  ++* 4691e7733 - Avoid hopper searches if there are no items (2016-03-03)  ++* 1ff62135d - offset item frame ticking (2019-07-30)  ++* d4d35837b - Mark entities as being ticked when notifying navigation (2019-07-28)  ++* 790ef0b4e - Configurable projectile relative velocity (2019-07-23)  ++* 617b092bf - Only count Natural Spawned mobs towards natural spawn mob limit (2019-03-24)  ++* a6fe50312 - Anti-Xray (2018-08-20)  ++* 9f7d3f737 - incremental chunk saving (2019-06-09)  ++* bb54e82c5 - Synchronize DataPaletteBlock instead of ReentrantLock (2020-05-29)  ++* 17e9078e5 - Show blockstate location if we failed to read it (2019-06-15)  ++* adb0bea67 - Fix World#isChunkGenerated calls (2019-06-15)  ++* 97f05a7c4 - Catch exceptions from dispenser entity spawns (2019-06-10)  ++* e9731ce36 - Chunk debug command (2019-06-01)  ++* 004f18e60 - Implement CraftBlockSoundGroup (2019-05-28)  ++* 0d6a9a8a7 - ChunkMapDistance CME (2019-05-29)  ++* 62b48a70a - MC-114618 - Fix EntityAreaEffectCloud from going negative size (2019-05-27)  ++* 8fa234289 - Configurable Keep Spawn Loaded range per world (2014-09-13)  ++* 192a238de - improve CraftWorld#isChunkLoaded (2019-05-21)  ++* 1aa421b00 - Duplicate UUID Resolve Option (2018-07-21)  ++* a11e1bc84 - Fix issues with entity loss due to unloaded chunks (2018-09-28)  ++* fc244fabb - Fix CraftServer#isPrimaryThread and MinecraftServer isMainThread (2019-05-13)  ++* 871023133 - Fix sounds when item frames are modified (MC-123450) (2019-04-27)  ++* ee1a31909 - Fix CB call to changed postToMainThread method (2019-05-10)  ++* 9f0e024c2 - Per-Player View Distance API placeholders (2019-05-06)  ++* a861697d7 - Mob Spawner API Enhancements (2019-04-19)  ++* 9b1b88f6e - Add Heightmap API (2019-01-01)  ++* 4d45befae - Optimize Captured TileEntity Lookup (2019-04-06)  ++* 3ad1dc382 - PlayerDeathEvent#getItemsToKeep (2019-03-27)  ++* 72cbe0ea2 - Server Tick Events (2019-03-27)  ++* 05b1941a8 - don't go below 0 for pickupDelay, breaks picking up items (2019-03-24)  ++* ec0c2f05d - Implement PlayerPostRespawnEvent (2018-10-26)  ++* aa39a70e4 - Update entity Metadata for all tracked players (2019-03-22)  ++* 14667427a - Entity#getEntitySpawnReason (2019-03-24)  ++* 1a1a83299 - Use proper max length when serialising BungeeCord text component (2019-03-20)  ++* 1fa4cd95c - Add LivingEntity#getTargetEntity (2018-09-22)  ++* 402fab7d9 - Call WhitelistToggleEvent when whitelist is toggled (2019-03-13)  ++* 12a51f301 - Allow Saving of Oversized Chunks (2019-02-15)  ++* 3ec88040a - Set Zombie last tick at start of drowning process (2019-03-04)  ++* ef97c03fb - MC-145260: Fix Whitelist On/Off inconsistency (2019-03-02)  ++* af22e6682 - Handle Oversized Tile Entities in chunks (2020-05-06)  ++* a6b960d51 - Optimize Network Manager and add advanced packet support (2020-05-06)  ++* 64debc597 - Don't check ConvertSigns boolean every sign save (2019-03-02)  ++* 3f45fdf55 - Limit Client Sign length more (2019-02-27)  ++* e9561d39f - Fix sign edit memory leak (2019-02-28)  ++* 1b838d4a8 - Fix Custom Shapeless Custom Crafting Recipes (2019-01-18)  ++* 7af55b12d - BlockDestroyEvent (2019-02-06)  ++* 1ccb42dac - Block Entity#remove from being called on Players (2019-02-04)  ++* 66c6bac03 - Fire BlockPistonRetractEvent for all empty pistons (2019-01-31)  ++* 1d195ee37 - Workaround for vehicle tracking issue on disconnect (2019-01-07)  ++* e63d673bd - Add APIs to replace OfflinePlayer#getLastPlayed (2019-01-02)  ++* f4fe6bee5 - Prevent Enderman from loading chunks (2018-12-18)  ++* ab4f6c7a8 - Add PlayerConnectionCloseEvent (2018-10-07)  ++* 28be8f707 - Add more Zombie API (2018-10-07)  ++* d777b872d - force entity dismount during teleportation (2018-11-15)  ++* b22568684 - Handle Large Packets disconnecting client (2018-11-27)  ++* a6158fbf2 - Prevent rayTrace from loading chunks (2018-11-26)  ++* 185a66759 - Make the default permission message configurable (2018-11-18)  ++* e136bc51b - Book Size Limits (2018-11-16)  ++* 1b96c4233 - Don't allow digging into unloaded chunks (2018-11-11)  ++* c642e6334 - Fix SpongeAbsortEvent handling (2018-11-10)  ++* c36400a5a - Use Vanilla Minecart Speeds (2018-11-08)  ++* 82a89eebe - Restore custom InventoryHolder support (2018-11-05)  ++* 0f326dbf7 - Optimize World Time Updates (2018-11-02)  ++* f6ffc5169 - Improve Server Thread Pool and Thread Priorities (2018-10-23)  ++* 597b1ae6d - Don't sleep after profile lookups if not needed (2018-10-23)  ++* 92a9f5a3f - Reset players airTicks on respawn (2018-10-20)  ++* eae2e3f35 - Add option to prevent players from moving into unloaded chunks #1551 (2018-10-22)  ++* 45fe1e518 - Here's Johnny! (2018-10-12)  ++* 44f5fc1e7 - Check Drowned for Villager Aggression Config (2018-10-10)  ++* b1ea8555b - Add more Witch API (2018-10-12)  ++* feaad5f84 - Add Velocity IP Forwarding Support (2018-10-08)  ++* 1b3b82c74 - Call player spectator target events and improve implementation (2018-09-28)  ++* 67676b079 - MC-50319: Check other worlds for shooter of projectiles (2018-10-17)  ++* 3bdb5771f - Turtle API (2018-09-29)  ++* 7e4cee4ae - Add sun related API (2018-10-07)  ++* 6c9478f7a - Allow setting the vex's summoner (2018-10-06)  ++* e98700ec9 - Hook into CB plugin rewrites (2018-10-03)  ++* 64b758e30 - Configurable connection throttle kick message (2018-10-02)  ++* 5c7dbffe2 - Honor EntityAgeable.ageLock (2018-09-23)  ++* 89743658a - Catch JsonParseException in Entity and TE names (2018-09-22)  ++* 547f68298 - PreSpawnerSpawnEvent (2018-09-18)  ++* 633a96fa5 - Implement furnace cook speed multiplier API (2018-09-13)  ++* 4e7a34707 - Optimize Biome Mob Lookups for Mob Spawning (2018-09-12)  ++* 072bb80bc - Prevent mob spawning from loading/generating chunks (2018-09-12)  ++* a4d28704b - Prevent Mob AI Rules from Loading Chunks (2018-09-10)  ++* b3adbbec7 - Implement an API for CanPlaceOn and CanDestroy NBT values (2018-09-12)  ++* bc8146233 - Prevent chunk loading from Fluid Flowing (2018-09-10)  ++* c9301197e - Mob Pathfinding API (2018-09-09)  ++* 0b8a2f873 - Allow chests to be placed with NBT data (2018-09-08)  ++* 59c4f1446 - Improve death events (2018-08-21)  ++* c1f82b716 - Expose attack cooldown methods for Player (2018-09-04)  ++* f745eb074 - Add ray tracing methods to LivingEntity (2018-09-03)  ++* 8e9bc77f1 - Make CraftWorld#loadChunk(int, int, false) load unconverted chunks (2018-09-02)  ++* 744ab7d2f - Inventory#removeItemAnySlot (2018-08-28)  ++* 33b1cf247 - Add More Creeper API (2018-08-24)  ++* 32b20a188 - Add PhantomPreSpawnEvent (2018-08-25)  ++* 681d4c7e6 - Optimize RegistryMaterials (2018-08-26)  ++* ac70eeb55 - Optimize CraftBlockData Creation (2018-08-23)  ++* 97971198c - Configurable speed for water flowing over lava (2018-08-08)  ++* 7bf677ae5 - Slime Pathfinder Events (2018-08-24)  ++* d36e1c933 - Restore vanlla default mob-spawn-range (2018-08-18)  ++* b02af4446 - Optimize BlockPosition helper methods (2018-08-15)  ++* 460afc7fa - Allow disabling armour stand ticking (2018-08-15)  ++* f79d3f360 - Ability to get Tile Entities from a chunk without snapshots (2018-08-15)  ++* 852fc73fe - Use a Queue for Queueing Commands (2018-08-12)  ++* 60455a494 - Use ConcurrentHashMap in JsonList (2018-08-07)  ++* 694fd54d5 - Make EnderDragon implement Mob (2018-08-10)  ++* 59a19ff54 - Add Early Warning Feature to WatchDog (2018-08-08)  ++* d6ec79293 - Fix client rendering skulls from same user (2016-11-22)  ++* 43f01c5c6 - MC-135506: Experience should save as Integers (2018-08-03)  ++* 38c993d54 - Add hand to bucket events (2018-08-02)  ++* 6703bcb91 - Break up and make tab spam limits configurable (2018-07-29)  ++* 147f441d7 - Add TNTPrimeEvent (2018-07-16)  ++* e664ca248 - AnvilDamageEvent (2018-07-20)  ++* 161577ada - Implement Expanded ArmorStand API (2018-07-26)  ++* 692ed8e2e - Ignore Dead Entities in entityList iteration (2018-07-28)  ++* 80b17da7d - Don't call getItemMeta on hasItemMeta (2018-07-26)  ++* 2c15fce4b - Prevent Saving Bad entities to chunks (2018-07-26)  ++* a59328418 - SkeletonHorse Additions (2018-07-27)  ++* f52fd86e0 - Add some Debug to Chunk Entity slices (2018-07-23)  ++* bd7f86f0f - Mark chunk dirty anytime entities change to guarantee it saves (2018-07-23)  ++* a0756d544 - Vanished players don't have rights (2018-07-23)  ++* c402208b7 - Option to prevent armor stands from doing entity lookups (2018-07-23)  ++* 05639ed52 - Optimize RegistryID.c() (2018-07-23)  ++* c78ee4c96 - Improve BlockPosition inlining (2016-11-30)  ++* a14f11e65 - PlayerElytraBoostEvent (2018-07-21)  ++* bc72b21f2 - EnderDragon Events (2018-07-21)  ++* 47e869801 - Add Debug Entities option to debug dupe uuid issues (2018-07-21)  ++* 1597dc0f0 - add more information to Entity.toString() (2018-07-19)  ++* 894fcf978 - Use asynchronous Log4j 2 loggers (2018-07-17)  ++* 3bdfaa1f6 - Avoid item merge if stack size above max stack size (2018-07-16)  ++* 526b4d3cf - Re-add vanilla entity warnings for duplicates (2018-07-19)  ++* 6ac1452b9 - Don't change the Entity Random seed for squids (2018-07-19)  ++* 0164dcf17 - Refresh player inventory when cancelling PlayerInteractEntityEvent (2018-07-13)  ++* d7b35d1dd - Vex#getSummoner API (2018-07-04)  ++* 32a7f0096 - InventoryCloseEvent Reason API (2018-07-03)  ++* 3a94adb49 - Implement World.getEntity(UUID) API (2018-07-03)  ++* 4a8710ebf - Add config to disable ender dragon legacy check (2018-06-22)  ++* 44d45df43 - RangedEntity API (2018-06-26)  ++* 1943089af - LivingEntity Hand Raised/Item Use API (2018-06-29)  ++* c34d27cb4 - Expand Explosions API (2018-06-20)  ++* ae44f51a8 - Implement EntityKnockbackByEntityEvent (2018-06-18)  ++* 61c259501 - PlayerReadyArrowEvent (2018-06-18)  ++* 76171ba7c - Improve EntityShootBowEvent (2013-06-15)  ++* 5a9d6388d - Make shield blocking delay configurable (2018-06-16)  ++* 26e5f0dfa - Print Error details when failing to save player data (2018-06-15)  ++* ba8a178b9 - Configurable Alternative LootPool Luck Formula (2018-06-15)  ++* dd3f20d28 - Fix CraftEntity hashCode (2018-06-10)  ++* 65924e308 - Unset Ignited flag on cancel of Explosion Event (2018-06-10)  ++* ded1ebc3d - Implement EntityTeleportEndGatewayEvent (2018-06-09)  ++* 4e0191e3f - ItemStack#getMaxItemUseDuration (2018-06-05)  ++* e3071978c - WitchReadyPotionEvent (2018-06-05)  ++* c78545636 - Allow spawning Item entities with World.spawnEntity (2018-06-04)  ++* e1c4363c4 - WitchThrowPotionEvent (2018-05-16)  ++* 62987c3bf - WitchConsumePotionEvent (2018-05-16)  ++* bbfe647ff - EndermanAttackPlayerEvent (2018-05-01)  ++* 314c768c9 - Expand World.spawnParticle API and add Builder (2017-08-15)  ++* 5ad1dffff - Block Enderpearl Travel Exploit (2018-04-30)  ++* 51200eb64 - Enderman.teleportRandomly() (2018-04-30)  ++* e82728ae2 - EndermanEscapeEvent (2018-04-30)  ++* 50ceb26a2 - Fix exploit that allowed colored signs to be created (2018-04-26) <0x22> ++* 41c6fb4a9 - Configurable sprint interruption on attack (2018-04-14)  ++* c7f8b9fe0 - Add method to open already placed sign (2018-04-01)  ++* 0f0d9e439 - Flag to disable the channel limit (2018-03-31)  ++* 129cb82fa - Call PaperServerListPingEvent for legacy pings (2017-10-11)  ++* a03b20e95 - Make legacy ping handler more reliable (2017-10-11)  ++* c9d4ac7a8 - Make player data saving configurable (2018-03-26)  ++* 47c810c1e - getPlayerUniqueId API (2018-03-22)  ++* 230333a31 - Fix Dragon Server Crashes (2018-03-21)  ++* 9bf16307b - Player.setPlayerProfile API (2018-03-18)  ++* bf605ef01 - Ability to change PlayerProfile in AsyncPreLoginEvent (2018-03-18)  ++* 119ba19f9 - Improved Async Task Scheduler (2018-03-16)  ++* e641b17f1 - Implement extended PaperServerListPingEvent (2017-10-11)  ++* 75b981bf7 - Disable Explicit Network Manager Flushing (2018-03-11)  ++* 6d21d6c79 - Prevent Frosted Ice from loading/holding chunks (2018-03-10)  ++* 765f95cc5 - Toggleable player crits, helps mitigate hacked clients. (2018-03-10)  ++* d9809b578 - Tameable#getOwnerUniqueId API (2018-02-24)  ++* 463bd4108 - Extend Player Interact cancellation (2018-02-11)  ++* 096af9231 - Add ArmorStand Item Meta (2018-01-27)  ++* 8ba791a63 - PlayerAdvancementCriterionGrantEvent (2018-01-19)  ++* 0abc7292b - Fill Profile Property Events (2018-01-02)  ++* cfff5f27f - Add setPlayerProfile API for Skulls (2018-01-19)  ++* 0cf55570c - PlayerNaturallySpawnCreaturesEvent (2018-01-14)  ++* f8dd40b6c - PreCreatureSpawnEvent (2018-01-14)  ++* 692f46b3b - Make max squid spawn height configurable (2018-01-11)  ++* 936a139c1 - Ability to apply mending to XP API (2017-12-20)  ++* 972530524 - ExperienceOrbMergeEvent (2017-12-19)  ++* b0c55683a - PlayerPickupExperienceEvent (2017-12-19)  ++* 879f0b6fd - Avoid NPE in PathfinderGoalTempt (2017-11-29)  ++* 620b55816 - AsyncTabCompleteEvent (2017-11-26)  ++* 85ee21688 - API to get a BlockState without a snapshot (2017-11-06)  ++* dc5eabfd0 - use CB BlockState implementations for captured blocks (2017-11-16)  ++* 1ef3d7299 - Prevent logins from being processed when the player has disconnected (2017-11-12)  ++* 912e70912 - Add PlayerArmorChangeEvent (2017-11-10)  ++* d9c45a93f - Option for maximum exp value when merging orbs (2017-11-10)  ++* dde3f7fb9 - Send attack SoundEffects only to players who can see the attacker (2017-10-31)  ++* 7c5e33d99 - revert serverside behavior of keepalives (2017-10-15)  ++* fb996a870 - Expose client protocol version and virtual host (2017-10-10)  ++* e3cc1362e - handle PacketPlayInKeepAlive async (2017-10-05)  ++* b1d66eb10 - Add PlayerJumpEvent (2017-09-28)  ++* b1764dff6 - Improve Log4J Configuration / Plugin Loggers (2017-09-23)  ++* 25f2cee85 - Include Log4J2 SLF4J implementation (2017-09-21)  ++* e78754a3f - Handle plugin prefixes using Log4J configuration (2017-09-21)  ++* e5e741216 - LivingEntity#setKiller (2017-07-31)  ++* 6f2997df1 - Allow specifying a custom "authentication servers down" kick message (2017-08-17)  ++* b5410750c - Fix MC-117075: TE Unload Lag Spike (2017-08-09)  ++* f24bc28a8 - Reset spawner timer when spawner event is cancelled (2017-07-31)  ++* 1eeeed892 - Ocelot despawns should honor nametags and leash (2017-07-31)  ++* dd5abb3cd - Fix this stupid bullshit (2017-08-06)  ++* f9be34b7d - ProfileWhitelistVerifyEvent (2017-07-03)  ++* cf92faf57 - Implement getI18NDisplayName (2016-05-04)  ++* a63f08f53 - Implement ensureServerConversions API (2016-05-04)  ++* 67d87da44 - Improve the Saddle API for Horses (2016-12-10)  ++* f5e7edb77 - Entity#fromMobSpawner() (2017-06-18)  ++* f95bfd343 - Block player logins during server shutdown (2017-07-02)  ++* a3a573595 - Profile Lookup Events (2017-06-17)  ++* fa18b016c - Shoulder Entities Release API (2017-06-17)  ++* f3d943a2b - Basic PlayerProfile API (2018-01-15)  ++* b989c613f - Add UnknownCommandEvent (2017-06-17)  ++* 8395faee8 - PlayerAttemptPickupItemEvent (2017-06-11)  ++* 63f3ee1cb - PlayerPickupItemEvent#setFlyAtPlayer (2017-05-07)  ++* 8d3deae75 - Item#canEntityPickup (2017-05-05)  ++* 4a33906b0 - provide a configurable option to disable creeper lingering effect spawns (2017-06-11)  ++* 49e74e6c5 - Use TerminalConsoleAppender for console improvements (2017-06-09)  ++* 2ab02694b - Add configuration option to prevent player names from being suggested (2017-06-09)  ++* 4daba27b6 - Add option to make parrots stay on shoulders despite movement (2017-05-16)  ++* 5c5eb2c4a - Add system property to disable book size limits (2017-05-13)  ++* 1148669d8 - Properly handle async calls to restart the server (2017-05-12)  ++* e731e982d - Do not let armorstands drown (2017-02-18)  ++* 89da754aa - Make targetSize more aggressive in the chunk unload queue (2017-02-07)  ++* f7b6da784 - Remove CraftScheduler Async Task Debugger (2017-02-05)  ++* f4c408594 - Cap Entity Collisions (2017-01-22)  ++* ead636a5b - ExperienceOrbs API for Reason/Source/Triggering player (2017-12-19)  ++* e7d423a73 - Don't allow entities to ride themselves - #572 (2017-01-08)  ++* 478e37758 - Enforce Sync Player Saves (2017-01-07)  ++* 3bc5a490f - Provide E/TE/Chunk count stat methods (2017-01-07)  ++* 83322db4c - PlayerTeleportEndGatewayEvent (2016-12-31)  ++* c6cf358e9 - Firework API's (2016-12-28)  ++* c3da17ea2 - String based Action Bar API (2016-12-27)  ++* 8216e2029 - Properly fix item duplication bug (2016-12-27)  ++* 144c47696 - Add API methods to control if armour stands can move (2016-12-21)  ++* 610917027 - Optimize ItemStack.isEmpty() (2016-12-21)  ++* 2b6e17609 - Configurable Cartographer Treasure Maps (2016-12-20)  ++* 205ad959f - Bound Treasure Maps to World Border (2016-12-20)  ++* 2fbcc0215 - Optimize World.isLoaded(BlockPosition)Z (2016-12-02)  ++* 5be30b559 - Prevent Pathfinding out of World Border (2016-12-19)  ++* bfede7a43 - Add ProjectileCollideEvent (2016-12-16)  ++* de4607ddf - Don't let fishinghooks use portals (2016-12-16)  ++* ed8718602 - Add source to PlayerExpChangeEvent (2016-09-08)  ++* 1422220b8 - Allow Reloading of Command Aliases (2016-11-28)  ++* d83bd846f - Optimise removeQueue (2016-11-25)  ++* c2b590959 - Cache user authenticator threads (2016-11-23)  ++* f47f22653 - Filter bad data from ArmorStand and SpawnEgg items (2016-11-12)  ++* 0b9443bf3 - Add EntityZapEvent (2016-10-16)  ++* 758e25d76 - Option to remove corrupt tile entities (2016-10-05)  ++* 10b0165ac - Auto fix bad Y levels on player login (2016-09-21)  ++* 2dc4bea67 - Remove FishingHook reference on Craft Entity removal (2016-06-16)  ++* 991253c5c - Chunk registration fixes (2016-09-21)  ++* 119922584 - Configurable flying kick messages (2016-09-20)  ++* e0dae6a49 - Configurable packet in spam threshold (2016-09-11)  ++* 33f20e20d - Optimise BlockState's hashCode/equals (2016-08-19)  ++* 814a0da42 - Add setting for proxy online mode status (2016-08-05)  ++* 8633d7c1d - Don't lookup game profiles that have no UUID and no name (2016-07-16)  ++* 057fae17f - Fix Old Sign Conversion (2016-06-17)  ++* d05030e29 - Fix Double World Add issues (2016-06-21)  ++* 91c1ee3dd - Only send Dragon/Wither Death sounds to same world (2016-05-31)  ++* e864c9d40 - Add server-name parameter (2016-05-28)  ++* ea144b399 - Faster redstone torch rapid clock removal (2016-05-23)  ++* 02ab91cbc - Optional TNT doesn't move in water (2016-05-22)  ++* 1b4426aac - Avoid blocking on Network Manager creation (2016-05-16)  ++* 6a5648649 - Optimize UserCache / Thread Safe (2016-05-16)  ++* 3d4df6b2e - System property for disabling watchdoge (2016-05-12)  ++* 22ccb5456 - Don't save empty scoreboard teams to scoreboard.dat (2016-05-07)  ++* a5713fd67 - LootTable API & Replenishable Lootables Feature (2016-05-01)  ++* 14306089a - Improve Maps (in item frames) performance and bug fixes (2016-04-29)  ++* 30523ea3b - remove null possibility for getServer singleton (2016-04-28)  ++* 4acd33d89 - Add ability to configure frosted_ice properties (2016-04-21)  ++* 0fd43307a - EntityRegainHealthEvent isFastRegen API (2016-04-22)  ++* ee259b154 - Implement PlayerLocaleChangeEvent (2016-04-19)  ++* dd63bcfb8 - Prevent Fire from loading chunks & wrongly spread (2016-04-17)  ++* 13b1db908 - Configurable RCON IP address (2016-04-16)  ++* e9e4c76aa - Add handshake event to allow plugins to handle client handshaking logic themselves (2016-04-13)  ++* b3b2ba60f - Configurable Player Collision (2016-04-13)  ++* 5138e9057 - Don't tick Skulls - unused code (2016-04-13)  ++* 48b5e09a9 - Remove unused World Tile Entity List (2016-04-13)  ++* 3337ae3f9 - Workaround for setting passengers on players (2016-04-10)  ++* 9f2aa4ba4 - Option to use vanilla per-world scoreboard coloring on names (2016-04-06)  ++* 3142b6f3f - Optimize DataBits (2016-04-05)  ++* 5ba36dbaa - Fix Cancelling BlockPlaceEvent triggering physics (2016-04-03)  ++* 7d008b753 - Configurable Grass Spread Tick Rate (2016-04-03)  ++* 3678d8392 - Fix reducedDebugInfo not initialized on client (2016-04-02)  ++* b5bd255b9 - Add PlayerUseUnknownEntityEvent (2016-04-02)  ++* 7a28aee33 - Do not load chunks for Pathfinding (2016-03-31)  ++* 4c650a23e - Sanitise RegionFileCache and make configurable. (2016-03-29)  ++* 0e3eb65bc - EntityPathfindEvent (2016-03-28)  ++* f7cbc6347 - Configurable Chunk Inhabited Time (2016-03-28)  ++* c2ca3980f - Entity AddTo/RemoveFrom World Events (2016-03-28)  ++* 014384a26 - Only process BlockPhysicsEvent if a plugin has a listener (2016-03-28)  ++* 2fb316b41 - Optimize isValidLocation, getType and getBlockData for inlining (2016-03-03)  ++* f9165d3e1 - Configurable spawn chances for skeleton horses (2016-03-22)  ++* e04d60d87 - Use a Shared Random for Entities (2016-03-22)  ++* 284d70f91 - handle NaN health/absorb values and repair bad data (2015-09-27)  ++* 45daaf47b - Custom replacement for eaten items (2015-06-21)  ++* df169e102 - Add World Util Methods (2016-03-18)  ++* 374e4f93c - Configurable Non Player Arrow Despawn Rate (2016-03-18)  ++* 83542657b - Handle Item Meta Inconsistencies (2015-05-28)  ++* 5d843cb66 - Remove Metadata on reload (2016-03-18)  ++* 90cdc2184 - Allow Reloading of Custom Permissions (2016-03-18)  ++* fda1a014c - Default loading permissions.yml before plugins (2016-03-18)  ++* 8a316a10d - Chunk Save Reattempt (2013-03-04)  ++* 734359b55 - Complete resource pack API (2015-04-04)  ++* 1137468db - Add methods for working with arrows stuck in living entities (2012-11-25)  ++* be0200c8a - Disable Scoreboards for non players by default (2016-03-08)  ++* e80489b33 - Don't nest if we don't need to when cerealising text components (2016-03-08)  ++* 1cb403e7d - Add exception reporting event (2016-03-03)  ++* 0efbb8c1c - Configurable inter-world teleportation safety (2016-03-03)  ++* 4f5da4616 - Add velocity warnings (2016-03-03)  ++* 0709e393d - Add configurable portal search radius (2016-03-03)  ++* f8c2a7d9c - Change implementation of (tile)entity removal list (2016-03-03)  ++* 4ecbaff92 - Ensure inv drag is in bounds (2016-03-03)  ++* 48bc70f73 - Player Tab List and Title APIs (2016-03-03)  ++* e3a413d30 - Be a bit more informative in maxHealth exception (2016-03-03)  ++* c367f58a3 - Expose server CommandMap (2016-03-03)  ++* 4117813b0 - All chunks are slime spawn chunks toggle (2016-03-03)  ++* add14f1c0 - Ensure commands are not ran async (2016-03-03)  ++* 6b3607ca6 - Configurable Disabling Cat Chest Detection (2016-03-03)  ++* ec98c1823 - Add PlayerInitialSpawnEvent (2016-03-03)  ++* 396f4ea22 - Disable spigot tick limiters (2016-03-02)  ++* 17605a1fc - Use UserCache for player heads (2016-03-02)  ++* bf8a1e01a - Configurable container update tick rate (2016-03-02)  ++* dca2d56ca - Add BeaconEffectEvent (2016-03-02)  ++* 753cc4429 - Send absolute position the first time an entity is seen (2016-03-02)  ++* 11f55e4b5 - Configurable mob spawner tick rate (2016-03-02)  ++* fc25fa5d8 - Disable ice and snow (2016-03-02)  ++* 6fc808f38 - Disable thunder (2016-03-02)  ++* f6e28e4c9 - Disable explosion knockback (2016-03-02)  ++* be2bc53cf - Optimize explosions (2016-03-02)  ++* 10dfdb50a - Fix lag from explosions processing dead entities (2016-03-02)  ++* 07ae6b09d - Configurable end credits (2016-03-16)  ++* 5a849c24c - Always tick falling blocks (2016-03-02)  ++* bd4c53c4f - Check online mode before converting and renaming player data (2016-03-02)  ++* e9502ac87 - Configurable top of nether void damage (2016-03-01)  ++* 068dd37d4 - Prevent tile entity and entity crashes (2016-03-01)  ++* 095fe6b0a - Entity Origin API (2016-03-01)  ++* ac0ded0b4 - Only refresh abilities if needed (2016-03-01)  ++* 71fd80b86 - Further improve server tick loop (2016-03-01)  ++* ad704e5d7 - Optimize TileEntity Ticking (2015-03-08)  ++* 9491c8771 - Remove invalid mob spawner tile entities (2016-03-01)  ++* 341854905 - Player affects spawning API (2016-03-01)  ++* b6343b941 - Add version history to version command (2018-03-01)  ++* 200e936b9 - Implement Paper VersionChecker (2019-05-27)  ++* fa81706ab - Show 'Paper' in client crashes, server lists, and Mojang stats (2016-03-01)  ++* f31cd20c4 - Drop falling block and tnt entities at the specified height (2016-03-01)  ++* fc1a61ff6 - Allow for toggling of spawn chunks (2016-03-03)  ++* 95d7eddd7 - Add configurable despawn distances for living entities (2016-03-01)  ++* febbcc7df - Allow nerfed mobs to jump and take water damage (2016-03-01)  ++* 34bbecef9 - Configurable fishing time ranges (2016-03-01)  ++* d78266d7e - Configurable baby zombie movement speed (2016-03-01)  ++* 135e1ae90 - Configurable cactus bamboo and reed growth heights (2016-03-01)  ++* 6fdbc2988 - Adventure (2021-01-29)  ++* 6a1511417 - Timings v2 (2016-03-03)  ++* 239dd0192 - Store counts for each Entity/Block Entity Type (2018-07-04)  ++* 90dc7f6e3 - Store reference to current Chunk for Entity and Block Entities (2018-07-04)  ++* a6d1e7682 - Add MinecraftKey Information to Objects (2018-07-04)  ++* 0bed8c4cc - Paper Metrics (2017-03-24)  ++* ca97b135a - MC Utils (2016-03-28)  ++* 718895d68 - MC Dev fixes (2016-03-30)  ++* 140889b3b - Paper config files (2016-02-29)  ++* 12156c165 - POM Changes (2016-02-29)  ++* eb38e916e - (upstream/upstream, upstream/master, origin/upstream, origin/master, origin/HEAD) mc-dev Imports (2021-03-16)  ++* a14887ede - Allow Disabling Player Data Saving (2020-11-07)  ++* f3d5f0d18 - Add log-villager-deaths option (2019-12-14)  ++* 69c632846 - Allow Reading Old Large Chunks (2019-02-19)  ++* 94b30ac23 - Remove DataWatcher Locking (2019-07-09)  ++* 62b97a3a7 - Add creative mode NBT permissions (2019-02-25)  ++* a30d12923 - Allow changing minimum squid spawn range (2018-01-11)  ++* 36ec5d835 - Configurable Advancement Disabling (2017-06-09)  ++* 28cfd3b32 - Replace chunk loading / unloading rate throttling. (2017-01-26)  ++* 80125e62e - Branchless NibbleArray (2016-07-30)  ++* 8bea1b39e - Implement SpawnerSpawnEvent. (2016-03-03)  ++* f5b55219e - Clear Packet Queue on Disconnect (2015-07-22)  ++* 9eaa5a2d8 - Use Map for getPlayer(String) lookup. (2015-07-13)  ++* b7cf44933 - Use Standard List for EntitySlices. (2015-02-20)  ++* 68a1e536e - Allow Capping (Tile)Entity Tick Time. (2015-02-20)  ++* e3572f162 - BungeeCord Chat API (2014-12-13)  ++* 10973cc13 - Configurable Hanging Tick (2014-08-09)  ++* 10290957c - Limit TNT Detonations per tick (2014-08-20)  ++* a3d80298e - Make debug logging togglable. (2014-08-17)  ++* 796f870a2 - Add Hunger Config Values (2014-08-17)  ++* 8fe942516 - Remove uneeded validation (2014-08-15)  ++* b497980d3 - Plug WorldMap Memory Leak (2014-08-08)  ++* 8b0fa46eb - Only fetch an online UUID in online mode (2014-07-30)  ++* 287122f25 - Allow Attribute Capping. (2014-07-28)  ++* 96926b914 - Apply NBTReadLimiter to more things. (2014-07-27)  ++* 785787eef - Make "moved too quickly" limit configurable (2014-07-22)  ++* a7a1dd80d - Make "moved wrongly" limit configurable (2014-07-04)  ++* c9c976321 - Prevent a crash involving attributes (2014-07-19)  ++* 66e7821bf - Add CommandLine EULA Flag (2014-07-09)  ++* 4734c6e37 - Safer JSON Loading (2014-07-08)  ++* 685053c1f - Further Seed Customisation (2014-07-04)  ++* 4b957d526 - Better item validation (2014-07-02)  ++* 2c5d8ecb7 - Limit block placement/interaction packets (2014-06-29)  ++* b02b5c4f5 - Configurable save-on-stop-only for UserCache (2014-05-23)  ++* c128d0211 - Implement PlayerSpawnLocationEvent. (2014-04-08)  ++* f9f0b5c9c - Configurable UserCache cap (2014-04-25)  ++* 79695744b - Fix race condition that could kill connections before they were initiated (2014-04-25)  ++* 5aee5603b - Prevent NoClassDefError crash and notify on crash (2014-04-21)  ++* d3741d4cf - Convert player skulls async (2014-04-20)  ++* d4273b136 - Log null TileEntity Owner (2014-04-20)  ++* b7d9e38e8 - Correct Ban Expiration (2014-04-16)  ++* 52d575ce1 - Fix Player Banning (2014-04-15)  ++* a79f9ab9e - Use Provided Case for Non Existent Offline Players (2014-04-14)  ++* b7c4bd004 - Use Offline Player Data Once if Required. (2014-04-13)  ++* d34694b8f - Print Stack on InternalException (2014-04-13)  ++* c04da313c - Treat Bungee as Online Mode (2014-04-12)  ++* 536f86f75 - Display 'Spigot' in client crashes, server lists and Mojang stats (2014-04-11)  ++* 9caf9a0e0 - Configurable dragon death and wither spawn sounds (2014-03-29)  ++* b32200319 - Prevent hoppers from loading chunks (2014-03-05)  ++* b32e698d9 - Use one PermissibleBase for all Command Blocks (2014-03-02)  ++* eefd041ac - Implement Silenceable Lightning API (2014-02-23)  ++* 4e695146f - Allow vanilla commands to be the main version of a command (2014-02-12)  ++* aabae601f - Add support for fetching hidden players (2014-02-09)  ++* 87b286f78 - Add Option to Silence CommandBlock Console (2014-02-09)  ++* e4d4906c9 - Spam Filter Exclusions (2014-02-08)  ++* 2d7559e39 - Add Optional Tick Shuffling (2014-01-27)  ++* 3991f37c2 - Configurable Ping Sample Size (2014-01-26)  ++* 3f7b30693 - Highly Optimized Tick Loop (2017-01-26)  ++* 01467a6ed - Allow toggling of ZombiePigmen spawning in portal blocks (2014-01-20)  ++* 5cf544dac - Catch stalling on corrupted map data / NBT arrays. (2014-01-20)  ++* b66683ded - Try and Debug Crash Reports Crashing (2014-01-12)  ++* b6237d24f - Allow statistics to be disabled/forced (2014-01-07)  ++* 398f7b378 - Disable Connected Check on setScoreboard (2013-12-23)  ++* 0f6768501 - Add Option to Nerf Mobs from Spawners (2014-02-02)  ++* 935a69c77 - Save ticks lived to nbttag (2013-07-09)  ++* de009f4be - Log Cause of Unexpected Exceptions (2013-12-18)  ++* b1f02bb0d - Configurable Amount of Netty Threads (2013-12-13)  ++* 002980820 - Allow Disabling Zombie Villager Aggression (2013-12-12)  ++* 39df1d468 - BungeeCord Support (2013-12-01)  ++* 3807efab3 - Fire PreLogin Events in Offline Mode (2013-12-18)  ++* 26a872eb2 - Fix Broken Async Chat (2013-12-05)  ++* 09789cfcc - Watchdog Thread. (2014-08-05)  ++* 61ab5a9c5 - Arrow Despawn Rate (2013-10-14)  ++* 3e74544a9 - Implement respawn API. (2013-10-08)  ++* 968c8c131 - Don't Special Case X Move Value (2013-10-06)  ++* b6ae90bfd - Fully Disable Snooper When Not Required (2013-08-03)  ++* cc3cbd541 - Player Collision API (2016-03-27)  ++* 22f5acdff - Prevent Ghost Players Caused by Plugins (2013-06-11)  ++* d5c63f729 - Entity Mount and Dismount Events (2016-02-27)  ++* ec852fb6b - Disallow Interaction With Self (2013-06-28)  ++* d02c2d128 - Properly Close Inventories (2013-06-27)  ++* 258e8d2fc - Configurable Messages (2013-06-21)  ++* 16ed02923 - Allow Disabling of Command TabComplete (2013-06-21)  ++* fe12c3ef4 - Allow Disabling of Command Logging (2013-06-21)  ++* 619d93b67 - Hopper Customisations (2013-09-08)  ++* fbc0baa61 - Remove -o Option (2013-05-19)  ++* 0933a5a49 - Entity Tracking Ranges (2013-02-20)  ++* a68129d77 - Metrics (2013-02-23)  ++* 4bf3a4acb - Entity Activation Range (2013-02-03)  ++* 24b4400ba - Item Despawn Rate (2013-09-22)  ++* e6ac385f0 - Handle Null Tile Entities (2013-02-03)  ++* b362b0b35 - Fix Mob Spawning Relative to View Distance (2013-06-21)  ++* 3de1df9c2 - Spigot Timings (2013-01-10)  ++* b90c78976 - View Distance (2013-03-23)  ++* 9d33e5018 - Async Operation Catching (2014-03-25)  ++* c7f001bc9 - Merge tweaks and configuration (2013-03-23)  ++* f34232371 - Crop Growth Rates (2016-03-07)  ++* 168f2c5c5 - Spigot Configuration (2013-07-07)  ++* 73a05fe01 - mc-dev imports (2013-12-01)  ++* 70c2792a1 - Skeleton API Implementations (2013-06-02)  ++* ca111195c - POM Changes (2013-07-02)  ++* bacc347f5 - CraftBukkit $ Tue 16 Mar 09:37:35 CET 2021 (2021-03-16)  ++* f9849abab - Minecraft $ Tue 16 Mar 09:37:32 CET 2021 (2021-03-16)  ++* 90d6905b1 - Repackage NMS (2021-03-16)  ++* 69cf961d8 - Repackage patches (2021-03-16)  ++* 2ffdb31ec - Use upstream plexus-compiler-eclipse (2021-03-15)  ++* ee5006d18 - #810: Add option for a consumer before spawning an item (2021-03-09)  ++* f6a39d3cc - #809: Add spawn and transform reasons for piglin zombification. (2021-03-09)  ++* 0c24068ad - Organise imports (2021-03-09)  ++* a021e334a - #795: Add methods to modify the rate of regeneration and starvation (2021-03-04)  ++* 509e523c5 - #792: Add EntityExhaustionEvent (2021-03-04)  ++* ea050e6e9 - #807: Add Player#sendBlockDamage() (2021-02-24)  ++* b7eed2546 - SPIGOT-6307: Allow chest locks with legacy color codes to match against items with json colors (2021-02-21)  ++* 0cd8f19fb - #802: Add methods to modify despawn delay for wandering villagers (2021-02-15)  ++* d5c5d998a - SPIGOT-6362: ConcurrentModificationException: null --> Server Crash (2021-02-14)  ++* 8c7d69fef - SPIGOT-5228: Entities that are removed during chunk unloads are not properly removed from the chunk. (2021-02-14)  ++* d97d91871 - SPIGOT-6347: Nether Portals Default to Nether, even in Nether (2021-02-13)  ++* 8aa6a953f - SPIGOT-5778: Added World.getGameTime method (2021-02-13)  ++* a82b21297 - BUILDTOOLS-569: development maven profile fails build on windows (2021-02-08)  ++* b9b0c4e4a - EntityDropItemEvent for cats should continue to next stack if cancelled (2021-02-07)  ++* e5cb519d6 - #793: Don't unnecessarily toString block in CraftBlockEntityState constructor (2021-02-06)  ++* c631fe557 - #797: The copy constructor of CraftMetaTropicalFishBucket did not copy its entityTag field (2021-02-06)  ++* ed4d4cd65 - SPIGOT-6342: TROPICAL_FISH_BUCKET isSimilar returns true when it should not (2021-02-06)  ++* 085fe67aa - SPIGOT-6208: Throwing ender pearl into end portal causes NPE (2021-01-31)  ++* aeb95e3a3 - Add more checkstyle checks (2021-01-31)  ++* 804914622 - Re-add missing StriderTemperatureChangeEvent (2021-01-29)  ++* 058b4df95 - SPIGOT-6316: PlayerBedLeaveEvent implements Cancellable (2021-01-29)  ++* 08de4679f - #789: Call EntityDropItemEvent when a wither rose is dropped (2021-01-29)  ++* c3e684ef7 - SPIGOT-3789: Can't Remove Entity Equipment in Same Tick Spawned without using Consumer (2021-01-27)  ++* 0bad58f1e - #783: Expand the FishHook API (2021-01-23)  ++* 3636fb515 - SPIGOT-6318: Fix smoke effect directions (2021-01-23)  ++* b5eb2f57c - SPIGOT-6315: Cats gifts dont call EntityDropItemEvent (2021-01-21)  ++* f3f30947e - Update to Minecraft 1.16.5 (2021-01-16)  ++* 7a6c3c9aa - Remove outdated build delay. (2021-01-15)  ++* 7029c0a8f - SPIGOT-6311: Don't calculate portal shapes for up/down directions (2021-01-08)  ++* ff2b9440f - SPIGOT-6304: Removed the detection of legacy text based on color codes (2021-01-03)  ++* 24c79a144 - SPIGOT-6303: Interpret text that Gson considers to be an empty JSON document as legacy text. (2021-01-02)  ++* f1187a24c - #778: Added get/set ItemStack methods to trident (2021-01-02)  ++* fa6d549d9 - Update SQLite for Mac M1 support (2021-01-02)  ++* 560b65c4f - #707, SPIGOT-5063, SPIGOT-5304, SPIGOT-5656, SPIGOT-3206, SPIGOT-5350, SPIGOT-5980, SPIGOT-4672: Persist the exact internal text representation where possible. (2021-01-01)  ++* b5e5adc42 - SPIGOT-6296: Server crashes when burning something at y-level 0 (2020-12-29)  ++* 72c5e7477 - SPIGOT-6273: Expose ItemFrame ItemDropChance through API (2020-12-28)  ++* 9f2b92e58 - SPIGOT-6292: LivingEntity.setNoDamageTicks no longer functions (2020-12-28)  ++* 6917945f0 - SPIGOT-6289: Fix setting entity equipment (2020-12-23)  ++* 878b43758 - #772: Add API to set equipment silently (2020-12-21)  ++* 22d7fcc98 - SPIGOT-6256: Add method to check if the entity is in water (2020-12-21)  ++* 768d7fc2d - #773: Add method to get max world size (2020-12-13)  ++* 5b747147e - Increase outdated build delay (2020-12-03)  ++* e1ebdd927 - #771: Add clear weather World API (2020-11-26)  ++* 424598d29 - #752: Add the ability to retrieve hit, step, fall, and other sounds from blocks. (2020-11-26)  ++* 167ff5917 - #770: Send messages without sender with SYSTEM type again (2020-11-19)  ++* 4475707d7 - SPIGOT-6244: /spawnpoint ignores angle (2020-11-18)  ++* 8b3b096d1 - SPIGOT-6242: Fix some file line endings (2020-11-18)  ++* 4b33c7499 - SPIGOT-6186: Canceling a CreatureSpawnEvent​ results in a "Unable to summon entity due to duplicate UUIDs" error (2020-11-17)  ++* 2b3ca7264 - SPIGOT-6236: Vehicle passenger portal cooldown does not change (2020-11-17)  ++* 23618b2cb - SPIGOT-6240: Use correct portal search radius (2020-11-13)  ++* 009f0ba0e - #769: Fix FishHook.maxWaitTime (2020-11-09)  ++* bc6a175ef - #767: Add wait time modification for FishHook (2020-11-06)  ++* 2fc37bcc0 - SPIGOT-6197: Prevent world loading from updating spawn settings of all worlds (2020-11-06)  ++* 3eb7236e4 - SPIGOT-6217: Missed PlayerEditBookEvent when editing books (2020-11-04)  ++* 6fd677caf - SPIGOT-6206: Use correct sender UUID for chat messages (2020-11-03)  ++* a489dd4ac - Revert "Downgrade NMS revision" (2020-11-03)  ++* ce64c84ca - SPIGOT-6205: Rewrite enum to/from NMS type methods (2020-11-03)  ++* dd10b375c - Downgrade NMS revision (2020-11-03)  ++* 3af81c717 - Update to Minecraft 1.16.4 (2020-11-03)  ++* dea413890 - Remove outdated build delay. (2020-10-25)  ++* 9da3b5bff - #762: Add TNTPrimed#setSource method (2020-10-25)  ++* 55a78ffbd - SPIGOT-6193: Allow small fireballs to ignite players when MobGriefing is disabled (2020-10-23)  ++* b8dd5ec21 - Rename Chunk "BukkitValues" key to "ChunkBukkitValues" (2020-10-18)  ++* 9e91bcabf - SPIGOT-6194: Read correct nbt compound into chunk pdc (2020-10-18)  ++* 4ef13f94d - Misc maven build updates (2020-10-17)  ++* 04639f5a2 - #759: Allow sending messages from specific UUIDs (2020-10-17)  ++* 77c894a2a - #672: Add PersistentDataHolder to Chunk (2020-10-17)  ++* 055870c4b - #758: Item - add getters/setters for owner/thrower (2020-10-14)  ++* 29dd68eb9 - #757: PoweredMinecart - add getter/setter for fuel (2020-10-13)  ++* 2a3ca137e - SPIGOT-6175: Fix generating loot tables for entities (2020-10-11)  ++* 1f4693a8c - SPIGOT-6168: Fix error with Player.getBedSpawnLocation when world is unloaded while server running (2020-10-06)  ++* aa8206a85 - SPIGOT-6130: Fix API loot table generation with certain contexts (2020-10-03)  ++* 5c77bd281 - SPIGOT-6147: InventoryCloseEvent does not fire after closing player inventory (2020-10-01)  ++* 5da21f87d - SPIGOT-6152: End exit gates in custom ends do not send back to overworld (2020-09-30)  ++* 1ee373fe2 - SPIGOT-6157: Crash when PortalCreateEvent cancelled (2020-09-29)  ++* a339310c4 - #755: Fix NPE when calling getInventory() for virtual EnderChests (2020-09-27)  ++* 2577f9bfb - Increase outdated build delay (2020-09-25)  ++* 1dabfdc82 - #754: Fix pre-1.16 serialized SkullMeta being broken on 1.16+, losing textures (2020-09-25)  ++* f8d4da08e - #743: LivingEntity - add methods for getting/setting invisibility (2020-09-19)  ++* da9bb3ea9 - #753: RecipeIterator#hasNext will now accurately represent if the current iterator has a next item. (2020-09-18)  ++* 890130b46 - #746: Add Fluid types / tags (2020-09-14)  ++* d5a729600 - SPIGOT-6063: ConsoleSender sending extra lines in Java 13+ (2020-09-12)  ++* 6f55306c4 - SPIGOT-5794: Only skip interact event if position, hand and itemstack are equal (2020-09-12)  ++* bf3d72071 - Update to Minecraft 1.16.3 (2020-09-11)  ++* 0d8350af4 - Remove outdated build delay. (2020-09-11)  ++* b8ee6a89f - SPIGOT-6125: Grass path should only fade when it is invalid at that location (2020-09-08)  ++* a939fbdf0 - SPIGOT-6123: Call EntityDamageEvent when a shulker bullet gets damaged (2020-09-06)  ++* a05df28a7 - SPIGOT-6122: Revert "SPIGOT-5794: Do not skip PlayerInteractEvent" (2020-09-04)  ++* 1d7440332 - #745: Fix getLocation for Cartography Table and Stonecutter (2020-09-03)  ++* 13fc33f73 - #744: Add ability to get location from smithing inventory (2020-09-03)  ++* 39806409e - #697: Add ArrowBodyCountChangeEvent (2020-09-02)  ++* 927200a96 - #718: Add consumed item, hand and consumeItem boolean to EntityShootBowEvent (2020-08-31)  ++* 6008e6660 - SPIGOT-6025: Do not NPE when target world of a compass no longer exists (2020-08-31)  ++* 00bff0270 - SPIGOT-5794: Do not skip PlayerInteractEvent (2020-08-29)  ++* 3f572834a - #740: Fix EntityDamageEvent not being called for non EntityDamageSource for End Crystals (2020-08-28)  ++* 3c7143e7b - SPIGOT-5953, SPIGOT-5914: Use LinkedHashMap to keep captured block states in order (2020-08-28)  ++* 7d31adb5f - #734: Add EnderSignal ItemStack API (2020-08-28)  ++* e14c9acbe - SPIGOT-6113: Ender Pearls thrown into portals that lead to disabled dimensions crash the server (2020-08-28)  ++* 97da39889 - SPIGOT-6114: PlayerRespawnEvent player's location changed before event called (2020-08-28)  ++* 3b5c36769 - SPIGOT-6115: Items being deleted on pick up with full inventory (2020-08-28)  ++* bf451617f - SPIGOT-6109: Improve loot handling (2020-08-27)  ++* bfea45596 - SPIGOT-6111: NPE in CraftHumanEntity#openWorkbench & CraftHumanEntity#openEnchanting (2020-08-27)  ++* ee7116b4c - Add note to CONTRIBUTING.md to suggest keeping commit messages / titles the same (2020-08-27)  ++* eae159435 - #721: Add EntityCategory API to LivingEntity (2020-08-27)  ++* 8c6115604 - #702: Add Block#applyBoneMeal() (2020-08-27)  ++* 8408de02d - #716: Fix barrel open API playing sound twice (2020-08-27)  ++* 74b6982b0 - #711: Add Full RGB support to the console (2020-08-27)  ++* 049120068 - SPIGOT-6101: Store persist state of entities (2020-08-26)  ++* 0de8365dd - SPIGOT-6103: Summoning an Eye of Ender throw an Error (2020-08-26)  ++* 9aafdc9a7 - SPIGOT-6099: PlayerPortalEvent.setTo ignores world for end portal travel (2020-08-26)  ++* bad55dbb5 - SPIGOT-6097: Zoglins not attacking mobs (2020-08-23)  ++* 850e7b140 - SPIGOT-974: Add ArmorStand locking API (2020-08-23)  ++* 7d8884b26 - Also make field volatile (2020-08-22)  ++* 50da2cdec - SPIGOT-6094: Error loading datapack functions (2020-08-22)  ++* 8b52a7666 - SPIGOT-6092: Player#setBedSpawnLocation - NullPointerException (2020-08-22)  ++* fe4efd19f - SPIGOT-6093: Can't change ItemStack in EntityPickupItemEvent (2020-08-21)  ++* eaf0bace2 - Increase outdated build delay (2020-08-20)  ++* 8abed406c - SPIGOT-6086: Twisting vines growing at top of world crashes server (2020-08-20)  ++* 59a0bafa4 - SPIGOT-6091: End platform does not generate (2020-08-20)  ++* 9a9c2234a - SPIGOT-6087: Revert "SPIGOT-6086: Twisting vines growing at top of world crashes server" (2020-08-18)  ++* 2e178b09c - #730: Let World#setSpawnLocation() support an angle (2020-08-18)  ++* fad5fb9e8 - SPIGOT-6086: Twisting vines growing at top of world crashes server (2020-08-18)  ++* 419018f5d - SPIGOT-6075: Snowballs don't destroy Ender Crystals (2020-08-17)  ++* fa917c472 - Don't create custom registry for custom worlds (2020-08-17)  ++* e354566ec - SPIGOT-6076: Crash when updating blocks in uninitialized chunk sections (2020-08-16)  ++* 5a66916c0 - Cleanup sendBlockChange (2020-08-16)  ++* e850144b0 - #726: Add Inventory#isEmpty() (2020-08-16)  ++* 13945b768 - #725: HumanEntity - add a method to make the entity drop the item they're holding (2020-08-16)  ++* 82542d01d - #723: Implement EntitySpellCastEvent for spellcaster illager (2020-08-15)  ++* 1e76d09fa - #724: Re-implement player portal event search radius and creation API (2020-08-14)  ++* f26d8e84c - SPIGOT-4705: Revamp Ageable interface and add Breedable interface (2020-08-13)  ++* 43c7ff9d7 - Fix nether portal ignition (2020-08-12)  ++* 2ee7318ae - SPIGOT-6064: world.getBiome() null Error (2020-08-12)  ++* 9f12e29b7 - Fix crash with composters (2020-08-12)  ++* 22c3a2f9a - Fix crash growing saplings (2020-08-12)  ++* 62761be29 - SPIGOT-6061: NPE in CraftBlockTag.getHandle() (2020-08-12)  ++* 9c9fb593f - Update to Minecraft 1.16.2 (2020-08-12)  ++* 4b9bc9daa - Remove outdated build delay. (2020-08-11)  ++* c3184f875 - SPIGOT-6053: World#setHardcore() cannot be set to false (2020-08-11)  ++* f6227934a - SPIGOT-3020: Fix issue with BlockBreakEvent throwing AssertionError when setting a player's tool to AIR/NULL (2020-08-09)  ++* 8fb65851f - #660: Add support to change block's lid state (2020-07-29)  ++* c3a22e785 - SPIGOT-6032: Add best effort target events for new entities (2020-07-28)  ++* 52fd29c0d - SPIGOT-6033: Bukkit.getUnsafe().getMaterial() won't match renamed block materials (2020-07-28)  ++* 29cce6714 - SPIGOT-6034: World.getWorldFolder() includes the dot in the path (2020-07-28)  ++* 0458f6000 - SPIGOT-6029: RGB Hex colors not respected with custom kick messages (2020-07-27)  ++* 7c03d257d - SPIGOT-6011: End Gateways do not work on Non-Main End Worlds (2020-07-22)  ++* d492e363b - SPIGOT-6015: Small Armor Stand doesn't drop items (2020-07-22)  ++* 5db13eea6 - SPIGOT-5950: Add PrepareSmithingEvent event (2020-07-22)  ++* 8b831a965 - #714: Added getRecipe() method to retrieve a Recipe by it's NamespacedKey (2020-07-22)  ++* 6b95d595c - SPIGOT-6001: Hex colors format differently to traditional colours (2020-07-19)  ++* 2361cb8a8 - Increase outdated build delay to 3 weeks (2020-07-18)  ++* 75a2fb8e0 - SPIGOT-5901: Improve multiworld support (2020-07-17)  ++* b0c6dfe1a - SPIGOT-5976: Bees do not exit naturally spawned hives (2020-07-11)  ++* 93cfb195c - #704: Added explicit API to stop a Jukebox from playing (2020-07-10)  ++* dba91d2ab - SPIGOT-5972: PlayerPortalEvent.setTo() when returning through an End Portal Crashes Server (2020-07-09)  ++* 72f368909 - SPIGOT-5965: BlockRedstoneEvent.setNewCurrent(0) crashes server (2020-07-09)  ++* 60f8a29d1 - SPIGOT-5968: Killer rabbits can't be set to the non-killer rabbit behavior (2020-07-09)  ++* 69fddc725 - #705: Improve implementation of furnace related block states (2020-07-09)  ++* f222b5bd4 - SPIGOT-5969: Update maximum structure block size (2020-07-09)  ++* 2f1810812 - Improve physics code (2020-07-07)  ++* 7a9e4f7ae - SPIGOT-5951: Projectile#getShooter() returns null (2020-07-06)  ++* 0fa2eecff - SPIGOT-5948: EntityDropItemEvent does not fire when piglins drop an item (2020-07-06)  ++* 38a66b656 - Fix crash involving fireballs (2020-07-06)  ++* 430956639 - SPIGOT-5943: Calling get BlockStateMeta#getBlockState causes NPE with shield with banner (2020-07-05)  ++* 567e245ff - Fix end portals in custom ends (2020-07-05)  ++* e58a08876 - SPIGOT-5939: EntityPortalEnterEvent not fired for end portal if end disabled (2020-07-05)  ++* 833047174 - Increase outdated build delay to 7 days (2020-07-05)  ++* 5209a4f73 - SPIGOT-5940: EntityChangeBlockEvent is not called for villager emptying composter (2020-07-05)  ++* b6a876bc3 - SPIGOT-5936: BlockPlaceEvent does not fire for lily_pad (2020-07-04)  ++* 145921e2a - #676: Add PlayerHarvestBlockEvent (2020-07-03)  ++* 47abffa21 - SPIGOT-5929: Angered zombified piglins do not inherit killed_by_player status (2020-07-03)  ++* 7f6b4f587 - SPIGOT-5930: Add PlayerRespawnEvent#isAnchorSpawn (2020-07-03)  ++* 94eff632f - SPIGOT-5867, MC-193339: NPE during shutdown when rcon enabled with no password (2020-07-03)  ++* 068618eb5 - SPIGOT-5927: Some items NBT data disappears (2020-07-03)  ++* dc7c3c61f - SPIGOT-5921: Improve setNoDamageTicks for Players (2020-07-02)  ++* 53849f57f - SPIGOT-5922: Smithing recipes not registering (2020-07-02)  ++* 551e770f5 - SPIGOT-5900: Add test for the order of Material enum entries (2020-07-02)  ++* 8297676c2 - #682: Add hasDiscoveredRecipe() and getDiscoveredRecipes() (2020-07-02)  ++* d9bd43b06 - Change outdated build delay to 3 days (2020-07-02)  ++* 3b9cf0f80 - Improve code formatting (2020-07-01)  ++* 008f039f3 - SPIGOT-5913: MOTD no longer supports new line character (2020-07-01)  ++* b8b65eb74 - SPIGOT-5908: CompassMeta for new lodestone compass data (2020-07-01)  ++* a13b8cfc7 - SPIGOT-5907: Item Frame NBT data disappears (2020-07-01)  ++* 5a6c52983 - SPIGOT-5906: Huge Fungi tree generation (2020-07-01)  ++* fdf6017fa - Fix event for unlucky composts (2020-07-01)  ++* b567cb433 - SPIGOT-5910: loadAdvancement does not work (2020-07-01)  ++* 7560f5f5a - SPIGOT-5905: Fix hex colours not being allowed in MOTD (2020-06-30)  ++* d47c47ee5 - SPIGOT-5889: Villager using composter should call EntityChangeBlockEvent (2020-06-30)  ++* 2fe6b4a32 - SPIGOT-5899: Hoglins API similar to Piglins (2020-06-30)  ++* e09dbecab - SPIGOT-5887: ClickType doesn't include off hand swaps (2020-06-30)  ++* 23aac2a53 - SPIGOT-5903: EntityDismountEvent cannot be triggered asynchronously (2020-06-30)  ++* 92cbf6564 - SPIGOT-5884: Tab completions lost on reloadData / minecraft:reload (2020-06-30)  ++* fb4e54ad7 - SPIGOT-5902: PlayerRespawnEvent places player at spawn before event is called (2020-06-30)  ++* aa8f3d5a4 - SPIGOT-5901: Structures are generated in all worlds based on the setting for the main world (2020-06-30)  ++* a0c35937f - SPIGOT-5895: PlayerChangedWorldEvent#getFrom is incorrect (2020-06-30)  ++* 89c0a5c34 - SPIGOT-5886: Missing BlockData (2020-06-30)  ++* 32acc2621 - #686: Expand Strider and Steerable entity API (2020-06-30)  ++* e2403a3d2 - SPIGOT-5882: NPE when emptying bucket on already waterlogged blocks (2020-06-29)  ++* 44109b726 - SPIGOT-5803: Implement the missing methods for the Piglin API. (2020-06-29)  ++* cf01fd9d7 - #696: Respect the NotNull annotation of getChargedProjectiles in CraftMetaCrossbow (2020-06-29)  ++* 1a3363dbe - SPIGOT-5849: Constantly Raining in World 1.16 (2020-06-29)  ++* d77f4d9bf - SPIGOT-5810, SPIGOT-5835: 'Better' handling of Player.isOnGround (2020-06-28)  ++* 53c956277 - SPIGOT-5865: Piglin does not trigger EntityPickupItemEvent (2020-06-28)  ++* 2ab04d248 - Update ECJ version (2020-06-28)  ++* 7884e0793 - SPIGOT-5868: Blocks do not tick in custom nether / end (2020-06-28)  ++* 2a8482869 - SPIGOT-5863: Don't check colour in scoreboard length validation (2020-06-28)  ++* f2cbce30d - SPIGOT-5866: Beehive unknown TargetReason (2020-06-28)  ++* 983305bb4 - SPIGOT-5856: Soul Campfire BlockState cannot be cast to Campfire (2020-06-27)  ++* d42435101 - SPIGOT-5853: DragonBattle#getEndPortalLocation() throws NPE on new world (2020-06-27)  ++* 1601ec31e - SPIGOT-5845: ChatColor.RESET does not work in ItemMeta to reset italics (2020-06-27)  ++* 4d92db6f0 - CraftChatMessageTest does not need AbstractTestingBase (2020-06-27)  ++* 71045d3dd - SPIGOT-5828: Unlock worlds on unload (2020-06-27)  ++* dbc347b93 - SPIGOT-5841: New map colours broken (2020-06-27)  ++* 14053c708 - SPIGOT-5847: BlockFadeEvent cannot be triggered asynchronously from another thread (2020-06-27)  ++* 4ff609e60 - SPIGOT-5836: PotionEffect HEALTH_BOOST never expires (2020-06-26)  ++* c99846cc7 - Add configuration options for water_ambient spawning (2020-06-26)  ++* baadbf3f7 - SPIGOT-5833: Player#setWalkSpeed not working (2020-06-26)  ++* 709b003fe - Re-add default bukkit datapack (2020-06-26)  ++* d1fb662ec - SPIGOT-5735: Add EntityEnterLoveModeEvent (2020-06-26)  ++* a1d23114f - #687: Add visibility and fixed API for ItemFrames (2020-06-26)  ++* c49b67ac9 - #685: Implement support for PersistentDataContainer arrays (2020-06-26)  ++* b90051303 - #671: Implement PersistentDataContainer#getKeys() (2020-06-26)  ++* 50484a657 - SPIGOT-5820: Fix migration of Vanilla nether / end (2020-06-26)  ++* 174a2ee53 - SPIGOT-5829: RGB hex colours not supported in several places (2020-06-26)  ++* 6b20d04c7 - SPIGOT-5826: Don't store chunk in block states (2020-06-26)  ++* 6abb4398b - SPIGOT-5830: Server crash when campfire lit via dispenser. (2020-06-25)  ++* 4b67fed7f - Better handling of custom end/nether teleports (2020-06-26)  ++* 2b5f172cb - SPIGOT-5816: PlayerTeleportEvent not called when using netherportals and allow-nether=false (2020-06-26)  ++* 9233a7fb0 - SPIGOT-5827: Player.getLocale always returns en_us (2020-06-26)  ++* 72c080cca - SPIGOT-5812: ProjectileHitEvent fires twice if projectile is an Egg (2020-06-26)  ++* 614fbae9d - Shorten build expiry to 1 day (2020-06-26)  ++* 3f0c33387 - SPIGOT-5809: block.getState() wall signs too (2020-06-25)  ++* 68b98b3d2 - Fix 1.16 binary mappings not applying to modern plugins (2020-06-25)  ++* f7ff58c6c - SPIGOT-5803: Add Piglin/Zoglin Baby API (2020-06-25)  ++* b5db08bea - SPIGOT-5809: block.getState() instanceof Sign for crimson_sign missed (2020-06-25)  ++* 9a3bd97f6 - SPIGOT-5809: block.getState() instanceof Sign for warped_sign missed (2020-06-25)  ++* 8dc1da156 - Misc bugfixes to multiworld support (2020-06-25)  ++* ca19c2f48 - SPIGOT-5806: Block#getDrops(ItemStack tool) does not work as it should (2020-06-25)  ++* 38de0b81e - SPIGOT-5805: NPE when getting an Attribute from a Player (2020-06-25)  ++* b136f8430 - SPIGOT-5804: Cannot launch Entity Firework (2020-06-25)  ++* 76d2add0b - SPIGOT-5802: Add SmithingRecipe API (2020-06-25)  ++* ab3875418 - SPIGOT-5801: End gateways crash server upon enderpearl use through them (2020-06-25)  ++* 2b00831c9 - SPIGOT-2106, SPIGOT-3942: Improve collidable API (2020-06-25)  ++* 847ad16ee - SPIGOT-5562: Entering a boat triggers VehicleExitEvent (2020-06-25)  ++* 7ea3c040b - Update to Minecraft 1.16.1 (2020-06-25)  ++* be6aaf046 - SPIGOT-5782: Set Arrow Launched From Crossbow (2020-06-24)  ++* 833da9c47 - SPIGOT-5799: InventoryCloseEvent fires after PlayerQuitEvent (2020-06-24)  ++* 26c0084f0 - SPIGOT-5675, SPIGOT-5798, MC-149563: Fix tracking of entities across dimensions (2020-06-24)  ++* 7f3e7c3fb - SPIGOT-5797: Zombie(Villagers) Instant Convert based on their lifetime (2020-06-24)  ++* 8ea9b1386 - Remove outdated build delay. (2020-06-20)  ++* ffc2b251a - Revert "#675: Fix redirected CommandNodes sometimes not being properly redirected" (2020-06-18)  ++* cb701f6b6 - #675: Fix redirected CommandNodes sometimes not being properly redirected (2020-06-17)  ++* c9d7c16b5 - SPIGOT-2623: Add EntityEquipment methods to get/set ItemStacks by slot. (2020-06-13)  ++* fad2494af - #673: Fix Craftworld#isChunkLoaded (2020-06-06)  ++* 8637ec008 - SPIGOT-5751: Made breakNaturally and getDrops returns the correct item if no argument is given (2020-06-03)  ++* 1b2830a3b - SPIGOT-4441: Fix serializing Components to and from Legacy (2020-06-01)  ++* aae46f82e - #665: Add test for Material#getCraftingRemainingItem() (2020-05-28)  ++* cfeef75cd - SPIGOT-5749: ItemMeta serializing to YAML not saving black colour code (2020-05-26)  ++* eb1b19d97 - SPIGOT-5748: Add instant effect potion break to the Effect enum (2020-05-26)  ++* d07a78b1f - SPIGOT-5716: Clarify documentation of MultipleFacing (2020-05-09)  ++* 46a138606 - SPIGOT-5718: Block.BreakBlockNaturally does not reflect tool used (2020-05-09)  ++* 214ffea95 - SPIGOT-5727: GameRule doImmediateRespawn cannot be set per-world (2020-05-09)  ++* 933e9094b - #664: Add methods to get/set ItemStacks in EquipmentSlots (2020-05-05)  ++* 187223123 - #662: Expose ItemStack and hand used in PlayerShearEntityEvent (2020-05-02)  ++* 77fd87e4d - SPIGOT-2304: Implement LootGenerateEvent (2020-04-30)  ++* a1a705ee9 - SPIGOT-5566: Doused campfires & fires should call EntityChangeBlockEvent (2020-04-29)  ++* 41712edde - SPIGOT-5707: PersistentDataHolder not Persistent on API dropped Item (2020-04-29)  ++* 893ad93b3 - #650: Add method to get player's attack cooldown (2020-04-23)  ++* ef706b064 - #655: Added support for the VM tag jansi.passthrough when processing messages sent to a ColouredConsoleSender. (2020-04-23)  ++* e0cfb3474 - SPIGOT-5689: Fireball.setDirection increases velocity too much (2020-04-23)  ++* 94cb030fb - SPIGOT-5673: swingHand API does not show to self (2020-04-22)  ++* b331a0550 - SPIGOT-5680: isChunkGenerated creates empty region files (2020-04-22)  ++* e1335932a - Improve build process (2020-04-22)  ++* a8ec1d60f - Add a couple of method null checks to CraftWorld (2020-04-17)  ++* ce66f6937 - Misc checkstyle fixes (2020-04-14)  ++* 8bd0e9ab0 - SPIGOT-5669: Fix Beehive.isSedated (2020-04-13)  ++* 183139d41 - SPIGOT-5665: Improve loading spawn egg NBT (2020-04-10)  ++* dec5df263 - SPIGOT-5667: Can't add recipe without (vanilla) datapack (2020-04-10)  ++* f7d6ad53e - SPIGOT-5603: Use LootContext#lootingModifier in CraftLootTable (2020-04-08)  ++* 5838285d6 - SPIGOT-5657: BlockPlaceEvent not cancelling for tripwire hooks (2020-04-05)  ++* f325b9bea - SPIGOT-5641: Add Block.getDrops(ItemStack, Entity) (2020-04-05)  ++* e25a2272f - Fix some formatting in CraftHumanEntity (2020-04-05)  ++* 498540e08 - Add Merchant slot delegate (2020-04-05)  ++* b2de47d58 - SPIGOT-5621: Add missing container types for opening InventoryView (2020-04-05)  ++* aa3a2f276 - #645: Allow statistics to be accessed for offline players (2020-04-05)  ++* 2122c0b12 - #649: CraftBell should implement Bell (2020-04-04)  ++* bbe3d58ef - SPIGOT-5650: Lectern.setPage(int) causes a NullPointerException (2020-04-01)  ++* 3075579f6 - Add FaceAttachable interface to handle Grindstone facing in common with Switches (2020-04-01)  ++* 95bd4238f - SPIGOT-5647: ZombieVillager entity should have getVillagerType() (2020-03-30)  ++* 4d975ac3b - SPIGOT-5617: setBlockData does not work when NotPlayEvent is called by redstone current (2020-03-29)  ++* fc318cc10 - #642: Add a DragonBattle API to manipulate respawn phases etc (2020-03-24)  ++* 796eb15a5 - #644: Fix ChunkMapDistance#removeAllTicketsFor not propagating ticket level updates (2020-03-22)  ++* a6f809378 - SPIGOT-5606: call BlockRedstoneEvent for fence gates (2020-03-15)  ++* fc2493409 - SPIGOT-5484: Add more spawn tick settings (2020-03-07)  ++* 7f61a2526 - #640: Fix chunk load/unload callbacks for chunk load cancellations (2020-03-02)  ++* 13ed05dec - Prepare for Java 14 (2020-03-02)  ++* 6b00b1453 - #639: Deep clone itemmetas persistent container on clone (2020-03-01)  ++* 3d61a853e - Fix formatting in CraftLivingEntity (2020-02-23)  ++* f7ab30557 - #633: Add LivingEntity#attack, LivingEntity#swingMainHand, LivingEntity#swingOffHand (2020-02-19)  ++* d5ef2eab9 - SPIGOT-5591: Allow concurrent potion effects (2020-02-23)  ++* 25a9a9ff6 - SPIGOT-5592: Custom ChunkGenerator can cause bugged dirt (2020-02-23)  ++* 3f6d0de98 - Make it clear in error messages that api-version above 1.13 is also supported (2020-02-23)  ++* fba9f4876 - Improve legacy conversion of some materials that changed post flattening (2020-02-21)  ++* b1ba87491 - Move Bukkit.Aware loading/saving to correct location (2020-02-21)  ++* f7cdb53c0 - SPIGOT-5311: Add API to get/set item associated with throwable projectiles (2020-02-21)  ++* 689f429c5 - #634: Cross platform patch scripts (2020-02-19)  ++* ab85433d7 - Add set/isAware to disable Vanilla AI components of a Mob (2020-02-19)  ++* 918061b75 - SPIGOT-5468: Beehive TileEntity was not loaded for BlockStateMeta (2020-02-17)  ++* 37f32da8f - SPIGOT-5573, SPIGOT-5574: Move CustomChunkGenerator generation code back to buildBase() (2020-02-12)  ++* d171d7eb8 - SPIGOT-5572: Fix console/API completion of Vanilla commands (2020-02-11)  ++* 880190573 - SPIGOT-5571: Beehive MaxEntities cannot be set back to 3 (2020-02-09)  ++* 708be6953 - SPIGOT-5468: Improve Beehive TileEntity API (2020-02-09)  ++* 2d151f4c3 - #624: Add an API for passing the heightmap to getHighestBlockAt* method (2020-02-09)  ++* c98538940 - MC-135989, SPIGOT-5564: Don't kick players for flight while riptiding (2020-02-07)  ++* 807a677e9 - SPIGOT-5558: Fix World#getHighestBlockAt, previously off by +1 (2020-02-03)  ++* d70084e53 - Remove unused seed in CustomChunkGenerator (2020-02-02)  ++* 8a66d4c7a - #619: Allow delegation of certain elements to Vanilla when using a custom ChunkGenerator (2020-02-02)  ++* c2dc19d38 - Craftbukkit -> CraftBukkit (2020-02-02)  ++* ae45e0922 - SPIGOT-5559: Add EntityPotionEffectEvent causes for bee, raiders and wither rose (2020-02-02)  ++* 009803764 - #618: Add method to remove a recipe by its key (2020-02-02)  ++* e82b5477a - SPIGOT-5556: Some biome methods use incorrect positions (2020-02-01)  ++* 544ccdc58 - Update checkstyle (2020-02-01)  ++* 512ff7a52 - Print legacy load reason in debug mode (2020-01-31)  ++* df371c1b6 - SPIGOT-5554: Clear error message when BossBar is used for not fully joined players (2020-01-31)  ++* 18168500e - Update scriptus (2020-01-29)  ++* 6bbb4e734 - Clean up CraftBlockData.toString (2020-01-29)  ++* b1e96bd5c - SPIGOT-5551: BlockState.setData fails when used by legacy plugin (2020-01-29)  ++* ab13a117a - SPIGOT-5550: Cancelled ProjectileLaunchEvent still plays sound for eggs (2020-01-28)  ++* 44016b1df - SPIGOT-5538: Using javaw to run GUI prints input error (2020-01-28)  ++* e653ae766 - SPIGOT-5526: Call EntityEnterBlockEvent for bees trying to enter hives (2020-01-22)  ++* 6515ea495 - SPIGOT-5537: Bee nests generated by growing trees near flower have no bees (2020-01-28)  ++* d82b31494 - Remove unused CraftWorld.getId method (2020-01-27)  ++* 10763a88b - Change some block == AIR checks to isAir to catch CAVE_AIR (2020-01-27)  ++* e911c70f8 - SPIGOT-5542: Cancelling EntityToggleGlideEvent doesn't stop client from gliding (2020-01-25)  ++* 596b0b2d0 - SPIGOT-5514: VehicleEntityCollisionEvent triggered by passengers (2020-01-24)  ++* a0e88fb36 - SPIGOT-5536: Material.values() causes legacy data init (2020-01-23)  ++* a81f6ed39 - SPIGOT-5532: Material.values() yields an exception (2020-01-22)  ++* efd6cf55f - Only load legacy support data if something uses it (2020-01-22)  ++* 29737ccbd - SPIGOT-5531: Fix --universe option (2020-01-22)  ++* 8160e299d - Strip ANSI colours from ServerGUI (2020-01-22)  ++* dad61762f - Fix log messages being split across GUI and terminal (2020-01-22)  ++* 3c9a4a3ba - SPIGOT-5529: BiomeGrid uses incorrect indexing (2020-01-22)  ++* 6881a1080 - Update to Minecraft 1.15.2 (2020-01-22)  ++* 5c6b0dc6e - SPIGOT-5526: Call EntityChangeBlockEvent for bees triggering crop growth (2020-01-21)  ++* b91ce1192 - #601: Implement Player#sendExperienceChange (2019-12-23)  ++* 661bebc64 - Remove outdated build delay. (2020-01-19)  ++* 752cf95e3 - SPIGOT-5510: VehicleBlockCollisionEvent returns the wrong block (2020-01-15)  ++* ec4b2b5ef - SPIGOT-5516: Correct EnchantmentTarget values (2020-01-15)  ++* 01334e7dc - #616: Fix exception on entity portal teleport attempt (2020-01-14)  ++* e8cb2f513 - SPIGOT-5252: Nether portal fixes and additions (2020-01-12)  ++* fde78ef39 - SPIGOT-5477: Server not shutting down (2020-01-12)  ++* d208733e7 - SPIGOT-5509: Sleeping player does not eject bed when teleported (2020-01-11)  ++* 99cf10e4c - SPIGOT-5504: cancelling InventoryMoveItemEvent on composter doesn't properly cancel (2020-01-10)  ++* 108b44ca2 - SPIGOT-5506: CustomChunkGenerator is processing Phantoms in the Nether and The End (2020-01-10)  ++* b98e2defc - SPIGOT-5502: Fix command block successcount being set to return value rather than actual count (2020-01-06)  ++* 2fd796458 - SPIGOT-5500: Lectern cannot be replaced using /setblock and other commands (2020-01-06)  ++* c727dc2a8 - Fix checkstyle.xml formatting (2020-01-05)  ++* e7202cd44 - SPIGOT-5496: API to create and manipulate hardcore worlds (2020-01-04)  ++* 9820cd2db - MC-151364, SPIGOT-5494: Feeding dolphin hangs if generate-structures=false (2020-01-03)  ++* 731e819c9 - SPIGOT-5486: Raider CanJoinRaid (2019-12-29)  ++* 4e4a9b200 - SPIGOT-5487: Increase outdated build delay (2019-12-29)  ++* 83af86dba - SPIGOT-5457: Downgrade 'Mismatch in destroy block pos' message to debug (2019-12-25)  ++* d641927fc - SPIGOT-5481: PlayerBedLeaveEvent returns wrong bed location (2019-12-25)  ++* edcb0a4b6 - SPIGOT-5482: Structure Block setUsageMode encounters NullpointerException (2019-12-25)  ++* 82322fe06 - SPIGOT-5426: isSimilar for player heads fails (2019-12-25)  ++* 4b34472ee - SPIGOT-5478: XP not dropping when a player dies (2019-12-24)  ++* 297ff4000 - SPIGOT-5467: Don't play sound or increase honey level if bee leaving hive is cancelled (2019-12-23)  ++* 7d677e7b1 - SPIGOT-5476: Fix trading empty items (2019-12-24)  ++* 8073dbec7 - SPIGOT-5474: Just ignore bugged fireball data (2019-12-23)  ++* 817116de0 - SPIGOT-5413: Add TrustedPlayer API for foxes (2019-12-23)  ++* 062680a82 - SPIGOT-5467: Calm down bees that cannot exit hive (2019-12-23)  ++* 75fac431c - SPIGOT-5472: Spurious warning when using clone command on tile entities (2019-12-23)  ++* 85106731b - SPIGOT-5471: Allow empty title/author for books (2019-12-22)  ++* 2d9db47fb - Add TimeSkipEvent (2019-12-20)  ++* 384225c28 - Add thread name to TerminalConsoleWriterThread (2019-12-21)  ++* 90ef74efb - SPIGOT-794: Add boats to EntityPlaceEvent (2019-12-19)  ++* fb7abcb37 - SPIGOT-5466: Bees still get angry even if damage event cancelled (2019-12-19)  ++* 4499fec56 - SPIGOT-5464: Add BEEHIVE SpawnReason for when a bee leaves a beehive (2019-12-18)  ++* d31f05fbc - SPIGOT-5462: Cancelling EntitySpawnEvent takes Ender Eye from inventory (2019-12-18)  ++* 30a1b6911 - Update to Minecraft 1.15.1 (2019-12-18)  ++* e2790ae2e - Remove outdated build delay. (2019-12-18)  ++* e631456c7 - SPIGOT-5458: Riptide tridents don't lose durability (2019-12-17)  ++* e43416a34 - SPIGOT-5455: Mobs do not ignite due to sun in extra worlds (2019-12-15)  ++* 61d4b0902 - SPIGOT-5428: Better handling of some ItemMeta (2019-12-14)  ++* 16dc5758a - SPIGOT-5449: Fix issue with projectiles (2019-12-13)  ++* fd25653f1 - SPIGOT-5448: Shulker Boxes collapse empty slots when picked up (2019-12-13)  ++* b97d581af - SPIGOT-5443: BEE_NEST BlockState (2019-12-11)  ++* 73698cf88 - SPIGOT-5442: Fix issue with fire charges (2019-12-12)  ++* beff9fb9d - SPIGOT-5437: Fix CustomChunkGenerator.CustomBiomeGrid ignoring the y value for biomes (2019-12-11)  ++* f777640e4 - SPIGOT-5425: Prevent empty/air loot (again?) (2019-12-11)  ++* db0dafb17 - SPIGOT-5422: Add support for 3-dimensional biomes (2019-12-11)  ++* 4633e6c5c - Fix crash with disabled worlds (2019-12-11)  ++* de42aa13f - Update to Minecraft 1.15 (2019-12-11)  ++* 656701746 - SPIGOT-5417: Campfire should implement Directional (2019-12-09)  ++* eeae942e4 - SPIGOT-5416: Block.getDrops gives drops even when tool should not give drops (2019-12-08)  ++* 43183eabc - SPIGOT-5399: spawn-npcs ignored during world generation (2019-12-05)  ++* e9bb2f15a - SPIGOT-5403: isSimilar returns true for different skulls (2019-12-05)  ++* 5c9e72369 - SPIGOT-5409: Remove unnecessary defaulting in CraftMetaBookSigned (2019-12-05)  ++* 821238b64 - SPIGOT-5412: Use SpawnReason.NATURAL for wandering traders and trader llamas (2019-12-04)  ++* eafd74240 - SPIGOT-5405: Use correct damage source for HangingBreakByEntityEvent (2019-11-28)  ++* ccd47a503 - SPIGOT-5395: Call BlockFadeEvent for Scaffolding (2019-11-14)  ++* 56118c676 - Increase outdated build delay to 4 weeks (2019-11-08)  ++* 7554e08e4 - Add UUID support to CraftProfileBanList (2019-10-19)  ++* 3fe374601 - SPIGOT-5378: Fix TileEntity fixer deadlock (2019-10-20)  ++* 12386dd44 - SPIGOT-5375: Add spaces to coordinates from tile fixer (2019-10-20)  ++* 606c19e26 - SPIGOT-5373: Simultaneous left+right click in creative mode does not work (2019-10-19)  ++* 13caf8485 - SPIGOT-5370: Fix Block#rayTrace considering other blocks. (2019-10-18)  ++* e2dd6555e - SPIGOT-5372: Re-add tile entity fixer due to MC-163945 (2019-10-18)  ++* 1e7a197f7 - Fix incorrect inequality in 683bae0670c (2019-10-17)  ++* db98d54df - SPIGOT-5362: Suspicious stews fail isSimilar check (2019-10-14)  ++* d6b3eddf6 - SPIGOT-5355: Double Chests still open after InventoryOpenEvent cancelled (2019-10-09)  ++* 7deb3728e - SPIGOT-5309: Call cancelled EntityDamageEvent when damaging invisible armor stands (2019-10-05)  ++* 46351e178 - SPIGOT-5341: Add Material.isAir (2019-10-06)  ++* 683bae067 - SPIGOT-5342: Lore lost when deserializing items with no version stored (2019-10-06)  ++* c2d120111 - SPIGOT-5353: Expand explosion API by adding source entity (2019-10-05)  ++* a3fdef8c3 - SPIGOT-5331: Add support for Java 13 (2019-09-18)  ++* 6ddeb980c - SPIGOT-5317: Create accessors for player absorption hearts (2019-09-13)  ++* 5d335e968 - SPIGOT-5315: Cannot serialize armor stand ItemMeta (2019-09-11)  ++* 03b145b30 - SPIGOT-5158: Add SuspiciousStewMeta (2019-09-08)  ++* 9aa743049 - SPIGOT-5310: Add Chunk.contains (2019-09-08)  ++* 7ef2b20d0 - SPIGOT-3308: RecipeIterator cannot longer remove recipes (2019-09-07)  ++* 023f438cc - Add API to get/set inhabited time of a Chunk (2019-09-07)  ++* b79a86ede - SPIGOT-5250: Add ChunkSnapshot.contains (2019-09-07)  ++* aa492e552 - SPIGOT-5255: Raid / patrol spawn reasons (2019-09-07)  ++* 763e56013 - SPIGOT-5294: Cancelled EntityPickupItemEvent and PlayerPickupItemEvent alter on-ground stacks (2019-09-02)  ++* 403ac1857 - SPIGOT-5301: BlockIgniteEvent for campfire + arrow (2019-09-02)  ++* 96bc85f0b - SPIGOT-5298: Remove unexplained 0.1 drop chance offset (2019-08-31)  ++* 6ed8a1896 - SPIGOT-5290: Invulnerable and/or Marker armor stand triggers EntityDamageEvent (2019-08-28)  ++* 631eaeb09 - SPIGOT-5297: PlayerBedLeaveEvent.getBed() returns player location (2019-08-30)  ++* 8d4bc5418 - SPIGOT-5293: Sponge behaviour differs from Vanilla (2019-08-28)  ++* e91fd75e1 - SPIGOT-5291: Missing event for ravagers trampling crops (2019-08-28)  ++* cbdd71390 - SPIGOT-5211: Add Raid API (2019-08-12)  ++* edd8fdfbe - SPIGOT-5287: Fix rare CME generating new chunks (2019-08-26)  ++* 3fc97f086 - SPIGOT-5265: FireworkExplodeEvent only fired when rockets explode in air (2019-08-26)  ++* b2bcde89d - SPIGOT-5258: TNT Not Moving Players in Creative Mode (2019-08-24)  ++* 44d675ad8 - SPIGOT-5263: Chests stay open after InventoryOpenEvent cancelled. (2019-08-24)  ++* 2439178ea - SPIGOT-5278: EntityDrowned memory leak (2019-08-24)  ++* 7055c9311 - SPIGOT-5264: Call event for experience orbs losing their target (2019-08-24)  ++* 491411723 - SPIGOT-5282: Improve bucket event API (2019-08-23)  ++* 6bbb3b04e - SPIGOT-5281: Clearer error messages for ChunkSnapshot misuse (2019-08-23)  ++* 2012f1e04 - SPIGOT-5269: Item attribute modifiers don't persist their order (2019-08-16)  ++* 7a806a3a4 - SPIGOT-5270: Call BlockSpreadEvent when bamboo saplings grow (2019-08-16)  ++* 368f4e994 - Increase outdated build delay to 3 weeks (2019-08-10)  ++* 660b6d19a - SPIGOT-5249: Do not add data to empty loot table (2019-08-09)  ++* 54f4e7f95 - SPIGOT-5257: Call EntityBreedEvent for foxes and set the child's spawn reason to BREEDING (2019-08-09)  ++* 1ec1b05e2 - SPIGOT-5245: Unneeded cast to WorldNBTStorage in CraftWorld#getWorldFolder (2019-08-05)  ++* e5e8eec2c - SPIGOT-5241: setAttributeModifiers does not work on untouched stack (2019-08-03)  ++* 803eaa316 - SPIGOT-5231: ShotAtAngle API for Fireworks (2019-08-02)  ++* 7881d2ae1 - SPIGOT-5237: Horses, pigs do not drop their inventory (2019-08-02)  ++* 06efc9ec1 - Don't accept connections until all plugins have enabled (2019-07-30)  ++* da62a66ab - SPIGOT-5225: World handle isn't closed if world is unloaded without saving (2019-07-29)  ++* 104b3831f - SPIGOT-5222: Cannot get Long values from Entity memory (2019-07-29)  ++* f0b3fe435 - SPIGOT-5220: Server CPU usage reaches 100% when stdin is null (2019-07-28)  ++* 3e7b3862c - SPIGOT-5195 (#2): Player loot table does not drop when keepInventory is on (2019-07-26)  ++* c88867e4f - SPIGOT-5208: Reset state on cancelled EntityTransformEvent to prevent event spam (2019-07-26)  ++* f744c09c0 - SPIGOT-5214: setCooldown not working (2019-07-26)  ++* 860b35401 - SPIGOT-5204: Typo in deprecated enchantment name (2019-07-24)  ++* 7f33c6a2f - SPIGOT-5196: Restore previous version behaviour regarding cancelled BlockBreakEvent (2019-07-23)  ++* 6a5fc9028 - Improve diff in EntityHanging (2019-07-23)  ++* c98d61bfc - SPIGOT-4712: Allow spawning of upwards or downwards facing item frames (2019-07-23)  ++* db9714772 - SPIGOT-5199: Fix NPE if setting the book of the ItemMeta of a lectern (2019-07-22)  ++* b0ef3996e - SPIGOT-4679 Fix black lines after book paragraphs (2019-07-22)  ++* 1215188ff - SPIGOT-5180: Add Villager#sleep() and #wakeup() methods (2019-07-22)  ++* c03b2befb - SPIGOT-4975: NPE on WorldGenStronghold When Using Multiple Worlds (2019-07-22)  ++* 65ea162ce - Ensure Bukkit data pack is always up to date (2019-07-22)  ++* 0b107b8de - MC-157395, SPIGOT-5193: Small armor stands do not drop loot (2019-07-22)  ++* 6da0abca0 - SPIGOT-5195: Player loot table does not drop when keepInventory is on (2019-07-22)  ++* 8b09d9831 - SPIGOT-5190: Superfluous EntityCombustEvent called when using fire aspect sword (2019-07-21)  ++* 9c887d4d8 - SPIGOT-5188: Player loot table drops an additional duplicate loot for each subsequent death (2019-07-20)  ++* e73aabd66 - Update to Minecraft 1.14.4 (2019-07-20)  ++* a77ba00b6 - Remove outdated build delay. (2019-07-20)  ++* eb2e65787 - SPIGOT-5116: Fix concurrent modification exception inside ChunkMapDistance (2019-07-13)  ++* 989f9b3da - SPIGOT-4849: Fix server crash when accessing chunks during chunk load/unload/populate events (2019-07-13)  ++* f554183c3 - SPIGOT-5171: Don't fire PlayerTeleportEvent if not actually moving (2019-07-16)  ++* 2349feb84 - SPIGOT-5163: Cancelling PlayerBucketFillEvent visually removes the targeted block (2019-07-13)  ++* 5f8893885 - Tweak build expiration to 7 days (2019-07-10)  ++* 572c02b06 - MC-155077, SPIGOT-5113: EntityTracker desync (2019-07-10)  ++* 7ad3a1f46 - SPIGOT-5146: BlockDataMeta does not work (2019-07-09)  ++* 608609835 - SPIGOT-5155: Setting EntityExplodeEvent yield to 0 still causes blocks to drop (2019-07-09)  ++* 087a2cf4d - Print number of force loaded chunks per plugin in crash reports (2019-07-08)  ++* 07b5b06d2 - Add Plugin Chunk Ticket API (2019-07-08)  ++* 7ffb2a273 - SPIGOT-5149: resetRecipes does nothing (2019-07-07)  ++* a2275f19e - SPIGOT-5141: World.generateTree() causes ClassCastException with huge mushrooms (2019-07-06)  ++* 31d4a777c - SPIGOT-5142: Ignore invalid firework effects (2019-07-06)  ++* fca41573a - SPIGOT-5136: EntityPortalEvent getting called on interdimensional entity teleports (2019-07-05)  ++* 604c8bf07 - SPIGOT-3102: Add EXPLOSION SpawnReason (2019-07-03)  ++* 375969a67 - Re-add chunk GC for plugin chunk loads (2019-07-03)  ++* 581513686 - SPIGOT-5123: Snapshot tile entities can end up with a non-null world (2019-07-03)  ++* 491c84821 - SPIGOT-5130: PersistentDataContainer not removing values on TileEntities (2019-07-03)  ++* bf3293348 - SPIGOT-5133: Throwing items into secondary end world portal causes crash (2019-07-02)  ++* a0e47473c - SPIGOT-5121: Method to set PierceLevel of arrows (2019-06-30)  ++* 7a0f61a6e - SPIGOT-5122: Skip world#notify if sign has no world. (2019-06-29)  ++* bf0ea33de - SPIGOT-5105: The EntityTag nbt tag disappears from preset armor_stand items. (2019-06-29)  ++* 63cde5caa - SPIGOT-5106: Config option to prevent plugins with incompatible API's from loading (2019-06-29)  ++* c69979247 - SPIGOT-5110: Zombies converting to drowned too quickly (2019-06-28)  ++* 0c5756033 - SPIGOT-5101: Raids crash (2019-06-28)  ++* e8b39d430 - SPIGOT-5103: World.save does not save gamerules (2019-06-25)  ++* 3164e5312 - Correct pom.xml version (2019-06-25)  ++* f1f33559f - Update to Minecraft 1.14.3 (2019-06-25)  ++* 8a3d3f498 - SPIGOT-5098: Add a method to allow colored sign changes (2019-06-22)  ++* 533290e29 - SPIGOT-5100: Console warning from pig zombie targeting (2019-06-23)  ++* 6dde4b9fd - SPIGOT-5094: Allow opening merchant for wandering traders and hide the xp bar for custom merchants (2019-06-21)  ++* 9af900778 - SPIGOT-5097: Bukkit.clearRecipes() no longer working (2019-06-22)  ++* 38fa220f6 - Fix setting game rules via the API (2019-06-21)  ++* fe3930ce0 - Update to Minecraft 1.14.3-pre4 (2019-06-21)  ++* da071ec5a - Remove outdated build delay. (2019-06-21)  ++* efd8a2b50 - SPIGOT-5089: UnsupportedOperationException on setting villager memory to null (2019-06-19)  ++* 8003ced58 - SPIGOT-5061: Add explode and ignite methods to Creeper (2019-06-14)  ++* f2757f95b - SPIGOT-5071: Player loot tables not triggered (2019-06-16)  ++* f42422267 - Optimize getEntitiesByClasses slightly (2019-06-16)  ++* e81013d78 - SPIGOT-5072: Process phantom, cat and patrol spawning in CustomChunkGenerator (2019-06-16)  ++* 30a633798 - SPIGOT-5010: World#getEntitiesByClass/es also return entities in border chunks. (2019-06-15)  ++* 43431ba65 - SPIGOT-5034: FoodLevelChangeEvent add getItem method (2019-06-14)  ++* 4090d01f6 - SPIGOT-5047: Correct slot types for 1.14 inventories (2019-06-13)  ++* e8c083621 - SPIGOT-5046: World#getLoadedChunks returning inaccessible cached chunks. (2019-06-12)  ++* d445af3b1 - SPIGOT-5067: Add item meta for 1.14 spawn eggs (2019-06-13)  ++* 9e95da121 - SPIGOT-5052: PlayerPortalEvent not called when nether is disabled (2019-06-12)  ++* 28ea3fd10 - SPIGOT-5062: end_portal on an non-default end world crashes the server (2019-06-12)  ++* 4a07dc69d - SPIGOT-5058: ClassCastException when getting InventoryHolder of lectern when it's destroyed (2019-06-12)  ++* 411609dc8 - SPIGOT-5053: Initialize beacon with stored levels where available (2019-06-10)  ++* b1c5fd681 - SPIGOT-5054: Prevent issue with invalid hanging entities (2019-06-10)  ++* 0309d17dc - Rebuild patches (2019-06-09)  ++* 649921e5b - Add Player#openBook(ItemStack) method (2019-06-06)  ++* b7db6fba1 - SPIGOT-2000: Picking up items to shield slot working inconsistently when inventory is full (2019-06-06)  ++* 7cc7719ff - SPIGOT-5037: Player.openMerchant does not show merchant level (2019-06-07)  ++* 123117bd3 - SPIGOT-5038: Inventory.getHolder returns null for wandering traders (2019-06-07)  ++* 17543ecfd - SPIGOT-5035: Error Using Virtual Merchant GUI (2019-06-06)  ++* 0fc6922bf - SPIGOT-5028: Villager#setVillagerExperience() doesn't work (2019-06-06)  ++* bdbdbe445 - SPIGOT-5024: Fox error - Unknown target reason (2019-06-06)  ++* 043d31deb - SPIGOT-5015: Players in spectator mode prevent block placement and block projectiles (2019-06-02)  ++* fa7171935 - Make bukkitEntity private to prevent incorrect usage (2019-06-02)  ++* b7fea4277 - SPIGOT-5010: World.getEntities returns entities in border chunks (2019-05-31)  ++* 455023c4b - Show incorrect size passed into createInventory (2019-05-29)  ++* ba575a5a4 - SPIGOT-4992: Various villager issues due to broken mapping (2019-05-28)  ++* cb3d14c5a - Update to Minecraft 1.14.2 (2019-05-28)  ++* fcb9f90bf - SPIGOT-4946: Add VillagerCareerChangeEvent (2019-05-25)  ++* a4a2f6794 - SPIGOT-4987: Shulkerbox does not save empty slots (2019-05-27)  ++* 17da34209 - Fix reading custom persistent entity data (2019-05-25)  ++* 837833573 - SPIGOT-4980: Shields will not be put on cooldown when hit with an axe (2019-05-25)  ++* 8d0f37228 - SPIGOT-4752: Fixed inconsistency between isChunkLoaded and chunk load/unload events (2019-05-16)  ++* 3f9f31c3c - SPIGOT-4982: Armor disappearing while breaking the armor stand (2019-05-25)  ++* c45c0a983 - SPIGOT-4972: Cannot add contextual data to loot table API (2019-05-23)  ++* 342194e39 - SPIGOT-4970: PlayerTeleportEvent event.setTo() has no effect on portal teleports (2019-05-21)  ++* 6984fc4f8 - SPIGOT-4968: Jukebox.setPlaying(null) causes error (2019-05-21)  ++* 0e4ca96e4 - SPIGOT-4966: Provide access to Entity in PortalCreateEvent (2019-05-21)  ++* 49e15b4d9 - SPIGOT-4964: EntityPickupItemEvent for pandas (2019-05-20)  ++* de9b85b8a - SPIGOT-4925: Uppercase world names no longer supported (2019-05-20)  ++* c5e09ceaa - SPIGOT-4961: Cannot open various inventories (2019-05-20)  ++* b114affb9 - SPIGOT-4958: API to set map trackingPosition (2019-05-20)  ++* 401432b99 - SPIGOT-4962: Bubble column blocks not classified as liquid (2019-05-20)  ++* f498aabe4 - SPIGOT-4898: Call EntityChangeBlockEvent / EntityPickupItemEvent for foxes (2019-05-20)  ++* eb99127a3 - SPIGOT-4833: Allow access to LivingEntity memories (2019-05-19)  ++* d06991d96 - SPIGOT-4953: Crafting table inventory returns player location, not block location (2019-05-19)  ++* 585b2ebdd - Tweak thresholds for can't keep up message (2019-05-19)  ++* 91ada5c2b - SPIGOT-4956: EntityTameEvent not triggered when taming a Cat (2019-05-19)  ++* 9bda41345 - SPIGOT-4943: Zombie villager conversion player API. (2019-05-17)  ++* 5a0270717 - SPIGOT-4947: Allow setting the content on a lectern (2019-05-17)  ++* 09d00e9f9 - SPIGOT-4938: Call EntityPickupItemEvent for dolphins (2019-05-17)  ++* a278e4453 - SPIGOT-4948: Lectern.getInventory should return a LecternInventory (2019-05-17)  ++* 02b466ccc - SPIGOT-4940: Fletcher villager gifts sometimes crash server (2019-05-16)  ++* f69095731 - SPIGOT-4935: Lore deserializes incorrectly from previous versions (2019-05-15)  ++* dd99c5bb4 - SPIGOT-4929: Beacon inventory getType() returns CHEST (2019-05-14)  ++* 89c52b7b0 - Update to Minecraft 1.14.1 (2019-05-14)  ++* 1fee35bef - Remove outdated build delay. (2019-05-14)  ++* 907de3f4c - SPIGOT-4921: Preserve entity compat with Vanilla (2019-05-13)  ++* 58db40301 - SPIGOT-4916: Fix loading legacy structure data (2019-05-12)  ++* a46ef53b7 - Load custom worlds from correct location (2019-05-12)  ++* 21dbe8ab2 - SPIGOT-4911: Cannot add firework rocket as charged projectile in crossbow (2019-05-12)  ++* 8ad02cd9c - SPIGOT-4900: Rearchitect multiworld support for better compat with new villager AI (2019-05-12)  ++* 8879c3148 - SPIGOT-4893: Don't reset angry state of wolves without target. (2019-05-08)  ++* 5c0d3b25e - SPIGOT-4889: Add PlayerTakeLecternBookEvent (2019-05-07)  ++* 7d29eb5e5 - SPIGOT-4899: Horse inventory title not set (2019-05-10)  ++* 6ceffb0d2 - SPIGOT-4895: Bed doesn't explode in Nether and The End (2019-05-09)  ++* ee8818473 - SPIGOT-4888: setSleepingIgnored resets the night even when there is no one in a bed (2019-05-08)  ++* 15e02b405 - SPIGOT-4890: EntityDeathEvent fires twice when breaking an armor stand in survival mode (2019-05-08)  ++* b38a3c338 - Add BlockShearEntityEvent for Dispensers shearing Sheep (2019-05-07)  ++* 70ebefca6 - SPIGOT-4891: LecternInventory.getType() should return InventoryType.LECTERN (2019-05-07)  ++* 0036d1b75 - SPIGOT-4887: Villager level minimum is 1 (2019-05-07)  ++* d20328368 - SPIGOT-4882: EntityExplodeEvent appears to fire every tick because of enderdragon (2019-05-07)  ++* 524facd24 - SPIGOT-4881: Worldborder for the End and Nether switch to default after restart (2019-05-07)  ++* 3057b72c7 - SPIGOT-4880: Potion effects with unknown names. (2019-05-07)  ++* fe1199caa - SPIGOT-4874: Use empty loot context (2019-05-06)  ++* 0d76f8658 - SPIGOT-4872: LootTables missing a few loot tables (2019-05-06)  ++* 40484a5fa - SPIGOT-4875: PlayerChangedWorldEvent does not fire on teleporting via portals (2019-05-06)  ++* 5f89a0e3c - SPIGOT-4877: No end platform generated (2019-05-06)  ++* 84400e66b - SPIGOT-4871: Manually opened double chest doesn't have close animation (2019-05-05)  ++* 8deeeec0a - SPIGOT-4870: Server crashes while charging crossbow (2019-05-05)  ++* c441dba81 - SPIGOT-4834: API for Villager levels and experience (2019-05-05)  ++* 78616513e - Rearchitect PortalCreateEvent to provide more information about the portal (2019-05-05)  ++* e8c929356 - SPIGOT-248: PortalCreateEvent not fired when exit portal is created automatically. (2019-05-04)  ++* 3be0bc1c5 - SPIGOT-4840: CartographyInventory not returned for InventoryClickEvent.getClickedInventory on result slot (2019-05-05)  ++* 8ad64c4f9 - SPIGOT-4867: Incorrect dimension ID for nether portal teleports (2019-05-05)  ++* 4e60dbe7e - SPIGOT-4868: Server deadlock on /stop command (2019-05-05)  ++* 68e72f630 - SPIGOT-4863: --eraseCache doesn't work (2019-05-04)  ++* df82e4f08 - SPIGOT-4860: Cancelling InventoryOpenEvent on MerchantInventory prevents re-opening (2019-05-04)  ++* 09a453aed - SPIGOT-4835: Manually opened chest doesn't have close animation (2019-05-03)  ++* 84c2f4d1a - SPIGOT-4842: Dummy recipes should not give AIR as result type (2019-05-03)  ++* 8ddb94da6 - SPIGOT-4831: setKeepSpawnInMemory to false does not work (2019-05-02)  ++* fac0eca52 - SPIGOT-4838: BlockDispenseEvent not called when shears dispensed from dispenser (2019-05-01)  ++* a58432012 - SPIGOT-4836: Breaking barrier block causes error (2019-05-02)  ++* 1fa9a8151 - SPIGOT-4802: Add CrossbowMeta (2019-05-01)  ++* d5c2e3ccb - SPIGOT-4714: Broadcasts can no longer be done from secondary threads (2019-05-01)  ++* deeecc7f0 - SPIGOT-4820: Villager Type API (2019-05-01)  ++* 3dcbf6b85 - Regular arrow spawn method should not have changed type (2019-05-01)  ++* 327c30812 - SPIGOT-4822: Existing world fails to load (2019-05-01)  ++* 4fa2ad7c6 - SPIGOT-4825: Clearly error on asynchronous tile access (2019-05-01)  ++* 4f420d827 - Revert "SPIGOT-4825: Clearly error on asynchronous tile access" (2019-05-01)  ++* 5a37f4305 - SPIGOT-4825: Clearly error on asynchronous tile access (2019-05-01)  ++* bbd66d204 - SPIGOT-4823: Crash picking up arrows (2019-05-01)  ++* dadc53921 - World#spawnArrow should return an AbstractArrow now (2019-04-30)  ++* 29b90d241 - SPIGOT-4819: Continue refactoring of Arrow-related APIs (2019-04-30)  ++* 9926d780c - SPIGOT-4816: Editing book causes glitchy behaviour (2019-04-30)  ++* d7d28b124 - SPIGOT-4818: Unit test banner patterns (2019-04-30)  ++* ea5d868cf - SPIGOT-4810: Call EntityChangeBlockEvent for Ravager destroying leaves (2019-04-29)  ++* 5193f762a - SPIGOT-4803: Fox related APIs (2019-04-28)  ++* ba2e5e7c7 - Add TradeSelectEvent (2019-04-28)  ++* e3df3d5cd - Add Override annotations where appropriate (2019-04-28)  ++* 3331dade5 - SPIGOT-4790: Secondary world data not saved (2019-04-28)  ++* f4f32958a - SPIGOT-4795: EntityPoseChangeEvent called every tick (2019-04-28)  ++* 5736cdc55 - Intermittent hang on /stop (2019-04-27)  ++* a875ee416 - Fix loading secondary worlds (2019-04-27)  ++* 5e0b63c1a - SPIGOT-4785: Experience etc lost returning from end (2019-04-27)  ++* c9fa596b9 - Add some missing goal targets (2019-04-27)  ++* 1fafd8f3f - Allow direct opening of another player's inventory (2019-04-27)  ++* 884028b23 - SPIGOT-4784: Collar colour API for Cats (2019-04-27)  ++* 6bb1f087e - Loosen restrictions on inventory sizing (2019-04-27)  ++* 6606cd88d - SPIGOT-4753: Add Pose API (2019-04-27)  ++* 86f149ff7 - SPIGOT-4783: CreatureSpawnEvent causes crash when getting block type (2019-04-27)  ++* 1949f5835 - SPIGOT-4778: Bell Attachment is missing (2019-04-27)  ++* 3a8616779 - Remove redundant cast (2019-04-27)  ++* 401641ea6 - SPIGOT-4774: Entities don't get marked 'invalid' after being removed (2019-04-27)  ++* 6de3aa179 - SPIGOT-4771: PlayerPortalEvent does not have correct cause when entering nether (2019-04-26)  ++* 112c84e1e - SPIGOT-4769: PlayerPortalEvent does not have correct cause when entering end (2019-04-26)  ++* f4dc98074 - SPIGOT-4767: Fire from lava persists after respawn (2019-04-26)  ++* f5285abf2 - SPIGOT-4768: ChunkUnloadEvent not called (2019-04-26)  ++* 735f4ea33 - SPIGOT-4760: BlockSpreadEvent for Bamboo growth (2019-04-26)  ++* 4b9b0f4d5 - Add variant API to MushroomCow (2019-04-26)  ++* abab38526 - SPIGOT-4765: WeatherChangeEvent occurs every tick (2019-04-26)  ++* 8f2a45bf3 - Clean diff in PlayerChunkMap (2019-04-26)  ++* e2bbf62bf - Don't concurrently execute ChunkGenerators by default (2019-04-26)  ++* b9a2a7410 - SPIGOT-4757: Server hangs after teleporting (2019-04-26)  ++* 3e700e04e - SPIGOT-4755: Client freeze when joining world (2019-04-26)  ++* a9ed33464 - SPIGOT-4758: --server-port argument does not work (2019-04-26)  ++* 28adbcff5 - SPIGOT-4751: Update mappings version (2019-04-26)  ++* e879c447b - SPIGOT-4737: Bukkit.createWorld causes the server to crash if run after startup (2019-04-25)  ++* aed901654 - SPIGOT-4744: Cannot spawn Cat entity (2019-04-25)  ++* 76a855c8c - SPIGOT-4742: Make Sign Colorable (2019-04-25)  ++* 42f88f72b - Replace ItemTag API with new API that also expands to Tiles and Entities (2019-04-25)  ++* 724ec10f3 - SPIGOT-4741: InventoryHolder no longer returns DoubleChest (2019-04-25)  ++* ed20842bc - Update to Minecraft 1.14 (2019-04-25)  ++* 2cc992e31 - Clean diff slightly in MinecraftServer (2019-04-25)  ++* 58c5c617d - SPIGOT-4736: Serialized ItemStack Lore Doesn't Deserialize (2019-04-25)  ++* c12460643 - SPIGOT-4734: Sign placement fails when looking at grass (2019-04-25)  ++* de6cdd036 - SPIGOT-4735: ProjectileHitEvent Fires Immediately (2019-04-25)  ++* 14df075f8 - SPIGOT-4728: Fix clicking on custom ender chests (2019-04-24)  ++* 331c43929 - SPIGOT-4720: Remove now unnecessary tile fixer (2019-04-24)  ++* 3ddaf665e - SPIGOT-4722: Cannot get title of player's inventory (2019-04-24)  ++* 6d504c2d4 - SPIGOT-4725: Virtual Merchant GUI crashes server (2019-04-24)  ++* c8d1e9420 - SPIGOT-4718: Fix creating odd inventory sizes (2019-04-24)  ++* 005e1bbc1 - SPIGOT-4726: Lore not being applied to new items (2019-04-24)  ++* bfec7c79c - Apply outdated build delay (2019-04-24)  ++* 93ad381a6 - SPIGOT-4727: Fix CraftEvil for legacy plugins (2019-04-24)  ++* 364b6fbb7 - Fix weird test import in EnderDragonPhaseTest (2019-04-23)  ++* c08813247 - Fix checkstyle on Windows (2019-04-23)  ++* c4af066cb - Move execution phase of checkstyle (2019-04-23)  ++* 0ec9b61de - SPIGOT-4717: Fix adding recipes after clearRecipes is called (2019-04-23)  ++* 5fea79039 - Apply import ordering rules to CraftBukkit classes (2019-04-23)  ++* 48c4c5ca8 - Begin implementation of CheckStyle style checking (2019-04-23)  ++* a2d787f6e - Update to Minecraft 1.14-pre5 (2019-04-23)  ++* a46fdbc62 - Remove outdated build delay. (2019-04-22)  ++* 3697519ba - SPIGOT-4708: Fix ExactChoice recipes neglecting material (2019-04-21)  ++* 9ead70095 - SPIGOT-4677: Add minecraft.admin.command_feedback permission (2019-04-20)  ++* c3749a235 - Remove the Damage tag from items when it is 0. (2019-04-18)  ++* f74c7b957 - SPIGOT-4706: Can't interact with active item (2019-04-20)  ++* 494eef45d - Mention requirement of JIRA ticket for bug fixes (2019-04-18)  ++* 51d62dece - SPIGOT-4702: Exception when middle clicking certain slots (2019-04-16)  ++* be557e69f - SPIGOT-4700: Add PlayerFishEvent.State.REEL_IN (2019-04-15)  ++* 7c395d429 - SPIGOT-4681: Note about additional world creation on STARTUP (2019-04-08)  ++* 812f66aa9 - SPIGOT-4684: Update persistence of converting zombie villagers (2019-04-08)  ++* f40143ef5 - SPIGOT-4691: Fix custom world generator when placing tiles (2019-04-05)  ++* 0e1cea5a4 - Added Entity#setRotation. (2019-03-26)  ++* 0bf75bbde - SPIGOT-4686: Enchantment ordering nondeterministic (2019-04-02)  ++* 4c8327f72 - SPIGOT-4673: EntitySpawnEvent should not be called for players (2019-03-26)  ++* 51100db82 - SPIGOT-4678: Fix placing signs in certain circumstances (2019-03-24)  ++* d65a2576e - SPIGOT-4674: Allow spawning hanging on top/bottom of block (2019-03-22)  ++* d3ed15162 - Fix dangerously threaded beacons (2019-03-17)  ++* 217a293d3 - Don't relocate joptsimple to allow --help to work. (2019-03-17)  ++* 1be05a214 - Prepare for imminent Java 12 release (2019-03-17)  ++* a49270b28 - Mappings Update (2019-03-17)  ++* 5259d80c4 - SPIGOT-4669: Fix PlayerTeleportEvent coordinates for relative teleports (2019-03-16)  ++* 8d8475fc4 - SPIGOT-4666: Force parameter in HumanEntity#sleep (2019-03-13)  ++* 8b1588e2f - Fix ExplosionPrimeEvent#setFire not working with EnderCrystals (2019-03-09)  ++* 39a287b7d - Don't ignore newlines in PlayerListHeader/Footer (2019-03-10)  ++* 77ca7ca07 - Rebuild patches (2019-03-06)  ++* 73597ed86 - Improve damage handling of dead entities (2019-03-06)  ++* 1dbe87c8c - SPIGOT-4646: Test + fix InventoryWrapper.getContents (2019-03-05)  ++* faa622695 - SPIGOT-4650: Charging API for Vex (2019-03-05)  ++* f102d8829 - SPIGOT-4647: Properly cancel VehicleDamageEvent (2019-03-05)  ++* ec17d07de - Use getBukkitEntity for ExplosionPrimeEvent instead of creating new one (2019-03-04)  ++* 0f708cbf5 - Add love mode API to Animals (2019-02-27)  ++* 40cbae42b - SPIGOT-4638: Give last registered recipe priority (2019-02-26)  ++* cb98c6eae - Fix line endings in CraftDefaultPermissions (2019-02-25)  ++* 822ff7293 - SPIGOT-4637: Add source block to BlockPhysicsEvent. (2019-02-24)  ++* acbba8bad - SPIGOT-4635: Restore shield damage sound (2019-02-25)  ++* 4e4cde481 - Fix experience reward flag gets lost during MerchantRecipe conversion (2019-02-22)  ++* 6430d9c0b - SPIGOT-4632: BlockState location is not fixed (2019-02-21)  ++* 14cd1688d - Fix CraftInventoryMerchant#getSelectedRecipe if there is no active merchant recipe. (2019-02-21)  ++* c24abab78 - Load custom permissions after default permissions. (2019-02-17)  ++* bc99dfe89 - Make tags Keyed (2019-02-17)  ++* 6fce004fa - Added a method to get a list of tags (2019-02-17)  ++* 51c118b1d - SPIGOT-4619: Incorrect packet order for villager inventories (2019-02-13)  ++* d158f2e99 - Fix EntityPickupItemEvent getRemaining / PlayerInventory#canHold (2019-02-12)  ++* a2dd0e303 - SPIGOT-4615: Missing target event for withers (2019-02-10)  ++* b26fb3742 - Update outdated spigot link (2019-02-09)  ++* 2b1940ae2 - Make AreaEffectCloudApplyEvent cancellable (2019-02-07)  ++* c7ba97906 - Fix incorrect method descriptor in previous commit (2019-02-06)  ++* 3d19f011e - SPIGOT-4608: Improve quality of MapMeta APIs (2019-02-05)  ++* 2ced02339 - Don't handle sync packets for kicked players (2019-02-03)  ++* d5e96882a - SPIGOT-4602: Cache reflection in decompile error workaround (2019-02-02)  ++* ad6070dff - SPIGOT-4193: API for selecting entities by strings (2019-01-31)  ++* ed274c517 - SPIGOT-4597: Make BlockDropItemEvent use a list (2019-01-30)  ++* 1734f378f - SPIGOT-4598: Shift click on custom workbench inventory causes crash (2019-01-30)  ++* a65b73ad9 - Add note about Maven repository usage to pom.xml (2019-01-29)  ++* 2aba349f1 - Need to update item in hand if fish bucket pickup cancelled (2019-01-27)  ++* b634e059e - SPIGOT-4591: Must mark itemstacks as dirty in case the handle itself changed (2019-01-25)  ++* 1748af891 - Consistent multiple choice APIs for RecipeChoice. (2019-01-25)  ++* 13f71402e - Update compiler (2019-01-23)  ++* 61c762f44 - Add CookTimeTotal API to Furnace (2019-01-23)  ++* 1a64d4ae2 - SPIGOT-4587: Enforce at least one valid choice for FurnaceRecipe (2019-01-21)  ++* 7fc66b28d - Fix minecraft.command.selector permission (2019-01-18)  ++* 47b06d5b4 - SPIGOT-4584: Call events for hatching turtle eggs (2019-01-17)  ++* 0c715b32b - SPIGOT-4579: Shulker boxes not dropping in creative (2019-01-14)  ++* 50fbc3f19 - SPIGOT-4576: Fix attributes in itemstack internal data being lost (2019-01-14)  ++* 8059a937e - SPIGOT-4577: Fix loss of int/double custom tags when serialized to yaml (2019-01-13)  ++* 07e504c37 - Clarify exception thrown when setting drop chance for player inventory (2019-01-13)  ++* 98b862ad8 - Fix duplicate iron golem add (2019-01-11)  ++* 843cee65f - Fix a bunch of duplicate EntityCombustEvent calls (2019-01-11)  ++* 438556243 - SPIGOT-4571: EntityCombustEvent not firing for phantoms (2019-01-09)  ++* 9dc56581e - SPIGOT-4570: Add FluidLevelChangeEvent (2019-01-08)  ++* b15abb12c - SPIGOT-4566: Don't special case NETHER_PORTAL teleport reason from plugins (2019-01-08)  ++* f17d591cc - Fix BlockDropItemEvent for Skulls and Shulker Boxes (2019-01-07)  ++* 5932f8a7d - Load default world spawn areas in consistent order (2019-01-05)  ++* 3a5dc78f4 - Fix confusing migration message appearing on fresh server (2019-01-05)  ++* 516a408f4 - Remove redundant CraftBukkit change for secondary world data (2019-01-05)  ++* 73a2c749b - Process conversation input on the main thread. (2019-01-05)  ++* 100c3f07e - Cap Objective Score Length (2019-01-05)  ++* 6e842759c - Cross World Entity Teleportation (2019-01-05)  ++* 7deba1c60 - Check for blank OfflinePlayer Names (2019-01-05)  ++* f2746a5eb - Descriptive kick reasons instead of Nope! (2019-01-05)  ++* b02123083 - Cap Channel Registrations (2019-01-05)  ++* a610dcd82 - Identify CraftScheduler threads with useful names (2019-01-05)  ++* 7560d3b5a - Skip tests on default builds (2019-01-04)  ++* d0a9130d2 - SPIGOT-4563: Fix regenerating chunks saved to disk already (2019-01-03)  ++* 917411fd8 - Remove redundant BlockPosition creation from sleep API (2019-01-02)  ++* 756c38d1e - Add RecipeChoice.ExactChoice API for NBT matches on ingredients (2019-01-02)  ++* 8e65d8df6 - SPIGOT-4560: Add HumanEntity.sleep and related APIs (2019-01-02)  ++* a83828623 - SPIGOT-4562: reducedDebugInfo not updated on world change (2019-01-02)  ++* c4a67eed9 - SPIGOT-4556: Fix plugins closing inventory during drop events (2018-12-31)  ++* 5be2ddcbd - Replace version constants with methods to prevent compiler inlining (2018-12-30)  ++* a5b9c7b3e - Use API method to create offset command completions (2018-12-28)  ++* 2bc7d1df2 - SPIGOT-3747: Add API for force loaded chunks (2018-12-27)  ++* a408f3751 - SPIGOT-3538: Add getHitBlockFace for ProjectileHitEvent (2018-12-27)  ++* b54b9409e - SPIGOT-2864: Make Arrow / Item setTicksLived behave like FallingBlock (2018-12-27)  ++* 79ded7a8c - SPIGOT-1811: Death message not shown on respawn screen (2018-12-27)  ++* b4a4f15db - SPIGOT-943: InventoryCloseEvent called on death regardless of open inventory (2018-12-27)  ++* 0afed5927 - SPIGOT-794: Call EntityPlaceEvent for Minecart placement (2018-12-27)  ++* 2b2d084ac - Add InventoryView#getSlotType (2018-12-26)  ++* 01a9959aa - Do not use deprecated ItemSpawnEvent constructor (2018-12-26)  ++* 9642498d2 - SPIGOT-4547: Call EntitySpawnEvent as general spawn fallback event (2018-12-26)  ++* 963f4a5fc - Add PlayerItemDamageEvent (2018-12-26)  ++* 63db04459 - Add API to get / set base arrow damage (2018-12-26)  ++* 531c25d73 - Add CraftMagicNumbers.MAPPINGS_VERSION for use by NMS plugins (2018-12-26)  ++* d05c8b148 - Mappings Update (2018-12-26)  ++* bd36e200d - SPIGOT-4551: Ignore invalid attribute modifier slots (2018-12-25)  ++* dff66dfcc - Reduce copying of positions from block states (2018-12-22)  ++* 91cae6efb - SPIGOT-4387: Durability looping from cancelled BlockPlaceEvent (2018-12-22)  ++* 24c5e68c5 - SPIGOT-4493: Allow burnt out furnaces to remain lit like Vanilla whilst retaining SPIGOT-844 API (2018-12-22)  ++* bc943daf9 - Fix Jukebox API not synchronizing playing data with state (2018-12-22)  ++* fe89a8c1b - SPIGOT-4503: Add API to insert complete ItemStack into Jukebox (2018-12-22)  ++* fc1024944 - Make CraftBlockState use BlockPosition (2018-12-22)  ++* 89ab48872 - SPIGOT-4543: Jukebox playing calls should not use legacy data (2018-12-22)  ++* 6ff5a64c2 - SPIGOT-4541: Cancelled bucket events require inventory update (2018-12-22)  ++* 1b982fd67 - Tweak Block.getTemperature to return actual block temperature (2018-12-19)  ++* f55c81918 - SPIGOT-2151: Add support for getting simple bounding box of a block (2018-12-17)  ++* 4b843638e - Add BlockData#getAsString(boolean) to hide unspecified states (2018-12-16)  ++* bb6f384a8 - SPIGOT-4534: Only call event for new chunks (2018-12-17)  ++* 38cf676e3 - SPIGOT-4534: CreatureSpawnEvent not being called for CHUNK_GEN (2018-12-17)  ++* b446cb5d7 - SPIGOT-4527: Fix sponges with waterlogged blocks (2018-12-13)  ++* 6ec8ea5cf - SPIGOT-4526: Add conversion time API for Zombie & subclasses (2018-12-13)  ++* c64fe5080 - Mappings Update (2018-12-13)  ++* a3c2ec031 - Fix missing ServerListPingEvent call for legacy pings (2018-12-12)  ++* 7fa173e6d - Remove unnecessary line in BlockMushroom (2018-12-10)  ++* cc1e3497d - Add PlayerSpawned API for Endermites (2018-12-10)  ++* 068dab5be - Enable optional source JAR shading via profile shadeSourcesJar (2018-12-05)  ++* ad7b00b76 - Use ImmutableList rather than AbstractList for CraftMetaBook (2018-12-05)  ++* 5f5a6767e - Fix setRecipes(List) not setting Knowledge Book recipes. (2018-12-05)  ++* aa36c8417 - Mappings Update (2018-12-06)  ++* 20fc5bea2 - Add list of entities to EntityTransformEvent & move die calls (2018-12-05)  ++* 38e4c013b - SPIGOT-4347: Add API to allow storing arbitrary values on ItemStacks (2018-12-01)  ++* a4c555b6b - Add Vanilla help to default permissions (2018-12-03)  ++* 6a398ac44 - SPIGOT-4511: Trident doesn't lose durability (2018-12-01)  ++* 282dad196 - Tweak outdated windows (2018-11-28)  ++* ee6684bba - SPIGOT-4507: BlockRedstoneEvent current flipped for levers (2018-11-28)  ++* 97b0057ad - SPIGOT-4500: callSyncMethod broken (2018-11-24)  ++* 8cd538e66 - SPIGOT-4498: Crash on startup (2018-11-23)  ++* b4ee04baa - SPIGOT-4496: Undeprecate MapView.getId and make int (2018-11-23)  ++* ec937d0e0 - SPIGOT-4472: Add Consumer scheduler methods (2018-11-23)  ++* f489f0f74 - SPIGOT-4494: Remove fix for SPIGOT-3864, better handled by SPIGOT-3879 fix (2018-11-20)  ++* e4183e706 - SPIGOT-4491: Fix InventoryMoveItemEvent causing repeated events (2018-11-19)  ++* 1cac9d4fc - Add Player to BlockCanBuildEvent (2018-11-18)  ++* b1d149cfd - SPIGOT-4489: NOTE_BLOCK incorrectly has BlockStateMeta (2018-11-16)  ++* c2035aa1d - Add some missing CreatureSpawnEvent.SpawnReason calls (2018-11-14)  ++* d2c422f13 - SPIGOT-4339: Add EntityTransformEvent (2018-11-14)  ++* 17ff1e046 - SPIGOT-4483: Missing EntityInteractEvent call for zombies on eggs (2018-11-12)  ++* 3a9118280 - SPIGOT-4477: Arrows only firing direction of boat (2018-11-10)  ++* 1663a63de - SPIGOT-4478: NPE during PlayerLoginEvent recipe manipulation (2018-11-10)  ++* 3697ec7a6 - Add API to manipulate boss bar of entities and those created by commands (2018-11-10)  ++* ca22de36a - SPIGOT-4469: Age API for EndGateway (2018-11-06)  ++* de547749e - SPIGOT-4471: Use wall time for zombie drowning & enhance checks (2018-11-06)  ++* e693496c1 - SPIGOT-4467: Improve ExpiringMap (2018-11-04)  ++* f0398e444 - SPIGOT-4438: Add choice API to furnace recipes (2018-11-03)  ++* 96c461b3a - API to get client side view distance. (2018-11-02)  ++* e2785f4ed - Remove note about development build (2018-11-02)  ++* a8000588c - SPIGOT-4395: Additions to PlayerBedEnterEvent. (2018-11-02)  ++* aed3aecba - Make natural item dropping mimic Vanilla (2018-10-31)  ++* 1057710a7 - SPIGOT-4376: Add draft BlockDropItemEvent (2018-10-31)  ++* f3f2fe579 - SPIGOT-4455: ChunkData.getType returns legacy material (2018-10-29)  ++* 72c3617df - SPIGOT-4433: Always generate ProtoChunk (2018-10-28)  ++* 5184216f2 - SPIGOT-4447: Clear error for people trying to set an item as a block (2018-10-27)  ++* d6b57bd96 - SPIGOT-4446: Legacy rotation methods don't work for wall mounted skulls (2018-10-27)  ++* 4a47be616 - Add ray tracing and bounding box API (2018-10-26)  ++* a835b0353 - SPIGOT-4443: Scoreboard RenderType API (2018-10-26)  ++* 3359cb199 - MC-137353: Don't go crazy on amount of bootstrap threads needed (2018-10-23)  ++* b4230a9a7 - Update to Minecraft 1.13.2 (2018-10-23)  ++* a639ae44d - Remove outdated build delay. (2018-10-23)  ++* db10914a9 - Improve minecart spawners (2018-10-19)  ++* cd6252a48 - Fixed missed diff in PathfinderGoalPanic. (2018-10-16)  ++* 0adc1b998 - SPIGOT-4428: Update Player CustomName (2018-10-15)  ++* e3d7b2fd9 - Add Block#isPassable (2018-10-12)  ++* e7ced970d - Catch plugins setting null Material or BlockData to blocks (2018-10-13)  ++* 8ab46ff7c - SPIGOT-4368: Tweak fish persistence (2018-10-07)  ++* 1ceee6334 - Implement maximum repair cost API to AnvilInventory (2018-10-05)  ++* 6a0c4e1cc - SPIGOT-4411: Document use of null for shulker colours (2018-10-06)  ++* 02518f92a - Make setPersistent also control player saving (2018-10-02)  ++* 68588dac4 - SPIGOT-4405: Chunk generation problem (2018-10-02)  ++* c8f68670f - Save server version (2018-10-02)  ++* 7a2f48676 - Implement PlayerRecipeDiscoverEvent and methods to (un/)discover recipes (2018-09-29)  ++* 1cf8b5dc1 - SPIGOT-4400: Populators running on existing chunks (2018-09-27)  ++* 116cb9a1b - SPIGOT-4399: Add attribute modifier equality test (2018-09-26)  ++* 5ee1c18a4 - SPIGOT-4398: Set ASM7_EXPERIMENTAL flag (2018-09-27)  ++* 4824655c8 - SPIGOT-4398: Upgrade to ASM 6.2.1 for better Java 11 support (2018-09-27)  ++* eea438703 - MC-134115: Fix issues converting tile entities (2018-09-27)  ++* 1a7f2d109 - SPIGOT-4397: isChunkGenerated API (2018-09-26)  ++* 40aed54d1 - SPIGOT-4396: Improve vehicle movement (2018-09-26)  ++* 020b49527 - SPIGOT-4392: Stem updates even if BlockGrowEvent cancelled (2018-09-25)  ++* c1ecaa2ff - API to generate filled explorer maps (2018-09-24)  ++* 5cffeca21 - SPIGOT-4391: Sign editable API (2018-09-24)  ++* dcb43ef83 - MC-136886: locate command loads chunks without needing to. (2018-09-23)  ++* 7d506c6cd - SPIGOT-4389: Fix empty custom inventory title (2018-09-23)  ++* fc10dec5f - Don't throw error on invalid data in CraftMetaItem. (2018-09-22)  ++* 65bb2d0f7 - Increase expiration time to 10 days (2018-09-22)  ++* 88a5346fe - Add API to locate structures. (2018-09-21)  ++* 8164f4b25 - SPIGOT-1916: Attribute modifiers for ItemStacks (2018-09-21)  ++* 26c89277c - SPIGOT-4385: Clearer error for invalid generator-settings (2018-09-19)  ++* a222e4a25 - Implement BatToggleSleepEvent (2018-09-16)  ++* 79ada744c - SPIGOT-4382: Fix damage_absorbed statistic (2018-09-17)  ++* 94b8708ac - SPIGOT-4373: Item display colours are white by default (2018-09-16)  ++* 616684369 - SPIGOT-4378: Fix mistakenly included code (2018-09-16)  ++* a4bdecff6 - SPIGOT-4372: LightningStrikeEvent cause API (2018-09-15)  ++* 34caaf6d6 - SPIGOT-4371: Trident damaged when event cancelled (2018-09-15)  ++* 97315374f - SPIGOT-4369: Handle cancelled trident event (2018-09-15)  ++* bf1c82731 - SPIGOT-4370: Remove vehicle if its passenger spawn event was cancelled (2018-09-15)  ++* 1cead6280 - SPIGOT-4363: Bad colours in leather armor (2018-09-11)  ++* 953e1d601 - SPIGOT-4314: Ability to change item in frame without playing sound (2018-09-11)  ++* b6bf6aa3b - Add option to suppress normal output of 'makePatches' so it only outputs when a patch is changed or created. (2018-09-10)  ++* 7033f180e - Hoist out synchronisation from ChunkRegionLoader (2018-09-10)  ++* 022b8c350 - SPIGOT-4361: BlockFadeEvent for regular coral (2018-09-10)  ++* 3123a069b - SPIGOT-4352: MoistureChangeEvent (2018-09-09)  ++* 226db0eae - Add BlockDispenseArmorEvent (2018-09-08)  ++* cd367fa4d - Fix bad thread safety in ChunkRegionLoader (2018-09-09)  ++* 3f5ca5f2a - SPIGOT-4355: Improve cancelling VehicleEnterEvent (2018-09-09)  ++* 19d654bd5 - Add ServerLoadEvent (2018-09-08)  ++* 228a5cd59 - Remove vanilla command ambiguity warning (2018-09-07)  ++* 0ddd67b0a - SPIGOT-4350: Expand EntityTeleportEvent to /teleport command (2018-09-07)  ++* 632449b6c - SPIGOT-4349: End portal has wrong TeleportCause (2018-09-07)  ++* 3eb8af234 - SPIGOT-4348: Use online player for setting skull owner if possible (2018-09-06)  ++* c88ae6b19 - SPIGOT-4342: Fix PlayerMoveEvent from pitch/yaw incorrect (2018-09-04)  ++* ee5efeb0d - Add getFacing method to get the current cardinal direction an entity is facing. (2018-09-02)  ++* 3037eb3e7 - BlockSpreadEvent for Kelp (2018-09-03)  ++* 6cf60193b - SPIGOT-4340: Improve client bug workaround (2018-09-03)  ++* 60d798202 - SPIGOT-4338: breedCause API (2018-09-01)  ++* dc69d2b3d - Fix unbound shaped recipe ingredients (2018-09-01)  ++* 4c219e2a1 - Expand Recipe API to allow multiple Materials per slot (2018-09-01)  ++* 6304ccd95 - SPIGOT-4116: Tweak tab complete spam since the client appears to be duplicating packets (2018-08-29)  ++* 1486c2951 - API to prevent PlayerBedLeaveEvent from changing a player's spawn location (2018-08-29)  ++* 3831ae621 - SPIGOT-4325: Validate coordinate arguments in Chunk/ChunkSnapshot (2018-08-29)  ++* a1ab86d8c - SPIGOT-4321: Team#getSuffix returns the prefix (2018-08-29)  ++* 9636bb8d7 - SPIGOT-4319: Conduit damage should be a block event (2018-08-28)  ++* 4228a56c0 - SPIGOT-4318: More missing spawn eggs (2018-08-27)  ++* 908516f10 - Fix some formatting in CraftLootable (2018-08-27)  ++* c2cbdc5ab - SPIGOT-4316: Do even less processing when block placement without physics requested (2018-08-27)  ++* f59857471 - SPIGOT-4313: Unsupported plugin should not crash server (2018-08-27)  ++* 479ec05e3 - SPIGOT-4310: Reset villager career level with trades (2018-08-27)  ++* 6dee81a6f - SPIGOT-4302: Use defaults when setting unplaced furnaces (2018-08-27)  ++* d0bb0a1d7 - Fix some tests randomly failing (2018-08-26)  ++* 997d378da - Fix client stall in specific teleportation scenarios (2018-08-26)  ++* b3dc23666 - SPIGOT-4307: Fix hacky API for banners on shields (2018-08-26)  ++* 2a271162a - SPIGOT-4301: Fix more invalid enchants (2018-08-26)  ++* 5d0d83bb9 - SPIGOT-4309: Add "forced" display of particles (2018-08-26)  ++* a67725788 - Add additional tests for CraftBlockData (2018-08-25)  ++* ce1af0c34 - Update to Minecraft 1.13.1 (2018-08-26)  ++* 162bda93f - Add note about 1.13.1 (2018-08-26)  ++* f41aae401 - Remove reflection from CraftBlockData (2018-08-25)  ++* 1bc24337d - SPIGOT-4304: Turtle helmet overrides water breathing potion (2018-08-24)  ++* 3418f8d7a - SPIGOT-4298: Block command sender returns wrong block (2018-08-22)  ++* ec86574b9 - README.md updates (2018-08-20)  ++* 903c0e30c - SPIGOT-4296: Ensure recipe group set in craft translation (2018-08-21)  ++* 89492315d - launchProjectile Fish -> FishHook (2018-08-20)  ++* 82f4b3b1d - SPIGOT-4292: Ignore itemstacks with invalid enchants (2018-08-20)  ++* bfb913149 - SPIGOT-4283: Allow setting recipe groups (2018-08-17)  ++* 06112946d - Fix whitespace issue in previous commit (2018-08-16)  ++* 375bc637b - SPIGOT-4276: Fix untyped statistics causing client errors (2018-08-15)  ++* 5bf0abb3a - SPIGOT-4281: Fix looting enchantment (2018-08-16)  ++* b865db3b2 - SPIGOT-4278: EntityChangeBlockEvent for turtles laying eggs (2018-08-16)  ++* 1728eb298 - SPIGOT-4279: Move turtle egg interact event (2018-08-16)  ++* 7c341e9be - Fix StructureGrowEvent originating from dispensers (2018-08-15)  ++* 452a17380 - SPIGOT-4271: Fix API error when enderman are not carrying a block (2018-08-15)  ++* 4a2410866 - SPIGOT-4261: Missing turtle / phantom spawn egg meta (2018-08-13)  ++* c0df4b82d - SPIGOT-1936: LootTable API (2018-08-12)  ++* 15da70670 - SPIGOT-4258: Add Player.updateCommands method (2018-08-12)  ++* b47946ff1 - Fix regression in item priority conversion (2018-08-12)  ++* a0a27e587 - Switch around item conversion code as well (2018-08-11)  ++* 96778caab - SPIGOT-4253: Add way to prioritise item conversion (2018-08-11)  ++* 29e756487 - Expand GameRule API (2018-08-11)  ++* 50e6858b7 - Improve entity hierarchy by adding Mob interface. (2018-08-10)  ++* 0e1d79b44 - Correct error in previous patch (2018-08-10)  ++* eb36029f1 - SPIGOT-2719: Comparator and Observer don't trigger BlockRedstoneEvent (2018-08-09)  ++* 4487c1f9d - SPIGOT-4245, MC-128441: use target world as teleport destination (2018-08-08)  ++* c4220dc24 - Add Unit Tests for geHardness and getBlastResistance (2018-08-08)  ++* 53d3ac0a9 - SPIGOT-4238: Sometimes buckets are leaky client side when empty event is cancelled (2018-08-07)  ++* 200b23981 - SPIGOT-4233: Fix some missing handled NBT tags (2018-08-06)  ++* cfc67965f - Add merging and matching of parsed BlockData (2018-08-06)  ++* a9c796f12 - SPIGOT-4184: Fix furnaces not matching Vanilla smelt or animations (2018-08-05)  ++* 195f071e3 - SPIGOT-4219: Event for PigZombies angering. (2018-08-05)  ++* 5e3082c7d - SPIGOT-4230: Improve legacy block types (2018-08-05)  ++* ec2095d9c - SPIGOT-4223: Fix inventories using the same TileEntity instance. (2018-08-03)  ++* 671581e33 - Fix gamerules in secondary worlds (2018-08-03)  ++* dabb1b930 - Potion particles should default to true (2018-08-03)  ++* 933115355 - SPIGOT-4217: Account for ShowIcon to allow custom tipped arrows to merge (2018-08-03)  ++* 69970127c - SPIGOT-4221: Update surrounding blocks for cancelled break/place (2018-08-03)  ++* 3006dee4c - Use CraftBlock.at helper (2018-08-03)  ++* 7dc473852 - SPIGOT-4212: EntityInteractEvent when an entity tries to interact with a door (2018-08-02)  ++* 2f17f677a - Tweak outdated windows (2018-08-03)  ++* 5d489ff4e - SPIGOT-3936: Add isInteractable to Material (2018-08-02)  ++* 391e018a7 - SPIGOT-4220: Player/Entity interact events when turtle eggs are stepped on (2018-08-02)  ++* 4587569c0 - Fix ChunkData material alone being treated as legacy (2018-08-03)  ++* 80c43fc1d - SPIGOT-4214: Catch attempts to create BlockData for items (2018-08-02)  ++* 272426acd - SPIGOT-4199: Riptide related APIs (2018-08-02)  ++* ab5599e8f - Pre size legacy hash tables (2018-08-02)  ++* 8e87d0314 - SPIGOT-4205: Cancelled damage should not anger pig zombie (2018-08-01)  ++* a0c7bcf02 - Fix merchant inventories with custom titles (2018-08-01)  ++* a3b7e3433 - SPIGOT-4204: Allow passing data to AreaEffectCloud particles (2018-08-01)  ++* d474030e1 - SPIGOT-4198: Pockets of darkness in the air (2018-07-31)  ++* 549d9b012 - SPIGOT-4029: Add event for commands being sent to client (2018-07-31)  ++* 5cfa68387 - SPIGOT-4194: Call BlockFadeEvent for coral (2018-07-31)  ++* e013bf432 - SPIGOT-3917: Add EntityDropItemEvent (2018-07-31)  ++* c79e28e62 - SPIGOT-4192: Fix cancelling dispensers removing water sources (2018-07-31)  ++* 03c1273b5 - SPIGOT-4197: Account for double trapped chests (2018-07-31)  ++* 8592585b9 - Fix ancient style event call in PlayerDropItemEvent (2018-07-30)  ++* 3f9d7f777 - Move persist flag check (2018-07-30)  ++* 98f429233 - SPIGOT-4190: Move ChunkLoadEvent call (2018-07-30)  ++* c3a8de037 - SPIGOT-227: Add entity persistent flag (2018-06-14)  ++* bef764020 - SPIGOT-4185: Bubble columns not working on mobs (2018-07-30)  ++* 23dc9a027 - Update default spawn-limits (2018-07-30)  ++* 0b274effb - SPIGOT-4188: Fish not dispensing from buckets (2018-07-30)  ++* b94fd7c7e - Include class path in legacy conversion errors. (2018-07-30)  ++* 3b8f5be77 - SPIGOT-1714: Draft API for player list header / footer (2018-07-29)  ++* 2ba567f29 - SPIGOT-4182: Implement cursor captions (2018-07-29)  ++* 4d0e2b7d8 - Give turtle eggs a spawn reason (2018-07-29)  ++* f68afdb0c - SPIGOT-4178: Add another BlockPhysicsEvent call site (2018-07-29)  ++* 6a1dc5bb7 - SPIGOT-4177: Change behaviour of item display names yet again (2018-07-29)  ++* ff9bab10b - Update default config links (2018-07-28)  ++* 212fd0f23 - SPIGOT-4166: Fix Tags being corrupted by early access (and not reflecting reloads) (2018-07-28)  ++* e3c21decb - SPIGOT-4171: Advancement description not showing (2018-07-28)  ++* 392108bf9 - SPIGOT-4168: Patch up some legacy calls (2018-07-28)  ++* 5c2585068 - SPIGOT-1588: Fix cancelling mount related events (2018-07-28)  ++* d5b95a283 - Fix growing large dark oak trees (2018-07-28)  ++* 4d3ef4821 - SPIGOT-4164: Treat new _AIR blocks as air (2018-07-28)  ++* 4b0082322 - Use SpawnReason.NATURAL for Phantom spawning (2018-07-27)  ++* 3d7f2f07d - SPIGOT-4161: Missing BlockDispenseEvent for Waterlogged (2018-07-27)  ++* 0891fc1c4 - SPIGOT-4160: StructureGrowEvent not triggering for giant trees (2018-07-27)  ++* 095239d4c - SPIGOT-4159: Fix Player.launchProjectile(Trident.class) (2018-07-27)  ++* 5d881a926 - Add SpawnReason.DROWNED (2018-07-26)  ++* e70d864f0 - SPIGOT-4140, SPIGOT-4157: World generation errors (2018-07-26)  ++* 420f5fa77 - Add draft BlockFertilizeEvent (2018-07-26)  ++* 1ef1ffd66 - SPIGOT-4137: Fix World.regenerateChunk (2018-07-25)  ++* 3599dbe3c - SPIGOT-3981: Make custom inventories return specialised types where practical. (2018-07-25)  ++* 9646d8d78 - SPIGOT-4147: Fix ItemFrames not able to be placed UP or DOWN (2018-07-24)  ++* 88d89792f - SPIGOT-4141: Untouched filled maps not saving (2018-07-25)  ++* 49a2604e1 - Fix scute dropping (2018-07-24)  ++* 9cfb0090d - SPIGOT-4135: Fix DOLPHINS_GRACE PotionEffectType Wrapper. (2018-07-24)  ++* 46e5eeb67 - SPIGOT-4128: Skip hopeless entity conversion (2018-07-24)  ++* 210001701 - SPIGOT-4132: Fix missing break in RedstoneWire.setFace (2018-07-24)  ++* ca75fead2 - SPIGOT-4131: Fix typo affecting setting BlockData (2018-07-24)  ++* 19ff43d9e - SPIGOT-4128: Greatly improve spawn egg deserialization (2018-07-24)  ++* 7357d7237 - SPIGOT-4123: Fix display names cleared by plugins / serialization (2018-07-24)  ++* f732acf24 - Add map ID API (2018-07-24)  ++* fbf903a1b - SPIGOT-4120: Store BlockData enum mappings per class (2018-07-24)  ++* ea7b61290 - SPIGOT-4122: Fix an instance of legacy item inequalities (2018-07-24)  ++* 38adf52b2 - SPIGOT-4119: Incorrect slot type in InventoryClickEvent (2018-07-24)  ++* 6a109cf6b - SPIGOT-4124: Fix misplaced PISTON_HEAD (2018-07-24)  ++* 587014503 - SPIGOT-4116: Increase command tab spam threshold (2018-07-23)  ++* 30ab12cf4 - SPIGOT-824: SpongeAbsorbEvent (2018-07-23)  ++* b50bb15f5 - SPIGOT-4110: Fix spawning withers (2018-07-23)  ++* 155b17305 - SPIGOT-4112: scoreboard display names are not nullable (2018-07-23)  ++* d4297cbe2 - Just throw section signs into components a la Mojang (2018-07-23)  ++* 11542134c - SPIGOT-4109: Wall skulls not dropping (2018-07-23)  ++* 5b93c39d4 - SPIGOT-4106: Fish from buckets despawn (2018-07-23)  ++* 1c7adf74e - Always return captured tiles from chunks as well. (2018-07-22)  ++* 4e2f57133 - Fix Player.playNote (2018-07-22)  ++* 1a6b4f539 - Update to Minecraft 1.13 (2018-07-22)  ++* 961295e43 - SPIGOT-4101: Turtle lightning strike causing crash (2018-07-21)  ++* e5d6f6b59 - SPIGOT-4024: Improve interactions of Vanilla tab completion, and also reloads (2018-07-21)  ++* dbc6c660e - Fix cancelling new effect events (2018-07-21)  ++* a8dc8d31d - SPIGOT-4099: Missing BlockFormEvent for concrete powder (2018-07-21)  ++* 889e17f99 - SPIGOT-4100: Ignore invalid item display names (2018-07-21)  ++* 7c0f69e44 - CraftBlock.toString shouldn't make legacy call (2018-07-20)  ++* 814c74255 - SPIGOT-840, SPIGOT-2522: [Draft] Add EntityPotionEffectChangeEvent (2018-07-20)  ++* fa6e97a8f - SPIGOT-4064: Fix BlockPistonRetractEvent for regular pistons (2018-07-20)  ++* 66b62a63b - Fix bad old API call in CraftBlockState (2018-07-20)  ++* ca1af9368 - Update EntityChangeBlockEvent to new BlockData API (2018-07-20)  ++* 49ac8a744 - SPIGOT-4074: Fix createBlockData succeeding on garbage (2018-07-20)  ++* c1d9f9422 - SPIGOT-4050: Snow erasing block below it (2018-07-19)  ++* 6c944b216 - Fix issues converting certain chunks (2018-07-19)  ++* 80fefcf5e - SPIGOT-4047: Ignore non-existent potions (2018-07-19)  ++* fc1b10757 - SPIGOT-4046: Fix selectors in tick functions (2018-07-19)  ++* 80f4c10c8 - SPIGOT-4044: Cannot load datapack functions on startup (2018-07-19)  ++* 40f15832b - SPIGOT-4048: Fish disappear when they cannot be picked up (2018-07-19)  ++* 595ec6472 - SPIGOT-4049: Books lose NBT data (2018-07-19)  ++* 92dceb827 - Revert "SPIGOT-4035: Enforce case-sensitivity for chat format code matching." (2018-07-19)  ++* 3e5fe3e40 - SPIGOT-4042: Fix emptying buckets onto slabs (2018-07-18)  ++* 65bc676ed - SPIGOT-4041: Fix regressed item naming (2018-07-18)  ++* 6fa4ae693 - SPIGOT-4040: Further increase team related limits (2018-07-18)  ++* 9c9800285 - Fix Block.setType alone being treated as legacy (2018-07-18)  ++* d48ecdeb4 - Delete Block.setData byte methods from API (2018-07-18)  ++* b9fd5c60e - SPIGOT-4020: Fix DustOptions colouring (2018-07-18)  ++* 15036eb75 - Fix changes that got lost late in development cycle (2018-07-18)  ++* f18d78282 - SPIGOT-4028: Improve legacy ItemStack conversion (2018-07-18)  ++* de019a35f - Tweak display of command completions when we have none (2018-07-18)  ++* e120b5d10 - Fix missing PlayerResourcePackStatusEvent (2018-07-18)  ++* 3e814e7b7 - SPIGOT-4034: Fix missed diff affecting canceled InventoryClickEvent (2018-07-18)  ++* 3791cf947 - SPIGOT-4037: Improve legacy BlockState.setData (2018-07-18)  ++* 404d6e776 - SPIGOT-4036: Handle regular/uncoloured shulker boxes (2018-07-18)  ++* a3b5ef2c3 - Amend previous unit test to use JSON rather than toString for validation (2018-07-18)  ++* d480dc74e - SPIGOT-4035: Enforce case-sensitivity for chat format code matching. (2018-07-17)  ++* a71d06a0c - SPIGOT-3998, MC-133373: Improve attributes (2018-07-17)  ++* 8c9dea83c - SPIGOT-4030: Improve CraftItemStack.hasItemMeta (2018-07-17)  ++* 1526726b5 - SPIGOT-4031: Improve bounds checking in CraftInventoryView. (2018-07-16)  ++* b4bff6fc3 - SPIGOT-4026: Clicking on command error suggestion should return verbatim input (2018-07-17)  ++* fa1340f7a - SPIGOT-4022: Improve utility of Entity.getName for non-players (2018-07-17)  ++* f03c10c18 - SPIGOT-4025: Fixed missed diff affecting PlayerLocaleChangeEvent (2018-07-17)  ++* 1fccb8950 - Fix completion of multiple arguments in Bukkit commands (2018-07-16)  ++* 926ea1045 - SPIGOT-4017: Increase Team related length limits (2018-07-16)  ++* e563bc00d - Command block names are not nullable (2018-07-16)  ++* 22e522923 - Standardise empty string as null / not set (2018-07-16)  ++* b6a757dec - SPIGOT-4016: Fix clearing custom names (2018-07-16)  ++* 84676f363 - Fix MapInitializeEvent firing every tick (2018-07-16)  ++* 8fbc72b71 - Add ignore-vanilla-permissions option to assist with disabling default commands (2018-07-16)  ++* 322f2f951 - CraftBanner also needs to use wool data (2018-07-16)  ++* 3890544e0 - SPIGOT-4015: Make CraftTeam tie into backing prefix/suffix (2018-07-16)  ++* ee3c26688 - SPIGOT-4008: Fix server-icon loading (2018-07-16)  ++* 00bba6e86 - SPIGOT-4010: Prefix / suffix compatibility should default to empty string (2018-07-16)  ++* 43eb8f312 - SPIGOT-4011: Clear error for plugin misusing ChunkData (2018-07-16)  ++* 82ca5c274 - SPIGOT-4006: ICE rather than SNOW forming in some biomes (2018-07-16)  ++* 10261f31d - Fish / Dolphin should be WaterMob, and WaterMob Creature (2018-07-16)  ++* b8ea9ec84 - SPIGOT-4004: Fix banner pattern colouring (2018-07-15)  ++* 60185a561 - Validate world in CraftServer.createChunkData (2018-07-15)  ++* 764b81ced - SPIGOT-4003: Fix TropicalFish.getType (2018-07-15)  ++* cfc30bb38 - Add javadocs to new CraftBlockData utility methods. (2018-07-15)  ++* fe7db9d53 - Add EntityToggleSwimEvent and isSwimming / setSwimming API (2018-07-15)  ++* 72cf620d4 - SPIGOT-4002: Fix usage of default: statements in 1.13 plugins compiled w/ Eclipse (2018-07-15)  ++* 421c1728c - Update to Minecraft 1.13-pre7 (2018-07-15)  ++* 57ab4cfc6 - Player metadata really should be keyed by UUID not name (2018-07-11)  ++* ca6d2cf9d - Add validation checks to CraftPlayer.teleport (2018-07-11)  ++* ab13683d8 - SPIGOT-3987: Preserve attributes when writing in books (2018-07-08)  ++* 6103339c0 - SPIGOT-3976: Add some additional toStrings to CraftEntity classes (2018-06-27)  ++* fbe304643 - SPIGOT-3619: Improve CraftScheduler#isCurrentlyRunning (2018-06-17)  ++* 2f3ed3b2d - Remove outdated build delay. (2018-06-17)  ++* 8cc5a7ecb - SPIGOT-3945: Remove RepairCost tag when cost is 0 (2018-05-23)  ++* d0a3620c2 - Implement Arrow tile methods (2018-05-01)  ++* 61ca7d92c - SPIGOT-3923: Defer PlayerInventory ItemStack change to 1.13 (2018-05-05)  ++* ca057a345 - SPIGOT-3920: Make player inventories consistently return null for empty stacks (2018-05-04)  ++* 1988d7f10 - Netty 4.1.24.Final (2018-04-30)  ++* 21d5f75d6 - SPIGOT-3908: Fix signed books incorrect defaulting to unresolved (2018-04-19)  ++* bea5a842b - SPIGOT-3904: Consolidate book handling code (2018-04-16)  ++* 4509a144d - SPIGOT-3899: Only load advancements from primary world (2018-04-15)  ++* 9060bfa9b - SPIGOT-3886: Plugin exceptions in map rendering should not crash server (2018-04-08)  ++* fb423b8f4 - SPIGOT-3883: Better reloading of pending unload chunks (2018-04-04)  ++* 68b4fb642 - SPIGOT-3882: Extra call site for VehicleEntityCollisionEvent (2018-04-02)  ++* 1daee5391 - SPIGOT-3879: Make end->overworld spawning more consistent with vanilla (2018-03-30)  ++* 2e210288d - SPIGOT-3875: Book selectors not resolving (2018-03-29)  ++* 9f49ad60e - Remove magic values in scheduler package (2018-03-07)  ++* aa255689c - SPIGOT-3869: More resurrect fixes (2018-03-24)  ++* 3fed09cc4 - SPIGOT-3869: Error when forcing EntityResurrectEvent (2018-03-23)  ++* 29705a0d4 - SPIGOT-3864: Protect against suffocation on world change (2018-03-22)  ++* 7e94e65a1 - SPIGOT-3845: Fix spawnRadius on respawn (2018-03-07)  ++* 3a482bdd4 - Add setTarget and getTarget to Slime. (2018-02-26)  ++* fb414fe10 - Add missing WEARABLE EnchantmentTarget (2018-02-19)  ++* 1bb523c4e - SPIGOT-3829: Apply some speed limits to all entities (2018-02-19)  ++* bacaf9274 - SPIGOT-3824: Return the direct vehicle of an entity, not the root vehicle (2018-02-16)  ++* fd702e4f4 - Fix incorrect unit test name (2018-02-16)  ++* f4ca1805d - Fix bad usage of setter in previous commit (2018-02-12)  ++* f8411ea1e - Expand Structure Block API (2018-02-12)  ++* 8bb4f6ccc - SPIGOT-3813: Player.setHealth not reliable in conjunction with attribute API (2018-02-12)  ++* 49ecc7c7a - SPIGOT-3812: Workbench from Bukkit.createInventory does not update (2018-02-12)  ++* 9ab298de7 - SPIGOT-3807: Improve getEyeHeight (2018-02-10)  ++* aa34e9bdd - SPIGOT-3805: Minecart does not teleport through Nether Portal (2018-02-09)  ++* e3b4cf5c2 - Netty 4.1.21.Final (2018-02-07)  ++* fe668ef73 - Update README.md (2018-02-07)  ++* 1c40a8182 - Expand EnderSignal API (2018-02-03)  ++* 015bda4b7 - SPIGOT-2911: Implement AbstractHorseInventory (2018-01-28)  ++* dac2a4a6a - SPIGOT-3784: Reset horse chests after event (2018-01-28)  ++* c7656468e - Expand CreatureSpawner API (2018-01-24)  ++* 4a030536c - SPIGOT-3775: ghost player list entry if kicked on join (2018-01-23)  ++* bdcc7c7b0 - Unit tests for Material.isItem (2018-01-16)  ++* bd308430b - SPIGOT-3751: BossBar flag methods reversed (2018-01-10)  ++* 67b763c5a - Fix Block PistonMoveReaction (2018-01-10)  ++* 1dced6a2c - Send complete metadata update to joining players (2018-01-08)  ++* 4119224ef - Fix opening shulker inventories (2018-01-08)  ++* c3e4382c3 - CauldronLevelChangeEvent does not use new level (2018-01-08)  ++* a3decfdca - Update Netty / MySQL / SQLite (2018-01-07)  ++* ab09b27ef - Remove a bunch of spurious _INVALID_ methods. (2018-01-05)  ++* dc7d31b00 - SPIGOT-3735: Missing call to BlockFadeEvent (2018-01-04)  ++* e40c9ef4b - print -> println in world start region preparation (2018-01-02)  ++* 360629ec5 - SPIGOT-3729: Add AreaEffectClouds to tracker (2018-01-02)  ++* 595eaaa8b - SPIGOT-3724: Make CraftMetaSkull work reliably for player skulls (2018-01-01)  ++* 950006003 - SPIGOT-355: API for Villager careers (2017-12-31)  ++* e1fb9cb64 - Send title timings before sending titles (2017-12-30)  ++* b5a10a9d6 - Remove unused private static final variable (2017-12-28)  ++* 8c37e2ebd - SPIGOT-3717: Fix some RCON commands (2017-12-26)  ++* 45c83860e - SPIGOT-3696: Clearing custom name of some blocks does not work (2017-12-16)  ++* 04595908e - Allow unloading all worlds except the main one (2017-12-16)  ++* fb4564cc3 - SPIGOT-2892: Fix some clone implementations and add unit test (2017-12-16)  ++* 2ee49b495 - Netty 4.1.18.Final (2017-12-12)  ++* 70cc3820c - SPIGOT-3686: Move entity event call earlier in method (2017-12-09)  ++* 6cb752ea0 - Add ChunkDataTest from PR #157 (2017-12-08)  ++* e46898a5e - SPIGOT-3684: Team#setColor does not trigger scoreboard update (2017-12-08)  ++* d063cd0d3 - Fix missing event call for BlockRedstoneLamp (2017-12-07)  ++* cfd693300 - SPIGOT-3664: Add Material getter to ChunkSnapshot (2017-12-07)  ++* 558c5a348 - SPIGOT-3663: Add plugin parameter to hidePlayer+showPlayer. (2017-12-02)  ++* 22564a917 - SPIGOT-3674: Take into account max stack size for PlayerDropItemEvent (2017-12-03)  ++* 809c399a6 - SPIGOT-3668: Missing EntityToggleGlideEvent in creative mode (2017-11-28)  ++* f46ccd763 - Fix some formatting in CraftEventFactory (2017-11-22)  ++* bdb882262 - SPIGOT-1505: PlayerItemMendEvent (2017-11-21)  ++* 19ed80cef - BUILDTOOLS-362: Downgrade surefire plugin to fix issues in Docker (2017-11-20)  ++* c432ecf86 - SQLite 3.21.0 (2017-11-18)  ++* dccd2763b - SPIGOT-690: Try to make force opened enchant tables work a bit better (2017-11-18)  ++* 74cd5fdfc - Add setSpawnLocation(Location) (2016-07-11)  ++* 6e0b0a1b5 - Don't special case 'invalid' usernames for UUIDs. (2014-04-20)  ++* c15d86944 - Use generics in health scaling methods (2017-11-17)  ++* b4c298d64 - Fix mismatched setArrowCount method (2017-11-17)  ++* 108fc362c - CraftMetaFirework: AssertionError -> IllegalArgumentException (2017-11-17)  ++* 685ed2eb9 - Fix dispensing bone meal not having the correct data value (2014-02-06)  ++* 9e23a80bc - Move animal-sniffer to development profile. (2017-11-17)  ++* 82f3b02c6 - SPIGOT-1891: Player.playNote should use RECORDS category (2017-11-14)  ++* adbfc1f98 - SPIGOT-3649: Backwards check in playEffect (2017-11-13)  ++* 61e0c69d5 - Netty 4.1.17.Final (2017-11-11)  ++* 25959fab2 - Add Score.isScoreSet()Z API. (2017-11-10)  ++* 353964045 - Catch all exceptions from plugin conversation handling (2017-11-10)  ++* 326c2e605 - SPIGOT-3644: Fix missed yaw callsite update (2017-11-09)  ++* 305df9035 - Implement max fuse tick & explosion radius methods to Creeper (2017-11-07)  ++* 3e3bbd427 - SPIGOT-3638: Don't process async chat on shutting down server (2017-11-08)  ++* c3047a5df - SPIGOT-3629: Greatly expand entity effect API (2017-11-07)  ++* 2fae23c25 - SPIGOT-3637: Adjust yaw yet again (2017-11-07)  ++* 53fccdf95 - Database drivers should be runtime depends (2017-10-29)  ++* 86fdf92ca - Update SQLite to 3.20.1 (2017-10-28)  ++* 1257322d1 - SPIGOT-3622: Issue in some combinations of spawn protection (2017-10-28)  ++* 31d3159f0 - SPIGOT-3613: Success count not reset for exceptions. (2017-10-17)  ++* b8f84f375 - Fix bad diff (2017-10-13)  ++* ef2f38267 - SPIGOT-3607: Bad yaw from armorstands treated as living (2017-10-13)  ++* 9ab758c7b - SPIGOT-3605: Spawn eggs not saving internal data (2017-10-09)  ++* 6733aa563 - SPIGOT-3603: Fix client timing out in scenarios where it sends no packets. (2017-10-09)  ++* 30da15647 - Fix zombie professions (2017-10-09)  ++* f8500c0a3 - SPIGOT-3598: Persist all beacon effects (2017-10-07)  ++* e8b6e4f29 - Temporarily shift L7 timeout value to L4 value of 30s. (2017-10-06)  ++* 362ed329f - Supress harmless teleport error (2017-10-01)  ++* 59fa98bfb - SPIGOT-3587: Set head rotation when spawning entity (2017-10-01)  ++* a3b3a421a - SPIGOT-3565: Head yaw is "more accurate" for living entities (2017-09-28)  ++* ee91bce15 - Fix active async tasks not cancelled by CraftScheduler#cancelTasks(Plugin) (2017-08-29)  ++* 94b098085 - SPIGOT-3571: Packet handling must be synchronous (2017-09-19)  ++* 9a1f5ee80 - Update to Minecraft 1.12.2 (2017-09-18)  ++* 8f472147b - Remove outdated build delay. (2017-09-14)  ++* 876d22cd5 - SPIGOT-3561: Fix selectors in SuccessCount (2017-09-09)  ++* 9e3636d82 - SPIGOT-3553: Add OfflinePlayer based methods to SkullMeta (2017-09-06)  ++* 178caf9ac - SPIGOT-3551: Recursively unrestrict advancements (2017-09-06)  ++* bde2a93cf - Add BukkitTask#isCancelled (2017-08-29)  ++* 8bf06d6cb - Upgrade to Netty 4.1.15.Final (2017-08-31)  ++* 79e55b6dc - SPIGOT-1107: Shift clicking and delegation for custom inventories (2017-08-18)  ++* 357b573a1 - SPIGOT-3513: Correctly set size for freshly spawned Minecarts (2017-08-16)  ++* 963b19c59 - Fix a few chunk saving race conditions (2017-08-11)  ++* 27b8bf911 - SPIGOT-3497: Cancelled EntityPortalEvent leads to incorrect behaviour (2017-08-08)  ++* 61a31ca0c - SPIGOT-3496, MC-92282: Set mob type of mob-spawner reverts after single spawn wave. (2017-08-08)  ++* e1f296d11 - Fix CraftBanner initialisation. (2017-08-07)  ++* b5878783a - SPIGOT-3491: Add option to bypass permissions in advancements (2017-08-06)  ++* 571760182 - Update misc depends (2017-08-05)  ++* 19507baf8 - Improvements to BlockStates (2017-08-05)  ++* 63029f4ff - SPIGOT-3492: Ensure player functionality uses their specific scoreboard (2017-08-05)  ++* 20ab5d3d1 - Add build delay back (2017-08-04)  ++* 2a927e863 - Update to Minecraft 1.12.1 (2017-08-03)  ++* 9a1fc1e2e - Remove outdated build delay. (2017-08-03)  ++* 57c323aad - SPIGOT-3486: Missing check in redstone placement (2017-08-03)  ++* b5dc294d3 - SPIGOT-3485: Launch shulker bullets as projectiles (2017-08-03)  ++* 2cfb85dae - SPIGOT-3487: Llama doesn't drop chest (2017-08-03)  ++* 86aa17fae - SPIGOT-3482: ProjectileHitEvent for shulker bullet and llama spit (2017-08-02)  ++* 2c5c611d0 - SPIGOT-3456: Expand calling of ServerCommandEvent (2017-07-28)  ++* d00c0574c - SPIGOT-3403: Add an EntityPickupItemEvent (2017-07-28)  ++* 5c4864398 - SPIGOT-3463: Spurious item drops from event (2017-07-28)  ++* d2aa6845f - Implement BroadcastMessageEvent (2017-07-16)  ++* b1b9ab0df - SPIGOT-3461: Standardise plugin load timing (2017-07-26)  ++* d35483b0e - Correct scheduler behaviour with intervals of >= Integer.MAX_VALUE (circa 3 years). (2017-07-25)  ++* 4670a84bd - SPIGOT-3432: Add playNote support for new sounds (2017-07-24)  ++* f078eed54 - SPIGOT-3440: Non player entities should not make new portals (2017-07-22)  ++* 5a12442f2 - SPIGOT-3433: Improve AreaEffectCloud#getSource (2017-07-22)  ++* 9a82fa778 - SPIGOT-3428: Recover from invalid firework data (2017-07-19)  ++* 3819f8dbe - Update Eclipse compiler. (2017-07-17)  ++* 49c2537fe - Fix memory leak in PlayerList (2017-07-17)  ++* c1b8cace2 - SPIGOT-3418: Packaging error causing wrong netty version to be used (2017-07-16)  ++* 70be90e16 - SPIGOT-3425: Correct slot type calculation (2017-07-16)  ++* b5df1f59f - SPIGOT-3423: Don't treat technical piston block as BlockStateMeta (2017-07-16)  ++* e03b1a556 - SPIGOT-3417: Event for shearing snowman (2017-07-15)  ++* 6659ddf11 - SPIGOT-3416: Cap team prefix / suffix at correct value of 16 (2017-07-13)  ++* af1c0139f - SPIGOT-3409: Improve performance of registering stupid amounts of permissions in plugin.yml (2017-07-10)  ++* 50b75cd65 - SPIGOT-3407: Set damager for evoker fangs (2017-07-08)  ++* 14b597f0c - Update to Netty 4.1.13.Final. (2017-07-07)  ++* 11323bf87 - Increase expiration time to two weeks. (2017-07-04)  ++* d60353984 - SPIGOT-3387: Prevent null enchantments in ItemMeta (2017-06-28)  ++* 0481ae963 - SPIGOT-3382: Ensure players can pickup stuff (2017-06-26)  ++* 9de5cb59a - SPIGOT-3377: Fix subspace bubble advancement (2017-06-26)  ++* 477fb2bb7 - SPIGOT-3381: Save older serialized enchants (2017-06-26)  ++* d7cd7275f - SPIGOT-3379: Generalise canPickupItems to other entities. (2017-06-26)  ++* de7608559 - SPIGOT-3376: Fix nested functions (2017-06-26)  ++* 258575110 - SPIGOT-3373: Fix /execute in gameloop functions (2017-06-25)  ++* 753a8e700 - SPIGOT-3324: Improve tameable damage handling (2017-06-24)  ++* 763827668 - SPIGOT-3368: Allow anvil level cost to be overwritten by properties (2017-06-23)  ++* 1314229dc - SPIGOT-3336: HideFlags will now serialize as a List rather than a Set. HideFlags will be serialized as a list and deserialized as an Iterable. This will allow maximum flexibility on both the formats it can be serialized into and formats it can be deserialized from. (2017-06-14)  ++* 5e2a23055 - SPIGOT-3364: Correct EntityResurrectEvent (2017-06-23)  ++* f3356f107 - Treat Vanilla commands as Bukkit Commands (2017-06-21)  ++* 03f1e37ae - Fix nether world border center not adjusting (2017-06-18)  ++* 4e27449ac - SPIGOT-3351: Replace bundled netty with 4.1.12.Final (2017-06-18)  ++* 6aa0fa320 - Increase expire time to 7 days (2017-06-17)  ++* a7d074c6c - SPIGOT-3329: Allow per world loot tables (2017-06-15)  ++* 885da4375 - SPIGOT-3342: Fix invalid usage of null in InventoryWrapper (2017-06-15)  ++* 732911efb - SPIGOT-3337: Use special data value to indicate multiple recipe choices (2017-06-15)  ++* f7d14f184 - Fix detection of missing or invalid tile entities for End portals and gateways (2017-06-12)  ++* 2a2d6d629 - Add PistonMoveReaction getters for Entity (2017-06-12)  ++* f85977ae6 - SPIGOT-3331: New map colours don't display (2017-06-12)  ++* ec47e791b - SPIGOT-3328: EntityTameEvent for Parrots (2017-06-12)  ++* 202da9777 - SPIGOT-3324: Best effort fix for shoulder Parrots + cancelled damage event (2017-06-11)  ++* 639aa0cf4 - SPIGOT-3320: Apply tile entity fixer to more types (2017-06-11)  ++* ed8c725d1 - SPIGOT-3304: Respect duration from Vanilla /weather (2017-06-09)  ++* 2c34c38d7 - SPIGOT-3303: Warn when attempting to grant non existent recipe (2017-06-09)  ++* 1b3122eef - SPIGOT-3302: Armor stands not dropping armor (2017-06-09)  ++* bb4ae3b3b - Update to Minecraft 1.12 (2017-06-08)  ++* fe3ca95c7 - Prevent NPE when setting tempt target to null (2017-06-03)  ++* 10daedccd - Add proper TeleportCause for /teleport (2017-06-04)  ++* 9a032b246 - SPIGOT-3290: /teleport command overrides player rotation (2017-06-04)  ++* 701b06494 - SPIGOT-3286: Call BlockFormEvent for Concrete Powder -> Concrete (2017-06-03)  ++* 921ba5355 - SPIGOT-3283: Don't allow plugin induced infinite velocity / position (2017-06-02)  ++* 9496c2dad - SPIGOT-3284: Allow TNTPrimed#getSource to return invalid entities (2017-06-02)  ++* e13d11968 - Update to Minecraft 1.12-pre6 (2017-05-30)  ++* c155d8dd3 - SPIGOT-3277: Fix Entity.eject() (2017-05-28)  ++* ccc420a95 - Add support for preventing block drops in BreakEvent (2017-05-27)  ++* c037fe3d4 - Add color API for Teams (2017-05-28)  ++* 44dd60ac2 - SPIGOT-3272: Fix duplicate creative inventory (2017-05-26)  ++* 274304b8c - SPIGOT-439: Add player locale related APIs. (2017-05-26)  ++* a479029a8 - Ensure gameLoop function gets selectors applied. (2017-05-26)  ++* c7920f430 - SPIGOT-3257: Issue with AdvancementRewards function (2017-05-21)  ++* 24147056e - SPIGOT-3258: VehicleBlockCollisionEvent only fires in certain directions (2017-05-21)  ++* cda27c992 - SPIGOT-3254: Check chunks are loaded before ticking entities as per previous versions. (2017-05-20)  ++* 4377dac13 - SPIGOT-3253: Fix entity yaw changes (2017-05-20)  ++* 100435299 - Update to Minecraft 1.12-pre5 (2017-05-19)  ++* 3ecbb59cb - SPIGOT-3248: Don't set shoulder compounds of EntityHuman to null (2017-05-17)  ++* 45102fcf2 - Misc advancement / recipe reload fixes including SPIGOT-3240 (2017-05-16)  ++* c41024056 - SPIGOT-3240: Temporarily stub out rarely used resetRecipes method to fix some issues. (2017-05-16)  ++* 240f16d1c - SPIGOT-3244: Downgrade MySQL driver to 5.1.42 - the current GA release (2017-05-15)  ++* 68b0515b5 - SPIGOT-3243: Remove recipe reset on world change / death (2017-05-15)  ++* 913c5a61f - SPIGOT-3242: Fix rain not showing client side (2017-05-15)  ++* 743252dbe - SPIGOT-3238: Add Server.advancementIterator (2017-05-15)  ++* 5195487ec - Update to Minecraft 1.12-pre2 (2017-05-14)  ++* 6e3cec8bc - Change book limit to allow for automatically generated colour codes (2017-05-14)  ++* 36e340281 - Remove outdated build delay. (2017-05-14)  ++* fcc5dcce5 - SPIGOT-3235: Disconnect for payload errors (2017-05-14)  ++* 2b6c9f40a - Set health before entity death. (2017-04-24)  ++* fbb47e838 - SPIGOT-3215: Call BlockPhysicsEvent for tall plants (2017-05-01)  ++* fecf4b413 - SPIGOT-3214: Allow book titles up to 32 even though they can't be created by a Vanilla client. (2017-04-30)  ++* d9d755226 - Implement getColor / setColor for Shulker entity (2017-04-29)  ++* a2af8f0a7 - SPIGOT-3207: Fix hiding players in a BukkitRunnable after joining (2017-04-27)  ++* 6194f6cc4 - Drop RegionFile.chunkExists() in favour of Mojang's own version (2017-01-31)  ++* 55a1f9ff1 - Implement getColor / setColor for TippedArrow (2017-04-26)  ++* 245383054 - Reset player arrow count on death (2017-04-26)  ++* 28d993cce - Skip invalid enchants in CraftMetaItem (2017-04-26)  ++* c19c2932b - Create NBT TypeId helper class (2017-04-21)  ++* 7b044defc - Remove players from vehicle when changing world via NMS methods. (2017-04-21)  ++* 0ab698655 - SPIGOT-3192: Return default value for invalid map icons (2017-04-21)  ++* 1c3428e53 - Add small throttle to book edits. (2017-04-20)  ++* 4acd0f49e - Enforce proper limits on books. (2017-04-20)  ++* be9ef980b - Implement cooldown API (2017-04-19)  ++* e04a1793a - Inventory getContents Cleanup (2017-04-17)  ++* e17c3d285 - Make CraftJukebox.isPlaying locally consistent (2017-04-16)  ++* 473febc73 - Add correct interfaces for comparator / daylight detector (2017-04-16)  ++* ac405c3cd - Fix some blockstate consistency issues. (2017-04-15)  ++* 1ac133ecc - SPIGOT-3182: Fix tab-completion in command blocks without leading slash (2017-04-13)  ++* d219213e2 - Fixes to mob equipment behaviour (2017-04-08)  ++* 1f6c04c0f - SPIGOT-3165: Only increment spawncount when mob spawn succeeds (2017-04-06)  ++* 41a7d14f8 - SPIGOT-3162: Experience ignored for custom recipes (2017-04-03)  ++* b5f7b6d69 - SPIGOT-3157: Use Vanilla gamemode change code (2017-03-31)  ++* 7dd77d734 - SPIGOT-3154: Sleeping players cannot change dimensions (2017-03-30)  ++* d09304e5d - SPIGOT-3144: Add missing PrepareAnvilEvent call. (2017-03-25)  ++* 186c351a3 - SPIGOT-3149: StructureGrowEvent for dispenser triggered growth (2017-03-24)  ++* f4822eb93 - Add additional methods sigs for binary compat (2017-03-24)  ++* 319013857 - Add Chunk.isSlimeChunk to check if a chunk can spawn slimes (2017-03-23)  ++* 4959e46f5 - Add TeleportCause.COMMAND for inbuilt /tp (2017-03-24)  ++* 7ea2fbb6e - Add Material.isFuel to check if a material is a furnace fuel. (2017-03-23)  ++* 31a852d61 - SPIGOT-3142: Plugin event changes not using TeleportCause.PLUGIN (2017-03-24)  ++* acf544e77 - SPIGOT-3141: Missing TeleportCause.SPECTATE when lift clicking spectate (2017-03-24)  ++* 91c315273 - Fix trailing whitespace in CraftChunk (2017-03-23)  ++* cf05cccd1 - SPIGOT-3143: Don't decrease item stack size if VehicleCreateEvent is cancelled (2017-03-21)  ++* 257d6cd04 - Process entity portalling towards the end of a tick. (2017-03-20)  ++* b80055abf - Properly validate player experience bar progress (2017-03-19)  ++* dfee3d9f9 - Add getWidth + getHeight for Entity (2017-03-18)  ++* 2aa5ac6c9 - SPIGOT-3128: Shift VehicleCreateEvent calling. (2017-03-15)  ++* 251e4c921 - SPIGOT-3126: Make fireballs do a better job of respecting mobGriefing (2017-03-15)  ++* 2ad21b87f - Ensure PlayerResourcePackStatusEvent is synchronous (2017-03-14)  ++* aa522c91a - Add getIgnitingBlock to BlockBurnEvent (2017-03-08)  ++* eac85911f - Don't call super update on unplaced command block metas (2017-03-10)  ++* 962ffda1a - Add more notch inventory conversions (2017-03-10)  ++* d6aa73d16 - SPIGOT-3114: Initialize custom SHULKER_BOX slots (2017-03-10)  ++* 4316a8c24 - SPIGOT-3110: SHULKER_BOX InventoryType (2017-03-08)  ++* 7a7c64714 - SPIGOT-3107: Try and improve shield knockback further (2017-03-08)  ++* 7fce67144 - SPIGOT-3108: Hack around mirroring empty item stacks (2017-03-08)  ++* cb44e932b - SPIGOT-3105: BlockFadeEvent for large snow blocks (2017-03-08)  ++* cb61ac040 - MC-111753, SPIGOT-2971: Brewing stand not reloading (2017-02-21)  ++* 64277ec9b - SPIGOT-3075: EntityTeleportEvent for Shulkers (2017-02-20)  ++* 4448a7efa - SPIGOT-3068: API for localized item names (2017-02-16)  ++* 1a710213d - SPIGOT-3067: Wither skeleton heads not dropping (2017-02-15)  ++* 4c8d89551 - SPIGOT-2152: Method to set resource pack + hash. (2017-02-14)  ++* 2683195ec - SPIGOT-3063: Call EntityAirChangeEvent (2017-02-14)  ++* a55211772 - SPIGOT-3054: Correct LLamaSpit launching (2017-02-09)  ++* 3c48711c0 - SPIGOT-3051: Set pitch/yaw for spawned boats (2017-02-06)  ++* a1d3777d8 - Update SQLite to 3.16 for performance improvements and architecture compat (2017-02-01)  ++* dfe4ed1c3 - Add implementation for LlamaSpit in ProjectileSource#launchProjectile (2017-01-31)  ++* 5ae629285 - Increase expiration time to two weeks. (2017-01-31)  ++* ed8a07329 - SPIGOT-3044: BlockDispenseEvent for shulker boxes (2017-01-31)  ++* 47c6a3685 - Update MySQL Driver Version to 5.1.40 (2017-01-31)  ++* c1aa85918 - SPIGOT-3040: Round health to float for validation (2017-01-28)  ++* 80dd971b5 - Make tile activeContainer assignment consistent. (2017-01-27)  ++* 16b5116c7 - SPIGOT-3033: Alter behaviour of cancelled hopper transfers (reverted from commit 334aa07e2fcadf347afa38196fd3ab09ca4dc3a7) (2017-01-26)  ++* dbf4ecf30 - SPIGOT-3037: WorldBorder#isInside(Location) (2017-01-26)  ++* 334aa07e2 - SPIGOT-3033: Alter behaviour of cancelled hopper transfers (2017-01-26)  ++* 46226d6a0 - SPIGOT-3031: Pigs are not dropping their saddle (2017-01-24)  ++* 4d3bf2015 - Re-enable the vanilla debug MethodProfiler and /debug command (2017-01-18)  ++* 7fdc749bf - Add API to set Arrow pickup status (2017-01-18)  ++* 775f1e1f7 - SPIGOT-3003: Fix custom dropper / beacons. (2017-01-11)  ++* f70936207 - SPIGOT-3002: Mob spawners are valid (2017-01-11)  ++* 27dd3ca45 - SPIGOT-2997: Explicitly disallow invalid tiles to be opened (2017-01-10)  ++* 270755dc0 - Fix crash if entities other than players (somehow?) consume their item. (2017-01-09)  ++* 730bb6ac8 - 10 day build expire (2017-01-09)  ++* d5e7885c2 - SPIGOT-2990: EntityTeleportEvent for tameable animals following owner (2017-01-05)  ++* c91863850 - SPIGOT-2989: Use existing horse inventory object. (2017-01-05)  ++* 059434ce9 - SPIGOT-826: Add method to retrieve entity by UUID (2017-01-04)  ++* 7e1932584 - SPIGOT-2640: API for multiple passengers per entity (2017-01-04)  ++* ce89845fd - SPIGOT-1915: Fix players seeing their own passengers (2017-01-04)  ++* 63b5f7d33 - More robust inventory handling (2017-01-04)  ++* 613be0d84 - SPIGOT-2980: Improve SpawnEgg NBT application and ItemStack conversion. (2017-01-02)  ++* a6d8fa2ea - Recover spawn egg data from UNSPECIFIC meta. (2017-01-02)  ++* bf8303f25 - Clear effectsToProccess after applying potion effects (2017-01-02)  ++* 5715b3a6d - SPIGOT-2977: Pass setAmount(0) through to wrapped ItemStack. (2017-01-02)  ++* e2a288c86 - SPIGOT-2969: Shulker box removal not updating comparators (2016-12-28)  ++* 70bc70b4e - SPIGOT-2966: Entirely remove problematic check (2016-12-28)  ++* f9e044059 - SPIGOT-2960: Fire HOTBAR_MOVE_AND_READD in more cases (2016-12-27)  ++* 056af8b9c - SPIGOT-2964: Correct number of shelve sin PrepareEnchantEvent (2016-12-27)  ++* 7c743ff64 - SPIGOT-2963: Endless loop in CraftHumanEntity#openMerchant (2016-12-27)  ++* 50acb4477 - Increase expire time to 7 days (2016-12-26)  ++* 1c7dfaebe - SPIGOT-2957 getSeaLevel() should return the real sea level, not a hard-coded value (2016-12-25)  ++* 0fb3f8b47 - Correct some code. (2016-12-24)  ++* 96f03d906 - SPIGOT-2127: Add DamageCause.ENTITY_SWEEP_ATTACK (2016-12-23)  ++* 746cf0f0d - Additional fireworks damage tracking. (2016-12-23)  ++* 622add845 - MC-88491: Fix projectile colliding with shooter (2016-12-22)  ++* e232e1519 - SPIGOT-2953: Set damager for fireworks (2016-12-22)  ++* 13a5b1220 - SPIGOT-2944: Just apply filtering to players (2016-12-22)  ++* a86731306 - Update to Minecraft 1.11.2 (2016-12-21)  ++* fb50a80d0 - SPIGOT-2948: Alter filtering logic (2016-12-21)  ++* 8ea0c87f5 - Update to Minecraft 1.11.1 (2016-12-21)  ++* c8ff65136 - SPIGOT-2936: Simplify WorldBorder diff (2016-12-19)  ++* 4602331b1 - SPIGOT-2930: Shift calling of PlayerItemBreakEvent to before break. (2016-12-18)  ++* 7f313269d - SPIGOT-2926: Check spawn-npcs setting for NPCs. (2016-12-17)  ++* 532457e41 - SPIGOT-2923: Added PotionEffectType#getColor() (2016-12-16)  ++* 217358e84 - SPIGOT-2924: Improve handling of Jukeboxes playing nothing. (2016-12-17)  ++* 0a6a5cb4a - SPIGOT-1036: Add API to manipulate sendTitle timings. (2016-12-16)  ++* 655d8407c - SPIGOT-2918: Always call EnchantItemEvent (2016-12-14)  ++* c6d684425 - SPIGOT-2913: Only one enchantment applied to items (2016-12-13)  ++* 4f479728e - SPIGOT-2912: Fix enchanting with ID of 0 (2016-12-12)  ++* c4baa9cdf - Add getLocation for InventoryEnderChest (2016-12-11)  ++* 0a81101bd - Add EnchantmentOffer to PrepareItemEnchantEvent (2016-12-11)  ++* 7e02867f0 - SPIGOT-2242: Handle changed item in PlayerPickupArrowEvent (2016-12-10)  ++* aa257534d - SPIGOT-2524: Update inventory for cancelled air right click (2016-12-10)  ++* 7dfa53039 - SPIGOT-2907: Improve EntityResurrectEvent handling (2016-12-10)  ++* 03c4bf224 - SPIGOT-2908: Correctly spawn LlamaSpit (2016-12-10)  ++* 622630c82 - Clean up BlockFlowing (2016-12-09)  ++* f9eddf3f6 - SPIGOT-2886: Call BlockFormEvent when Lava and Water collide (2016-12-09)  ++* caf86c88a - Use CraftEventFactory for BlockFormEvent (2016-12-09)  ++* 521b64741 - Add API to get default value of an Attribute (2016-12-09)  ++* 0fa1ad23e - SPIGOT-2894: Preserve unreadable spawn egg data in memory (2016-12-07)  ++* 58bff62b2 - SPIGOT-2891: Remove chunks if first check is false (2016-12-06)  ++* bfbd868a3 - Implement pre-spawn API to allow modifications to spawned entities. (2016-12-06)  ++* 04202c0ac - SPIGOT-1592: Implement ItemMeta for Spawn Eggs (2016-12-06)  ++* 9dee10873 - SPIGOT-2890: SetBiome not saving changes (2016-12-06)  ++* 8c4397207 - Implement EntityDeathEvent for ArmorStands (2016-12-03)  ++* a710176e4 - SPIGOT-2889: Error cancelling creative InventoryClickEvent (2016-12-05)  ++* b64d85249 - #326: Convert BlockMeta to handle older serialized items. (2016-12-03)  ++* 9beb0c996 - SPIGOT-2879: Change order of entity addition for ender pearls (2016-12-03)  ++* 1d5439747 - SPIGOT-911: Add hitBlock to PorjectileHitEvent (2016-12-02)  ++* b6ad714e8 - SPIGOT-2871: Improve BlockStates + BlockStateMeta (2016-12-02)  ++* 4d99feddd - Reduce outdated build delay further. (2016-12-01)  ++* eb6c1bf31 - Add some expansions to Anvil Inventory API (2016-11-30)  ++* 6d5a66f00 - SPIGOT-2867: Update inventory on cancelled interacts too (2016-11-30)  ++* fffaf0711 - Fangs degree => radians (and back) (2016-11-30)  ++* 8d7e4d17e - Expand definition of isFrozen (2016-11-30)  ++* ff324aabe - SPIGOT-2862: Cannot spawn evoker fangs (2016-11-30)  ++* 41ade2f29 - SPIGOT-2860: Don't create 0 exp orbs when breeding (2016-11-29)  ++* 1c07d5c78 - Add hitEntity to ProjectileHitEvent (2016-11-28)  ++* 2ba48b496 - SPIGOT-2855: Empty ItemStacks in PlayerDeathEvent drops (2016-11-28)  ++* c91ca4a54 - Build expiry is now 1 week (2016-11-28)  ++* 0a1e0455e - SPIGOT-1401: Issues placing blocks adjacent to eachother (2016-11-28)  ++* d7cce99f0 - Fix possible leaks in vanish API (2016-11-28)  ++* ad0e4b31b - SPIGOT-2850: NPE in CraftInventoryCrafting (2016-11-27)  ++* 27d625184 - SPIGOT-2695: Added BrewingStandFuelEvent and added fuel level to the BrewEvent (2016-11-24)  ++* 6e887cd94 - Added method for spawning a falling block with the BlockData (2016-11-26)  ++* 2b7808f41 - Fix banner color. Banners have inverted color bytes. (2016-11-25)  ++* 78c761434 - SPIGOT-2842: Improve item age handling (2016-11-25)  ++* c3d951ddc - Farmland is a pickable block (2016-11-24)  ++* 5245147d0 - SPIGOT-619: Force rotate head of entities when setting location. (2016-11-23)  ++* 281376dfb - SPIGOT-2833: Tile entities occasionally wiped after placement (2016-11-24)  ++* a0d5a841d - SPIGOT-2836: ProjectileHitEvent not always firing for FishHook (2016-11-23)  ++* 83fd16e45 - SPIGOT-2835: CraftBlock getDrops Returns Air (2016-11-23)  ++* c1462a24d - SPIGOT-2765: Special case entity triggered explosions for HangingBreakEvent (2016-11-23)  ++* 7691c87df - SPIGOT-2824: Llama Strength API (2016-11-23)  ++* b5b0a97d4 - SPIGOT-2822: Droppers are droppers (2016-11-22)  ++* a64b99c95 - Add Unbreakable to ItemMeta (2016-11-22)  ++* 7359112e8 - Implement default title for custom merchants (2016-11-22)  ++* 6220b5c54 - SPIGOT-2817: Custom Merchant title omits color (2016-11-22)  ++* 691628ab5 - Fix setCarryingChest not resizing horse inventory (2016-11-21)  ++* 0b154b185 - SPIGOT-2272: Add API for virtual Merchants (2016-11-21)  ++* 7fc4255d1 - SPIGOT-2810: Fix entity statistics (2016-11-20)  ++* ac99d7d47 - SPIGOT-2807: Update inventory when attack cancelled (2016-11-20)  ++* 95436219a - SPIGOT-2806: Fix PlayerDropItemEvent for disconnected players (2016-11-20)  ++* 221508dce - Fix cancelling PlayerEditBookEvent (2016-11-19)  ++* eed13ca54 - SPIGOT-2800: Can only smelt 63 stack (2016-11-19)  ++* 0f7c38594 - SPIGOT-2801: Missing break in CraftMetaBlockState (2016-11-19)  ++* 092243c35 - SPIGOT-2799: ItemFrame set null error (2016-11-19)  ++* 89e6712cd - Add additional APIs for Evoker / EvokerFangs (2016-11-19)  ++* bd2d7935c - Implement isCursed for new enchantments (2016-11-18)  ++* fa1a44ab5 - Change style of PAIL comments in README.md (2016-11-19)  ++* 1d01e4157 - SPIGOT-2798: Fix ShulkerBox BlockStateMeta (2016-11-19)  ++* ead445ec9 - Attempt to sync damage up again - golden apples this time (2016-11-19)  ++* 7564d6024 - Add stopSound for specific sound category & unit test for SoundCategory (2016-11-19)  ++* 63c13c5e6 - Implement SoundCategory for playing sounds. (2016-11-19)  ++* 32048c469 - SPIGOT-2795: InventoryClickEvent issues (2016-11-19)  ++* 26377b763 - Get Colors from ShulkerBox; Implement CustomName for Tiles. (2016-11-18)  ++* f15e07b1a - SPIGOT-2793: Revert Nameable changes (2016-11-19)  ++* 88eede85c - SPIGOT-2792: Return PIG for broken spawners (2016-11-18)  ++* 8095a750e - SPIGOT-2790: Remove negative item ID filtering again (2016-11-18)  ++* 0805f6044 - SPIGOT-2789: ShulkerBox missing override (2016-11-18)  ++* 5e51afde4 - Get Colors from ShulkerBox; Implement CustomName for Tiles. (2016-11-18)  ++* 93b824411 - SPIGOT-2787: Keep performing getter null conversion at call sites (2016-11-18)  ++* 0c3bb7648 - SPIGOT-2777: Mobs not being angered by snowballs (2016-11-18)  ++* 4bf2fc878 - SPIGOT-2786: Restore some fireworks code lost in update (2016-11-18)  ++* 486ba9f48 - Update to SQLite 3.15.x (2016-11-18)  ++* 4f63973eb - SPIGOT-2782: Custom Colors for Potions (2016-11-18)  ++* d8c6364c4 - Remove more redundant code (2016-11-18)  ++* 17e6e857b - SPIGOT-2779: NPE when spawning firework with plugin (2016-11-18)  ++* a0269d8e7 - SPIGOT-2784: Fix Withers not being built (2016-11-18)  ++* b2f82f0f7 - Remove now redundant code (2016-11-18)  ++* 64032adfd - Remove unit test based on now incorrect assumptions (2016-11-18)  ++* 162e96132 - SPIGOT-2772, SPIGOT-2780: Improve empty ItemStack handling (2016-11-18)  ++* 129efc132 - SPIGOT-2771: Safely execute command block commands (2016-11-18)  ++* 0dedba43d - SPIGOT-2773: More fully implement ShulkerBox meta (2016-11-18)  ++* 2dd38f2dc - SPIGOT-2785: Wrong effect ID for wither sounds (2016-11-18)  ++* a951a8839 - SPIGOT-2770: Can Place Structure Blocks Even When Not Op (2016-11-17)  ++* 54450b727 - SPIGOT-2768: Fully implement map color (2016-11-17)  ++* c25ddf063 - Update to Minecraft 1.11 (2016-11-17)  ++* 51263e971 - Implement Entity Scoreboard Tags (2016-11-06)  ++* cb2749768 - SPIGOT-2757: Player#stopSound Stops All Sounds (2016-11-06)  ++* 33071ecff - SPIGOT-2752: Fix resetMaxHealth (2016-11-04)  ++* 709783c13 - Add Enchantment#isTreasure()Z (2016-10-25)  ++* 251a5b638 - Explicitly log exception from asynchronous tasks. (2016-10-24)  ++* 2e39de698 - SPIGOT-1903, MC-98153: Portal Location Sync Issues (2016-10-23)  ++* d86d282f6 - SPIGOT-2738: Revert SPIGOT-1903 fix (2016-10-23)  ++* fd8d8cf40 - SPIGOT-2737: Implement Statistic.PICKUP (2016-10-22)  ++* b6490dada - SPIGOT-2706: Implement support for Lock NBT Tag (2016-10-21)  ++* 8e5e90d5e - SPIGOT-1903: Only issue player location update after tick (2016-10-19)  ++* e20928f7d - SPIGOT-2726: Fix duplicate UUID check not always running (2016-10-15)  ++* b5fb9a1cd - SPIGOT-2686: Vehicles cannot collide with air (2016-10-12)  ++* 744e1a177 - Fix looting enchant using wrong variable (2016-10-10)  ++* 70aace031 - SPIGOT-2694: Update other half of door on BlockBreakEvent (2016-10-10)  ++* 270a3a66c - SPIGOT-2717: /execute over RCON (2016-10-09)  ++* 1cce906e1 - MC-54738: Fix ocean biome spikes due to minHeight sign inversion. (2016-10-06)  ++* 9558f31eb - SPIGOT-2711: CraftPlayer.getPlayerListName removes black colour (2016-10-05)  ++* ae93d4fb4 - SPIGOT-2705: Portal cooldown getter / setter. (2016-10-01)  ++* c1b529edd - SPIGOT-2683: Missing BlockDispenseEvents (2016-09-19)  ++* 6af9f5b84 - SPIGOT-2679: Add meta for StructureBlock (2016-09-18)  ++* 75a8885d1 - Run sync tasks scheduled for the same tick FIFO (2016-09-10)  ++* bae15259e - Remove unneeded change (2016-09-11)  ++* 8788b79a4 - SPIGOT-2639: Better state validation (2016-09-05)  ++* 48b88ed20 - SPIGOT-2656: HumanEntity#isHandRaised()Z (2016-09-04)  ++* fafcfd752 - SPIGOT-2653: Better align combustion with vanilla behaviour (2016-09-03)  ++* 4d87c3422 - SPIGOT-2644: Clearer error for invalid hanging spawns (2016-08-31)  ++* 43ab2669d - SPIGOT-2634: Concurrency issue in FileIOThread (2016-08-27)  ++* 2f5bda8a6 - SPIGOT-2630: Console tab complete (2016-08-26)  ++* 60c171935 - SPIGOT-2618: Register permissions before plugin enabled. (2016-08-25)  ++* c74e2a730 - SPIGOT-215: Implement infrastructure for Location tab completes (2016-08-25)  ++* 4db0855e3 - SPIGOT-2622: Ensure all players are safely disconnected on shutdown (2016-08-23)  ++* 4507d99ae - SPIGOT-2616: Fix dispensers dispensing TNT making squid sounds (2016-08-20)  ++* 5e5cf84f2 - SPIGOT-2581: EntityAirChangeEvent (2016-08-08)  ++* 6053c5c8a - SPIGOT-2578: Method to get PotionEffect of specific type. (2016-08-07)  ++* 29e1d7289 - SPIGOT-2574: BlockPopulators added twice. (2016-08-06)  ++* 83a9dbdef - SPIGOT-2559: Kill all entities when called with setHealth(0) (2016-07-30)  ++* 8cc595840 - Deprecate and stop using Java15Compat class. (2016-07-29)  ++* 21e3b0552 - SPIGOT-2552: Aliases for Vanilla commands (2016-07-26)  ++* 09f1a1960 - Hook into World for light getters due to additional validation. (2016-07-25)  ++* 9ff3d7f51 - SPIGOT-2548: Don't special case spawn locations of falling blocks (2016-07-23)  ++* 2a5461deb - Enhance Beacon Block API (2016-07-23)  ++* 7655e38a4 - Implement basic Beacon Block API (2016-07-18)  ++* f5d891f60 - SPIGOT-2537: Relax skull check even for nominally invalid skulls. (2016-07-22)  ++* 7ae605218 - Fall back to name if skull has no uuid when getting player. (2016-07-22)  ++* 7f9fbe54b - Simplify a few diffs (2016-07-15)  ++* 301db84d3 - SPIGOT-2520: Better skull validation (2016-07-13)  ++* ca1bb1c44 - SPIGOT-2495: Better validation of Skulls. (2016-07-12)  ++* 0df416d67 - SPIGOT-113: Add save status to ChunkUnloadEvent (2016-07-11)  ++* a625e4567 - SPIGOT-2427: Fix missed diff in armor damage handling (2016-07-10)  ++* 54902261c - SPIGOT-1994: Revert collisions to Vanilla behaviour (2016-07-10)  ++* 02d704b55 - SPIGOT-2503: Optimize block set (2016-07-08)  ++* 9c02c1217 - SPIGOT-2481: Implement EnchantmentTarget.BREAKABLE (2016-07-08)  ++* e3b4dd3d9 - Call EntityChangeBlockEvent for Fire Arrows hitting TNT (2016-07-08)  ++* d7c257e12 - SPIGOT-2490: Villager farming event (2016-07-08)  ++* a327d9f1d - SPIGOT-2504: Save structure info for secondary worlds (2016-07-08)  ++* 2239ff0f9 - SPIGOT-2501: Remove period from default quit message (2016-07-07)  ++* 67b242440 - SPIGOT-1515: Use CUSTOM reason for GENERIC damage (2016-07-02)  ++* 1628ce624 - SPIGOT-2474: Use .die() to set entity remove status (2016-07-02)  ++* 56813c7ff - SPIGOT-1468: ENDER_PEARL SpawnReason (2016-07-01)  ++* 3804ba654 - SPIGOT-1373: Implement EntityTargetEvent for TEMPT. (2016-07-01)  ++* d3507d281 - SPIGOT-1364: sendMap should update entire map (2016-07-01)  ++* 45038571f - SPIGOT-1341: Cancelled cake interact decreases client hunger (2016-07-01)  ++* 8db0dbfc4 - SPIGOT-1405: Call EntityChangeBlockEvent for Rabbits eating Carrots (2016-06-30)  ++* 121dfc098 - SPIGOT-1288: Sounds played for cancelled BlockPlaceEvent (2016-06-30)  ++* 6b843d995 - SPIGOT-1284: Run scheduler consistently within a tick (2016-06-30)  ++* 1faaa340e - SPIGOT-1283: Copy data directory on world import in case it's required (2016-06-30)  ++* 647056048 - SPIGOT-1264: Spurious BlockFadeEvent (2016-06-30)  ++* 37d08c52c - SPIGOT-1224: InventoryClickEvent issues for containers opened during event (2016-06-30)  ++* 939423a8f - SPIGOT-1181: Ensure Minecart command updates visually (2016-06-30)  ++* 5f61739cb - SPIGOT-1132: Duplicate Minecart interact event (2016-06-30)  ++* 1fe19a83f - SPIGOT-1129: Fix spawning leash hitch without adjacent block (2016-06-30)  ++* 4c4385662 - SPIGOT-1599: Allow teleporting disconnected players (2016-06-30)  ++* 287ef7889 - SPIGOT-2461: Call player tick specifically (2016-06-28)  ++* 00359a18f - SPIGOT-2456: Don't wipe tiles if type is still the same (2016-06-27)  ++* 0ebb9c7af - BUILDTOOLS-251: Make much of Bukkit locale independent (2016-06-26)  ++* 568e27fbd - Fix air setting block updates (2016-06-26)  ++* 4c1e9342c - SPIGOT-1039: Improve DoubleChest semantics (2016-06-25)  ++* f068c5e84 - MC-100524: Fix log files getting overwritten (2016-06-22)  ++* df75eebc2 - MC-80966 / SPIGOT-957: Send additional lighting data (2016-06-25)  ++* ecf4b4238 - SPIGOT-924: Compute attributes one last time after quitting (2016-06-25)  ++* 341da0730 - SPIGOT-611: Improve setBlock for tile->tile transitions (2016-06-25)  ++* 504735476 - Bump MC version (2016-06-25)  ++* 75f99ec7c - Update to Minecraft 1.10.2 (2016-06-25)  ++* 1953f52da - SPIGOT-2439: Consistently fire Chunk(Load|Unload)Event (2016-06-21)  ++* 9af379fc4 - SPIGOT-1319: Add EntityBreedEvent (2016-06-18)  ++* 63839165b - Fix infinite loop when saving chunks (2016-06-18)  ++* 9856d8a18 - Improvements to BookMeta API (2016-06-14)  ++* 02f4218da - SPIGOT-2414: Repeated disconnects (2016-06-15)  ++* 71cd505d4 - SPIGOT-2405: Better event for combust due to fire (2016-06-15)  ++* fb568fdc7 - SPIGOT-2408: setTicksLived does not properly affect FallingSand (2016-06-13)  ++* 7f1a32252 - SPIGOT-2385: RegionFileCache synchronization issues (2016-06-12)  ++* 7964365c8 - SPIGOT-2398: Armor stands still need to be treated special for gravity (2016-06-12)  ++* ac58f3840 - SPIGOT-2348: EntityTeleportEvent cancellation (2016-06-12)  ++* 1f507256e - SPIGOT-2322: Chunks generating with missing / corrupted data. (2016-06-12)  ++* f642d4bcc - SPIGOT-2397: More calls to VehicleEntityCollisionEvent (2016-06-12)  ++* e2ff10bdc - SPIGOT-1124: Changed To-Location on Teleport event ignored (2016-05-30)  ++* 0bc2724e5 - SPIGOT-2376: Way to distinguish Zombie professions. (2016-06-11)  ++* 46233ffa8 - Add Player.stopSound (2016-06-11)  ++* 6cbdec1f1 - SPIGOT-2381: Use custom spawnreason for dropItem (2016-06-12)  ++* 1c2593826 - SPIGOT-2389: Zombie.setVillager inverted (2016-06-12)  ++* fa83b1b80 - SPIGOT-2388: Damage must be nulled out in some circumstances (2016-06-12)  ++* d5ecbd0e9 - SPIGOT-2387: Magma does not provide a block for EntityDamageEvent. (2016-06-11)  ++* 3ae3ea08f - SPIGOT-1550, SPIGOT-2306: Custom payload / book + event fixes (2016-06-11)  ++* 6d3efa063 - SPIGOT-2380: Hitting in the air will always load the chunk at 0,0 (2016-06-11)  ++* 10c10b312 - SPIGOT-2366: Fix a missed diff PortalTravelAgent.patch (2016-06-09)  ++* 5fc80916f - SPIGOT-2369: Tab completing non existant command (2016-06-09)  ++* 5a55e1386 - SPIGOT-2365: Missed hanging diff (2016-06-09)  ++* b2f31b74d - SPIGOT-2364: Fix hanging placing. (2016-06-09)  ++* 885f4dce9 - Restore some Vanilla behaviour to fix magma blocks (2016-06-09)  ++* 9b4ad2a45 - Add DamageCause.HOT_FLOOR (2016-06-09)  ++* 8b9460126 - Better map Zombie/Villager professions. (2016-06-09)  ++* a8a4bedd2 - Update to Minecraft 1.10 (2016-06-09)  ++* 0cd0397a8 - SPIGOT-249: Set skull owner by UUID (2016-06-01)  ++* a28041daa - SPIGOT-1292: BlockState based FlowerPot API. (2016-06-01)  ++* cee5bbf00 - SPIGOT-783: API for book generation data. (2016-06-03)  ++* dd0e968c6 - SPIGOT-713: APIs to manipulate Entity's silent status. (2016-05-27)  ++* 5ff377a9b - SPIGOT-2336: Zombie.setVillager(Z)V (2016-05-31)  ++* 5ae53e0d5 - SPIGOT-2335: EntityCreeper.setPowered (2016-05-31)  ++* 71e5248c8 - SPIGOT-636: Decouple EntityCombustByEntity from damageEntity (2016-05-28)  ++* 106ced01e - Implement PlayerChangedMainHandEvent (2016-05-27)  ++* 3c19fef26 - SPIGOT-2321: Fully check Vanilla command permissions (2016-05-26)  ++* 042911fef - SPIGOT-2311: Cancelling PlayerPortalEvent causes invulnerability until relog (2016-05-25)  ++* ef3ccc94e - SPIGOT-2315: Neighbour chunk unload marking (2016-05-25)  ++* a022dd22f - SPIGOT-2303: Use getChunkIfLoaded (2016-05-22)  ++* 8982e3f33 - SPIGOT-2297: Reintroduce getChunkIfLoaded (2016-05-22)  ++* d8637dfb7 - Implementation of interface to modify the pumpkin head "derp mode" of a snowman (2016-05-18)  ++* 88157110a - Implement TabCompleteEvent (2016-05-16)  ++* 4e19de129 - SPIGOT-2285: New CommandBlock types. (2016-05-16)  ++* 88123f056 - SPIGOT-2286: Don't store CraftBlockState light level (2016-05-16)  ++* 6d133d544 - SPIGOT-2282: Get loaded chunk (2016-05-15)  ++* 3d0ed18e3 - Fix CraftBukkit crash report details not showing (2016-05-15)  ++* 23da8b0ab - SPIGOT-2270: Retain Java 6 compat (2016-05-12)  ++* 901c5327f - SPIGOT-2271: Custom furnace experience error (2016-05-12)  ++* e22506f96 - Use direct chunk access for neighbour counts on unload (2016-05-11)  ++* 7e9122e74 - Fix some [but not all] chunk unload issues (2016-05-11)  ++* c5e9a169f - Minecraft 1.9.4 (2016-05-10)  ++* 4cb32587a - SPIGOT-2255: Nether Structure generation ConcurrentModificationException (2016-05-07)  ++* ed60c0179 - SPIGOT-2134: Use the correct listener in CommandExecute (2016-05-01)  ++* 935f18b47 - SPIGOT-2206: playEffect doesn't accept sub classes of the expected data type (2016-04-26)  ++* 4377b86b2 - SPIGOT-2218: Drop horse chest on death (2016-04-26)  ++* 22dcde52c - Ignore movement packets from dead players. (2016-04-24)  ++* 7a6b1433e - SPIGOT-2213: Fix custom anvil inventory (2016-04-24)  ++* d884ab38d - SPIGOT-2211: Fix offhand slot client refresh (2016-04-24)  ++* 78434e891 - Remove debug message. (2016-04-23)  ++* b103841da - SPIGOT-2171: Fix shield blocking sounds (2016-04-20)  ++* 199b11bdd - SPIGOT-2157: Fix enderman not playing their animation when attacking (2016-04-20)  ++* a4786c824 - SPIGOT-2134: Support /execute being chained (2016-04-20)  ++* f060bba1c - SPIGOT-2043: Ensure VehicleMoveEvent is always fired for boats (2016-04-20)  ++* b5a4d0714 - SPIGOT-2014: Respect the spectatorsGenerateChunks gamerule (2016-04-20)  ++* b70058afa - SPIGOT-2191: Fix a missed diff from 1.8.8 (2016-04-17)  ++* f6313791d - staticify backported method (2016-04-12)  ++* 1e2fcb38e - Backport changes from 16w15a (2016-04-12)  ++* a28f87a55 - Missing import (2016-04-11)  ++* 767f02805 - Properly validate boss bar progress (2016-04-11) <2008Choco> ++* 420b983d5 - Fix broken potion serialization (2016-04-10)  ++* d39a75070 - SPIGOT-2085 / SPIGOT-2087 / SPIGOT-2156: Rework internal PotionMeta state to be correct and less complex. (2016-04-09)  ++* 8cb1b362e - Begin console output with ANSI line erase. (2016-04-08)  ++* 5c23262f1 - Update physics on attached block when setting data of attachable blocks (2016-04-09)  ++* 11e8c6d33 - SPIGOT-2145: Add missed EntityTeleportEvent diff (2016-04-08)  ++* 8d16fc08f - Support integer data values for Effect.VILLAGER_PLANT_GROW (2016-04-06)  ++* 3dc138d98 - SPIGOT-2135: Also clear sit pathfinder on toggle status (2016-04-05)  ++* f326992b8 - SPIGOT-2128: Flint and steel duplicate place event (2016-04-04)  ++* 60cb5b560 - SPIGOT-2118: Fix crash on chunk regen (2016-04-04)  ++* 4cc1807b2 - SPIGOT-2092: Directly set sittging status (2016-04-04)  ++* f01861f80 - SPIGOT-2115: Fix entities being added to the world multiple times when teleported (2016-04-02)  ++* 048849ce5 - SPIGOT-2102: Don't reduce the movement limit below vanilla's default (2016-04-01)  ++* 420afc57e - Handle cases where Mojang uses an empty string for permission checks (2016-04-01)  ++* f92e01ba5 - MC-100382: Fix Pathfinding Memory Leak (2016-03-31)  ++* 6247aa00c - SPIGOT-2101: Check the result of damageEntity before applying knockback from sweep attacks (2016-03-31)  ++* 45bb40353 - SPIGOT-2098: Fix sound effects for 1.9.0 clients (2016-03-31)  ++* 8b61cc520 - Fix the default permission of /trigger (2016-03-31)  ++* 9dc467e4c - Fix a diff mistake in MobEffectList (2016-03-31)  ++* 6e527e5b8 - Update to Minecraft 1.9.2 (2016-03-30)  ++* 7fc5cd856 - Support Minecraft 1.9.2 (2016-03-30)  ++* 23ce4d1b9 - Add 1.9.1 support. (2016-03-16)  ++* 44216f12e - SPIGOT-2033: Re-add missed diff for entity.valid (2016-03-28)  ++* fc9ee90fc - Limit the length of byte arrays (2016-03-28)  ++* 15222c84b - SPIGOT-2074: Correctly set custom world settings (2016-03-28)  ++* cac90f623 - Arrows use interactable condition (2016-03-27)  ++* cd36f6f25 - SPIGOT-2060: Method to control whether entities collide (2016-03-27)  ++* 1ea1adc10 - SPIGOT-2056: Fix killedByTeam scoreboard criteria (2016-03-27)  ++* ea49b2eee - Implement getting / setting of Entity invulnerability (2016-03-25)  ++* 6067e54dd - SPIGOT-213: Add method to enable / disable AI for mobs (2016-03-26)  ++* 6bf25cde7 - SPIGOT-2034: Rework damage again, this time for snowballs. (2016-03-26)  ++* 955489455 - SPIGOT-2049: Send the right attributes when updating scaled health (2016-03-25)  ++* 99f22a5c5 - SPIGOT-2050: Add back code to only fire VehicleEnterEvent for loaded chunks. (2016-03-26)  ++* 6030bc464 - Fix a typo in CraftPotionUtil (2016-03-25)  ++* 8e5eab265 - SPIGOT-1746: Tile entities may not always tick. (2016-03-25)  ++* 18658965d - Apply DataConverters to ItemStack instances (2016-03-25)  ++* 0ff499cf0 - SPIGOT-2039: Correctly check Potion Tags both with or without the "minecraft:" prefix, and default to UNCRAFTABLE if there is a completely garbage value. (2016-03-23)  ++* 712213dac - Fix player dimension change invulnerability never getting unset when certain dimensions are disabled (2016-03-22)  ++* ace06bd9f - CraftComplexPart should return getParent()'s status in isValid (2016-03-22)  ++* 9a072ddc1 - SPIGOT-1733: Add PlayerPickupArrowEvent (2016-03-22) <2008Choco> ++* c5d27c5f6 - Only create PermissibleBase instance in CraftEntity the first time it is actually needed. Fixes static test cases for subclasses failing when perm field was instantiated. (2016-03-21)  ++* 5fe510da5 - SPIGOT-1934: Expand EnderDragon API - implement dragon phases (2016-03-15)  ++* 616a9687a - SPIGOT-1975: Fix falling blocks when height > 1 (2016-03-22)  ++* d4e50bef9 - Improve shield damage (2016-03-22)  ++* 52c7fc0a1 - Implement isEnabled / setEnabled for CraftMinecartHopper (2016-03-18)  ++* e56aa4665 - SPIGOT-1988: Chorus Plant Generation (2016-03-20)  ++* c91d092bc - SPIGOT-1993: Move hand check to proper location (2016-03-20)  ++* 622014a3b - SPIGOT-1984: Fix default interact state when sneaking (2016-03-20)  ++* 6cac62c64 - Fix strange potion diff (2016-03-20)  ++* 549962fea - SPIGOT-1991: Further damage fixes (2016-03-20)  ++* b3f6de0da - SPIGOT-1904: AreaEffectCloud events and additional API (2016-03-12)  ++* 02b26eec0 - SPIGOT-1986: Fix flying players spamming EntityToggleGlideEvent (2016-03-19) <0x277F> ++* a8eec15e5 - SPIGOT-1981: Another attempt at damage (2016-03-20)  ++* 105df861e - SPIGOT-1980: Register new brewing slot (2016-03-20)  ++* 4cd46b242 - SPIGOT-1976: Never unload in use chunks. (2016-03-19)  ++* 8269b9939 - SPIGOT-1968: Use correct explosion yield (2016-03-19)  ++* ff617f73c - SPIGOT-1956: Don't deplete projectile item when event cancelled (2016-03-19)  ++* 2bfda1f8f - SPIGOT-1680 / SPIGOT-1963: Improve damage blocking modifier accuracy (2016-03-18)  ++* a12b1a477 - Implement EndGateway#getExitLocation and EndGateway#setExitLocation(Location) (2016-03-16)  ++* f09f7d875 - Implement SpectralArrow#getGlowingTicks and SpectralArrow#setGlowingTicks(int) (2016-03-17)  ++* f33235096 - Implement SpectralArrow entity (2016-03-17)  ++* e80114dff - Implement EndGateway#isExactTeleport and EndGateway#setExactTeleport(boolean) (2016-03-16)  ++* 205982588 - Implement EndGateway#getExitLocation and EndGateway#setExitLocation(Location) (2016-03-16)  ++* da444904c - Implement EndGateway state (2016-03-16)  ++* 6efa87306 - Implement EnderCrystal#isShowingBottom and EnderCrystal#setShowingBottom(boolean) (2016-03-16)  ++* 8cd69933c - Implement Boat#getWoodType and Boat#setWoodType(TreeSpecies) (2016-03-16)  ++* 8b69bdd0d - Add hand used to BlockPlaceEvent. (2016-03-14)  ++* 45adbd9c6 - SPIGOT-1931: Call PlayerFishEvent before modifying hooked entities velocity (2016-03-15)  ++* 00d333414 - SPIGOT-1927: Don't allow circular entity riding (2016-03-15)  ++* feb2fd5e4 - SPIGOT-1930: Fix spam for EntityToggleGlideEvent (2016-03-14) <0x277F> ++* e43b2780a - SPIGOT-1914: Compare PotionEffectType objects using Object#equals(Object) when searching for a custom effect to remove (2016-03-13)  ++* 87e677ce4 - Add spawn reasons for entities involved in a skeleton trap (2016-03-13)  ++* ab8459e18 - SPIGOT-1532: Add PlayerSwapHandItemsEvent (2016-03-14)  ++* 0c7ae5614 - SPIGOT-1856 / SPIGOT-1920: Fix Statistic.DROP not returning value when provided with a Material (2016-03-13)  ++* 55a85357a - SPIGOT-1871: Fix wrong argument order in CraftMerchantRecipe (2016-03-13)  ++* cbebfa439 - SPIGOT-1849: Call EntityBlockFormEvent when an entity forms frosted ice using frost walker (2016-03-12)  ++* 6026dad12 - Fix switch case labelling and drop items check. (2016-03-12)  ++* 1386bd3dd - SPIGOT-1571: Add Entity Glide Events. (2016-03-12) <0x277F> ++* d0e326a07 - SPIGOT-1900: Stub out expensive and redundant method call (2016-03-12)  ++* 2bf333e0f - SPIGOT-1901: Fix projectile launching. (2016-03-12)  ++* 0619f0eb3 - SPIGOT-1725: Fix dynamic scoreboard criteria on non-main scoreboards (2016-03-12)  ++* 4a8818c5f - SPIGOT-1638 / SPIGOT-1673: Rework Potions API (2016-03-02)  ++* 75286088f - SPIGOT-1893: Wrong RegainReason for eating. (2016-03-12)  ++* 1fefbf9b9 - SPIGOT-1806: Implement HumanEntity#getMainHand (2016-03-11)  ++* 7d73fbba6 - SPIGOT-1875: Broken leashes not dropping (2016-03-11)  ++* 7d330bc9f - SPIGOT-1813: EntityCombustByEntityEvent not Cancelled (2016-03-11)  ++* c126d6101 - Backport a bug fix from the pre-release (2016-03-10)  ++* dd016e713 - SPIGOT-1847: Maps in non default worlds (2016-03-10)  ++* 4c3da3f6e - SPIGOT-1862: Fix banners withj shields. (2016-03-10)  ++* 68b72776a - Missing diff effecting frost walker ignoring entities (2016-03-09)  ++* a602cb2e8 - Call EntityChangedBlockEvent for water splash potions extinguishing fire (2016-03-09)  ++* daf45148d - SPIGOT-1526 / SPIGOT-1809: Expand Inventory API (2016-03-07)  ++* 5d90f9712 - SPIGOT-1845: Use correct hand for interact events (2016-03-08)  ++* 0705465a7 - SPIGOT-1841: Implement some of the missing EnderDragon events. (2016-03-08)  ++* 3cfd8ca3c - SPIGOT-1828: CraftBanner tile entity return null (2016-03-08)  ++* 3b375b354 - SPIGOT-1831: Chicken / sheep not dropping items correctly. (2016-03-08)  ++* bf43ca62a - SPIGOT-1816: Rework drop capture. (2016-03-07)  ++* ab83272e2 - SPIGOT-1820: Fix custom travel agent search radius. (2016-03-07)  ++* 20d9f644a - SPIGOT-1823: Use fast chunk lookup in CraftWorld also (2016-03-07)  ++* 0cd671108 - Fix regenerating chunks not updating visually (2016-03-06)  ++* a06e5cf8e - SPIGOT-1788: Correctly teleport the player back to their old location (2016-03-06)  ++* 8ad0cd089 - SPIGOT-1611: Make vehicles use the same speed checks as players (2016-03-06)  ++* 935349e3a - Fix issue with last patch. (2016-03-06)  ++* be0bbbabe - SPIGOT-1762: Call EntityChangeBlockEvent for boats destroying lily pads (2016-03-06)  ++* 55b0def5d - SPIGOT-1790: Fix bucket behaviour (2016-03-06)  ++* 23a94053b - Remove redundant syncInventory on world change (2016-03-06)  ++* dd745e884 - SPIGOT-1727: Fix ShulkerBullet.setTarget (2016-03-06)  ++* 972d33dd4 - SPIGOT-1573: Fix command blocks after respawning (2016-03-06)  ++* dd39fae86 - SPIGOT-1775: Pass in unshifted block for PlayerBucketEmptyEvent (2016-03-06)  ++* 50b4cb8e7 - SPIGOT-1749 / MC-99075: Call updateInventory as a temporary workaround for cancelled BlockPlaceEvent (2016-03-06)  ++* 92494d7db - Added a playSound method to World which accepts a String parameter. (2016-03-06)  ++* 3c1ec8a54 - SPIGOT-1663: Fix WorldBorder displaying in secondary worlds. (2016-03-06)  ++* b6bb6beb6 - SPIGOT-1768: Fix Eye of Ender with custom world generators. (2016-03-06)  ++* 97f001185 - SPIGOT-1764: Perform drops regardless of loot table (2016-03-06)  ++* 9e8c37728 - Update chorus fruit tele event destination. (2016-03-06)  ++* d6a61e3e5 - SPIGOT-1776: Replace BossBar.hide/show with visibility. (2016-03-06)  ++* 249c5f068 - SPIGOT-1773: Chorus fruit teleport reason (2016-03-06)  ++* ac251f0cf - SPIGOT-1613: Fix missed use of scaled health (2016-03-06)  ++* 45171f086 - SPIGOT-1772: Use correct statistics for entities (2016-03-05)  ++* 73eff0d75 - SPIGOT-1755: CommandBlock doesn't run on empty world (2016-03-05)  ++* e7537646f - Fix typo in README.md (2016-03-05)  ++* 60f01ef30 - SPIGOT-1626 / MC-98994: Fix slow chunk performance (2016-03-05)  ++* 94ba82430 - SPIGOT-1758: Apply correct ItemMeta to new CommandBlock types (2016-03-05)  ++* dcc45717b - SPIGOT-1751: Add missed PlayerFishEvent for FAILED_ATTEMPT (2016-03-05)  ++* ef13ca444 - SPIGOT-1549: Fix custom String sounds. (2016-03-04)  ++* 7863085a6 - SPIGOT-1721: Handle Enderman.getCarriedMaterial when not carrying. (2016-03-04)  ++* 6742811d6 - SPIGOT-1666: Expand Team option API (2016-03-03)  ++* 5a3813d7f - SPIGOT-1608: Add a way to get the hand used in PlayerInteract*Events (2016-03-04)  ++* 3e3516e3b - Treat ShulkerBullet as Projectile (2016-03-03)  ++* 9056e6655 - Enable support of PotionMeta on SPLASH_POTION, LINGERING_POTION and TIPPED_ARROW. (2016-03-02)  ++* 31caee5a9 - SPIGOT-1646: Capture the previous location earlier (2016-03-03)  ++* 23ad72b4c - SPIGOT-1683: Arrows are not projectiles (2016-03-03)  ++* e2c5473e0 - SPIGOT-1679: Shulker bullets are not projectiles. (2016-03-03)  ++* f5f09ffcb - SPIGOT-1634: Fix cancelling ServerCommandEvent (2016-03-03)  ++* 78578ca51 - SPIGOT-1676: Launch projectiles with velocity (2016-03-03)  ++* 4d3af9c19 - SPIGOT-1677: Fix attributes with only single underscore. (2016-03-03)  ++* 92439bb23 - SPIGOT-1674: Enable crafting of tipped arrows. (2016-03-03)  ++* ed8cef0ed - SPIGOT-1646: Don't move the player until after the PlayerMoveEvent completes (2016-03-02)  ++* 189652175 - SPIGOT-1632: Save secondary data for nether/end (2016-03-02)  ++* 978ceb7a3 - SPIGOT-1632: Fix a bug in EnderDragonBattle which prevented respawning the dragon in some cases (2016-03-02)  ++* 8447e4f3e - SPIGOT-1659: Fix a mistake in ChunkProviderServer that sometimes caused recursive chunk loads (2016-03-02)  ++* 6f032cdc8 - Fix a mistake in EntityEnderPearl causing a double teleport (2016-03-02)  ++* 3f534696a - SPIGOT-1644: Fire PlayerTeleportEvent with reason END_GATEWAY for end gateways (2016-03-02)  ++* bad994e72 - Don't round the location of playSound to the center of a block (2016-03-02)  ++* 09b4549a2 - SPIGOT-1640: Fix spawning particles that use MaterialData (2016-03-02)  ++* a5d4a933b - SPIGOT-1583: Fix scoreboard crash. (2016-03-02)  ++* ffacb6cf7 - SPIGOT-1624: Fix setPlayerListName (2016-03-02)  ++* 2fe69605e - SPIGOT-1605: Fix EntityChangeBlockEvent.setCancelled(Z)V (2016-03-02)  ++* b0411e879 - SPIGOT-1622: Add drop chance methods for off hand. (2016-03-02)  ++* 912dfae45 - SPIGOT-1623: Use correct spawnParticle overloads. (2016-03-02)  ++* 92602ad17 - SPIGOT-1610: Treat clicking on an inventory window as clicking outside it (2016-03-01)  ++* f8e38f2d9 - Fix chorus plants only straight growing up (2016-03-01)  ++* 1be3bd058 - SPIGOT-1607: Fix BlockPlaceEvent and BlockMultiPlaceEvent sometimes showing the wrong item used (2016-03-01)  ++* 4ca1f8990 - Manually calculate horses' jump power due to horse jumping being moved clientside (2016-03-01)  ++* 76c04254c - SPIGOT-1575: Fix PlayerInventory.setArmorContents (2016-03-02)  ++* be538b8a2 - SPIGOT-1582: Add SkullType.DRAGON (2016-03-02)  ++* dcbb2a45a - SPIGOT-1576: Add more new 1.9 enchants. (2016-03-02)  ++* 1d80ac2a7 - SPIGOT-1590: Ensure plugins are disabled. (2016-03-02)  ++* 7c2b0ab69 - SPIGOT-1596: BlockCauldron crash (2016-03-02)  ++* 0f297b39b - SPIGOT-1569: Remove negative itemstack data filtering (2016-03-01)  ++* 5122dcd61 - SPIGOT-1568: Fix jukeboxes (2016-03-01)  ++* 69e196f79 - SPIGOT-1567: Rework setItems to set slots correctly regardless of array reference. (2016-03-01)  ++* 4831c56cd - SPIGOT-1523: Add FLY_INTO_WALL DamageCause to fix Elytra crash v2. (2016-03-01)  ++* f0c37a167 - SPIGOT-1543: Return combined slots for PlayerInventory.getContents (2016-03-01)  ++* 32587ed8e - SPIGOT-1545: Populate Vanilla villager trades correctly. (2016-03-01)  ++* 41c02c0ef - SPIGOT-1528: Maintain static sound map due to oversight re: underscore :( (2016-03-01)  ++* fc2609dbb - SPIGOT-1540: Treat clicking on player model with ItemStack as none. (2016-03-01)  ++* 8b5c9c15b - SPIGOT-1541: Fix firework launching (2016-03-01)  ++* fdaa09b23 - SPIGOT-1536: Fix playNote (2016-03-01)  ++* 3879b98ac - Ignore FROSTED_ICE in meta unit tests. (2016-03-01)  ++* ea28c1e47 - SPIGOT-1523: Crash when flying Elytra into wall. (2016-03-01)  ++* f5d92d6b1 - SPIGOT-1525: Fix worldborder set. (2016-03-01)  ++* 5eceede8a - Fix accidental omission of R revision number in version. (2016-03-01)  ++* c19444420 - Remove BookEditEvent as a workaround for decompiler determinism issues. (2016-03-01)  ++* 3f5dfeb07 - Run Biome test with AbstractTestingBase (2016-03-01)  ++* aa008dff0 - Update to Minecraft 1.9 (2016-03-01)  ++* e1ebe524a - [SPIGOT-1494] Really fix player skulls with custom texture but without owner. (2016-02-17)  ++* 3f3c65f47 - [BUKKIT-3451] Use correct item amount for FurnaceExtractEvent. (2015-12-19)  ++* efe04b82b - Removed tried to add entity warning. (2016-02-05)  ++* 69fe73e7d - [SPIGOT-1465] Fix skulls with no owner not displaying texture. (2016-02-05)  ++* 039621dd4 - Strengthen CraftMetaSkull hasOwner method (2016-02-02)  ++* 930a59c68 - Remove the length limit on inventory titles (2016-01-29)  ++* 75593ab62 - SPIGOT-1308: Fix typo in PlayerList#sendAll (2016-01-22)  ++* 07c300164 - SPIGOT-1390: Fixed issues with Array.fill upper bound in setRegion (2016-01-01)  ++* d3e0b6fea - SPIGOT-1347: Don't change entity add behaviour, just print warning. (2015-12-17)  ++* 4ac23479e - Add some warnings from snapshot versions to check whether they are applicable in 1.8.8 (2015-12-15)  ++* 18fbb24b4 - SPIGOT-1235: Correctly validate MaterialData for playEffect. (2015-10-18)  ++* f4c67a5c3 - SPIGOT-1232: CraftServer.getPlayer(String name) returns incorrect results in some cases. (2015-10-14)  ++* 12698ea5a - SPIGOT-1230: Normalize null log names in ForwardLogHandler. (2015-10-10)  ++* efd6cb081 - Ensure the buffer for plugin messages is freed. (2015-10-07)  ++* 4a7472d0b - SPIGOT-1219: Allow ping without status query. (2015-10-03)  ++* d4e32cef0 - SPIGOT-759: Add FireworkExplodeEvent. (2015-09-30)  ++* 8cc1683e8 - SPIGOT-989: Cap assignment of pickup delays to Short.MAX_VALUE due to storage implementation constraints. (2015-06-21)  ++* 62a216966 - SPIGOT-1076: Add HurtEntities API for FallingBlock. (2015-08-01)  ++* a0d2928ba - Add a missing break statement for openInventory, fixes opening dropper inventories (2015-09-18)  ++* 2d4f577bb - Fixed how Dropper inventories are shown to players. (2015-09-17) <0x277F> ++* 701ae54ff - SPIGOT-1192: Restore some behaviour to entity.getNearbyEntities (2015-09-18)  ++* c3730616e - SPIGOT-625: Insert a small delay when shutting down to allow packets to have a better chance at sending. (2015-09-15)  ++* 9cd11117f - SPIGOT-1168: Fix setSleepingIgnored not working on spectators. (2015-09-06)  ++* 5e9f698fa - SPIGOT-1165: Restore getNearbyEntities behaviour to include spectators. (2015-09-06)  ++* 9a17f01ff - SPIGOT-949: Fix damage cooldown reducing explosion knockback (2015-08-31)  ++* 53fac9f1b - SPIGOT-1111: Fix ServerCommandEvent not being cancelled. (2015-08-08)  ++* 880a53248 - New ChunkGenerator.generate api for block ids and avoiding magic values. (2015-07-28)  ++* 5e8595628 - SPIGOT-1080: Added support for opening all inventories implementing Bukkit's Inventory class. (2015-07-30)  ++* 9935adc4e - Update for minor remapping changes. (2015-07-30)  ++* de5c26123 - Update to Minecraft 1.8.8 (Pre-)Release. (2015-07-27)  ++* d27e6d0c5 - Add a sane limit for name length (2015-07-25)  ++* 219686bda - Implement PlayerResourcePackStatusEvent. (2015-07-25)  ++* 2642f9b34 - SPIGOT-1068: Limit the number of patterns on banners (2015-07-23)  ++* dc40c528d - Correctly update the last location for a player on teleport (2015-07-23)  ++* a3cb1bcd9 - Give the README a small update. (2015-03-19)  ++* 58d972f1d - Correct handling of relative teleports for PlayerMoveEvent and PlayerTeleportEvent (2015-07-20)  ++* 83cb83dcd - Fix handling of changes to PlayerVelocityEvent.velocity by event callers. (2015-07-20)  ++* 3e9b5c93d - Prevent an Entity from riding itself. (2015-07-20)  ++* 87b9f46d7 - SPIGOT-1060: Allow custom generators to use block ids > 127 with bytes. (2015-07-18)  ++* 09ddd9b35 - SPIGOT-1051: CraftInventoryPlayer.setItem can cause NPE. (2015-07-18)  ++* af00fd2a2 - SPIGOT-1058: Fix lost player list capping to 60. (2015-07-18)  ++* 3d5ab8fca - SPIGOT-1055: Send empty string when RCON command is cancelled. (2015-07-17)  ++* bf4818b94 - Fix ItemStack.isSimilar(CraftItemStack) when HideFlags are set. (2015-07-15)  ++* b105298f2 - Simplify getPlayerExact / try for exact match first in getPlayer. (2015-07-13)  ++* 65cd4d79f - Simplify OfflinePlayer.getPlayer() logic. (2015-07-13)  ++* 1f73bbb56 - Simplify isOnline() logic. (2015-07-13)  ++* 55589cd36 - SPIGOT-1047: Fix RCON. (2015-07-13)  ++* 2359f6fcb - Implement ItemMergeEvent (2015-06-26)  ++* 8f9ff9f6f - Server Commands and Remote Commands are now Cancellable. (2015-07-12)  ++* a03743b3b - Add basic sendTitle / resetTitle API. (2015-07-10)  ++* f27339caf - SPIGOT-977: Use vanilla's handling for command messages for vanilla commands (2015-07-08)  ++* 7742e12af - SPIGOT-1018: Fix isFromBonemeal always being false (2015-07-08)  ++* e3b5669be - SPIGOT-915: Remove the getEntities filter (2015-07-08)  ++* e91aed81b - SPIGOT-986: Default back to skull ID 0 (SKELETON) whenever an invalid ID is encountered instead of throwing an AssertionError (2015-06-18)  ++* d432434fd - SPIGOT-980: Fix NPE when setting items of offline players (2015-06-10)  ++* 76c834a84 - Clean up World.getPlayers(). (2015-06-27)  ++* c9c233b79 - Fix modified fireworks from dispenser event (2015-06-13)  ++* 994b2aae3 - SPIGOT-892: Set chicken egg baby age before adding it to world. (2015-06-12)  ++* 0dfb243c8 - SPIGOT-436: Add accompanying getSpectatorTarget(). (2015-06-12)  ++* 8f0f4ed80 - Raise the limit slightly to account for colors (2015-06-12)  ++* 5d8467365 - Apply strict limits on the length of sign text (2015-06-12)  ++* a2d26409f - SPIGOT-970, MC-80484: Disallow NBT pick block on chests. (2015-06-12)  ++* b023c53e0 - Allow for the jline console to be overriden in normally unsupported enviroments (2015-06-11)  ++* 1880a9c0b - SPIGOT-973: Add marker API to ArmorStand (2015-06-09)  ++* f4ecc39ff - SPIGOT-436: Add spectator camera API. (2015-06-07)  ++* 53433de98 - SPIGOT-954: Don't send block animations or gamemode updates to players can't see the player (2015-06-07)  ++* 845336b51 - Serialize full skull item profile data in internal blob (2015-04-16)  ++* 04afd7917 - Use a Java 6 concurrent collection. (2015-06-07)  ++* 7330b853e - [SPIGOT-461] Use a more appropriate collection for conccurent UserCache (2015-06-07)  ++* 7723b90d9 - Fix HashTreeSet which went missing in the previous commit. (2015-06-06)  ++* a65e45d88 - [SPIGOT-946] Begin making use of access transforms to simplify patching. (2015-06-06)  ++* a6a57a96d - Update to Minecraft 1.8.7 (2015-06-05)  ++* e8c64031b - Update commands.yml headers (2015-06-01)  ++* 3eea5637b - Add PAIL comments to a few things. (2015-05-31)  ++* d33f0dd3b - Remove unused bukkit.yml options and update links / info. (2015-05-31)  ++* 6fe71f4c7 - Don't need to special case certain monster spawn eggs as Mojang has long since fixed those issues. (2015-05-31)  ++* 21681b372 - SPIGOT-941: Fix a mistake in vine handling (2015-05-30)  ++* 8c14eb49e - Handle a missed case with our vanilla permissions override (2015-05-30)  ++* 508489974 - [SPIGOT-424, MC-73474] Add fix for powered rail duplication. (2015-05-29)  ++* 55202e1f9 - Add ability to add a string to a scoreboard instead of a player (2015-05-12)  ++* e9980aa94 - BUILDTOOLS-114 / MC-80817 : Fix server not starting when native processor info cannot be initialized. (2015-05-29)  ++* d6ca19e07 - Remove a few redundant POM elements and global package seal (SPIGOT-221) (2015-05-28)  ++* c637b933d - Send the packet for the correct container, rather than just the container that is active at the time. - SPIGOT-932 (2015-05-27)  ++* 01930e268 - SPIGOT-738: Return explosion source for Fireball-induced explosions (2015-05-26)  ++* 75f835c07 - Send the set item packet to the client when an item is changed or added in a player's inventory - Addresses SPIGOT-883 (2015-05-21)  ++* b29f737cb - Don't toString disconnect message in console. (2015-05-26)  ++* b0e81a4ed - Update to Minecraft 1.8.6 (2015-05-25)  ++* d63abf6cf - Cut fluff from patch headers. (2015-05-25)  ++* 25de1e6ba - SPIGOT-769: Fix opening custom inventories. (2015-05-24)  ++* 7bc9c08eb - Default to BlockFace.SELF for null directions in getFacing (2015-05-22)  ++* 961287a4c - Check the value returned from useItemInHand() so plugins can properly cancel it - SPIGOT-764 (2015-05-22)  ++* 529e4cd74 - Update to 1.8.5 (2015-05-22)  ++* f87cd1a53 - Invalidate furnace block type after change. (2015-05-21)  ++* 65fba7fb1 - SPIGOT-834: Stop EnderMites from spawning when EnderPearl event is cancelled. (2015-05-21)  ++* 6ff422158 - SPIGOT-844: Use actual block when deciding to send visual updates for burning furnaces. (2015-05-21)  ++* 99449d5d8 - SPIGOT-854: Reset idle timer on disconnect to prevent spam duplicate disconnect. (2015-05-21)  ++* 3408adb00 - SPIGOT-887: Fix getOwner() on internal sheep inventories. (2015-05-21)  ++* 5e914463b - Readd missed diff (2015-05-20)  ++* db5fd9c79 - Update deprecation mappings to 1.8.4 (2015-05-18)  ++* a48660074 - Update to 1.8.4 (2015-05-05)  ++* 0a645a272 - Remove unneeded Java 1.5 Compat (2015-04-29)  ++* 772242889 - Add the ability for commandblocks to be sent messages via the API. (2015-04-13)  ++* ba325926d - Revert: Don't try and disconnect twice (2015-04-17)  ++* 7aaa83343 - Move a bug fix from Spigot to CraftBukkit (2015-04-16)  ++* ab309d78c - Fix NPE that could happen on teleporting (2015-04-16)  ++* 8e5e4c189 - SPIGOT-581: Allow for unhandled nbt tags to be serialized to yaml (2015-04-16)  ++* ea28011f1 - SPIGOT-697: Force metadata updates when interact events are cancelled (2015-04-15)  ++* f13d771bb - SPIGOT-795: Enable the vehicle's ai before teleporting (2015-04-15)  ++* 9fd06274c - Don't try and disconnect twice (2015-04-15)  ++* 5b2764148 - SPIGOT-798: Allow for CustomPotionEffects to be empty (2015-04-15)  ++* e4ca2af9c - Strip events from book pages on signing (2015-04-14)  ++* 815922ab1 - SPIGOT-802: Improve book handling (2015-04-14)  ++* a5b7881db - SPIGOT-645: Fix players/entities being dismounted when the destroy event was cancelled (2015-04-13)  ++* 643486f46 - SPIGOT-694: Fix a mis-placed diff causing the event to fire too early (2015-04-13)  ++* a25c96eda - SPIGOT-742: Throw an exception instead of passing null when the sender cannot be converted (2015-04-13)  ++* 85cf593df - SPIGOT-758: Capture head drops from charged creeper kills (2015-04-13)  ++* 889a5eca6 - SPIGOT-782: Don't drop exp if a plugin sets it to zero (2015-04-13)  ++* 35d953bac - Replace the two nextTickList sets with a single one that combines both (2015-04-13)  ++* 501372f2c - Special case record placement into juke boxes as they update their tile. (2015-04-10)  ++* 1a1bc08e3 - SPIGOT-762: Update damage taken stats on damage (2015-04-09)  ++* b4af37bf7 - SPIGOT-763: Directly changing to location in PlayerMoveEvent does not update location. (2015-04-09)  ++* 96c2c3924 - Implement World.getNearbyEntities (2015-04-06)  ++* 7d020a704 - Expand the isFinite checks to yaw and pitch (2015-04-03)  ++* 63e28b1c3 - Don't allow liquids to flow into unloaded chunks (2015-04-01)  ++* 61ef214f9 - Implement BlockStateMeta which allows creating and editting 1.8's blockEntityTag (2015-03-24)  ++* 7d0f836d0 - SPIGOT-720: Fix NPE in TileEntity.getOwner (2015-03-22)  ++* e387d8dc7 - Implement BlockExplodeEvent (2015-03-22)  ++* 22c613d86 - SPIGOT-725: Always return captured tile entities (2015-03-22)  ++* 970be7a44 - Fix thread safety issues in EntitySlice (2015-03-22)  ++* 3fce0ec0f - SPIGOT-729: Revert the entity slice move (2015-03-22)  ++* 0af2738ae - Fire PlayerTeleport event on portal travel (2015-03-21)  ++* 350cb9927 - Update the rename markers (2015-03-19)  ++* 234e60735 - SPIGOT-716: Fix regenerating chunks (2015-03-17)  ++* 30d751b36 - Move the entity slice loading (2015-03-16)  ++* 22ee41981 - SPIGOT-711: Correctly init captured tile entities (2015-03-16)  ++* 6fe6b3842 - SPIGOT-291: Change from scoreboard per a world to scorebard per a server (2015-03-16)  ++* 1cccea969 - Replace gitdescribe with scriptus (2015-03-16)  ++* 6323c683b - Reformat pom.xml (2015-03-16)  ++* 55f3a3ea9 - Capture tile entities and only place them in the event succeeds (2015-03-16)  ++* 7f609b12b - SPIGOT-705: Fix possible CME (2015-03-15)  ++* 6a374be73 - Fix possible tick list syncing issue (2015-03-15)  ++* 6e0120a05 - SPIGOT-323: Enchanting tables can no longer be force opened. (reverted from commit bbe75338c18624e66efd56b599d82eb476e5b76c) (2015-03-13)  ++* bbe75338c - SPIGOT-323: Enchanting tables can no longer be force opened. (2015-01-05)  ++* 5750ab640 - SPIGOT-693: Fix misplaced comment. (2015-03-13)  ++* 2acb9e4ec - SPIGOT-370: Remove LOCKED_CHEST (2015-03-11)  ++* 7f52bd6c9 - Fix getActivePotionEffects ignoring the particles flag (2015-03-11)  ++* 294d07dcc - SPIGOT-678: Fix the particles flag being ignored in PotionMeta (2015-03-11)  ++* 7a30c3117 - Don't run tasks when the server is stopping (2015-03-11)  ++* 20ef9f567 - SPIGOT-677: Add populators slightly later to make sure everything is initialized (2015-03-11)  ++* 5cb9b70aa - SPIGOT-665: Fix ghost blocks when cancelling piston events (2015-03-09)  ++* ad2f80609 - Only double switch if the dimension is the same (2015-03-08)  ++* d03ffbf54 - Readd the double dimension switch (2015-03-08)  ++* 091a7212b - SPIGOT-626: Add populators early to prevent chunks being missed (2015-03-08)  ++* e80218808 - SPIGOT-657: Set armor stand noclip flag in correct place. (2015-03-08)  ++* ce4a790d1 - s/R1/R2 - deprecation-mappings.at (2015-03-08)  ++* 21f6ee1f6 - SPIGOT-644: Attempt to fix a long standing issue by limiting the range of getEntities (2015-03-08)  ++* 1e56438ac - SPIGOT-654: Use the server player list instead of the world for boss spawn/death sounds (2015-03-07)  ++* 4e47c1c39 - Add a unit test for map colors (2015-03-07)  ++* 624c97f08 - Fix a null pointer issue with multiworld (2015-03-07)  ++* d8a9c7be4 - Update to Minecraft 1.8.3 (2015-02-26)  ++* 33d5de312 - SPIGOT-602: Kick players with non-finite locations (2015-02-26)  ++* ee6d0fa93 - SPIGOT-591: Optimize EntitySlice.iterator (2015-02-20)  ++* 1d63ff0d9 - SPIGOT-447: Fix dismount causing a quick remount (2015-02-20)  ++* b6e327256 - Make tab complete spam check more lenient. (2015-02-20)  ++* 3fc97ff11 - Remove the double dimension switch as the issue seems fixed, if it breaks something blame SupaHam (2015-02-18)  ++* 3ee97a30e - SPIGOT-586: Fix a mistake in CraftMetaItem (2015-02-18)  ++* aa92a4530 - Two more cases for BlockFire (2015-02-17)  ++* 1af2a2283 - Fix a missed case in BlockFire (2015-02-17)  ++* 726656b86 - Fix hashcode / equals / formatting. (2015-02-15)  ++* 0483f0f41 - Fix incorrect import in armor stands. (2015-02-15)  ++* 709f95833 - API for setting/getting hideFlags. Implementation of the hideFlags to be saved in NBT. (2015-02-15)  ++* 116514c16 - Implement armor stand event. (2015-02-15)  ++* 9648edfa6 - Add alternatives for deprecated methods (2014-12-17)  ++* 17a3db767 - SPIGOT-557: Fix incorrect target reason for attacking an entity (2015-02-12)  ++* daa0ce3d6 - SPIGOT-540: Fix an issue when mob effects were added during an event caused by a mob effect (2015-02-12)  ++* e81edfc72 - Update applyPatches to remove extra messages (2014-12-24) <0x277F> ++* 2c31a4b40 - If an enchanting table was force opened, default the world to the player's world for checks when dropping items. Fixes SPIGOT-408 (2015-01-31)  ++* f25cb6d94 - Fix the server stopping multiple times on shutdown (2015-02-07)  ++* b70ebbc9c - SPIGOT-536: Delay physics updates for tall plants until both parts are set (2015-02-07)  ++* 9ae33818a - Fix SPIGOT-528: Incorrect owner for merchant inventories. (2015-02-06)  ++* 0cf233dd6 - SPIGOT-527: Improve vanilla's ping handling (2015-02-05)  ++* 43207df1d - Fix some null pointer issues in ThreadPlayerLookupUUID (2015-02-05)  ++* 7bdb8f9f2 - Handle new players correctly (2015-02-04)  ++* bdd52c989 - Improve vanilla's rename detection by using bukkit's lastKnownName nbt tag (2015-02-04)  ++* f98775c93 - Re-enable the vanilla feature of changing the join message if a player has changed name since their last join (2015-02-03)  ++* 2f50138ba - Fix BlockIgniteEvent and BlockSpreadEvent being called with the wrong locations in some cases (2015-02-03)  ++* 217363084 - SPIGOT-512: Fix SmallFireballs ignoring isIncendiary (2015-02-02)  ++* 386dc55b8 - SPIGOT-465: Allow cancelling BlockPlaceEvent to preven wither spawns (2015-02-02)  ++* d3d136104 - Fix exceptions from tasks being ignored (2015-02-02)  ++* 4c6df1b96 - Fix a null pointer in ShapeDetectorBlock (2015-02-02)  ++* bbf72f306 - SPIGOT-508: Set noclip flag when changing armor stand gravity (2015-02-01)  ++* a956d73f1 - SPIGOT-506: Falling blocks are special too (2015-02-01)  ++* e87122e11 - Fix client chunk leak when preforming large block/chunk updates (2015-01-30)  ++* 5c49acdcc - SPIGOT-458: Events / game rules shouldn't affect fall damage onto soil. (2015-01-31)  ++* bae259e30 - SPIGOT-240: Fire physics events for crops dying. (2015-01-31)  ++* bc03b6f01 - SPIGOT-485: Special case TnT in explosions. (2015-01-28)  ++* 15e81cf55 - SPIGOT-449: Fix the wrong caller being used in chain execute commands (2015-01-25)  ++* 4b6df5adf - SPIGOT-456: Provide equals & hashCode methods for CraftObjective and CraftTeam (2015-01-25)  ++* df17927d4 - Fix PerMaterialTest skipping useful tests for certain blocks (2015-01-25)  ++* c8f17232c - SPIGOT-161: Don't apply velocity changes if we didn't damage on explosion. (2015-01-25)  ++* 0d52f683d - SPIGOT-469: Increment and print reload count. (2015-01-25)  ++* ec4ddfb22 - SPIGOT-468: Treat wither skulls as projectiles with a shooter for damage purposes. (2015-01-25)  ++* e08f5e3d3 - SPIGOT-451: Fix bad entities crashing servers when spawned via MobSpawner (2015-01-18)  ++* 1092acbdd - Rework piston events to only fire a retract event for sticky pistons (2015-01-19)  ++* 17962f66e - SPIGOT-443: Synchronize access to HANDLED_TAGS as Spigot uses it async (2015-01-18)  ++* 59dd2ddb9 - SPIGOT-438: Correct CraftScoreboard.getObjective NPEing instead of returning null for missing objectives (2015-01-17)  ++* 00eba538b - Fix mismatch between teams and player teams. (2015-01-17)  ++* 42ebec1f7 - SPIGOT-242: Fix scoreboard API. (2015-01-17)  ++* 8047b0a13 - SPIGOT-429: Use correct block for checking Block.b (canReplace) (2015-01-16)  ++* faa27ed29 - SPIGOT-418: Ensure vehicle events are fired. (2015-01-16)  ++* e6f9fd4dc - isThundering should just reflect thunder state. (2015-01-13)  ++* 93e7b199b - Fix the CraftWorld weather methods duplicating events. (2015-01-13)  ++* 0643caa88 - Use SpecialSource 1.2.1 - greatly reduced memory usage. (2015-01-12)  ++* 66f6bfdaa - Use release SpecialSource versions. (2015-01-12)  ++* d5e2e6e99 - Add animal sniffer plugin to check API usages. (2015-01-12)  ++* 1a84bacbd - Fix null pointer in ChatBaseComponent's hashCode method (2015-01-11)  ++* 5e6c347da - Fix SPIGOT-260: Item drops don't spill in correct place. (2015-01-03)  ++* 765881913 - Fix off by one in CraftRabbit. Fixes SPIGOT-392 (2015-01-10)  ++* 4470462a5 - SPIGOT-387: Remove redundant custom vehicle handling. (2015-01-09)  ++* ba8f63080 - Add missing synthetic flags to lastDamage (2015-01-09)  ++* 373090f74 - Bump to 1.2-SNAPSHOT (2015-01-09)  ++* 52a6c083d - Actually stage file (2015-01-09)  ++* 3c5131852 - Add ACC_SYNTHETIC back. (2015-01-09)  ++* a1ce1647a - Fix mistake in vine growth (2015-01-06)  ++* 7bd9a5a24 - SPIGOT-321: Fire damage event for EntityItem. (2015-01-07)  ++* 0c4761140 - SPIGOT-362: Specify a teleport cause for specatator teleports (2015-01-06)  ++* 96d09e378 - Use ECJ as the compiler, like Bukkit. (2015-01-05)  ++* 5b92dc3d0 - Whoops missed a file (2015-01-04)  ++* 6ac32df21 - Redirect execute through our command system and allow entities to be CommandSenders (2015-01-04)  ++* 922e0a1a7 - SPIGOT-341: Backport ender pearl spawning fix from 1.8.1 (2015-01-05)  ++* dde25d45e - SPIGOT-323: Allow force creating enchant table containers. Usefullness is not guaranteed. (2015-01-05)  ++* c99cdafd3 - SPIGOT-323: Enchanting tables can no longer be force opened. (reverted from commit 9784338acff089ad16bc6399fca13fe83d0a371a) (2015-01-05)  ++* 9784338ac - SPIGOT-323: Enchanting tables can no longer be force opened. (2015-01-05)  ++* 07fcb493a - Rewrite storm / thunder event handling to catch all cases. Fixes SPIGOT-335. (2015-01-05)  ++* e5c51c790 - Actually return. (2015-01-05)  ++* 93efa5a80 - "Fix" SPIGOT-349 - don't allow + or ! in path. (2015-01-05)  ++* c13376df5 - SPIGOT-178: Treat ItemStacks of 0 size as empty (2015-01-04)  ++* c05155869 - SPIGOT-296: Fix stack overflow when a dispense event is set to bonemeal (2015-01-04)  ++* d4eaf226f - SPIGOT-270: Fire inventory events for spectator mode (but cancelled) (2015-01-04)  ++* c4fd08543 - Fix kick messages being lost (2015-01-04)  ++* a28895313 - SPIGOT-217: Fix VehicleBlockCollisionEvent having the wrong block location (2015-01-04)  ++* ff66a9a65 - SPIGOT-354: Fix the version being incorrect for level.dat (2015-01-04)  ++* 08996835d - Merge pull request #75 in SPIGOT/craftbukkit from ~XOR/craftbukkit:fixbookserial to master (2014-12-28)  ++|\ ++| * e8e3ca29e - Add null check before iterating over iterator. (2014-12-28)  ++|/ ++* eae50b4f2 - Remove DEBUG_ALL_BLOCK_STATES due to it being broken (2014-12-28)  ++* 850a9e077 - Correctly close chests cancelled for cancelled inventory open events (2014-12-28)  ++* 0a0d3aa5a - SPIGOT-287: Fire a cancelled inventory open event for locked chests (2014-12-28)  ++* 2d5a55b36 - SPIGOT-307: Fix inverted logic in WorldServer.sendParticles (2014-12-28)  ++* 0e2396c22 - Remove tile entity tags for signs and command blocks (2014-12-27)  ++* bd703b831 - SPIGOT-303: Fix NPE in ChatModifier (2014-12-27)  ++* c80683161 - Apply permission checks to command block executed vanilla commands (2014-12-27)  ++* e1c64bf0e - Make the effect filter stricter (2014-12-27)  ++* c2c8dda56 - .-. (2014-12-27)  ++* c76552e4a - Fix crashes when beacons have invalid effects (2014-12-27)  ++* 89ebcc214 - Fix CLOSEST_PLAYER being used for all entities (2014-12-27)  ++* d51936efb - SPIGOT-298: Fix book serialization (2014-12-27)  ++* 306b233a4 - SPIGOT-279: Fix all metadata being cleared for items that support blockEntityTag on material mis-match (2014-12-27)  ++* 264d479fd - SPIGOT-136, SPIGOT-267: Store pages as chat component to retain chat events unless a plugin touches them (2014-12-26)  ++* 4cd802385 - SPIGOT-276: Force load chunks in Location2D fixes /spreadplayers (2014-12-26)  ++* b3893963b - Bump maven plugin versions (2014-12-25)  ++* 2db3ea29a - Implement Rabbit types. (2014-12-06)  ++* 81ab957aa - Update the command blacklist to handle the prefixed versions (2014-12-23)  ++* 6dfcbc61a - SPIGOT-204: Add way to set block type without using IDs or updating physics. (2014-12-22)  ++* 40aaa31c4 - Fix EntityEquipment for armor stands and redirect the getters/setters to use it (2014-12-21)  ++* dbdf6cacb - Only allow command blocks to be placed by op'd players (2014-12-21)  ++* 53fc3cf74 - Fix custom chunk generators. Fixes SPIGOT-193. (2014-12-18)  ++* b6634d740 - SPIGOT-241 - Fix the duplication glitch of Leads (Vanilla bug). (2014-12-21)  ++* 268116607 - Remove the delayed tile entity removal, fixes issues with recursive removal of comparators (2014-12-21)  ++* 89944c09c - SPIGOT-231 and SPIGOT-229. Fix itemframe behaviour. (2014-12-17)  ++* ce7dd34b5 - aW() does re register Attributes which causes a IllegalArgumentException. This fixes it and sets the Guardian back to a normal Guardian without any problem. (2014-12-20)  ++* f233e7d0f - Remove redundant pom entries. (2014-12-19)  ++* 606cf0eea - Implement NameTag visibility API for Teams. (2014-11-29)  ++* dadb43af9 - Use value from new potion effect particle visibility API. (2014-12-05) <0x277F> ++* 313bc5204 - Remove outdated CONTRIBUTING.md (2014-12-18)  ++* 618abf7a3 - SPIGOT-228: Don't deserialize meta of written books twice (2014-12-16)  ++* 6fab8fe51 - SPIGOT-236 - fix notes playing wrongly. (2014-12-17)  ++* 975c9ed4f - Merge pull request #61 in SPIGOT/craftbukkit from ~FEARTHE1337/craftbukkit:SPIGOT-149 to master (2014-12-17)  ++|\ ++| * 5ae6f9935 - Spigot-149 - Save map in primary world. (2014-12-17)  ++|/ ++* 20c65caae - SPIGOT-210: Remove the exception when dropping a non-existant task (2014-12-16)  ++* 7bc218d1e - Use SpecialSource Maven pluging for compile time remapping. (2014-12-16)  ++* 6b061e258 - SPIGOT-152, SPIGOT-197: Add a system to handle new tags before an api is ready for them (2014-12-15)  ++* e1070b9fb - SPIGOT-206 Further checks and fixes for Hanging entities. (2014-12-14)  ++* 4207eeffe - SPIGOT-212: Modify the vanilla change gamemode method to call our version (2014-12-15)  ++* 55e592e54 - Don't decrement ItemStack when CreatureSpawnEvent is canceled - addresses SPIGOT-87 (2014-12-13)  ++* 28f37a113 - Fix entities freezing when a chunk is regenerated (2014-12-15)  ++* f6bfbb985 - Merge pull request #58 in SPIGOT/craftbukkit from ~DMCK2B/craftbukkit:bugfix/fixNoOPCheckOnCommandBlocks to master (2014-12-15)  ++|\ ++| * b9c3e3e8f - Swap out always-OP vanilla system for Bukkit OP checking in command blocks (2014-12-15)  ++|/ ++* 07c216211 - Implement WorldBorder API (2014-12-13)  ++* b36f4d56e - Merge pull request #47 in SPIGOT/craftbukkit from ~BAMMERBOM/craftbukkit:master to master (2014-12-13)  ++|\ ++| * 3d1cdfa2b - Fix making craftbukkit patches. (2014-12-13)  ++* | 9f422c342 - SPIGOT-211: Fix mistake in EntityHuman breaking bed spawns (2014-12-13)  ++|/ ++* 01f0122a9 - Fix the spawning of HangingEntities by picking the right direction (2014-12-13)  ++* 354449ae9 - Support vanilla's direction tag for fireballs (2014-12-13)  ++* d5ede3bd6 - Rework the vanilla link fix so that hover/click events aren't lost (2014-12-13)  ++* 5f2a9eadd - SPIGOT-199: Default to white instead of black for chat messages (2014-12-13)  ++* e8efbb8a8 - Handle cross dimensional teleports and events. (2014-12-13)  ++* 95169d476 - Use CraftChatMessage.fromComponent so that colors remain in sent messages (2014-12-12)  ++* 64157d1de - SPIGOT-189: Remove ListenerWrapper in favour of just doing it in EntityPlayer (2014-12-12)  ++* 54888dfaf - Wrap player's ICommandListener so that our permission system can handle permission for vanilla commands (2014-12-12)  ++* 81db41b4d - Ignore errors when parsing books and treat them as old books (2014-12-12)  ++* 7017af7e6 - [Vanilla Fix] Process links in broadcasted messages. (2014-12-12)  ++* 9d43c91ce - Default to Y=1 when a Y=0 BlockPosition is found to be used in the BiomeDecorator. This prevents the "n must be positive" Crash due to the fact that sometimes the heightMap can be wrong calculated. Fixes SPIGOT-91 (2014-12-03)  ++* 45be36a7b - Update JLine (2014-12-06)  ++* 2dda1b33b - JLine includes Jansi (2014-12-06)  ++* 1f8414b48 - Rebuilt patches (2014-12-12)  ++* 45cd36e55 - Fix a client crash issue involving maps. (2014-12-09)  ++* c13e6e69a - Implement displayblocks for minecarts (SPIGOT-14). (2014-12-10)  ++* fe8d20e37 - using generator settings from WorldCreator to specify presets for FLAT or CUSTOMIZED world types (2014-12-05)  ++* 9fa497cd5 - Add implementation of the elder Guardian API (2014-12-12)  ++* 3b1c7d708 - Update gson to 2.2.4 (2014-12-11)  ++* 657559729 - Merge pull request #43 in SPIGOT/craftbukkit from ~FEARTHE1337/craftbukkit:perm to master (2014-12-11)  ++|\ ++| * 33af6fbbb - Add the new minecraft command permission nodes. (2014-12-11)  ++* | b13fd3516 - Re-enable selectors for players and the console using vanilla commands (2014-12-11)  ++|/ ++* 84699b36a - Rewrite book handling, Fixes SPIGOT-182 and part of SPIGOT-164 (2014-12-11)  ++* fe41b017c - Fixed mis-placed CraftBukkit comments (2014-12-11)  ++* 14d69f151 - Remove old dev comments (2014-12-11)  ++* d5c9a3c99 - SPIGOT-179: Fix the age counter not being reset for cacti and reeds (2014-12-11)  ++* f48410a39 - Fix per a world world borders (2014-12-10)  ++* e24569a9e - SPIGOT-143: Fix various animal stuff not being canceled by damageEntity. (2014-12-09)  ++* 0af8ea10d - Fix another missed scoreboard rename (2014-12-10)  ++* 5d0069f56 - Merge pull request #26 in SPIGOT/craftbukkit from ~AIKAR/craftbukkit:applyPatches to master (2014-12-10)  ++|\ ++| * 8a8312fb9 - Improve patch scripts, add applyPatches.sh (2014-12-03)  ++* | 611ebfa75 - Merge pull request #42 in SPIGOT/craftbukkit from ~CYBERTIGER/craftbukkit:save-gamerules to master (2014-12-10)  ++|\ \ ++| * | 88366173d - SPIGOT-169: Save level.dat for non-primary worlds. (2014-12-10)  ++* | | 85e9ba780 - SPIGOT-173: Fix missed renames in EntityHuman (2014-12-10)  ++* | | 3433eeadc - Fix /gamerule always targeting the main world (2014-12-10)  ++|/ / ++* | 262c7779f - Fix crash with null thorns damager (2014-12-10)  ++* | b73cfb0f6 - Remove CommandWorldBorder patch as this is handled in the command wrapper (2014-12-09)  ++* | 917e46a8d - Make sure to catch extra interact packets from the client (2014-12-09)  ++* | cf5a502fd - SPIGOT-162: Fix cancelling RIGHT_CLICK_BLOCK not cancelling used items (2014-12-09)  ++* | a6465002b - Add some missing Tile Entities (2014-12-07)  ++* | 44ea9d88c - Add CraftMetaTileEntity, fixes the previously broken tests (2014-12-07)  ++* | fb445e533 - Minor bug fixes (2014-12-07)  ++* | c571bbe59 - Disable some tests whilst issues with them are looked into (2014-12-07)  ++* | 6880e5277 - Fix isEmpty and hashCode for CraftMetaItem (2014-12-07)  ++* | 6268eb5a3 - Fix BlockEntityTag being stripped from items (2014-12-07)  ++* | 7bb3034c7 - Clone the vector that is passed to the VelocityEvent (2014-12-07)  ++* | d41746684 - Merge pull request #35 in SPIGOT/craftbukkit from ~GENAZT/craftbukkit:bugfix/SPIGOT-128 to master (2014-12-07)  ++|\ \ ++| * | 0655dfe98 - Fire the VelocityEvent when an EntityHuman got attacked. Fixes SPIGOT-128 (2014-12-06)  ++* | | c7278edcf - Merge pull request #34 in SPIGOT/craftbukkit from ~GENAZT/craftbukkit:bugfix/SPIGOT-135 to master (2014-12-07)  ++|\ \ \ ++| * | | 86eaec03f - Add missing DispenseBehavior for Fireworks. Fixes SPIGOT-135 (2014-12-06)  ++| |/ / ++* | | 7711956f4 - Filter extra right click air interaction events (2014-12-07)  ++* | | 1227934d5 - Make CraftMetaItem's attribute handling less strict on types (2014-12-07)  ++* | | fbda3a7c9 - Fix worldborders showing from the wrong world (2014-12-06)  ++|/ / ++* | c4129c259 - Disconnect old players before firing PlayerLoginEvent and fire a PlayerQuitEvent straight after a PlayerKickEvent (2014-12-06)  ++* | d04430e09 - SPIGOT-80: Fix players being invisible after teleporting (2014-12-06)  ++* | a7287cb4c - Force the player to be saved when disconnecting duplicates (2014-12-06)  ++* | adc129ab3 - Readd missed diff in EntityEnderCrystal (2014-12-05)  ++* | cc2b09de0 - Add basic support for executing commands from signs (2014-12-05)  ++* | e6809b3b9 - Remove quotes from version hash by updating the gitdescribe version (2014-12-05)  ++* | 91ee2c236 - Merge pull request #30 in SPIGOT/craftbukkit from ~ZREED/craftbukkit:master to master (2014-12-05)  ++|\ \ ++| * | 9e04f2f76 - Use PlayerList's UUID->EntityPlayer map in CraftServer.getPlayer(UUID) (2014-12-05)  ++* | | 0d4fba2c1 - SPIGOT-117: Fix sticky pistons firing for the wrong direction when pulling blocks backwards (2014-12-05)  ++* | | 3f6a1db4f - SPIGOT-123: Force inventory updates on crafting to correctly support custom recipes (2014-12-05)  ++* | | bab0e8bc7 - Fix the chunks being blocked from unloading based on the keepSpawnInMemory flag (2014-12-05)  ++|/ / ++* | e2c4f20ed - Serialize baseColor as a string (2014-12-04)  ++* | 2ba7357b4 - Merge pull request #27 in SPIGOT/craftbukkit from ~AIKAR/craftbukkit:fixWorldSaveEvent to master (2014-12-03)  ++|\ \ ++| * | 64492523a - Move WorldSaveEvent to proper location (2014-12-03)  ++| |/ ++* / 200ae2b6a - Fix a issue with skulls that have a blank owner (2014-12-03)  ++|/ ++* 4c02ffcaf - Merge pull request #5 in SPIGOT/craftbukkit from ~DMCK2B/craftbukkit:feature/implementDepthStrider to master (2014-12-03)  ++|\ ++| * cce45591f - Implement the Depth Strider enchantment for the API (2014-11-29)  ++* | 497a7b4cf - Add ANVIL and BEACON custom inventories. Also handle a few special cases for inventory sizes (2014-12-01)  ++* | 8110f51b5 - Minor formatting fixes (2014-12-03)  ++* | df0b4c1ca - Fix spawn reason for mob eggs (2014-12-03)  ++* | a972ddfc7 - Missed a case (2014-12-02)  ++* | 1613d0913 - Don't wrap the y coordinate in World.getBlockAt (2014-12-02)  ++* | 37102a0c1 - SPIGOT-102: Fix the player being teleported up 1.62 blocks on cancelling the PlayerMoveEvent (2014-12-02)  ++* | 242209934 - Fix selectors in non-bukkit commands for command blocks (2014-12-02)  ++* | 3c4a02ed3 - Filter invalid bounding boxes for entities (2014-12-02)  ++* | 0429c76df - Fix a missed case for weather transitions on join (2014-12-02)  ++* | 2b61a04e3 - Merge pull request #22 in SPIGOT/craftbukkit from ~FEARTHE1337/craftbukkit:fixCraftMetaBanner to master (2014-12-02)  ++|\ \ ++| * | 351edbf4e - Fix CraftMetaBanner serialization. (2014-12-02)  ++* | | b6cff4147 - SPIGOT-96/BUKKIT-5016: Fix thunder storms not darkening the sky and transitions being broken. (2014-12-02)  ++|/ / ++* | 275603d37 - Merge pull request #21 in SPIGOT/craftbukkit from ~GENAZT/craftbukkit:bugfix/SPIGOT-93 to master (2014-12-02)  ++|\ \ ++| * | 7371301ed - Forgot that i work in Bukkit... Screw sun conventions (2014-12-02)  ++| * | 0d5693dec - Implementation for the new rotation values. Fixes SPIGOT-93 (2014-12-02)  ++* | | 733e4290d - [Slightly breaking] setType(Id) will not longer reuse the previous data value of the block and instead reset the the data value to the block's default (2014-12-02)  ++* | | b58808d54 - Fix tree related crashes due to lazy BlockState updating (2014-12-02)  ++|/ / ++* | d2c263030 - SPIGOT-85: Fix NPE in monster spawners when right-clicked with invalid spawn eggs (2014-12-01)  ++* | 1af2540f7 - Merge pull request #16 in SPIGOT/craftbukkit from ~AET2505/craftbukkit:fix/ShowPlayer to master (2014-12-01)  ++|\ \ ++| * | cc9b479fe - Fix show player (2014-11-30)  ++|/ / ++* | cd65011ea - Merge pull request #15 in SPIGOT/craftbukkit from ~GENAZT/craftbukkit:bugfix/oob-horses to master (2014-11-30)  ++|\ \ ++| * | ebec73b5a - Another attempt of fixing OOB Horses. Just remove them from the world instead of setting it dead. (2014-11-30)  ++|/ / ++* | cab7c772d - Add missing CB comment (2014-11-30)  ++* | c81db390a - Force chunk loading in EntityHuman.getBed, Fixes SPIGOT-64 (2014-11-30)  ++* | 8b94fad77 - Merge pull request #13 in SPIGOT/craftbukkit from ~GENAZT/craftbukkit:bugfix/SPIGOT-20 to master (2014-11-30)  ++|\ \ ++| * | cc0d8bb32 - Update the correct Scoreboard Criteria when a health change comes in. This fixes SPIGOT-20 (2014-11-30)  ++* | | 22df29225 - Add a somewhat hacky fix for plugins converting between book types (2014-11-30)  ++|/ / ++* | 6eb0c7927 - Fix Chunk.getTileEntities() (Fixes SPIGOT-62) (2014-11-30)  ++* | 7c0f35248 - Fix LEFT_CLICK_AIR (2014-11-30)  ++* | c8adfecee - Add a flag to correctly convert signs to 1.8 (2014-11-30)  ++* | 20207a012 - Correct the return value of getPlayerListName (2014-11-30)  ++* | 73f4bc343 - Merge pull request #10 in SPIGOT/craftbukkit from ~GENAZT/craftbukkit:bugfix/SPIGOT-58 to master (2014-11-30)  ++|\ \ ++| * | c8a76994d - Horses spawned under Y 0 cause CraftBukkit to crash. This happens a lot since people keep using bugged Horses for Holographics (2014-11-30)  ++|/ / ++* | cef65526d - Optimize the invalid block fixing (2014-11-29)  ++* | 0f552845d - Treat LeavesDecayEvent as canceled if a plugin changes the block (2014-11-29)  ++* | 9255e9d82 - Fix canceling BlockPlaceEvent (2014-11-29)  ++* | bf401fbbd - Remove old debug info (2014-11-29)  ++* | 89f59f9e4 - Merge pull request #8 in SPIGOT/craftbukkit from ~GENAZT/craftbukkit:bugfix/SPIGOT-46 to master (2014-11-29)  ++|\ \ ++| * | 1e8a3f192 - Corrected WorldData patch file (2014-11-29)  ++| * | b08f233fe - Rewrite the level.dat properly. This fixes SPIGOT-46 (2014-11-29)  ++* | | dd096a525 - Improve the invalid block handling (2014-11-29)  ++|/ / ++* | a497e4550 - Merge pull request #7 in SPIGOT/craftbukkit from ~GENAZT/craftbukkit:bugfix/SPIGOT-44 to master (2014-11-29)  ++|\ \ ++| * | 4d0f5edb0 - Just only hold the last BlockState update for the same location. This fixes SPIGOT-44 (2014-11-29)  ++|/ / ++* | 26672b7db - Merge pull request #6 in SPIGOT/craftbukkit from ~MIKEPRIMM/craftbukkit:mikeprimm/SPIGOT-30 to master (2014-11-29)  ++|\ \ ++| * | 469220492 - SPIGOT-30: Fix restoring of WorldData when loading worlds (2014-11-29)  ++* | | fdfadd23d - Fix a vanilla issue which causes invalid data values on blocks to turn to air (2014-11-29)  ++* | | 939f76458 - Fire EntityDamageEvent for armor stands (2014-11-29)  ++|/ / ++* / f498585ec - Ignore invalid blocks in ChunkSnapshots (2014-11-29)  ++|/ ++* a2c4d7e15 - Minecraft by default only uses the World at index 0 for the WorldBorder command. This fixes SPIGOT-12 (2014-11-29)  ++* c61594c78 - Merge pull request #4 in SPIGOT/craftbukkit from ~MIKEPRIMM/craftbukkit:mikeprimm/SPIGOT-29 to master (2014-11-29)  ++|\ ++| * dd33bcf6a - Fix chunk snapshot generation (needed for Dynmap) (2014-11-28)  ++* | 8c3698bf0 - Fix command blocks (2014-11-29)  ++|/ ++* 585a827dc - Fix setAge and related methods (2014-11-29)  ++* 923b375d8 - Fix missed case in CraftBlock (2014-11-29)  ++* 69e66a69c - Don't default the universe to the current directory (2014-11-28)  ++* 40d6bb2dc - Re-add the timestamp for spigot (2014-11-28)  ++* e79587649 - Fix interaction issues (2014-11-28)  ++* 443e45e27 - Don't commit unchanged patches (2014-11-28)  ++* 90ac03522 - Revert "Remove patch headers" (2014-11-28)  ++* d6e3dff7d - Remove patch headers (2014-11-28)  ++* b84c71e52 - Fix enchanting to match 1.8 behaviour (2014-11-28)  ++* c5d0d74ea - Improve vanilla command handling for command blocks (2014-11-28)  ++* 2575b3f9c - Remove extra color codes at the start from converted json chat (2014-11-28)  ++* 8768831c5 - Only rebuild patches that are changed (2014-11-28)  ++* 2abdb9a06 - Use the right name for the AsyncPlayerPreLoginEvent (2014-11-28)  ++* 669c44cb3 - Fix eating food whilst not facing a block (2014-11-28)  ++* 24557bc2b - Update to Minecraft 1.8 (2014-11-26)  ++* a4805dbd7 - Allow teleportation of entities on vehicles. Fixes BUKKIT-4210 (2013-07-07)  ++* 80e8f2ab8 - Implement ability to keep items on death via plugins. Adds BUKKIT-5724 (2014-07-31)  ++* 3626720d5 - Modify the invalid item set to permit command blocks. Fixes BUKKIT-4342 (2014-06-24)  ++* 4507cec09 - Fix PlayerFishEvent not correctly cancelling. Fixes BUKKIT-5396 (2014-02-19)  ++* b3e83b00f - Implement deprecated methods. Adds BUKKIT-5752 (2014-08-07)  ++* 1f0c79144 - Use sensible AssertionError instead of ambiguous RuntimeException (2014-08-07)  ++* 87f6fa7bc - Fix cancelling PlayerDropItemEvent. Fixes BUKKIT-3313 (2013-12-01)  ++* 971329c42 - Fix removal of items from Item Frames. Fixes BUKKIT-5736 (2014-08-02)  ++* 594d7cb8c - Don't confuse client with sound coordinates outside view distance. (2014-07-15)  ++* c7398b9fd - Provide modifier functions to EntityDamageEvent. Fixes BUKKIT-5688 (2014-07-13)  ++* 319a9c20e - Handle uniform block ids greater than 127. Fixes BUKKIT-5686 (2014-07-10)  ++* 13482ac7f - Put damage modifiers in Functions for event. Fixes BUKKIT-5681 (2014-07-09)  ++* dbb5e6e3c - Update CraftBukkit to Minecraft 1.7.10 (2014-06-26)  ++* a8628fd64 - Use 4787c23dce0f5ac856d8d398225828971a93a3ff Guava patch for onlinePlayers (2014-07-01)  ++* b602b5efa - Implement new getOnlinePlayers. Adds BUKKIt-5668 (2014-06-24)  ++* 83e934b3b - [Bleeding] Fix checks for non-living entities. Fixes BUKKIT-5667 (2014-06-24)  ++* 9099e48e7 - [Bleeding] Ignore damage done by LivingEntity.damage(). Fixes BUKKIT-5666 (2014-06-22)  ++* 6364f59ac - Use compact memory format for uniform chunk section data. (2014-06-21)  ++* 5adbab524 - [Bleeding] Set projectile source for reflected fireballs. Fixes BUKKIT-5661 (2014-06-19)  ++* 6f21d3ca8 - [Bleeding] Implement new damage api. Fixes BUKKIT-5326, BUKKIT-3878. (2014-06-19)  ++* bed3f7f8f - [Bleeding] Repair missing diff in Explosion. Fixes BUKKIT-5662 (2014-06-19)  ++* 5b9950b5f - Avoid checking for loaded chunks for lighting and entity ticking. (2014-06-16)  ++* ea126f98a - Don't check unload queue before ticking things anymore. (2014-06-16)  ++* e6a2feda2 - Updated version to 1.7.9-R0.3-SNAPSHOT for development towards next release. (2014-06-01)  ++* 080edc16b - Updated version to 1.7.9-R0.2 in pom.xml for Beta. (2014-06-01)  ++* 1b48298d2 - Add special case for handling place event with lilies. Fixes BUKKIT-5641 (2014-05-31)  ++* 1c13d076a - Improve ItemStack filtering. (2014-05-31)  ++* 47b57e6bc - Some assumptions are better than others. (2014-05-24)  ++* 0a45c3ebf - Use UUIDs in CraftPlayer equals and hashCode methods. Fixes BUKKIT-5634 (2014-05-26)  ++* 38fbe60d4 - Handle null targets in target event. Fixes BUKKIT-5635 (2014-05-26)  ++* 3fbf4d3b5 - Fix ItemStack state during BlockPlaceEvent. Fixes BUKKIT-5632 (2014-05-25)  ++* e080bafa5 - Rework mob item dropping on death. Fixes BUKKIT-5625 (2014-05-26)  ++* 4ab4fa5bb - Fix polarity of Bat.isAwake() and Bat.setAwake(boolean). Fixes BUKKIT-5624 (2014-05-20)  ++* a1f3d3580 - Updated version to 1.7.9-R0.2-SNAPSHOT for development towards next release. (2014-05-14)  ++* 07a546505 - Updated version to 1.7.9-R0.1 in pom.xml for Beta. (2014-05-14)  ++* 89d5265da - Ensure we always log commands and log the right thing. (2014-05-14)  ++* fa1b6ba83 - Update CraftBukkit to use new YamlConfiguration encoding changes (2014-05-14)  ++* 8daacb901 - Implement awake flag for bats. Adds BUKKIT-5606 (2014-05-13)  ++* 730a62c96 - Handle chat packets correctly (2014-05-13)  ++* 65a6e9778 - Handle inventory max stack sizes even better. Fixes BUKKIT-5595 (2014-05-12)  ++* 5610337b4 - Only set skull profile if it is a player skull. Fixes BUKKIT-5605 (2014-05-12)  ++* 690a908b9 - Avoid using the user cache in skull meta. (2014-05-03)  ++* 33e472229 - [Bleeding] Fix stack overflow with Ender Crystals. Fixes BUKKIT-5583 (2014-05-01)  ++* 2bf22a9c4 - Implement inventory creation by type and title. Fixes BUKKIT-4045 (2013-04-11)  ++* c3e4767a7 - [Bleeding] Recheck persistence for chicken jockeys each tick. Fixes BUKKIT-5577 (2014-04-28)  ++* 519551386 - [Bleeding] Include equipment in EntityDeathEvent loot. Fixes BUKKIT-5566 (2014-04-28)  ++* 76e627717 - [Bleeding] Allow generation of cocoa trees. (2014-04-28)  ++* d91ee7d7a - [Bleeding] Correct issues with MEGA_REDWOOD trees. Fixes BUKKIT-5568 (2014-04-28)  ++* 576758bc5 - Refactored BlockPlaceEvent and BlockChangeDelegate. Adds BUKKIT-5558 (2014-01-06)  ++* de97b62b8 - Don't limit anvil stack size. (2014-04-23)  ++* 5dfb74032 - Handle inventory max stack sizes better. Fixes BUKKIT-5564 (2014-04-23)  ++* c99de378c - Faux sleepers wake up normally. Fixes BUKKIT-3667 (2013-02-25)  ++* 5d24f2b9c - Make AnvilInventory.getItem() use both containers. Fixes BUKKIT-2788 (2013-04-06)  ++* 47367210f - Allow plugins to enchant normally unenchantable items. Adds BUKKIT-1849 (2013-05-05)  ++* 941650b9b - Fix setting entity's target. Fixes BUKKIT-1358 (2013-12-11)  ++* 4c9bf34bf - Update client stack when block place is cancelled. Fixes BUKKIT-5284 (2014-01-06)  ++* 5c115116e - Update chest animation after cancelling open event. Fixes BUKKIT-1440 (2014-01-06)  ++* d0be633ed - Catch exceptions when abandoning conversions. Fixes BUKKIT-5436 (2014-02-22)  ++* 8a6ed3a88 - Check that item in hand is not null after book event. Fixes BUKKIT-5443 (2014-02-27)  ++* a86bc7aeb - Call event when boat is destroyed by falling. Fixes BUKKIT-5500 (2014-03-29)  ++* 009246008 - Removing broken chunk caching from World. Fixes BUKKIT-5425 (2014-02-20)  ++* 890a4af12 - [Bleeding] Call EntityTargetEvent in many new places. (2014-02-05)  ++* 3abba8231 - Add files from mc-dev for diff visibility. (2014-03-24)  ++* 7df7778cc - [Bleeding] Call BlockRedstoneEvent for all rails. Adds BUKKIT-4080 (2014-01-26)  ++* 610c58c73 - Add BlockPoweredRail.java from mc-dev for diff visibility. (2014-01-25)  ++* 730adbbf4 - [Bleeding] Don't allow null display names. Fixes BUKKIT-5254 (2014-01-31)  ++* 2a2cdd488 - [Bleeding] Ice in the nether fades to air. Fixes BUKKIT-5373 (2014-02-06)  ++* 0a179711a - [Bleeding] Fix some inventories not using maxStack. Fixes BUKKIT-2883 (2014-01-23)  ++* a4fe7cd3c - [Bleeding] Return correct player SlotType. Fixes BUKKIT-3188 (2014-02-10)  ++* 9c251595d - [Bleeding] Return correct furnace SlotType. Fixes BUKKIT-5400 (2014-02-10)  ++* ec41228fb - [Bleeding] Ensure skeletons spawn with equipment. Fixes BUKKIT-2836 (2014-02-11)  ++* 81e560621 - [Bleeding] Add all blocks needed to PortalCreateEvent. Fixes BUKKIT-5464 (2014-03-20)  ++* 729df1a73 - [Bleeding] Add many missing SpawnReasons. (2014-02-05)  ++* b6831792e - Add files from mc-dev for diff visibility. (2014-02-07)  ++* d4fe10394 - [Bleeding] Add many missing event calls. (2014-03-27)  ++* 286c71329 - Add BlockTallPlant.java from mc-dev for diff visibility. (2014-03-27)  ++* eb43d0637 - [Bleeding] Add missing HangingBreakEvent. Fixes BUKKIT-3943 (2014-01-24)  ++* a81f26716 - Handle profiles in SkullMeta, they don't store a string anymore. (2014-04-17)  ++* 7e54acc8b - Update CraftBukkit to Minecraft 1.7.9 (2014-04-15)  ++* 98555224a - Handle expired bans correctly. Fixes BUKKIT-5541 (2014-04-17)  ++* 3e911dba5 - Make bans pretend to use names like before 1.7.8. (2014-04-17)  ++* a8d5c1224 - Make skulls pretend to only use names like before 1.7.8. (2014-04-17)  ++* 6ad36f09e - Fix getting white list, ban list, and op list. Fixes BUKKIT-5538 (2014-04-17)  ++* 5cbbcae9a - Import files from mc-dev for diff visibility (2014-04-17)  ++* dc194a97b - [Bleeding] Re-add missed diff in 1.7.5 update. Fixes BUKKIT-5536 (2014-04-14)  ++* fc39b27d7 - Don't do a lookup for obviously invalid usernames (2014-04-17)  ++* 555785614 - Add methods to use arbitrary entries in scoreboards. Adds BUKKIT-3977 (2014-04-13)  ++* 3dcf159ec - Fix missed diff and other small things (2014-04-13)  ++* d82e34da5 - Use world-container when finding players to convert. Fixes BUKKIT-5530 (2014-04-13)  ++* b689cfa83 - Check actual whitelist for CraftOfflinePlayer too (2014-04-12)  ++* f6a93775b - Check the actual whitelist for Player#isWhitelisted() (2014-04-12)  ++* 7b409ed4e - Use fetched GameProfile for getOfflinePlayer(String) (2014-04-12)  ++* 8f771c737 - Update CraftBukkit to Minecraft 1.7.8 (2014-04-10)  ++* 0df7555ce - Add method to send fake sign updates to players. Adds BUKKIT-2300 (2013-03-21)  ++* 903575ff2 - Add player unique ID to (Async)PlayerPreLoginEvent. Adds BUKKIT-5108 (2013-12-09)  ++* 8d77687e7 - Add equals for CraftInventory objects. Adds BUKKIT-4110 (2013-04-18)  ++* 434f15c84 - Store last known player names in preparation for name changing (2014-03-31)  ++* 21e7ba8d2 - Implement API for dealing with player UUIDs. Adds BUKKIT-5071 (2014-03-28)  ++* acc9f20b0 - Fix issues with leashes and weather due to missed diff (2014-03-26)  ++* 4992df25e - Correct missed diff (2014-03-24)  ++* d51463d16 - Fix PotionEffect removal. (2014-03-23)  ++* 58267995e - Fix missed diff making horses lose their saddle (2014-03-22)  ++* 019a33f50 - Fix teleport failing right after join. Fixes BUKKIT-5479 (2014-03-22)  ++* 4873b1289 - Increment loop index whether or not command succeeded. Fixes BUKKIT-5455 (2014-03-22)  ++* 385ace970 - Update CraftBukkit to Minecraft 1.7.5 (2014-03-20)  ++* afb3511a4 - Remove chunks from queue if we don't need them anymore. (2014-02-11)  ++* f6f0cf338 - Updated version to 1.7.2-R0.4-SNAPSHOT for development towards next release. (2014-02-12)  ++* 081fe9c41 - Updated version to 1.7.2-R0.3 in pom.xml for Beta. (2014-02-12)  ++* d9e04a5b2 - Check if entity is in list before decrementing. Fixes BUKKIT-5404 (2014-02-11)  ++* 00b3721f0 - Update/improve configuration documentation. (2014-02-11)  ++* 9131f5b55 - Ignore player selectors if not a Command Block. (2014-02-11)  ++* 776e256ff - Add PlayerSelector.java for diff visibility. (2014-02-11)  ++* 823457079 - Rename Minecraft command permission nodes to meet fallback spec. (2014-02-11)  ++* 533c48996 - Hide message from connection throttle on startup. Fixes BUKKIT-5403 (2014-02-10)  ++* 393ece9ec - Readd diff missed in the 1.7 update. (2014-02-10)  ++* 826643c60 - Handle removing entity while ticking. Fixes BUKKIT-1331 (2014-02-10)  ++* 1113d54da - Add method to forget callbacks in AsynchronousExecutor (2014-02-10)  ++* ce4b13c1a - Readd BlockPlaceEvent for half slab to full block. Fixes BUKKIT-5390 (2014-02-07)  ++* 219f4e2c2 - Match old alias behavior when migrating. (2014-02-08)  ++* 553acdf0c - [Bleeding] Implement Mojang command fallback system. Adds BUKKIT-5385 (2014-02-07)  ++* b18bedd84 - Implement banning API. Adds BUKKIT-3535 (2014-02-04)  ++* 66471a532 - [Bleeding] Correctly enchant books. Fixes BUKKIT-5302 (2014-01-21)  ++* 068d8a807 - Update clients when ItemFrame direction is set. Fixes BUKKIT-3371 (2013-08-30)  ++* 3e896afe6 - Implement SpawnReason.NETHER_PORTAL and DISPENSE_EGG. Fixes BUKKIT-3148 (2014-01-31)  ++* c59ba98ae - [Bleeding] Handle players disconnecting during respawn. Fixes BUKKIT-4327 (2014-02-01)  ++* d7d81fa68 - Load all already generated chunks via async chunk system (2014-02-01)  ++* 4a6a81e72 - Allow AsynchronousExecutor.getSkipQueue() to pull tasks from the queue (2014-02-01)  ++* 842962530 - Don't call duplicate interact air events. Fixes BUKKIT-5359 (2014-01-31)  ++* 990727107 - [Bleeding] Store correct block type when hitting blocks. Fixes BUKKIT-5209 (2014-01-30)  ++* e0da84635 - [Bleeding] Fix support for several entities in World.spawn(). Fixes BUKKIT-3284 (2014-01-21)  ++* 2fc5d5930 - [Bleeding] Use correct yaw and pitch when spawning arrows. Fixes BUKKIT-3320 (2014-01-21)  ++* b4c4c8ed7 - [Bleeding] Directly set direction in EntityFireball. Fixes BUKKIT-1154 (2014-01-21)  ++* 1fa4b69bd - [Bleeding] Implement setCharged and getCharged for WitherSkull. Addresses BUKKIT-3060 (2014-01-21)  ++* 8a5ad89a6 - [Bleeding] Implement ProjectileSource API. Addresses BUKKIT-1038, BUKKIT-1156 (2014-01-20)  ++* ac53442e7 - Add setCritical and isCritical methods to CraftArrow.java. Adds BUKKIT-5113 (2013-12-16)  ++* fb8c5547b - Add methods to get and set arrow knockback. Adds BUKKIT-5103 (2013-12-16)  ++* 7f2289945 - [Bleeding] Re-add EntityShootBowEvent lost in e93a3eb3b4c5234e3e3936bc697d566a42d3b30e. Fixes BUKKIT-4214 (2013-12-16)  ++* e962b1bc0 - [Bleeding] Add support for ThrownExpBottle and Fish to launchProjectile(...). Fixes BUKKIT-1536 (2013-12-16)  ++* 855b5f8ae - [Bleeding] Instantiate logger earlier in CraftServer. Fixes BUKKIT-4253. (2014-01-21)  ++* 19521b7f1 - [Bleeding] Fire interact events for Weighted Pressure Plates. Fixes BUKKIT-5053 (2013-12-16)  ++* 6a0095998 - Add BlockPressurePlateWeighted.java for diff visibility (2013-12-10)  ++* e4ba663d2 - Relocate NaN check on PacketPlayInFlying. (2014-01-16)  ++* 6e6ad530e - Readd connection throttle (2014-01-28)  ++* 516a02b8b - Fix stacking for items after setting empty meta. Fixes BUKKIT-5331 (2014-01-23)  ++* a46eac8bc - Implement API for ServerListPingEvent. Adds BUKKIT-5121, BUKKIT-2465 (2014-01-19)  ++* 030cf5a6d - [Bleeding] Properly handle EntityBreakDoor event canceling. Fixes BUKKIT-5318 (2014-01-07)  ++* 771c41c69 - [Bleeding] Account for null in EntityDamageEvent handling. Fixes BUKKIT-5317 (2014-01-07)  ++* fef9f9692 - [Bleeding] Check that vanilla recipes actually exist. Fixes BUKKIT-5277 (2014-01-05)  ++* b8143c63c - [Bleeding] Implement methods for /achievement command. Addresses BUKKIT-4932 (2014-01-16)  ++* 622a2976d - [Bleeding] Fix Achievements and Statistics API. Fixes BUKKIT-5305 (2014-01-14)  ++* dd12820c5 - Add StatisticManager.java for diff visibility. (2014-01-11)  ++* 05ed0a313 - Implement UnsafeValues for give command. Addresses BUKKIT-5286 (2014-01-14)  ++* 81919478f - [Bleeding] Implement setIdleTimeout and getIdleTimeout. Addresses BUKKIT-4932. (2014-01-07)  ++* fd65b29a0 - Consider repair cost when checking ItemMeta emptiness. Fixes BUKKIT-5304 (2014-01-14)  ++* 1f9f6a51c - Add failing unit test for ItemMeta-repairability (2014-01-14)  ++* 32d9db82e - Only delay removing containers. Fixes BUKKIT-5238 (2013-12-24)  ++* c57e45dcd - Process block cleanup first. Fixes BUKKIT-4103 (2013-12-20)  ++* 4a5de4249 - Updated version to 1.7.2-R0.3-SNAPSHOT for development towards next release. (2013-12-21)  ++* 025548445 - Updated version to 1.7.2-R0.2 in pom.xml for Beta. (2013-12-21)  ++* 1ecc59d4d - [Bleeding] Handle custom furnace recipes separately. Fixes BUKKIT-1657, BUKKIT-3846 (2013-12-20)  ++* 3c209a988 - [Bleeding] Fix crash involving horse passengers. Fixes BUKKIT-5212 (2013-12-20)  ++* 9bc3b7df2 - [Bleeding] Call event when reflecting fireballs. Adds BUKKIT-5214 (2013-12-20)  ++* 624603cd4 - [Bleeding] Send short version string on ping. Addresses BUKKIT-5206 (2013-12-19)  ++* dfcff7eab - Account for different reach limit in Survival/Creative. Fixes BUKKIT-4257 (2013-12-20)  ++* 6d9a6fbb4 - Fix attributes not clearing on death. Fixes BUKKIT-5213 (2013-12-20)  ++* 330dbbf78 - Updated version to 1.7.2-R0.2-SNAPSHOT for development towards next release. (2013-12-18)  ++* bda2179ae - Updated version to 1.7.2-R0.1 in pom.xml for Beta. (2013-12-18)  ++* 3cd64185a - [Bleeding] Correctly generate torches on portal. Fixes BUKKIT-746 (2013-12-17)  ++* 8da512628 - Add new setResourcePack method. Fixes BUKKIT-5015 (2013-12-17)  ++* 091fb2ea9 - Process URLs as clickable. Adds BUKKIT-4917 (2013-12-09)  ++* 0f48e9b06 - Check pending blocks before falling back to world. Fixes BUKKIT-5122 (2013-12-17)  ++* 4f63a5f25 - Fix mistranslation issue for PlayerToggleFlightEvent. Fixes BUKKIT-5172 (2013-12-17)  ++* fbdc3a7a7 - Remove references to chunklist. Fixes BUKKIT-5190 (2013-12-17)  ++* 0e809d831 - [Bleeding] Fix incorrect Cocoa Bean orientation. Addresses BUKKIT-5182 (2013-12-16)  ++* 9a6d03599 - Add missed tree types for Minecraft 1.7. Adds BUKKIT-5042 (2013-12-14)  ++* 2191599f4 - Fix generation of jungle trees. Fixes BUKKIT-5043 (2013-12-14)  ++* cee6a7bab - [Bleeding] Correct naming of sounds for 1.7. Fixes BUKKIT-5065 (2013-12-06)  ++* 24ff27b40 - Don't try to teleport to a null world. Fixes BUKKIT-5145 (2013-12-14)  ++* a565486ee - [Bleeding] Return correct drops for Cocoa blocks. Fixes BUKKIT-5159 (2013-12-12)  ++* 1ff8132bd - [Bleeding] Fix witches dropping empty ItemStacks on death. Fixes BUKKIT-3554 (2013-12-11)  ++* a0e50c36b - [Bleeding] Fix Blazes not firing death events. Fixes BUKKIT-4898 (2013-12-13)  ++* ae9cd0729 - [Bleeding] Call EntityTargetEvent for EnderDragons. Fixes BUKKIT-5160 (2013-12-11)  ++* 115448481 - Do not fire EntityDamageEvent for explosions twice. Fixes BUKKIT-5156 (2013-12-09)  ++* c2a0396af - Throw event when EnderCrystals harm EnderDragon. Fixes BUKKIT-4052 (2013-12-09)  ++* e6bccf6bf - Re-add WorldLoadEvent lost in 314051580a0a8e4745d3a539f232b552916eb302 Fixes BUKKIT-5125 (2013-12-10)  ++* 1460f250c - Alter fall particles to respect visibility API. Fixes BUKKIT-5158 (2013-12-13)  ++* bdbd1808f - Show fall particles while in creative mode. Fixes BUKKIT-5009 (2013-12-13)  ++* fbe062caf - Only filter data from block items, not all of them. Fixes BUKKIT-5047 (2013-12-13)  ++* f5fad449b - Call interact event if block cannot be punched. Fixes BUKKIT-5126 (2013-12-12)  ++* ca4c11899 - Rework furnace result log. Fixes BUKKIT-5115 (2013-12-10)  ++* f5f71a550 - Print message on startup before loading log4j (2013-12-09)  ++* 772867eb5 - Call event when pistons push an item frame/painting. Fixes BUKKIT-5110 (2013-12-09)  ++* 305e5f4f0 - Handle null damage events for item frames. Fixes BUKKIT-5114 (2013-12-09)  ++* 80935e5c2 - Don't consume bonemeal if there is no crop present. Fixes BUKKIT-3790 (2013-06-10)  ++* 0aa187f15 - [Bleeding] Ignore Block Physics in Chunk population. Fixes BUKKIT-4923 (2013-12-08)  ++* c7b4514ad - Call BlockPlaceEvent for cocoa beans planted on log. Adds BUKKIT-5039 (2013-12-06)  ++* 36ef37b98 - Call EntityDamageEvent on ItemFrame item removal. Fixes BUKKIT-5020 (2013-12-05)  ++* 3cf569a33 - Added EntityItemFrame.java for diff visibility (2013-12-05)  ++* 431e5ea44 - Set proper position of snow block. Fixes BUKKIT-5004 (2013-12-04)  ++* ff0da6bad - Fix BlockPhysicsEvent having incorrect changed type. Fixes BUKKIT-5063 (2013-12-05)  ++* 6f4d9bea2 - [Bleeding] Correctly generate giant mushrooms. Fixes BUKKIT-5066 (2013-12-06)  ++* 97cb46f9f - Reintroduce disconnection flag that was removed in 1.7 update. (2013-12-06)  ++* 70747ca28 - Follow vanilla settings behavior. Fixes BUKKIT-5069 (2013-12-06)  ++* dc86362c9 - Implement Firework.detonate(). Adds BUKKIT-4538 (2013-12-06)  ++* 8a29829d1 - Correctly register Furnace Recipies. Fixes BUKKIT-5044 (2013-12-04)  ++* b880a2d24 - Add new fishing enchants. Fixes BUKKIT-5035 (2013-12-03)  ++* e5353b82a - Correctly validate map colors. Fixes BUKKIT-4984 (2013-12-03)  ++* 169fd4696 - Finish kicking player before letting their clone in. Fixes BUKKIT-4960 (2013-12-03)  ++* bc0ac4807 - Try to detect when to disable jline automatically. Fixes BUKKIT-5028 (2013-12-03)  ++* 39719fff7 - Maintain old setType method in WorldGenerator. Fixes BUKKIT-4915 (2013-12-02)  ++* a721fe847 - Fix BlockCanBuildEvent returning null. Fixes BUKKIT-4972 (2013-12-01)  ++* 803268867 - Fix written books crashing the server. Fixes BUKKIT-4945 (2013-12-01)  ++* 579b20334 - Added RecipeBookClone from nms for diff visibility (2013-12-01)  ++* 9969a86e8 - Use strict lookup for op permission refresh. Fixes BUKKIT-4698 (2013-12-02)  ++* c5d8b4393 - Use correct packet data for toggling flying. Fixes BUKKIT-4989 (2013-12-02)  ++* 8c444f275 - Correctly drop BlockBreakEvent experience. Fixes BUKKIT-4942 (2013-12-02)  ++* 963cd5438 - Catch all exceptions in jansi initialization. Fixes BUKKIT-4936 (2013-12-02)  ++* f3865064f - Add ConsoleAppender from log4j for diff visibility (2013-12-02)  ++* 5b6f27103 - Fix missed doors diff. Fixes BUKKIT-4908 (2013-12-01)  ++* f0af95505 - Fix fishing ignoring event experience. (2013-12-01)  ++* 46c11eb83 - Handle ChatColor-ending messages FIXES BUKKIT-4924 (2013-12-01)  ++* 72b36b8b0 - Correctly send player names for the tab list. Fixes BUKKIT-4925 (2013-12-01)  ++* 6aafe7c5a - Make console work on Windows again. Fixes BUKKIT-4956 (2013-12-01)  ++* d48bcbe64 - Handle JUL logger formatting (2013-12-01)  ++* c09885459 - Forward exceptions to log4j, cleanup logger handling. Fixes BUKKIT-4948 (2013-12-01)  ++* 272669665 - Update CraftBukkit to Minecraft 1.7.2 (2013-11-04)  ++* ff8b70fbb - Updated version to 1.6.4-R2.1-SNAPSHOT for development towards next release. (2013-10-30)  ++* bf8865b82 - Updated version to 1.6.4-R2.0 in pom.xml for RB. (2013-10-30)  ++* 1c7698fab - Ensure maps are stored only in the main world. Fixes BUKKIT-4872 (2013-10-30)  ++* 7aabcb2ab - Don't share WorldMapCollection. Fixes BUKKIT-4871 (2013-10-30)  ++* 84237bb78 - Fix our versioning system. (2013-10-16)  ++* 641d35310 - Updated version to 1.6.4-R1.1-SNAPSHOT for development towards next release. (2013-10-24)  ++* 6cf9820c7 - Updated version to 1.6.4-R1.0 in pom.xml for RB. (2013-10-24)  ++* bd1389895 - Add auto-save plugin redundancy detection. (2013-09-23)  ++* de16ba6ee - Re-enable built in auto-save. Fixes BUKKIT-4800 (2013-10-23)  ++* 6430c868c - Remove redundant call to worldMaps.a(). Addresses BUKKIT-4828 (2013-10-19)  ++* 42e7fdee9 - Update maven compiler to 2.3.2 (2013-10-15)  ++* f4277d710 - Force item data to use a tag name. Fixes BUKKIT-4809 (2013-10-10)  ++* 159403e08 - Call BlockFadeEvent for fire on inflammable block. Fixes BUKKIT-4835 (2013-10-09)  ++* ca5e0c6db - Add exception-resilience to reading UUID. Fixes BUKKIT-4833 (2013-10-06)  ++* cfa5490a5 - Clarify exception message for bad hanging location. Fixes BUKKIT-4824 (2013-10-05)  ++* 90e8aa008 - Initialize hostname on handshake. Fixes BUKKIT-4793 (2013-09-20)  ++* dcb9d6a5e - Update CraftBukkit to 1.6.4 (2013-09-19)  ++* e20ef1f60 - Updated version to 1.6.2-R1.1-SNAPSHOT for development towards next release. (2013-09-11)  ++* 8656d6917 - Updated version to 1.6.2-R1.0 in pom.xml for RB. (2013-09-10)  ++* 79bc53fe9 - Update for 1.6.2_01 renames. (2013-09-10)  ++* 7ad5d6098 - Fix villager death sound (2013-09-10)  ++* ac73522ec - Add missing villager sounds. Addresses BUKKIT-4756 (2013-09-10)  ++* 6d700c332 - Use correct spawn reason for Zombie reinforcements. Fixes BUKKIT-4744 (2013-09-10)  ++* b8feaf059 - Remove unnecessary error logging. Fixes BUKKIT-4406 (2013-09-10)  ++* ffcd0f450 - Provide a tab completion handler for JLine. Adds BUKKIT-4168 (2013-08-17)  ++* 5f65cd9a1 - Add support for custom Hopper inventories. Fixes BUKKIT-4722 (2013-08-27)  ++* 600e1524a - Update and add new sound mappings. Fixes BUKKIT-4756 (2013-09-10)  ++* 5f43109c0 - Correct location of fire from lightning strikes. Fixes BUKKIT-4707 (2013-08-19)  ++* 8ae8957d1 - Properly set persistence flag for bred animals. Fixes BUKKIT-4751 (2013-09-10)  ++* c62375f95 - Check that a vehicle is a Vehicle before casting. Fixes BUKKIT-4749 (2013-09-07)  ++* 5c861fe86 - Fix improperly initialized usernames (2013-09-02)  ++* cd593fb1e - Set current recipe to null when a recipe isn't found. Fixes BUKKIT-2311 (2013-08-12)  ++* 4667e9493 - Add source encoding to the maven compiler plugin. (2013-08-28)  ++* 2e7f66787 - Return correct hasLineOfSight value for players. Fixes BUKKIT-4634 (2013-08-17)  ++* 6482b6f0b - Fire FoodLevelChangeEvent when eating cake. Fixes BUKKIT-2242 (2013-07-19)  ++* 3fb4ccb62 - Add BlockCake for diff visibility. (2013-07-19)  ++* f481c9ee0 - Make ItemFactoryTest.java platform agnostic. Fixes BUKKIT-4695 (2013-08-14)  ++* ea39ca187 - Return instance of CraftInventoryBeacon for Beacons. Fixes BUKKIT-4521 (2013-07-18)  ++* 92f111cfe - Fix missed diff for chat packets. Fixes BUKKIT-4666 (2013-08-07)  ++* 0506b709f - Wrap plugin.getDefaultWorldGenerator in try-catch. Fixes BUKKIT-4116 (2013-04-18)  ++* 71a6a5657 - Fix javac workaround in ItemStackTest (2013-08-06)  ++* 9ba5c79c3 - Add BukkitObjectIOStream tests on top of ItemMeta tests (2013-05-19)  ++* 066fcfe79 - Validate title for custom inventories. Fixes BUKKIT-4616, BUKKIT-4663 (2013-08-06)  ++* 5e8dd7d57 - Use correct spawn reason for Villagers Breeding. Fixes BUKKIT-4113 (2013-07-19)  ++* 485e9ad93 - Add PathfinderGoalMakeLove for diff visibility (2013-07-19)  ++* 4aeb3ff63 - Call unleash event for non-sitting animals. Fixes BUKKIT-4658 (2013-08-05)  ++* e489840ca - Updated version to 1.6.2-R0.2-SNAPSHOT for development towards next release. (2013-08-04)  ++* ff60299af - Updated version to 1.6.2-R0.1 in pom.xml for Beta. (2013-08-03)  ++* 6d0d33b9d - Fix off by 1 error for spawn protection. Fixes BUKKIT-4154 (2013-07-31)  ++* e7539378f - Fix mistranslation in isPlayerCreated() for IronGolems. Fixes BUKKIT-4543 (2013-07-13)  ++* da5d494b3 - Update players when coming into view of vehicle. Fixes BUKKIT-4628 (2013-08-03)  ++* 54672a75f - Implement Leash API. Adds BUKKIT-4459, BUKKIT-4583 (2013-07-31)  ++* f7ca953ff - Add EntityLeash and ItemLeash for diff visibility (2013-07-28)  ++* 8a7c582d5 - Ignore null sound by contract. Fixes BUKKIT-4641 (2013-08-02)  ++* 93cfe3961 - Indicate help is a command. Fixes BUKKIT-4642 (2013-08-02)  ++* 720a8d706 - Revert to 1.5 despawning behaviour for Ocelots and Wolves. Fixes BUKKIT-4449 (2013-08-01)  ++* a466e0aa6 - Add timeout for Panic goal. Fixes BUKKIT-4531 (2013-08-01)  ++* ab36dbb6a - Add PathfinderGoalPanic for diff visibility. (2013-08-01)  ++* f959530f6 - Add raw sound string playSound method. Adds BUKKIT-2443 (2013-07-19)  ++* c8b09db84 - Restore diff missed in 4176258a836062b22ac46919aefa5cc36fae78f2 (2013-08-01)  ++* 69d336233 - Revert "Correct vehicle movement issues." Fixes BUKKIT-4565 (2013-07-29)  ++* b2be908fb - Fix NBT token for attribute names. Addresses BUKKIT-4483 (2013-07-28)  ++* 1e7f2ebeb - Store item attributes. Addresses BUKKIT-4523 (2013-07-23)  ++* b6fec0467 - Restore CraftBukkit diff in ItemDye. Fixes BUKKIT-4493 (2013-07-18)  ++* 5bfd599e9 - Store owning Horse in horse inventory. Fixes BUKKIT-4586 (2013-07-25)  ++* 0a9758ae5 - Fix CraftBukkit diffs (2013-07-23)  ++* e88cea840 - Check interactable items before event. Fixes BUKKIT-4576 (2013-07-23)  ++* 1192f2a53 - Add API to control scaled health. Adds BUKKIT-4590 (2013-07-23)  ++* 4ad3cdd4b - Use ambient setting of potion effects. Fixes BUKKIT-4357 and BUKKIT-3653 (2013-06-19)  ++* cebc247b7 - Correctly fire VehicleExitEvent. Fixes BUKKIT-3761 (2013-07-12)  ++* 67f15266d - Return inGround when checking Arrow's OnGround state. Fixes BUKKIT-4439 (2013-07-10)  ++* a31158bd0 - Clear attributes on death; mistranslation issue. (2013-07-10)  ++* 96fd897a2 - Missed a mention of Java 5. We build for Java 6, as per the Minecraft spec. (2013-07-10)  ++* f9d58bf48 - Implement Horse API. Adds BUKKIT-4424 (2013-07-10)  ++* a192775f0 - Add PathfinderGoalTame for diff visibility. (2013-07-08)  ++* f66588495 - Correctly set level name for 'world' option. Fixes BUKKIT-4474 (2013-07-09)  ++* 9109bd765 - Ocelots -> Ocelittle. Addresses BUKKIT-4449 (2013-07-08)  ++* f6a0b1e42 - Update CraftBukkit to 1.6.2 (2013-07-08)  ++* 2d9a9d8ce - Removed extra eat call. Fixes BUKKIT-4462 (2013-07-04)  ++* fdd53f9dd - Improve maps.yml. Fixes BUKKIT-4419 (2013-07-03)  ++* c00db5f75 - Properly clear attributes on remove and death. Fixes BUKKIT-4416 (2013-07-03)  ++* adcb293a0 - Fix scaling for player health. Fixes BUKKIT-4431 (2013-07-02)  ++* e1a3fb56b - Minecraft spec has changed and we're required to follow. We now build with Java 6. (2013-07-02)  ++* 29fa46a4b - Fix donkey/mule dupe exploit. (2013-07-02)  ++* 7b71fc23b - Added EntityHorse for diff visibility. (2013-07-02)  ++* d213f7588 - Update client on cancelled entity naming. Fixes BUKKIT-4396 (2013-07-02)  ++* 774cf2a2c - Update client on cancelled leash. Fixes BUKKIT-4395 (2013-07-02)  ++* a15096ae1 - Send event-defined MOTD/maxplayers. Fixes BUKKIT-4409 (2013-07-02)  ++* 905f00b07 - Fix world preparation status output. Fixes BUKKIT-4407 (2013-07-02)  ++* 65ccff634 - Regrow sheep wool on grass consumption. Resolves BUKKIT-4405 (2013-07-02)  ++* 3a9622cbd - Fix Entity persistence. Fixes BUKKIT-4397 (2013-07-02)  ++* 22adf8a3c - Rework max health values. Fixes BUKKIT-4398 (2013-07-02)  ++* e79d26d7d - Fixed NPE in BrewingStand (2013-07-01)  ++* 6c09066e2 - Update CraftBukkit to 1.6.1 (2013-07-01)  ++* f887b76a2 - Updated version to 1.5.2-R1.1-SNAPSHOT for development towards next release. (2013-06-14)  ++* c945563f9 - Updated version to 1.5.2-R1.0 in pom.xml for RB. (2013-06-14)  ++* 5c8498c8b - Fix cancellation for InventoryDragEvent. Fixes BUKKIT-4332 (2013-06-13)  ++* 930a9e805 - Correct cancellation of InventoryClickEvent. Fixes BUKKIT-4331 (2013-06-13)  ++* 93c0d7e6b - Fix negative damage from Zombies. Fixes BUKKIT-4193 (2013-05-05)  ++* 045121d09 - Implement PlayerBookEditEvent. Adds BUKKIT-1995 (2013-01-18)  ++* c55c0db86 - Update blaze breathe sound. Fixes BUKKIT-4286 (2013-05-30)  ++* bf4796d39 - Fix creative ArrayIndexOutOfBoundsException. Fixes BUKKIT-4305 (2013-06-04)  ++* 991218a33 - Improve events for new inventory features. Adds BUKKIT-3859 (2013-04-13)  ++* 56dbde3c5 - Updated version to 1.5.2-R0.2-SNAPSHOT for development towards next release. (2013-05-03)  ++* 9b9cd2dc0 - Updated version to 1.5.2-R0.1 in pom.xml for BETA. (2013-05-03)  ++* 5ed1418bb - Pass correct block when dispensing empty buckets. Fixes BUKKIT-3668 (2013-05-03)  ++* d9eb58656 - Correct event handling for dispensing filled buckets. Fixes BUKKIT-4046 (2013-05-03)  ++* 28fb514a4 - Send block updates even when applyPhysics is false. Fixes BUKKIT-3971 The CraftBlock class is setting bit 0x4 of the update flag when bit 0x2 should in fact be set here. Bit 0x2 means "do updates"; bit 0x4 means "don't do updates if the world is static, even when bit 0x2 is set". (2013-04-29)  ++* 4e7ad0511 - Fix typo/logic error in previous commit (2013-05-02)  ++* 25ca3f41a - Fix animal spawning ignoring limits. Fixes BUKKIT-4180 (2013-05-02)  ++* 401a6809b - Improve InventoryCloseEvent handling. Fixes BUKKIT-3286 (2013-05-02)  ++* 75641a607 - Move world generator warning to CraftBukkit. Fixes BUKKIT-2565 (2013-03-21)  ++* f08081c77 - Always process movement for vehicles and passengers. Fixes BUKKIT-4142 (2013-04-30)  ++* 2715e4330 - Revert "Add delay to hopper even if it doesn't do anything." (2013-04-27)  ++* 3bbfb4179 - Fix things using wall time running too fast. Fixes BUKKIT-4155 (2013-04-27)  ++* 799779e4b - Update CraftBukkit to Minecraft 1.5.2 (2013-04-27)  ++* 83c3aa188 - Rework EntityExplodeEvent. Fixes BUKKIT-4140. Adds BUKKIT-4141 (2013-04-24)  ++* 708b0e6ae - Don't do physics updates in world generation. Fixes BUKKIT-3747 (2013-04-16)  ++* 40e630871 - Validate chunk data array lengths. Fixes BUKKIT-4093 (2013-04-15)  ++* 928e4d9bb - When moving a misplaced chunk move tile entities too. Fixes BUKKIT-4092 (2013-04-15)  ++* 0ab14dbaa - Make Slimes fire EntityTarget events. Fixes BUKKIT-1408 (2013-03-28)  ++* e62614a71 - Updated version to 1.5.1-R0.3-SNAPSHOT for development towards next release. (2013-04-13)  ++* 3dfdd0fe4 - Updated version to 1.5.1-R0.2 in pom.xml for BETA. (2013-04-13)  ++* c3cf8a435 - Don't apply fall damage when cancelled. Fixes BUKKIT-4065 (2013-04-13)  ++* 859049268 - Add delay to hopper even if it doesn't do anything. Fixes BUKKIT-4061 (2013-04-12)  ++* 5cc4fbd71 - Perform anvil calculations when using 1.5 drop feature. (2013-04-11)  ++* 1c18834b7 - Use wall time instead of ticks for several things. Fixes BUKKIT-4059 (2013-04-11)  ++* 94f43d8c3 - Add MobEffect from mc-dev for diff visibility (2013-04-11)  ++* a2d9f33ca - Various minor performance improvements (2013-04-11)  ++* 159d614a3 - Correct vehicle movement issues. Fixes BUKKIT-2993, BUKKIT-4056 (2013-04-11)  ++* ce5b97ea8 - Fetch tile entities from chunks instead of world. Fixes BUKKIT-4055 (2013-04-11)  ++* 70a778f47 - Boats can only die once. (2013-04-11)  ++* 7939572c3 - Check connection status before setting scoreboard. Fixes BUKKIT-4064 (2013-04-12)  ++* 3e0d8331b - Change perspective of team checking. Fixes BUKKIT-4044 (2013-04-11)  ++* ac593849a - Use correct method for getting player's team. Fixes BUKKIT-4050 (2013-04-11)  ++* 77d1524b3 - Refactor EntityDamageEvents. Adds BUKKIT-1944 & BUKKIT-3684 (2013-04-09)  ++* 535a85a5b - Make auxiliary worlds use the main scoreboard. Addresses BUKKIT-3984 (2013-04-04)  ++* 2a5e90fb8 - Handle large chests correctly for hopper events. Fixes BUKKIT-3979 (2013-04-04)  ++* 055c13461 - We compile for 1.5 (2013-04-04)  ++* d95a4705c - Implement Scoreboard API. Adds BUKKIT-3776 (2013-03-22)  ++* 5634d9f70 - Add a WeakCollection utility class. (2013-04-02)  ++* 3f637d172 - Add ScoreboardServer from mc-dev for diff visibility (2013-03-22)  ++* 0c6b9bba1 - Updated version to 1.5.1-R0.2-SNAPSHOT for development towards next release. (2013-04-04)  ++* e5ebb143d - Updated version to 1.5.1-R0.1 in pom.xml for BETA. (2013-04-03)  ++* 5ede9ce5f - Add missing calls to BlockRedstoneEvent. Adds BUKKIT-3926 (2013-03-29)  ++* 1d6ff3461 - Add BlockDaylightDetector from mc-dev for diff visibility (2013-03-29)  ++* 743d0fb60 - Properly return contents of Inventory. Fixes BUKKIT-3930 (2013-03-29)  ++* c33908509 - Set world on fixed tile entity to avoid NPE. Addresses BUKKIT-3949 (2013-04-01)  ++* 311f0c86a - Fix mismatched tile entities for new blocks. Fixes BUKKIT-3949 (2013-03-31)  ++* 71a475f07 - Don't update physics when block place is cancelled. Fixes BUKKIT-3939 (2013-03-31)  ++* d3dbb1bb5 - Correct slot types for brewing stand. Fixes BUKKIT-3937 (2013-03-31)  ++* f859d4572 - Throw exception for disabled plugin tasks. Fixes BUKKIT-3951 (2013-03-31)  ++* af964c833 - Limit hopper to valid directions. Fixes BUKKIT-3940 (2013-03-31)  ++* 06ebe6b70 - Add BlockHopper from mc-dev for diff visibility. (2013-03-31)  ++* a1c38cd8f - Include anvil result in inventory size. Fixes BUKKIT-3741 (2013-03-30)  ++* af7ea28bc - Only call event when turning pressure plate on. Fixes BUKKIT-3881 (2013-03-29)  ++* 82e05d435 - Special case large chests for hopper events. Fixes BUKKIT-3916 (2013-03-29)  ++* ee572114d - Add Beacon block state for hopper events. Fixes BUKKIT-3932 (2013-03-29)  ++* 377be0a79 - Call PotionSplashEvent even for no effects. Fixes BUKKIT-3618 (2013-03-28)  ++* adbee6049 - Call appropriate event for zombies igniting players. Adds BUKKIT-3915 (2013-03-28)  ++* acd637d48 - Properly copy collection references in ItemMeta.clone(). Fixes BUKKIT-3913 (2013-03-28)  ++* 1a7e5a75a - Correct missed diff on skeletons. Fixes BUKKIT-3912 (2013-03-28)  ++* 08f3df82e - Improve calling of ProjectileHitEvent. Fixes BUKKIT-3872 (2013-03-23)  ++* 45d3e2514 - Add missing semicolon (2013-03-25)  ++* 3c02fb02a - Allow plugins to enchant already enchanted items. Fixes BUKKIT-1956 (2013-03-24)  ++* 02a5d09dd - Call EntityChangeBlockEvent when boats destroy blocks. Fixes BUKKIT-3871 (2013-03-23)  ++* 18d7bc7ca - Allow fishing success rate to be adjustable. Adds BUKKIT-3837 (2013-03-20)  ++* 96ba65d50 - Add methods to check conflicting enchantments. Adds BUKKIT-3830 (2013-03-20)  ++* 5f089137e - Cleanup comments, formatting, etc (2013-03-24)  ++* 7c40a073d - Add ability to change player item in hand. Adds BUKKIT-3318 (2012-12-27)  ++* b53204297 - Don't assume all hoppers are blocks. Fixes BUKKIT-3883 (2013-03-24)  ++* 8d3ba07f9 - Add check for Thorns damage - Fixes BUKKIT-3505 (2013-03-23)  ++* 62c6d223e - Include ThrownPotion in spawn methods. Adds BUKKIT-2542 (2013-03-23)  ++* e1b50b011 - Identify outside slot independent of inventory type. Fixes BUKKIT-2768 (2013-02-21)  ++* e61a6bab0 - Implement InventoryMoveItemEvent. Adds BUKKIT-3765 (2013-03-22)  ++* b10474253 - Fire VehicleEnterEvent for loaded chunks only. Fixes BUKKIT-3831 (2013-03-22)  ++* 3ad423af0 - ANSI color codes now reset text attributes. Fixes BUKKIT-3508 (2013-01-26)  ++* 444ced306 - Cleanup and rework physical interaction events. Fixes BUKKIT-3686 (2013-03-22)  ++* ae19f2c46 - Implement Dropper interface. Adds BUKKIT-3750 (2013-03-21)  ++* 978de7e9d - Add BlockDropper for diff visibility (2013-03-21)  ++* 6f9e4f854 - Stationary lava is also a LAVA ignition cause. (2013-03-21)  ++* abee10783 - Add ability to modify ThrownPotion properties. Adds BUKKIT-3197 (2012-12-17)  ++* 2c5b2a8f6 - Add method to get the source of a TNTPrimed. Adds BUKKIT-3815 (2013-03-21)  ++* 816a7f155 - Ignore all .DS_Store files, not just the one in the project root. (2013-01-26)  ++* 83e0e0770 - Add Fish (Hook) entity to PlayerFishEvent. Adds BUKKIT-1025 (2013-03-13)  ++* ddec7117e - Implement unit test for hasGravity(). Adds BUKKIT-3832 (2013-02-15)  ++* 696543cf3 - Update CraftBukkit to Minecraft 1.5.1 (2013-03-20)  ++* 6aaa1e83d - Really don't filter out -1 data in ItemStack. (2013-03-20)  ++* b325ffc8f - Handle filled buckets dispensing up and down. Fixes BUKKIT-3814 (2013-03-20)  ++* 2fc755cc6 - Don't filter out -1 data in ItemStack. Fixes BUKKIT-3824 (2013-03-20)  ++* 26d1f9189 - Readd missed diff for minecart container size. Fixes BUKKIT-3826 (2013-03-20)  ++* dc19d3788 - BlockState for Command Blocks. Adds BUKKIT-3805. (2013-03-18)  ++* e639690e4 - Validate Server method input. Addresses BUKKIT-3687 (2013-03-18)  ++* abee2151e - Remove point about squashing commits. (2013-03-18)  ++* 370b912dd - Add link to CONTRIBUTING.md in README (2013-03-18)  ++* aabfe5a56 - Pull Contributing Guidelines and Requirements into CONTRIBUTING.md (2013-03-18)  ++* 51d4e647f - Only filter data on block items, not all items. (2013-03-18)  ++* d26336eb4 - Add /testfor command support to command block. Adds BUKKIT-3813 (2013-03-18)  ++* 596047aa6 - Only set player weather if a plugin requested it. (2013-03-18)  ++* 1bde25bb3 - Implement per-player Weather API. Adds BUKKIT-812 (2012-12-20)  ++* a7a5f273e - Implement new cause versions of BlockIgniteEvent. Addresses BUKKIT-3609, BUKKIT-3656, BUKKIT-3657 (2013-03-17)  ++* 2e6cfdb3c - Implement InventoryPickupItemEvent. Adds BUKKIT-3798 (2013-03-18)  ++* 2642fbdf7 - Make CraftMinecartHopper work as InventoryHolder. Adds BUKKIT-3796 (2013-03-17)  ++* 93fd33e21 - Implement Entity.isOnGround(). Adds BUKKIT-3787 (2013-03-17)  ++* 5df704bf5 - Use name given to command block instead of "@". Fixes BUKKIT-3803 (2013-03-17)  ++* d802168cd - Implement Hopper block state and inventory methods. Adds BUKKIT-3749 (2013-03-16)  ++* 6f68fc4ba - Add missing getOwner method for container minecarts. (2013-03-16)  ++* 737e8c512 - Allow special crafting data value on items. Fixes BUKKIT-3780 (2013-03-16)  ++* 5515b0ee2 - Handle double trapped chest inventory. Fixes BUKKIT-3772 (2013-03-16)  ++* 0e60f1f7b - Fire BlockDispenseEvent for new dispenser behaviors. Fixes BUKKIT-3774 (2013-03-16)  ++* fbe609bdb - Add new DispenseBehavior files from mc-dev for diff visibility. (2013-03-16)  ++* ff1c1daf6 - Allow data on tool items. Fixes BUKKIT-3773 (2013-03-16)  ++* 2e47a1eb8 - Comment out vanilla debug message. (2013-03-16)  ++* 515830cda - Filter negative values for all items. (2013-03-16)  ++* 6d88d545e - Filter data for items that shouldn't have it and filter wool. (2013-03-16)  ++* a76a5bd36 - Ignore invalid inventory slots. Fixes BUKKIT-3737 (2013-03-16)  ++* 9a38f2022 - Use Chest block state for trapped chests. Fixes BUKKIT-3762 (2013-03-16)  ++* 5903b9f5c - Don't set health directly, will interfere with scoreboard system. (2013-03-16)  ++* 746632121 - Limit mob names to 64 chars to avoid client crash. Fixes BUKKIT-3753 (2013-03-16)  ++* 4fa8c24e4 - Always consume bonemeal when used on a sapling. Fixes BUKKIT-3755 (2013-03-16)  ++* d47849df8 - Remove duplicate place logic for snow. Fixes BUKKIT-3756 (2013-03-16)  ++* 2cb9cbf05 - Handle the newly refactored minecarts. (2013-03-15)  ++* b2c72b968 - Use proper naming convention for boolean methods. (2013-03-15)  ++* 83d29e461 - Update CraftBukkit to Minecraft 1.5 (2013-03-13)  ++* ba6e4c38c - Fix compilation error with exception names (2013-03-02)  ++* 032c7366a - Use the correct CB object for ContainerBrewingStand. Fixes BUKKIT-3357 (2013-02-08)  ++* cf7dfeda6 - Add proper logging for custom channel exceptions. (2013-02-06)  ++* f6c574dd0 - Implement PlayerItemConsumeEvent. Adds BUKKIT-2349 (2013-03-02)  ++* 993e19b3f - Close inventory on teleport. FIXES BUKKIT-3021. (2013-02-09)  ++* d06e597ca - Check TravelAgent.findOrCreate(Location) for null; Fixes BUKKIT-3590 (2013-02-09)  ++* 5bb81b75c - Set CraftTravelAgent.DEFAULT to a non-null value. Fixes BUKKIT-3578 (2013-02-05)  ++* 2e99e0209 - Use entity UUID instead of EntityID for metadata. Fixes BUKKIT-3582 (2013-02-06)  ++* efe8e9a7f - Always return a TravelAgent; Fixes BUKKIT-3541 (2013-02-03)  ++* 4d3865a03 - Fix players spawning above portals. Fixes BUKKIT-3542. (2013-02-03)  ++* d661c67a7 - Always use the set exit location for portal events. Fixes BUKKIT-3555. (2013-02-02)  ++* 94da64ee9 - Use the result of EntityPortalExitEvent. Fixes BUKKIT-3559. (2013-02-02)  ++* 1090e0cf4 - Updated version to 1.4.7-R1.1-SNAPSHOT for development towards next release. (2013-01-30)  ++* 416f1d6cc - Updated version to 1.4.7-R1.0 in pom.xml for RB. (2013-01-30)  ++* b4b7cacf5 - Fix NPE when getting bed spawn location. (2013-01-29)  ++* 37975946a - Fix contract with Player.getBedSpawnLocation. Fixes BUKKIT-3525 (2013-01-29)  ++* 0576395dd - When leaving the end, always target the main world. Fixes BUKKIT-3517 (2013-01-29)  ++* b0e43c809 - Make command blocks only select players on its world. Fixes BUKKIT-3515 (2013-01-28)  ++* 132fdbc4a - Target default world when returning from The End; Fixes BUKKIT-3494 (2013-01-24)  ++* 50e74b3b4 - Remove erroneous break statement in scheduler. Fixes BUKKIT-3395 (2013-01-27)  ++* 1053a1e29 - Update Fireballs to account for ExplosionPower. Fixes BUKKIT-3460 Adds BUKKIT-3516 (2013-01-27)  ++* f20d6e359 - Ignore block functions for skulls on BlockPlace. Fixes BUKKIT-3495 (2013-01-27)  ++* 899b9c17c - Direct all BlockPlaceEvents to a singular location. Fixes BUKKIT-3438 (2013-01-27)  ++* 528bbbdcd - Fix TileEntities and Blocks getting out of sync. Fixes BUKKIT-3501 (2013-01-27)  ++* 6e438ccb3 - Call BlockGrowEvent for Cocoa plants. Fixes BUKKIT-2525 (2013-01-02)  ++* d74cf36f1 - Add BlockCocoa for diff visibility. (2013-01-02)  ++* b82375a59 - Preserve source block in mushroom spread event. Fixes BUKKIT-3354 (2013-01-02)  ++* f10c98613 - Properly calculate level cost for books. Fixes BUKKIT-3410 (2013-01-24)  ++* f1efe717b - Call BlockPlaceEvent for skulls the same as other blocks. BUKKIT-3406 (2013-01-20)  ++* 9df87d339 - Compensate for allow-nether/allow-end as false; Fixes BUKKIT-3466 (2013-01-22)  ++* 488e45b4f - Reload ban files when reloading the server. Adds BUKKIT-3470 (2013-01-23)  ++* 641ecc4f3 - Return the valid max value for piston direction. Fixes BUKKIT-2191 (2013-01-23)  ++* 9ba0ddc29 - Refactor processBlockPlace logic. Fixes BUKKIT-3406 and BUKKIT-3454 (2013-01-18)  ++* 6a499c858 - Fix broken null contract with Jukebox.setPlaying, Fixes BUKKIT-3429 (2013-01-19)  ++* d834ca4c6 - [Bleeding] Add experimental support for entity portal traveling (2012-12-22)  ++* 9cb320654 - Add BlockEnderPortal for diff visibility (2013-01-19)  ++* 01fc296fe - Improve the item meta deserialization code-style (2013-01-18)  ++* 5934a6572 - Always call PotionSplashEvent. Fixes BUKKIT-3363 (2013-01-03)  ++* d577b840d - Place beds with the correct data. Fixes BUKKIT-3447 (2013-01-17)  ++* 3d133d7ab - Updated version to 1.4.7-R0.2-SNAPSHOT for development towards next release. (2013-01-17)  ++* ed817d199 - Updated version to 1.4.7-R0.1 in pom.xml for Beta. (2013-01-17)  ++* e59af9908 - Update CraftBukkit to Minecraft 1.4.7 (2013-01-17)  ++* 315127782 - Initialize entity data before spawning them. Fixes BUKKIT-3209 (2013-01-16)  ++* b58106846 - Fix entities traveling sideways. Addresses BUKKIT-3443 (2013-01-14)  ++* ccbd3d84e - Get the BlockState before changing the block. Fixes BUKKIT-3441 (2013-01-16)  ++* 98aea835b - Handle beds and doors the same way as other blocks. Fixes BUKKIT-3437 Relates to: BUKKIT-3438 (2013-01-16)  ++* 614ef2f8c - Throw BlockPlaceEvent when placing double slabs. Fixes BUKKIT-2469 (2013-01-16)  ++* 647b82032 - Add ItemStackMapTest (2013-01-15)  ++* 8bc9e712e - Spawn monsters without prematurely exiting. Fixes BUKKIT-3425 (2013-01-13)  ++* dd7ba4a25 - Various ItemMeta fixes. (2013-01-09)  ++* 43865e8e6 - Update unit test to reflect firework color fix. Fixes BUKKIT-3382 (2013-01-05)  ++* 182681e38 - Update calls to DyeColor getData and getByData. Addresses BUKKIT-2786 (2013-01-05)  ++* baaf8e1d8 - Implement fishing experience. Adds BUKKIT-3348 (2013-01-01)  ++* fb0be1fc0 - Move the tile entity with the falling block. Adds BUKKIT-3349 (2013-01-01)  ++* 8f0c1aed6 - Fix "setSitting" on tameable animals. Fixes BUKKIT-1534 (2012-12-31)  ++* 05512942d - Add PathfinderGoalSit for diff visibility (2012-12-31)  ++* 95098c943 - Updated version to 1.4.6-R0.4-SNAPSHOT for development towards next release. (2012-12-31)  ++* 2e1033215 - Updated version to 1.4.6-R0.3 in pom.xml for Beta. (2012-12-31)  ++* 32924f975 - [Bleeding] Fix corruption due to thread safety issues. Fixes BUKKIT-3333 (2012-12-30)  ++* 6bb240cdf - Updated version to 1.4.6-R0.3-SNAPSHOT for development towards next release. (2012-12-29)  ++* 4047542d6 - Updated version to 1.4.6-R0.2 in pom.xml for Beta. (2012-12-29)  ++* bb8379581 - Return the level, not ID. Fixes BUKKIT-3326 (2012-12-29)  ++* 8954cb291 - /dev/null does not accept EnchantmentThorns (2012-12-29)  ++* 7b5a8d0c2 - Don't teleport entities that are considered dead. Addresses BUKKIT-1331 (2012-12-27)  ++* fb0eed177 - [Bleeding] Implement periodic chunk garbage collector (2012-12-10)  ++* 538de63a0 - Fix persistence on tamed pets. Fixes BUKKIT-3300 (2012-12-28)  ++* 509e3d2a3 - Update maxhealth for entities that have variable max health. Fixes BUKKIT-3308 (2012-12-26)  ++* b908c192b - Fix removing enchantments causing the enchantment tag to remain. (2012-12-27)  ++* 54b2707ba - Fix discrepancies in NBT and ItemMeta. Fixes BUKKIT-3279 (2012-12-27)  ++* 25732f048 - Fire BlockRedstoneEvent for repeaters. Fixes BUKKIT-1157 (2012-12-27)  ++* 186a67973 - Add BlockDiode from mc-dev for diff visibility. (2012-12-27)  ++* 5963da294 - Don't update physics until after the place event. Fixes BUKKIT-3316 (2012-12-27)  ++* 49da990ee - Never remove players when unloading chunks. Fixes BUKKIT-3129 (2012-12-26)  ++* 3a0c5aff0 - Fix fireballs being motionless (again). Fixes BUKKIT-3299 (2012-12-25)  ++* 155b83e2c - Perform permission removals after the quit event. Fixes BUKKIT-3303 (2012-12-24)  ++* f726d07f1 - Fix Skull BlockState setting illegal values on owner. (2012-12-24)  ++* 8292b73f3 - Fix fireworks being short lived. Fixes BUKKIT-3291 (2012-12-23)  ++* edd90ccf1 - Properly update fireworks. Fixes BUKKIT-3289 (2012-12-23)  ++* ced064635 - Implement entity max health methods. Adds BUKKIT-266 (2012-12-23)  ++* 4e1793f36 - Report valid health when getting Entity health. Fixes BUKKIT-3210 (2012-12-23)  ++* ed6aab820 - Remove runner leak on async tasks. Fixes BUKKIT-3288 (2012-12-23)  ++* 717fbbeff - Update firework power when modifying meta. Fixes BUKKIT-3272 (2012-12-22)  ++* f72a08c22 - Fire BlockDispenseEvent for fireworks. Adds BUKKIT-3246 (2012-12-22)  ++* da571ef42 - Add DispenseBehaviorFireworks and EntityFireworks for diff visibility (2012-12-22)  ++* dc8594052 - Allow fireworks to be created. Adds BUKKIT-3262 (2012-12-22)  ++* 6dc13b688 - One record per JukeBox. (2012-12-22)  ++* 2fd78a654 - Add BlockJukeBox for diff visibility (2012-12-22)  ++* adc1c2f98 - Updated version to 1.4.6-R0.2-SNAPSHOT for development towards next release. (2012-12-22)  ++* e6f14b4be - Updated version to 1.4.6-R0.1 in pom.xml for Beta. (2012-12-22)  ++* 2ee62eb58 - Implement API to get and set FireworkMeta on Firework entities (2012-12-21)  ++* fdb4b2d91 - Implement Skull BlockState. Adds BUKKIT-3259 (2012-12-21)  ++* 39e2af7bd - Added TileEntitySkull for diff visibility (2012-12-20)  ++* 78d384de9 - Zero is not less than zero. Fixes BUKKIT-3259 (2012-12-21)  ++* a0cf0d03f - Check file existence before determining readOnly. Fixes BUKKIT-3255 (2012-12-21)  ++* ec211ed95 - Update enchantment handling to 1.4.6. Fixes BUKKIT-3256 (2012-12-21)  ++* f71be2506 - Fix loading Items entities with an invalid item. Addresses BUKKIT-3249 (2012-12-21)  ++* 118682ce5 - Don't save server properties when it's read only. Fixes BUKKIT-3250 (2012-12-21)  ++* 0216d0903 - Fix command line arguments being ignored. Fixes BUKKIT-3247 (2012-12-21)  ++* e93730759 - Add a null check for Item Entities. Fixes BUKKIT-3249 (2012-12-21)  ++* b870755ed - Use max inventory size for new stack. Fixes BUKKIT-3240 (2012-12-21)  ++* 708252c02 - Implement 1.4.6 ItemMeta. Adds BUKKIT-3236, BUKKIT-3237 (2012-12-21)  ++* f377a7680 - Add API to allow plugins to request players switch to a texture pack. Adds BUKKIT-2579 (2012-10-09)  ++* f4836fb42 - Add the ability to make Enchanted Books. Fixes BUKKIT-3220 (2012-12-20)  ++* bd0daa6d5 - Remove obsolete fix for the end (2012-12-20)  ++* ca7f67da9 - Fetch correct info for skulls in block.getDrops(). Fixes BUKKIT-3205 (2012-12-20)  ++* ed2dd31a8 - [Bleeding] Fix exception in getChunkSnapshot() - sky light can be null (2012-12-20)  ++* 686807e38 - Filter invalid ItemStacks from Packets. (2012-12-20)  ++* 23b676437 - Update CraftBukkit to Minecraft 1.4.6 (2012-12-19)  ++* 9f1bf124e - Updated version to 1.4.5-R1.1-SNAPSHOT for development towards next release. (2012-12-19)  ++* 06ae8e482 - Updated version to 1.4.5-R1.0 in pom.xml for RB. (2012-12-19)  ++* 924a46469 - [Bleeding] Check visibility API for sounds. Fixes BUKKIT-3114 (2012-12-18)  ++* d9708d032 - Fix PotionMeta not applying the correct Id. Fixes BUKKIT-3193 (2012-12-18)  ++* d73e5ab46 - Add missing name in PotionEffect for Wither (2012-12-18)  ++* a2d551faf - Refactor get/setChestPlate to Chestplate. Addresses BUKKIT-3189 (2012-12-18)  ++* 6cec8ba5c - Change enchantment comparisons to isSimilar. Fixes BUKKIT-3183 (2012-12-17)  ++* d66d3674e - Clarify functionality in CraftInventory. Fixes BUKKIT-3097 (2012-12-17)  ++* 78f48258d - Implement ItemFactory and ItemMeta values. Adds BUKKIT-15 (2012-12-17)  ++* d20d4dc43 - ItemStack.asBukkitStack(null) should return Air. Fixes BUKKIT-3170 (2012-12-15)  ++* 0f4c206f9 - Add isRecord and new material method tests. (2012-12-14)  ++* 53b064ec7 - Fix EntityEquipment positions being reversed. Fixes BUKKIT-3157 (2012-12-12)  ++* 24143ef6a - Load chunks asynchronously for players. (2012-11-30)  ++* 11593b459 - Add RegionFile from mc-dev for diff visibility (2012-11-29)  ++* 29d7cc711 - Add utility class AsynchronousExecutor (2012-12-12)  ++* 24c04dc78 - Don't run mob pickup code on players. Fixes BUKKIT-3150 (2012-12-12)  ++* 4e91fbd0d - Fix players not being able to pickup items due to default values. (2012-12-11)  ++* 39fdb5620 - Players should be able to pick up items by default. Fixes BUKKIT-3143 (2012-12-10)  ++* 3692209fe - Missed a rename (2012-12-10)  ++* 430d352a5 - Add EntityEquipment API. Adds BUKKIT-3103 (2012-12-09)  ++* 684ba31c3 - [Bleeding] Correct getEyeHeight value. Fixes BUKKIT-3130 (2012-12-09)  ++* 22b110000 - Only display help aliases when there are aliases. Fixes BUKKIT-1621 (2012-12-10)  ++* dc93da8e3 - Pass null help values values as empty strings to HelpTopics (2012-12-10)  ++* f18b3cdc7 - [Bleeding] Fix NPE with a null bedSpawnLocation. Fixes BUKKIT-1500 (2012-12-09)  ++* 4d2a92ed4 - Add isSolid() tests for each material (2012-12-09)  ++* 12c7c2f69 - Implement FurnaceExtractEvent. Adds BUKKIT-2114 (2012-12-08)  ++* e760d6eb3 - Add SlotFurnaceResult for diff visibility (2012-12-08)  ++* 24abdd556 - [Bleeding] Fix NPE in getBedSpawnLocation. Fixes BUKKIT-1949 (2012-07-24)  ++* 090c1a60b - Correctly shoot arrows with the spawnArrow Method. Fixes BUKKIT-3116 (2012-12-06)  ++* 9973e7cde - Update entity state correctly when marked as persistent. Fixes BUKKIT-3123 (2012-12-07)  ++* 846a22304 - Provide a faster way to get a location. Adds BUKKIT-3120 (2012-12-07)  ++* c74fd4196 - Use shooter constructor for Fireballs. Fixes BUKKIT-3121 (2012-12-06)  ++* 78bc0ad1d - Add the ability to launch WitherSkulls. Fixes BUKKIT-3106 (2012-12-06)  ++* 72ee1f318 - Fix "Commands Only" chat flag. Fixes BUKKIT-2238 (2012-12-05)  ++* 6a04fd98a - Implement API for wolves collar color. Adds BUKKIT-3109 (2012-12-05)  ++* bb60e85ff - Not enough testing went into this, you can't have packages start with numbers. (2012-12-05)  ++* 453f49abd - Refactor all OBC, libs, and NMS into versioned packages. (2012-12-05)  ++* 1af83da76 - Don't run command blocks in empty worlds. Fixes BUKKIT-3094 (2012-12-05)  ++* 09684ba9d - Persistence isn't just animals. Fix BUKKIT-3105 (2012-12-05)  ++* fb6d9e180 - Add a custom shutdown message set in bukkit.yml. Addresses BUKKIT-3031 (2012-12-03)  ++* 320712aba - Allow placing blocks in spawn if ops.txt is empty. Fixes BUKKIT-3004 (2012-12-05)  ++* 5409d05d3 - Ensure animals don't despawn due to old default setting. (2012-12-04)  ++* b854320fc - Fire EntityFormBlockEvent for FallingBlocks. Adds BUKKIT-3078 (2012-12-04)  ++* 4dadf0e2b - Implement API for mob despawn when away from players. Adds BUKKIT-2986 (2012-12-04)  ++* 11894784b - Fix leaky pipes (water flow). Fixes BUKKIT-3085 (2012-12-01)  ++* c596093c3 - [BREAKING] Update BlockFace directions. Fixes BUKKIT-1567, BUKKIT-3069 (2012-12-01)  ++* 3404318bc - Fix missed refactoring in EntityWither (2012-11-30)  ++* 1a6a82815 - Add data values to EntityChangeBlockEvent. Adds BUKKIT-3077, BUKKIT-3076 (2012-11-30)  ++* 9bd02495d - Use carried item for endermen's changed-block's id. Fixes BUKKIT-3075 (2012-11-30)  ++* 0c16afd6e - Take into account if the shooter is a player before considering pvp mode for projectiles. Fixes BUKKIT-3058 (2012-11-27)  ++* 1040a8133 - Fix multi-world sounds not being sent correctly. Fixes BUKKIT-3051 (2012-11-25)  ++* aa99d6796 - Call EntityInteractEvent for Wood Buttons. Fixes BUKKIT-3022 (2012-11-22)  ++* cd66edd40 - Fix the previous fix for "infinite 'breeding' with MonsterEggs" (2012-11-22)  ++* 22e26a502 - Call MapInitializeEvent on newly created maps. Fixes BUKKIT-2907 (2012-11-21)  ++* f0325da81 - Add ItemMapEmpty for diff visibility (2012-11-21)  ++* 45e891959 - Updated version to 1.4.5-R0.3-SNAPSHOT for development towards next release. (2012-11-20)  ++* cf677490e - Updated version to 1.4.5-R0.2 in pom.xml for Beta. (2012-11-20)  ++* 71b0510f8 - Fix teleporting entities with vehicles/passengers teleporting you illegally. Fixes BUKKIT-2821 (2012-11-20)  ++* fed863049 - Update invalidItems array. Fixes BUKKIT-2554. (2012-11-20)  ++* a17ca07fe - Add SPAWNER_EGG spawn reason to allow for filtering. Adds BUKKIT-3000 (2012-11-20)  ++* c36b3da57 - Fix infinite 'breeding' with MonsterEggs. Fixes BUKKIT-2997 (2012-11-20)  ++* 5f5dd727b - Add a DamageEvent for falling blocks which can damage entities. Fixes BUKKIT-2781 (2012-11-18)  ++* d039986be - No teleporting people back into the server. Fixes BUKKIT-2298 (2012-11-19)  ++* d23c97429 - Updated version to 1.4.5-R0.2-SNAPSHOT for development towards next release. (2012-11-18)  ++* 0f2913e30 - Updated version to 1.4.5-R0.1 in pom.xml for Beta. (2012-11-18)  ++* 8f4cde24b - Don't add player to world if join event did it already. (2012-11-18)  ++* cc78e1731 - Fix players losing experience when keepInventory is true. Fixes BUKKIT-2915 (2012-11-18)  ++* 7ef9adc04 - Fix missed rename making withers too cheaty. Fixes BUKKIT-2972 (2012-11-18)  ++* 58636c2dd - Don't do case lookups when we have the right case already. (2012-11-18)  ++* 1044c32a5 - Lower compression level to avoid overloading the thread. Fixes BUKKIT-2963 (2012-11-18)  ++* 028860399 - Implement sound changes for Minecraft 1.4.2 changes. Fixes BUKKIT-2849 (2012-11-05)  ++* a575e6b07 - Use correct itemstack for dispenser behavior chaining. Fixes BUKKIT-2886 (2012-11-08)  ++* 293474d99 - [Bleeding] Use case from player data for OfflinePlayer. Fixes BUKKIT-519 (2012-08-09)  ++* 20c074ec6 - Don't show a player on map if they're vanished. Fixes BUKKIT-1882 (2012-11-17)  ++* 2d832bf14 - Don't kick player when they travel too far. Fixes BUKKIT-2968 (2012-11-17)  ++* bd0868ae1 - Implement API for Skeleton and Zombie types. Fixes BUKKIT-2818 (2012-11-05)  ++* dca54ff18 - Fire BlockSpreadEvent for vine growth. Fixes BUKKIT-1097 (2012-11-17)  ++* 0c78ce40e - Add BlockVine.java from mc-dev for diff visibility. (2012-11-17)  ++* 9ab40b1ab - Fire BlockFadeEvent when soil turns back to dirt. Fixes BUKKIT-1854 (2012-06-25)  ++* 558411692 - Don't wait for main thread when processing commands. (2012-11-17)  ++* 9add7d300 - Don't create tile entity when block placement fails. Fixes BUKKIT-2924 (2012-11-16)  ++* d21c5f387 - Ignore empty custom payload packets. Fixes BUKKIT-2957 (2012-11-16)  ++* 6466aa1d2 - Use synchronous calls and wait for chat disconnect. Fixes BUKKIT-2946 (2012-11-16)  ++* 82c8cf423 - Update tile entity when interact event is cancelled. (2012-11-16)  ++* 6952ad1e5 - Update CraftBukkit to Minecraft 1.4.5. (2012-11-16)  ++* 8e806550d - Remove fire ticks if damage has been canceled. Fixes BUKKIT-2933 (2012-11-15)  ++* 6149fc3e7 - Don't thread single chunk compression. Fixes BUKKIT-2927 (2012-11-15)  ++* e1afee008 - Update tile entity on client on cancelled block break. Fixes BUKKIT-2935 (2012-11-14)  ++* df69ea881 - Rework skull dropping. Fixes BUKKIT-2930 and BUKKIT-2820 (2012-11-14)  ++* 092800af2 - Fixed some async tasks running synchronously. Fixes BUKKIT-2934 (2012-11-14)  ++* c2bae0beb - Add crafting result slot for sheep breeding. Fixes BUKKIT-2926 (2012-11-14)  ++* 188a71ad5 - Clear out empty extended block ID array. Fixes BUKKIT-2923 (2012-11-14)  ++* 2b22ae2d4 - Potentially fix glitch with falling entities. (2012-11-13)  ++* db43197ec - Add EntityFallingBlock from mc-dev (2012-11-13)  ++* 5a999a266 - Correct digging behavior. Fixes BUKKIT-2780 (2012-11-04)  ++* 7f7192f8f - Update CraftBukkit to Minecraft 1.4.4. (2012-11-06)  ++* a0c3b4f9d - Updated version to 1.4.2-R0.3-SNAPSHOT for development towards next release. (2012-11-03)  ++* cc668b2f8 - Updated version to 1.4.2-R0.2 in pom.xml for Beta. (2012-11-03)  ++* f683d5568 - Migrate world data with world when switching from vanilla Minecraft to Bukkit. Fixes BUKKIT-2816 and BUKKIT-2760 (2012-11-02)  ++* 53d24e2b2 - [Bleeding] Fix mistranslation affecting time of the server vs time of day. Fixes BUKKIT-2797 (2012-11-02)  ++* 3dd0580d5 - Improved the potion test to detect missing PotionType values. (2012-11-01)  ++* 87d25c4cc - Fix compile issue with chunk generation. (2012-11-02)  ++* a4892dfa7 - Delegate recreateStructures to nms provider. Fixes BUKKIT-2760 (2012-11-01)  ++* 1c14586c4 - Add CraftArt mappings for Wither. Fixes BUKKIT-2667. (2012-11-01)  ++* 9a88e615d - Change ItemFrame to actually provide a defensive copy. Fixes BUKKIT-2784 (2012-10-31)  ++* 1fb3164a9 - Updated version to 1.4.2-R0.2-SNAPSHOT for development towards next release. (2012-10-31)  ++* b9486da5c - Updated version to 1.4.2-R0.1 in pom.xml for Beta. (2012-10-31)  ++* 1623bf0f9 - Fire HangingBreakEvent when explosions remove hanging entities. Fixes BUKKIT-2764 (2012-10-31)  ++* 87a1cd3d4 - Add inventory and slot types for new containers. Fixes BUKKIT-2741 (2012-10-31)  ++* 347fd3cb6 - Fix NPE when blowing up an item frame. Fixes BUKKIT-2763 (2012-10-31)  ++* f479aa84a - Implement API for ambient mob spawn limit. Add spawn-limit.ambient to bukkit.yml. Adds BUKKIT-2765 (2012-10-31)  ++* 46d7cd1e0 - Use BlockCommandSender for dispatching Command block commands (2012-10-31)  ++* 9e4e2c62a - Expose API for managing and using GameRules. Adds BUKKIT-2757 (2012-10-30)  ++* 59dc403a6 - Hook command block up to ConsoleCommandSender. Fixes BUKKIT-2684 (2012-10-30)  ++* 63eaf74d4 - Implement the API for ItemFrames. Adds BUKKIT-2668 (2012-10-31)  ++* 02ca9be07 - [Bleeding] Fire damage is no longer a valid reason for hanging entity removal (2012-10-31)  ++* 54cce5bf9 - [Bleeding] Implement new Hanging events. Adds BUKKIT-2754 (2012-10-30)  ++* 4efd06a6b - Remove Anvil debug. Fixes BUKKIT-2732 (2012-10-30)  ++* 42391009f - [Bleeding] Prevent players from appearing to be sneaking after they change dimensions whilst doing so. (2012-10-30)  ++* b7886d142 - Disable portal support for entities for now. Restore allowNether check. (2012-10-30)  ++* 6bf705dd0 - Expose API for clearing a player's inventory with a successful count return. Adds BUKKIT-2745 (2012-10-30)  ++* 856fdc2ab - Update map cursors to reflect 1.4 changes. Fixes BUKKIT-2740 (2012-10-29)  ++* 3047a424b - Expose API for giving and taking experience levels for use with ExpCommand's new behaviour with Minecraft 1.4. Adds BUKKIT-2739 (2012-10-29)  ++* aba7e2faf - Revert changing EntityType.FIREBALL to LARGE_FIREBALL (2012-10-29)  ++* 216cddb2a - Get skull data before destroying block. Fixes BUKKIT-2723 (2012-10-29)  ++* 14f4bd902 - Fix bug preventing non bed-reliant spawns from being successfully set. Fixes BUKKIT-2708 (2012-10-29)  ++* d16f8c5e6 - Drop skulls like every other block. Fixes BUKKIT-2678 (2012-10-28)  ++* f4cdf8fe9 - Add isHardcore API to check if the server is in hardcore mode or not. Adds BUKKIT-2707 (2012-10-29)  ++* 442b7a69f - Prevent health from wrapping around. (2012-10-28)  ++* db49a5769 - Update PotionEffects on player death. Fixes BUKKIT-2673 (2012-10-28)  ++* 0fb806c56 - Clamp difficulty levels to prevent invalid values (2012-10-28)  ++* 37a0d6757 - Don't filter item data for anvils. Fixes BUKKIT-2640 (2012-10-28)  ++* 9841b7700 - Use correct variable for squid Y motion. Fixes BUKKIT-2648 (2012-10-28)  ++* c675cc0b3 - Fix missed rename for ore exp dropping. Fixes BUKKIT-2662 (2012-10-28)  ++* d97d193b9 - Add new entities to World.spawn method. Fixes BUKKIT-2658 (2012-10-28)  ++* 788e9e84c - Fix incorrect method names missed during update. Fixes BUKKIT-2653 (2012-10-28)  ++* 11d65171c - These books are too powerful! (2012-10-28)  ++* 784f9e31a - Remove spawn-radius setting in bukkit.yml in favour of spawn-protection in server.properties. Fixes BUKKIT-2657 (2012-10-28)  ++* 5fe852302 - Fixed generator-settings not being set. Fixes BUKKIT-2652 (2012-10-28)  ++* 5469311a3 - Don't pass vanilla plugin channels to plugins. Fixes BUKKIT-2638 (2012-10-27)  ++* 60819c669 - Update CraftBukkit to Minecraft 1.4(.2). (2012-10-24)  ++* b9a72531b - Updated version to 1.3.2-R3.0 in pom.xml for RB. (2012-10-27)  ++* df7f86d02 - Made books less powerful, though you should still read them! (2012-10-27)  ++* bd6c824c1 - Updated version to 1.3.2-R2.1-SNAPSHOT for development towards next release. (2012-10-17)  ++* 46f773a68 - Updated version to 1.3.2-R2.0 in pom.xml for RB. (2012-10-17)  ++* 4166af1d3 - Implement chat tab completion API. Fixes BUKKIT-2608. Adds BUKKIT-2607. (2012-10-17)  ++* 3ce954bb8 - Delegate tab-completion. Fixes BUKKIT-2181. Adds BUKKIT-2602 (2012-10-09)  ++* 05e889f34 - Queue tasks from secondary threads. Fixes BUKKIT-2546 and BUKKIT-2600 (2012-10-07)  ++* 93a79cd0e - Implement new scheduler API. Adds BUKKIT-836 (2012-10-06)  ++* 506a1a076 - Ensure entity isn't destroyed when trying to show it. Fixes BUKKIT-2038 (2012-10-13)  ++* cb2f8244e - Updated version to 1.3.2-R1.1-SNAPSHOT for development towards next release. (2012-09-28)  ++* 979604953 - Updated version to 1.3.2-R1.0 in pom.xml for RB. (2012-09-28)  ++* 59d6b60c0 - Update entity target data to reflect current AI status. Fixes BUKKIT-2280 (2012-09-27)  ++* 62a9b8815 - Allow data values on mushroom and mob spawner blocks. Fixes BUKKIT-2346 (2012-09-28)  ++* b5580b6d9 - Remove player from destroy queue when they go visible. Fixes BUKKIT-2071 (2012-09-28)  ++* 244a39d20 - Use this world instead of the one in the entity. Fixes BUKKIT-2315 (2012-09-25)  ++* fc0e35a67 - Fix typo causing a task to be repeated in debug. Addresses BUKKIT-2549 (2012-09-28)  ++* 1d75bd35c - Updated version to 1.3.2-R0.3-SNAPSHOT for development towards next release. (2012-09-26)  ++* 7ec2e2a16 - Updated version to 1.3.2-R0.2 in pom.xml for Beta. (2012-09-26)  ++* 03f12497b - Map org.bukkit.Sound to String values for sending to client. (2012-09-26)  ++* 74b3be57b - Replace LongObjectHashMap with a more efficient implementation (2012-09-11)  ++* 9f70c1f38 - Set last accessed variables after grabbing chunk. Fixes BUKKIT-1033 (2012-09-20)  ++* cebc8cffe - CraftBukkit comment fixes (2012-09-14)  ++* 4b1f6aff3 - [Bleeding] Check visibility API for sounds. Fixes BUKKIT-2210 (2012-09-10)  ++* 349cb0bba - What is dead may never die. (2012-09-14)  ++* 412b4624c - Update the client after a FoodLevelChange event is fired. Fixes BUKKIT-2510 (2012-09-12)  ++* 9a4b85c93 - [Bleeding] Avoid spawn checks on empty worlds. Fixes BUKKIT-2508 (2012-09-03)  ++* 4c0dd6964 - Reverted changes to chunk saving behaviour. (2012-09-12)  ++* beee3ce2d - [Bleeding] Add autosave interval setting in bukkit.yml. Adds BUKKIT-2507 (2012-08-18)  ++* e2b1514da - Bulk pending cleanup. (2012-09-09)  ++* b1f6d16bf - Change local jline checks to not use String literals. Fixes BUKKIT-2455. (2012-09-02)  ++* 27d58a299 - Add information about async tasks to CrashReports. Addresses BUKKIT-2491 (2012-09-09)  ++* 4d5894e4c - Fix crash from console-commands throwing exception. Fixes BUKKIT-2479 (2012-09-06)  ++* c710ca827 - Fix BUKKIT-2419: PlayerAbilities not being updated on teleport/respawn (2012-08-27)  ++* 3307d489d - Fix Future task waiting logic. Fixes BUKKIT-2408 (2012-08-26)  ++* cb84d6b99 - Fix empty chunks not sending biome properly and causing client side issues. Fixes BUKKIT-2396 (2012-08-25)  ++* bedc2f035 - Updated version to 1.3.2-R0.2-SNAPSHOT for development towards next release. (2012-08-25)  ++* 4b840c968 - Updated version to 1.3.2-R0.1 in pom.xml for Beta. (2012-08-25)  ++* b8cc86208 - Update to 1.3.2 (2012-08-24)  ++* 35cff16da - Fix EmptyChunk's not sending to the Client correctly. Fixes BUKKIT-2206 (2012-08-23)  ++* c88531eca - Don't refactor packages with natives (2012-08-22)  ++* 9580c3e39 - Refactor CraftBukkit dependencies. Fixes BUKKIT-2329 (2012-08-19)  ++* dcd01bf0c - Rewrite scheduler. Fixes BUKKIT-1831, and BUKKIT-845 (2012-08-14)  ++* 8fdb00614 - Use constant Player for EnderPearls (2012-08-22)  ++* 98c98d0f7 - Fix entities not having valid "isValid" states. Addresses BUKKIT-2366 (2012-08-21)  ++* e3ae188ed - Fix instances where Signs have null lines. Addresses BUKKIT-684 (2012-08-18)  ++* 450edc300 - Use standard format function to format logs. Addresses BUKKIT-2246 (2012-08-11)  ++* 161ab5edc - Implement API for Sound, and playing the sounds for Worlds and Players. Adds BUKKIT-1430, BUKKIT-1226 and BUKKIT-2019 (2012-08-21)  ++* ccc760d62 - Use a dynamic pool size for the iterator cache (2012-08-19)  ++* e7e643d83 - Implement API to retrieve and open EnderChests. Adds BUKKIT-2016 (2012-08-20)  ++* feb0327d2 - Check unload queue so we don't accidentally leave a chunk loaded (2012-08-19)  ++* 7dde6cc56 - [Bleeding] Stub out MethodProfiler class (2012-08-15)  ++* e079d9457 - [Bleeding] Strip out unused HashSet in IntHashMap (2012-08-15)  ++* eaa3154b0 - [Bleeding] Cache packet ID instead of doing lookups each time it is needed (2012-08-11)  ++* 627cf2ef8 - [Bleeding] Remove redundant chunkList from ChunkProviderServer (2012-08-11)  ++* 97ac0a3f1 - Add LongObjectHashMap and LongHashSet (2012-08-17)  ++* 7b20caf8f - Use TrigMath in hotspots (2012-08-15)  ++* 821908138 - [Bleeding] Change Vec3DPool to a stack based pool (2012-08-11)  ++* d628c886d - Optimize entity AI goal selector (2012-08-17)  ++* 858d36efc - Add iterator cache to UnsafeList and use it in hotspots (2012-08-17)  ++* 6d777ade1 - [Bleeding] Optimize chunk loading (2012-08-09)  ++* 852602e43 - Add files from mc-dev for diff visibility (2012-08-10)  ++* b44fc8ed2 - Updated version to 1.3.1-R2.1-SNAPSHOT for development towards next release. (2012-08-19)  ++* 29ca5d1f5 - Updated version to 1.3.1-R2.0 in pom.xml for RB. (2012-08-19)  ++* 525499351 - Fix issues with chunk saving. Fixes BUKKIT-2158, BUKKIT-2018 and BUKKIT-2229 (2012-08-12)  ++* cacfc71b4 - Add more detailed CrashReport for CraftBukkit. Addresses BUKKIT-2319 (2012-08-17)  ++* acedd049c - Add CrashReport for diff visiblity (2012-08-17)  ++* 0bde47a17 - Don't extend pistons until data is set. Fixes BUKKIT-2153 (2012-08-08)  ++* 050a9276b - Removed unneeded mc-dev imports. Fixes BUKKIT-682 (2012-08-17)  ++* add387dee - Call PlayerQuitEvent in correct location. Fixes BUKKIT-2193 (2012-08-15)  ++* fc35d000e - Use correct SlotType's for merchants. Fixes BUKKIT-2257 (2012-08-14)  ++* b059962a5 - Implement methods for spawning FallingBlocks and add various FallingBlock methods. Adds BUKKIT-2282 (2012-08-13)  ++* 8748c8c75 - Enable hardcore support. Fixes BUKKIT-2259 (2012-08-12)  ++* aa92f0e31 - Update CreatureSpawner.setSpawnedType(EntityType) to 1.3 (2012-08-12)  ++* bfc518981 - Fix "block update packet" not being sent to the correct world. Fixes BUKKIT-2023 (2012-08-09)  ++* 342f9c3bd - Implement player speed API. Addresses BUKKIT-2205 (2012-08-10)  ++* 77cda7e71 - Add PlayerAbilities for diff visibility (2012-08-09)  ++* 27c1c85ad - Implement BlockBreakEvent block experience. Adds BUKKIT-2033 (2012-08-08)  ++* 8d946b88b - Add BlockMobSpawner and BlockOre for diff visibility (2012-08-08)  ++* a16e0b632 - Change socket traffic class try-catch. Fixes BUKKIT-2093 (2012-08-08)  ++* 25fe93479 - Restore port to the hostname. Fixes BUKKIT-2124 (2012-08-08)  ++* 24809ef98 - Re-add support for full chunk saving so the server save-alls on stop. Fixes BUKKIT-2158 (2012-08-08)  ++* a133bc718 - Make periodic chunk saving less aggressive and fixed double player data saving. Fixes BUKKIT-1994 and fixes BUKKIT-2144 (2012-08-07)  ++* 05b5a068c - Updated version to 1.3.1-R1.1-SNAPSHOT for development towards next release. (2012-08-07)  ++* fad4f39ac - Updated version to 1.3.1-R1.0 in pom.xml for RB (2012-08-07)  ++* 2bb7a5f94 - Implement new deprecated warning state configuration option (2012-08-06)  ++* bfbdbbd05 - Tripwire isn't redstone, only fire interact events. (2012-08-06)  ++* 7a3dfecba - Don't force chunks to load again, causes chunk leaks with multiworld. (2012-08-06)  ++* 0792b1588 - Pistons no longer extend before they are pistons. Fixes BUKKIT-1999 (2012-08-06)  ++* 59aaa6a80 - Fix dispenser removing data from items. Fixes BUKKIT-2045 (2012-08-06)  ++* 7dc47892a - Don't rotate ShapedRecipes. Fixes BUKKIT-1334 (2012-08-05)  ++* 164c06645 - Fix "moved too quickly" detection. (2012-08-05)  ++* e1a427395 - Fire events for tripwire and hooks. (2012-08-05)  ++* 982efb8c2 - Add BlockTripwire and BlockTripwireHook from mc-dev for diff visibility. (2012-08-05)  ++* 304cb019e - Fire EntityDeathEvent for pigs. Fixes BUKKIT-2100 (2012-08-05)  ++* 9cccb1c89 - Fix Vec3DPool; don't pool objects indefinitely or O(n^2) clear() (2012-08-05)  ++* f5777cc0b - Add Vec3DPool for diff visibility (2012-08-05)  ++* 44234c47c - Cease execution if block is AIR. Fixes BUKKIT-2104 (2012-08-05)  ++* a574ec54c - Put forceChunkLoad back to its original value. (2012-08-05)  ++* beb71069b - Don't use Packet56 and clear client cache on world changes. (2012-08-05)  ++* 0e013fa4b - Fixed PlayerManager ConcurrentModificationExceptions. Fixes BUKKIT-1972 (2012-08-04)  ++* 9804665fe - Fix bounding box pool to use a dynamic cache size (2012-08-04)  ++* 14a470985 - Add AABBPool for diff visibility (2012-08-04)  ++* e5acb6cf3 - Don't tick chunks or entities on chunks that are queued for unload. (2012-08-04)  ++* fdd01feb8 - Avoid CME when lightning strikes by making a copy. Fixes BUKKIT-2055 (2012-08-04)  ++* a5da83425 - Fix chat not being cancellable when not using deprecated API. (2012-08-04)  ++* 9bed5272d - Re-implement code missing from leaving the end. Fixes BUKKIT-2003 (2012-08-04)  ++* 823e3fb0c - Correctly detect invalid PistonExtension's to allow removal of StickyPistons. Fixes BUKKIT-2059 (2012-08-04)  ++* ab8b7c7e3 - Potentially fix chunk leaking, needs further examination (2012-08-04)  ++* f90bd7e7c - Fix PlayerBucketEmptyEvent handling. Fixes BUKKIT-2002 and fixes BUKKIT-1997 (2012-08-03)  ++* 02d6703da - Implement new AsyncPlayerChatEvent. Addresses BUKKIT-2064 (2012-08-03)  ++* 4942f5184 - Don't merge items with enchantments. Fixes BUKKIT-2050 (2012-08-03)  ++* 8834d1423 - Fix 1.3 changes that prevent nether and the_end to save level data. (2012-08-02)  ++* 07794300d - [Bleeding] Fire inventory close event. Fixes BUKKIT-2036 (2012-08-03)  ++* fe8fc6b90 - Process entity ticks on worlds without players. Fixes BUKKIT-2031 (2012-08-03)  ++* f5794937a - Print short message on exception to avoid spamming console. Fixes BUKKIT-2018 (2012-08-03)  ++* dcf83bc1b - Restore configurable connection throttle. (2012-08-03)  ++* e156354a6 - Add DedicatedServerConnectionThread from mc-dev for diff visibility. (2012-08-03)  ++* d5fea5fd0 - Fixed translation issue breaking custom world generation. Fixes BUKKIT-1975 (2012-08-02)  ++* c711827e9 - Fix mapping of ChunkSection nibble data to snapshot. Fixes BUKKIT-1977 (2012-08-02)  ++* 35a3d701a - Add trailing / to BukkitDL URLs. Fixes BUKKIT-2015. (2012-08-02)  ++* 8dc52123b - Fix dispenser event handling (2012-08-02)  ++* d18972eca - Fix Nether and The End having the same world names. (2012-08-02)  ++* 402b177be - Add missing callWorldInitEvent on startup. (2012-08-02)  ++* 764c3f24e - Add test for WorldType's (2012-08-02)  ++* a43d621c0 - Update CraftBukkit to Minecraft 1.3.1 (2012-07-29)  ++* 08e2923bd - Updated version to 1.2.5-R5.1-SNAPSHOT for development towards next release. (2012-07-28)  ++* 32378a719 - Updated version to 1.2.5-R5.0 in pom.xml for RB. (2012-07-28)  ++* a4d769129 - Detect and disconnect 1.3 clients properly. Fixes BUKKIT-1952 (2012-07-26)  ++* b00de5f17 - Cleaned up CraftBukkit comments in NMS. (2012-07-22)  ++* 8b9aad8c2 - Add remaining missing setLastDamageCause's (2012-07-13)  ++* 79189c1c1 - Add missing setLastDamageCause. Thanks MonsieurApple (2012-07-13)  ++* 46125dc6c - Implement getExpToLevel method. Fixes BUKKIT-1906 (2012-07-10)  ++* cf9544c1d - Reuse ItemInWorldManager, and stop applying ability changes. Fixes BUKKIT-1811 (2012-07-09)  ++* 08740d7f9 - [Bleeding] Include chunk biome data for refresh chunk. Fixes BUKKIT-1166 (2012-04-04)  ++* dba9349ed - Factor invulnerableTicks into getNoDamageTicks. Fixes BUKKIT-1324 (2012-07-04)  ++* d7272f42e - Implement getMotd, and reload the motd. Adds BUKKIT-1799 (2012-07-03)  ++* 00efc8c46 - Apply setLastDamageCause after processing events and the event has not been canceled. Fixes BUKKIT-1881 (2012-07-01)  ++* e4e994f71 - Treat ComplexParts as proxies for setLastDamageCause. Fixes BUKKIT-1821 (2012-07-01)  ++* 0a0d5ebf2 - Clean entity.damage functions. Fixes BUKKIT-1822 (2012-07-01)  ++* ff09ff07f - Fix deprecated spawnCreature. Fixes BUKKIT-1880 (2012-07-02)  ++* 6093bcc44 - Fix client crash on InventoryClick cancel. Fixes BUKKIT-1841 (2012-06-22)  ++* a21f038fc - Mark entities as invalid when they get despawned. Addresses BUKKIT-810 (2012-06-25)  ++* f5b6abfae - Fix double overflow/underflow calculations with explosions. Fixes BUKKIT-1865 (2012-06-23)  ++* 412b7eaa1 - Implement LivingEntity.hasLineOfSight. Addresses BUKKIT-1255 (2012-03-21)  ++* 78acee359 - Use LinkedHashSet to make redstone update order consistent. Fixes BUKKIT-1850 (2012-06-21)  ++* ea4d3662b - Deprecate spawnCreature and add spawnEntity. Addresses BUKKIT-1168 (2012-04-25)  ++* 568fae2e8 - Trigger EntityBlockChangeEvent for Silverfish. Adds BUKKIT-1560 and BUKKIT-1593 (2012-04-28)  ++* 23d5922bb - Added EntitySilverfish for diff visibility (2012-04-28)  ++* 57763845d - Implement plugin channel events. Addresses BUKKIT-1844 (2012-06-20)  ++* 9f37f7052 - Fire PlayerItemBreakEvent. Addresses BUKKIT-1600 (2012-05-06)  ++* 8bc42ba8c - Clear animal owner when untamed. Fixes BUKKIT-1482 (2012-06-17)  ++* 0095add08 - Add query-plugins setting. Addresses BUKKIT-1781 (2012-06-09)  ++* 6bbae461d - Fix Heisenplayers (2012-06-17)  ++* ae98a6f05 - Changes '/whitelist list' to ignore comments. Addresses BUKKIT-1804 (2012-06-14)  ++* ae94a3308 - Preserve whitelist ordering. Addresses BUKKIT-1805 (2012-06-14)  ++* e35f6f252 - Fire NotePlayEvent. Fixes BUKKIT-1779 (2012-06-10)  ++* 72d64b516 - Add TileEntityNote from mc-dev for diff visibility. (2012-06-10)  ++* 900269065 - Implement asynchronous pre-login event; Addresses BUKKIT-1213 (2012-03-17)  ++* ed6d4c775 - Support asynchronous events; Addresses BUKKIT-1212 (2012-06-13)  ++* f58e51419 - Don't send kick message if the message is empty. Fixes BUKKIT-1789 (2012-06-12)  ++* 01fe76733 - Fire PlayerToggleFlightEvent. Fixes BUKKIT-1696 (2012-05-25)  ++* 478654351 - Check world before checking distance. Fixes BUKKIT-1792 (2012-06-12)  ++* b7827c4d2 - Fixed EnderDragon not dealing damage after it has been hit. Fixes BUKKIT-1751 (2012-06-12)  ++* 0f23a4fe2 - Synchronize handler lists (2012-06-11)  ++* 0942b1861 - Handle rcon timeouts properly (2012-06-10)  ++* 87600345c - Updated version to 1.2.5-R4.1-SNAPSHOT for development towards next release. (2012-06-09)  ++* 6d8b038f3 - Updated version to 1.2.5-R4.0 in pom.xml for RB. (2012-06-09)  ++* d836e5787 - Kill fireball if velocity isn't present. Fixes BUKKIT-1228 (2012-06-09)  ++* d5ba6c664 - Fix fireballs freezing when the chunk unloads. Addresses BUKKIT-1228 (2012-06-09)  ++* 3df6608a7 - Fixed potential infinite loop in RCON handling. Fixes BUKKIT-1570 (2012-06-08)  ++* 873ce288c - Fixed decompile for loop handling (2012-06-09)  ++* 282fcb44e - Added RemoteControlSession for diff visibility. (2012-06-08)  ++* 77cc225b8 - Don't try to parse directories if we don't have any. (2012-06-06)  ++* 6a3751114 - Try to make parent directories for --log-pattern path. Fixes BUKKIT-680 (2012-04-24)  ++* e385ffaef - Call ignite event for fireball shot from dispenser. (2012-05-14)  ++* d8199aaa3 - Fix a NullPointerException. (2012-06-04)  ++* f15785669 - Launch fireballs at eye location. Fixes BUKKIT-1155 (2012-04-16)  ++* e52003220 - Further improving ItemStack handling (2012-05-31)  ++* 13fcb9e37 - Make log-strip-color a simple flag instead of a boolean. (2012-06-02)  ++* 70c91c161 - Resize UnsafeList to initial capacity when cleared and implement clone. (2012-05-31)  ++* 894ea0656 - Reduce default size of path array. Addresses BUKKIT-1469. (2012-05-31)  ++* 9e5d6699f - Add Path.java from mc-dev for diff visibility (2012-05-31)  ++* 266212f9f - Fix bold states while printing; Fixes BUKKIT-1716 (2012-05-26)  ++* 25cfdfa05 - Change mapping of Gold from yellow bold to yellow; Addresses BUKKIT-1717 (2012-05-26)  ++* 17cea3e57 - Updated version to 1.2.5-R3.1-SNAPSHOT for development towards next release. (2012-05-26)  ++* a18c60883 - Updated version to 1.2.5-R3.0 in pom.xml for RB. (2012-05-26)  ++* 5d3c8bfaa - Removed AnimalTamer cache, fixes BUKKIT-1628 (2012-05-24)  ++* c43012ef1 - Fixed broken hashCode() (2012-05-06)  ++* 92dce25d3 - Update Bukkit API dependency to 1.2.5-R2.1-SNAPSHOT (2012-05-24)  ++* c1bc0df71 - Add in checks for potential NPEs. Fixes BUKKIT-1706 and BUKKIT-1590. (2012-05-24)  ++* 2f16b8ffa - Don't spam console with errors on unexpected disconnect. Addresses BUKKIT-693 (2012-05-13)  ++* c07d4fffb - Adding NetworkWriterThread for diff visibility (2012-05-13)  ++* 8be14b5bb - Fix inaccurate head yaw. Fixes BUKKIT-1702 (2012-05-13)  ++* fdddc681d - Use jansi's Windows support for terminal colors. (2012-05-23)  ++* 478fa4a96 - Remove "failed to querty stty columns" spam. Fixes BUKKIT-1669. (2012-05-23)  ++* 2e744dbf6 - Add files from jline for diff visibility (2012-05-23)  ++* 94e9543a1 - Add fallback for when jline fails to initialize. Fixes BUKKIT-1675. (2012-05-22)  ++* 21327265f - [Bleeding] Improve handling of ItemStacks. Addresses BUKKIT-1697 (2012-05-23)  ++* 0f984dd9a - Re-implement World.getTemperature and World.getHumidity (2012-05-11)  ++* d484956c1 - Updated version to 1.2.5-R2.1-SNAPSHOT for development towards next release (2012-05-19)  ++* f5da24cb8 - Updated version to 1.2.5-R2.0 in pom.xml for RB. (2012-05-17)  ++* af89cc783 - Don't cap food level at 20 when eating. Fixes BUKKIT-1667 (2012-05-17)  ++* 3ee75ab6d - Replace TextWrapper with simple newline splitting. Fixes BUKKIT-1662 (2012-05-16)  ++* b6d611d9b - Revert obsolete "fix" for Redstone Torches (2012-05-14)  ++* 41b2e89c7 - Assert that the block is still present after placement. Fixes BUKKIT-1399 (2012-05-14)  ++* 1d361c2f4 - Fix block place protection using a larger radius. Fixes BUKKIT-1617 (2012-05-15)  ++* 4c8f6f2ca - Add option to strip color codes from server.log file (2012-05-15)  ++* e91169eba - Add ConsoleLogFormatter for diff visibility (2012-05-15)  ++* 31d488a38 - Update to jline 2. Fixes BUKKIT-717 (2012-03-14)  ++* cbd20ec9e - Use a different temp file for each player to avoid corruption. Fixes BUKKIT-1607 (2012-05-01)  ++* ef7e14f9e - Fire events for fireball item usage. Fixes BUKKIT-1566 (2012-04-25)  ++* bbc3d31be - Add ItemFireball from mc-dev for diff visibility (2012-04-25)  ++* fdc5c17a4 - Updated version to 1.2.5-R1.4-SNAPSHOT for development towards next release. (2012-05-02)  ++* c7f70f242 - Updated version to 1.2.5-R1.3 in pom.xml for Beta. (2012-04-30)  ++* 2f976705b - Revert "Fix potential NPE in vanish API. Fixes BUKKIT-1541" (2012-04-27)  ++* 99aeb32d0 - Remove Player cache and edit CraftPlayer.equals to account for EntityID. Fixes BUKKIT-1541 and Addresses BUKKIT-761 (2012-04-21)  ++* 53ed0dad4 - Don't call event if getOwner is null. Fixes BUKKIT-1545 (2012-04-25)  ++* 3e382034e - Fix growing large tress near world height. Fixes BUKKIT-1072 (2012-04-25)  ++* 0153fe1f3 - Check if packet is null before checking priority. Fixes BUKKIT-1579 (2012-04-25)  ++* efab1e8b1 - Updated version to 1.2.5-R1.3-SNAPSHOT for development towards next release. (2012-04-25)  ++* 4368b2129 - Updated version to 1.2.5-R1.2 in pom.xml for Beta. (2012-04-24)  ++* 40be9c840 - Optimized a little too much. Update goals every tick again to avoid AI oddness. (2012-04-24)  ++* 8f1fc96da - Fixed per-world spawn limits. I have no idea how we missed this. (2012-04-24)  ++* 73ae279e8 - Update players when potion effects are moved from them. Fixes BUKKIT-789 (2012-04-24)  ++* e98cfbd99 - Remove address from throttle hashmap before killing socket. Fixes BUKKIT-659 (2012-04-24)  ++* e3363db0a - Remove "Fetching addPacket..." spam as it isn't useful. Fixes BUKKIT-32 (2012-04-24)  ++* 9c12dc0ef - Fix potential NPE in vanish API. Fixes BUKKIT-1541 (2012-04-24)  ++* 0220c1ff7 - Remove legacy Chunk cache. Fixes BUKKIT-1400 (2012-04-24)  ++* 119b5d18a - Load player data before calling PlayerLoginEvent. Fixes BUKKIT-1531 and Fixes BUKKIT-601. (2012-04-18)  ++* e61a31681 - We build for Java 1.5. (2012-04-23)  ++* edfc8ba92 - Add per-world spawn limits with fallback to server-wide bukkit.yml settings. Fixes BUKKIT-1565 (2012-04-23)  ++* b7376e086 - Avoid doing unnecessary range checks when we're looping from start to end. Make EntityLiving call AI logic every tick again. Rework PathfinderGoalSelector logic. (2012-04-23)  ++* e8459c1ff - Optimize AI and EntityLiving ticking (2012-04-21)  ++* 343f39b2b - Add PathfinderGoalSelector for diff visibility (2012-04-21)  ++* 8f6fe0a64 - Rework clipping logic again, now works as well as the original implementation (2012-04-20)  ++* 3e15a6911 - Added Packet24 for diff visibility. (2012-04-19)  ++* e28ae3f2f - Reworking clipping logic; Fixes BUKKIT-1472 (2012-04-15)  ++* 2e646d280 - Made permissions.yml registration easier; Addresses BUKKIT-1499 The permissions.yml now behaves similar to a plugin.yml (2012-04-15)  ++* 748ebae55 - Properly call EntityDeathEvent for mobs. Fixes BUKKIT-1519 (2012-04-15)  ++* 6307efd2d - Set current recipe to null when a recipe isn't found. Fixes BUKKIT-1456 (2012-04-14)  ++* 27a9b4c90 - Filter entity spawning sanely. (2012-04-14)  ++* 0026a08fa - Use SpawnReason.DEFAULT instead of SpawnReason.CUSTOM, freeing CUSTOM to plugin spawning. This gets used in case we are missing appropriate SpawnReason's for various Entity spawns. (2012-04-14)  ++* e17d3ece0 - Added SpawnReason.SLIME_SPLIT, Fixes BUKKIT-790 (2012-04-14)  ++* 1dcb39074 - Persist PlayerDeathEvent values. Fixes BUKKIT-1521 (2012-04-14)  ++* e8b6eb717 - Updated version to 1.2.5-R1.2-SNAPSHOT for development towards next release. (2012-04-08)  ++* b161aaa36 - Updated version to 1.2.5-R1.1-SNAPSHOT for development towards next release. (2012-04-05)  ++* 4563d6b22 - Updated version to 1.2.5-R1.0 in pom.xml for RB. (2012-04-04)  ++* 7586e7168 - Make the dispenser check if the dispensed item has been changed before removing it. Fixes BUKKIT-316 (2012-04-03)  ++* 6a79e506c - Implement new address to PlayerLoginEvent; Addresses BUKKIT-431 (2012-04-03)  ++* 20dea920c - Don't spawn conditional mobs if original entity is dead. Fixes BUKKIT-1444 (2012-04-03)  ++* af0018a96 - Mark entities as dead when spawning fails. Treat as canceled if entity is dead. (2012-04-03)  ++* 0c9e1b13a - Made using RAW_FISH on Ocelots when a player has the ability to instantly build not decrement the stack. Fixes BUKKIT-1439 (2012-04-03)  ++* 2315fb778 - Updated version to 1.2.5-R0.2-SNAPSHOT for development towards next release. (2012-04-03)  ++* 0b9b76c67 - Updated version to 1.2.5-R0.1 in pom.xml for beta. (2012-04-03)  ++* 52d9473e6 - SpawnRadius should only apply to main world. Fixes BUKKIT-1427 (2012-04-02)  ++* bad3979b8 - Make EntityCreatePortalEvent block list Unmodifiable. (2012-04-02)  ++* 470d9f9e1 - Tell clients to update if EntityPortalCreateEvent is canceled. Fixes BUKKIT-1426 (2012-04-02)  ++* 81102479a - Made Slimes spawn less often in FLAT worlds. Fixes BUKKIT-1441 (2012-04-02)  ++* 7594c91c8 - Made item use when a player has the ability to instantly build not decrement the stack. Fixes BUKKIT-1439 (2012-04-02)  ++* f4558f5d7 - [Bleeding] Hacky entity clipping fix; Fixes BUKKIT-50 (2012-04-02)  ++* a963880bd - Add BlockRedstoneEvent to Redstone Lamps, Addresses BUKKIT-1431 (2012-04-02)  ++* ed8cf5196 - Add BlockRedstoneLamp for diff visibility. (2012-04-02)  ++* 058bd748b - Fixed interacting with Air returning a false block. (2012-04-01)  ++* 7c137d8b1 - Added a reason for randomly spawning Ocelot babies. Addresses BUKKIT-1391 (2012-03-30)  ++* c8d4a7c83 - Fixed breaking at world height in creative. Fixes BUKKIT-997 (2012-03-31)  ++* fdab1db7c - Added missing //CB comment (2012-03-30)  ++* 1fa4d8430 - Updated version to 1.2.5-R0.1-SNAPSHOT (2012-03-30)  ++* e0c01154b - Fixed potential issue when converting worlds. Fixes BUKKIT-1307 (2012-03-29)  ++* cbab48a7b - Added OldChunkLoader for diff visibility. (2012-03-29)  ++* 16665d45d - Updated version to 1.2.4-R1.1-SNAPSHOT for development towards next release. (2012-03-29)  ++* f9fa2f1c6 - Updated version to 1.2.4-R1.0 for release. (2012-03-28)  ++* 57873b8d0 - [Bleeding] Added SpawnReason.BREEDING. Fixes BUKKIT-1356 (2012-03-26)  ++* ec123deb7 - Adding PathfinderGoalBreed for diff visibility. (2012-03-26)  ++* c100e20d6 - Reverting the Drop API for now, we need to re-evalute this as it is causing too many issues and blocking releases. (2012-03-27)  ++* c16bf07e8 - [Bleeding] Allow CraftItem to be backed by non-EntityItems. Fixes BUKKIT-1351 (2012-03-25)  ++* bdccfd29e - [Bleeding] Stop filtering out 0 damage for Humans. Fixes BUKKIT-1348 (2012-03-26)  ++* 9d0ea5202 - [Bleeding] Fixed potions throwing double events. Fixes BUKKIT-1332 (2012-03-25)  ++* b45184fdf - [Bleeding] Fixed dropping invalid Magma Creams. Fixes BUKKIT-1336 (2012-03-25)  ++* f1a235dcb - [Bleeding] Fixed ocelot dropping leather. Fixes BUKKIT-1333 (2012-03-25)  ++* e66159e21 - [Bleeding] Fix snowball drops. Fixes BUKKIT-1314 (2012-03-25)  ++* 80db22b64 - Refactor code to be more efficient. (2012-03-25)  ++* c30e339af - [Bleeding] Fixed item duping in certain occasions. Fixes BUKKIT-1310 (2012-03-25)  ++* 0c9b59e07 - [Bleeding] Fixed TNT dropping when it shouldn't. Fixes BUKKIT-1304 (2012-03-25)  ++* 94d718a14 - Check abilities instead of mode for allow flight check. Fixes BUKKIT-1302 (2012-03-24)  ++* 9c7ffb6d3 - [Bleeding] Fixed blocks dropping when BlockBreakEvent is canceled. Fixes BUKKIT-1299 (2012-03-23)  ++* 942c1c6a3 - Fixed incorrect assigning to isFlying when toggling setAllowedFlight(false) (2012-03-23)  ++* 6ef950041 - Fixed fatal crash at world generation. (2012-03-23)  ++* 40e096273 - Seriously fix natural drops. Fixes BUKKIT-1297 and fixes BUKKIT-1295 (2012-03-23)  ++* ff22e4e34 - Really fixed Block.breakNaturally(). Fixes BUKKIT-1295 (2012-03-23)  ++* b60a6743e - Fixed Block.breakNaturally(). Fixes BUKKIT-1295 (2012-03-23)  ++* cf2abd20e - Fixed Doors not dropping when the block they are placed on is removed. Fixes BUKKIT-1292 (2012-03-23)  ++* 52ecd60e6 - [Bleeding] Add a check for illegal blocks. Addresses BUKKIT-1278. Needs more investigation. (2012-03-22)  ++* 724b82626 - Reverted to original TextWrapper. Might re-investigate after the RB. Fixes BUKKIT-1275 (2012-03-22)  ++* 904cf388b - Re-added TextWrapper, and fixed chat length issues (at cost of it looking not so nice sometimes!) This fixes BUKKIT-1275 (2012-03-22)  ++* ddaf3c84d - Fixed Connection Throttle handling. Fixes BUKKIT-1279 (2012-03-22)  ++* 8fb141bfa - Implemented new player flight methods. This implements BUKKIT-1281. This also fixes BUKKIT-1146. (2012-03-22)  ++* ca8b9a0bb - Removed temporary hackish fix for the entity interactivity issues, fixed properly in MC1.2.4. (2012-03-22)  ++* ccbb4b479 - Made Snowmen use a DamageCause MELTING for melting in hot biomes. Addresses BUKKIT-1244 (2012-03-22)  ++* f6bcaa6b0 - Fixed minecarts being dropped when crashing a boat. Fixes BUKKIT-1273 (2012-03-22)  ++* c2cdeac09 - Added configurable Connection Throttle. Addresses BUKKIT-1274 (2012-03-22)  ++* dda37aa18 - Nuked TextWrapper. We don't need you anymore, old friend :( (2012-03-22)  ++* 9d09e7d01 - Updated to Minecraft version 1.2.4. Updated version string to 1.2.4-R0.1. (2012-03-22)  ++* 8dc7417a3 - [Bleeding] Fixed bug involving pistons and powered rails. This fixes BUKKIT-517 (2012-03-21)  ++* 8ad27aa01 - Added BlockMinecartTrack and MinecartTrackLogic for diff visibility. (2012-03-21)  ++* 8d35caf07 - Kick for invalid carried item. (2012-03-22)  ++* f188afe79 - [Bleeding] Prevent update inconsistencies on generation/decoration that span chunks. Fixes BUKKIT-871 (2012-03-21)  ++* 09a73d352 - [Bleeding] Make sure biome data is initialized during generate - prevent uninitialized data being sent to client. Fixes BUKKIT-871 (2012-03-20)  ++* 6cd2a7080 - Added for diff visibility: (2012-03-20)  ++* 0a925ff06 - [Bleeding] Added support for custom index help topics in help.yml. Addresses BUKKIT-1263 (2012-03-22)  ++* eb3c092ef - [Bleeding] Added option to completely disable all automatic help topic generation by adding "All" to the ignore-plugins list in help.yml. Addresses BUKKIT-1264 (2012-03-21)  ++* 31b1bc02c - [Bleeding] Fixed a StackOverflowError with command alias handling for Help. Addresses BUKKIT-1253 (2012-03-20)  ++* 8aee4c3f5 - [Bleeding] Added support for all TreeType entries to CraftWorld.generateTree(). Addresses BUKKIT-1161 (2012-03-13)  ++* 27acb4c41 - Added WorldGenSwampTree for diff visibility (2012-03-11)  ++* 169c2ee8c - [Bleeding] Added Ageable interface for Villagers and Animals to extend. Addresses BUKKIT-1232 (2012-03-19)  ++* 96c4bb7da - [Bleeding] Account for new rare drops in EntityDeath events. Fixes BUKKIT-1105 (2012-03-20)  ++* 1c95413f4 - [Bleeding] Fix for creeper getDrops() not reporting the music disk if it was killed by a skeleton. Addresses BUKKIT-1133 (2012-03-10)  ++* 5ba892804 - [Bleeding] Added getting and setting drops to all appropriate events. Fixes BUKKIT-397 and fixes BUKKIT-1252 (2012-03-05)  ++* 8d62de705 - Added for diff visibility: (2012-03-06)  ++* 784aa3b60 - [Bleeding] Fix the openInventory methods for custom inventories. Fixes BUKKIT-1248 (2012-03-17)  ++* 43001ca2a - [Bleeding] Only fire CraftItemEvent if there's actually an item there to craft (ie, don't fire it for a click on an empty result slot). Fixes BUKKIT-1250 (2012-03-18)  ++* 93732e21b - [Bleeding] Fixed NullPointerException in InventoryView.setCursor() if you tried to empty the cursor by setting it to null. Fixes BUKKIT-1043 (2012-03-13)  ++* 288662bfa - [Bleeding] Fix some return types that could lead to ArrayStoreException (2012-03-17)  ++* b9a71db04 - [Bleeding] Make crafting and enchanting inventories keep track of their owner rather than returning null. Addresses BUKKIT-1209 (2012-03-13)  ++* 4bcbe2d23 - [Bleeding] Add Chest.getBlockInventory() for convenience; this always returns a single chest inventory. Addresses BUKKIT-1247 (2012-03-19)  ++* cd9779196 - [Bleeding] Add iterator() with starting index. Addresses BUKKIT-1246 (2012-03-17)  ++* 796653111 - [Bleeding] Completely fix the tree generation algorithm to make it near identical to vanilla as well as fix potential bugs associated with disappearing saplings. (2012-03-16)  ++* ea60181a8 - [Bleeding] Added way to get/set if Iron Golem was player created. Addresses BUKKIT-1229 (2012-03-08)  ++* 68b98d4c8 - [Bleeding] Implement ExpBottleEvent; Addresses BUKKIT-888 (2012-03-20)  ++* 9055a20d7 - Added EntityThrownExpBottle for diff visibility. (2012-03-20)  ++* 71a51b024 - Reverted invalid clone. Fixes BUKKIT-1198 (2012-03-16)  ++* 82fab5b2d - [Bleeding] Moved HelpTopicComparator to Bukkit.jar. Addresses BUKKIT-1193 (2012-03-16)  ++* 4589e943f - [Bleeding] Added support for color codes in help.yml. Addresses BUKKIT-1191 (2012-03-16)  ++* 46429c6cb - [Bleeding] Implemented the command-topics-in-master-index option in help.yml. Addresses BUKKIT-1189 (2012-03-15)  ++* f87e053c6 - [Bleeding] Added automatically generated plugin-level sub-indexes to the master help index. Addresses BUKKIT-1180 (2012-03-15)  ++* 184faf1f2 - [Bleeding] Added option to remove entire plugins from the help index using the help.yml file. Addresses BUKKIT-1178 (2012-03-14)  ++* fc697a4f4 - Fixed translation issue in EntityMinecart. Addresses BUKKIT-980 (2012-03-16)  ++* 241cf1c66 - [Bleeding] Allow custom inventory views to change their type to BREWING or ENCHANTING, and also allow them to change their title and size. Fixes BUKKIT-1190 (2012-03-12)  ++* db5f80448 - [Bleeding] Check top inventory type when determining whether a click event is a craft event. Fixes BUKKIT-1112 (2012-03-13)  ++* f7da5d2ad - [Bleeding] Disabled data filtering for mob spawners. Addresses BUKKIT-329 (2012-02-26)  ++* 5c8fd4995 - [Bleeding] Implemented Inventory.{get,set}MaxStackSize(). Addresses BUKKIT-1076 (2012-03-14)  ++* 66e067f37 - [Bleeding] Make InventoryView.setItem(-999, item) drop the item on the ground by default. (2012-03-13)  ++* 83265005f - [Bleeding] Made ItemStack constructors not default to an amount of 0. Fixes BUKKIT-610 (2012-03-12)  ++* 76cc48840 - [Bleeding] DoubleChestInventory.getHolder() no longer returns null. Addresses BUKKIT-995 (2012-03-12)  ++* f27427ad1 - Fix some improper item cloning instances that would have dropped enchantments (2012-03-13)  ++* 77ceb0002 - Fix losing enchants from stacked items in custom inventories (2012-03-02)  ++* 42822ddca - Re-added EntityCombust event to skeletons. Fixes BUKKIT-1188 (2012-03-15)  ++* 92f771a02 - [Bleeding] Implemented ProjectileLaunchEvent. Addresses BUKKIT-284 (2012-03-12)  ++* 6f6f8ef00 - Updating minecraft-server dependency. (2012-03-15)  ++* b4c9ad518 - [Bleeding] Call DamageEvent before CombustEvent for Arrows. Fixes BUKKIT-1100 (2012-03-14)  ++* 3054d020d - Disabled BukkitDLUpdaterServiceTests. Nice to have, but should not be run on every compile as it relies on DLB being up. Addresses BUKKIT-1140 (2012-03-15)  ++* c90a7a52e - [Bleeding] Fixed maxStack being incorrectly set to 0 in custom craft inventories. Fixes BUKKIT-1181 (2012-03-15)  ++* 450316728 - Fixed EntityDamageByEntityEvent to call for every attackable entity. Fixes BUKKIT-1129, Fixes BUKKIT-1054 and Fixes BUKKIT-147. (2012-03-12)  ++* c625d0035 - Stop loading the 'flying' setting from player.dat until it is properly implemented and used in NMS. Fixes BUKKIT-1183 (2012-03-15)  ++* adebd466f - Added PlayerAbilities for diff visibility. (2012-03-15)  ++* 5a6878b9b - Made stepping on Redstone Ore fire PlayerInteract events for players, EntityInteract events for other entities. Fixes BUKKIT-1163 and fixes BUKKIT-1182 (2012-03-14)  ++* 16c6cbe5e - Added BlockRedstoneOre for diff visibility. (2012-03-14)  ++* 868eaf571 - [Bleeding] Call a LAVA BlockIgniteEvent in another place in BlockStationary. Fixes BUKKIT-970 (2012-03-10)  ++* 2a4167d8a - Made snowmen in rain or water fire EntityDamage events with DamageCause DROWNING. Fixes BUKKIT-1165 (2012-03-14)  ++* 373afd1b2 - Made snowmen melting fire EntityDamage events with DamageCause FIRE_TICK. Fixes BUKKIT-1164 (2012-03-14)  ++* f219f0efe - Implemented Enchantment.conflictsWith(). Addresses BUKKIT-1159 (2012-03-12)  ++* 28c1f571d - [Bleeding] Added Player.isBlocking(). Addresses BUKKIT-858 (2012-03-12)  ++* b37872c1a - Made PlayerInteractEvent fire for digging within spawn for informational purposes only. Fixes BUKKIT-1086 (2012-03-13)  ++* 06b814fd7 - [Bleeding] Added EntityBreakDoorEvent. Fixes BUKKIT-1134 (2012-03-10)  ++* 69ee00b6f - Adding PathfinderGoalBreakDoor for diff visibility. (2012-03-10)  ++* 1b6ca577f - Fixed translation issue and enderman not spawning when The End is generated. Fixes BUKKIT-1115 (2012-03-11)  ++* 0f659850b - Made golems spawning respect spawn-animals for real. Fixes BUKKIT-1124 (2012-03-11)  ++* fadc93060 - Updated version to 1.2.3-R0.3-SNAPSHOT for development towards next release. (2012-03-11)  ++* de02f8197 - Updated version to 1.2.3-R0.2 in pom.xml for beta. (2012-03-11)  ++* 8ddd2f056 - [Bleeding] Help index now identifies itself as "Help: Index" rather than "Help: null" (2012-03-11)  ++* c84af98cc - Made World.refreshChunk() refresh the chunk, thanks zerg960! Fixes BUKKIT-1014 (2012-03-04)  ++* 4545336fd - Only remove blocks when golem is successfully spawned. Fixes BUKKIT-1094 (2012-03-10)  ++* 433efec68 - Fixed BlockStateListPopulator in EntityEnderDragon not being populated. Fixes BUKKIT-1130 (2012-03-11)  ++* 2aad49eec - Made ender pearls use the player's yaw and pitch. Fixes BUKKIT-1056 (2012-03-11)  ++* 49ff166d1 - Fixed potential packet loss issue with vanish API. Fixes BUKKIT-1125 (2012-03-10)  ++* bdd2139c7 - [Bleeding] Add getWorldType() and getGenerateStructures() to CraftServer. Fixes BUKKIT-855 (2012-03-10)  ++* eaa56941f - [Bleeding] Make zero (or very small) explosions do no damage. Fixes BUKKIT-931 (2012-03-09)  ++* 996832ff6 - [Bleeding] Added support for amending help topic visibility permissions in help.yml. Addresses BUKKIT-1113 (2012-03-10)  ++* a8b2c6d04 - [Bleeding] Implemented command aliases in help. Addresses BUKKIT-1028 (2012-03-10)  ++* 03ce67c38 - [Bleeding] Moved DefaultHelpTopic and GenericCommandHelpTopic to public bukkit api. (2012-03-10)  ++* 378424a1a - [Bleeding] Added support for linking custom CommandExecutor types to a HelpTopicFactory. Fixes BUKKIT-1027 (2012-03-09)  ++* 5c757df67 - Made iron golems spawning to defend villagers respect spawn-animals. Fixes BUKKIT-1124 (2012-03-10)  ++* ae6b3711e - Made zombie invasions respect spawn-monsters setting. Fixes BUKKIT-1123 (2012-03-10)  ++* f53486355 - Make setting slots to AIR set them to null. Addresses BUKKIT-1043 (2012-03-10)  ++* 68c89fcac - Fixed enchanting in Creative. Fixes BUKKIT-1119 (2012-03-10)  ++* 77ef05109 - [Bleeding] Added new target events. Fixes BUKKIT-935 (2012-03-09)  ++* a967d6e37 - Added PathfinderGoalTarget, PathfinderGoalArrowAttack, PathfinderGoalMeleeAttack for diff visibility. (2012-03-08)  ++* 08bd33a3e - Made entering an end portal from The End move the player to their bed spawn if it exists. Fixes BUKKIT-1061 (2012-03-10)  ++* 6f40a22e1 - Made feeding wolves fire EntityRegainHealth events. Fixes BUKKIT-1111 (2012-03-09)  ++* fce3386aa - Added EntityTame event. Fixes BUKKIT-1109 (2012-03-09)  ++* e625999f2 - Added EntityWolf for diff visibility. (2012-03-09)  ++* 36406afa6 - Re-re-fixed block transmutation (2012-03-10)  ++* cf9d00a71 - Re-fixed block transmutation (2012-03-10)  ++* 848344250 - Fixed sheep not firing events when eating grass. Fixes BUKKIT-1104 (2012-03-09)  ++* 9b5a4d68b - Added PathfinderGoalEatTile for diff visibility. (2012-03-09)  ++* c4b4afa14 - Fixed being unable to use water in The End. Fixes BUKKIT-1002 (2012-03-09)  ++* ec2713b25 - Added WorldProviderTheEnd for diff visibility. (2012-03-09)  ++* d1dd96f56 - Made Chunk.getEntities() account for the world height increase. Fixes BUKKIT-1059 (2012-03-09)  ++* 45cf92744 - (Re)restricted the nether to 128 world height. Fixes BUKKIT-976 (2012-03-09)  ++* a602d5c8c - [Bleeding] Implemented getting the hostname a player used to log in. Addresses BUKKIT-984 (2012-03-03)  ++* 97669f8d9 - [Bleeding] Add updated interfaces for custom chunk generation. Addresses BUKKIT-874 (2012-03-08)  ++* 796a9ba8f - Add vanilla ChunkSection.java from mc-dev for diff visibility. (2012-03-08)  ++* cbdcb44a1 - Made zombie invasions fire CreatureSpawn event. Fixes BUKKIT-1090 (2012-03-08)  ++* ec555a71e - Added VillageSiege for diff visibility. (2012-03-08)  ++* ecb00bba8 - Made iron golems fire CreatureSpawn event. Fixes BUKKIT-1089 (2012-03-08)  ++* f5ce8627c - Added Village for diff visibility. (2012-03-08)  ++* 43a00954f - Made PlayerPortalEvent fire when leaving The End. Fixes BUKKIT-478 (2012-03-08)  ++* f26fbc3bf - Fixed EnderPearls not being limited to the world they were used in. Fixes BUKKIT-658 (2012-03-08)  ++* 8ecdfe9ee - Added missing filters to addEntity. Fixes BUKKIT-794 (2012-03-08)  ++* 1e06e150b - [Bleeding] Only do unload-all on tick when last player leaves. Fixes BUKKIT-1060 (2012-03-08)  ++* 0ba2d285f - [Bleeding] Made Iron Golems and Ocelots throw EntityDeathEvent. This fixes BUKKIT-1010. (2012-03-05)  ++* 1c641ed98 - Added EntityIronGolem and EntityOcelot for diff visibility. (2012-03-05)  ++* a029f32cc - [Bleeding] Add APIs for editing biome data, fix existing code to use persistent biome data. Addresses BUKKIT-1075 (2012-03-04)  ++* b5e92871e - [Bleeding] Added ConversationAbandonedEvent and supporting infrastructure. Whenever a conversation exits, the ConversationAbandonedEvent is triggered with details about how the conversation ended and what, if anything caused it to end. Fixes BUKKIT-986 (2012-03-04)  ++* 7a8ef4f6a - Extremely hackish fix for the entity interactivity issue. Fixes BUKKIT-960 (2012-03-06)  ++* b5af5adc7 - Fixed the dreaded GSOD crash. Fixes BUKKIT-1040 (2012-03-05)  ++* 2ff8a8749 - Fixed copy error in DoubleChest's inventory (2012-03-05)  ++* 3f2c31e98 - Updated version to 1.2.3-R0.2-SNAPSHOT for development towards next release. (2012-03-04)  ++* 055384889 - Updated version to 1.2.3-R0.1 in pom.xml for beta. (2012-03-04)  ++* 2feb2ea12 - Fix worlds loading improperly. Fixes BUKKIT-991 (2012-03-03)  ++* 4ac2b0832 - Added missing null check for enchantments. Fixes BUKKIT-897 (2012-03-03)  ++* 90fae3b57 - Fixed leaf decay issue - this fixes BUKKIT-948 and BUKKIT-871 (2012-03-03)  ++* c6273810a - [Bleeding] Fixed crafting enchanted items, fixes BUKKIT-602 (2012-03-02)  ++* 2d5263bfe - recover from converter issue FIXES BUKKIT-890 (2012-03-02)  ++* ec35500c6 - Implemented Villager API for getting/setting Profession. This adds BUKKIT-887 (2012-03-03)  ++* 20c8ae59f - Slightly changed the Auto Updater error for when it can't find the current version (2012-03-03)  ++* 74220205f - Fixed typo in help.yml header - this fixes BUKKIT-945. Thanks to a PR by turt2live (2012-03-03)  ++* 974ff6cb8 - ... Comments! (2012-03-02)  ++* 61fb069c6 - Fixed fatal crashes when there's a block at maxheight at spawn - this fixes BUKKIT-922. (2012-03-02)  ++* ede443234 - Minor optimization getting chest inventories (2012-03-02)  ++* 88149dc43 - Fixed chest.getInventory for double chests, thanks to Acrobot. This fixes BUKKIT-901 (2012-03-02)  ++* 8016bf2dd - Fixed punching out fire in creative - this fixes BUKKIT-914, thanks to md-5 (2012-03-02)  ++* 4ac8d68c3 - Fixed porting issue in World. Now uses correct variable names to add chunks for growth. This fixes BUKKIT-934 (2012-03-02)  ++* a42e710bb - Updated from 1.2.2 to 1.2.3. This fixes BUKKIT-943 (2012-03-02)  ++* cb669f72a - Fixed porting issue with SpawnerCreature. Fixes BUKKIT-921 (2012-03-02)  ++* 5198f2efb - Allow the new jungle tree type to be grown both as a single sapling and as a group of 4. Fixes BUKKIT-886 (2012-03-02)  ++* 94d4d6821 - Convert contained worlds to Anvil (thanks to Amaranth) (2012-03-02)  ++* c51c895cd - Implemented snapshot support for 1.2. (2012-03-01)  ++* eddefa6c5 - Preserve data if possible when dropping Items from entities. Partial solution for BUKKIT-15 (2012-03-01)  ++* bcf979b2a - Fixed hunger not behaving correctly. Addresses BUKKIT-907 (2012-03-01)  ++* 2510af0d1 - Fix porting issue in World.mayPlace Fixes BUKKIT-915 (2012-03-01)  ++* 82f2a2e77 - World height related fixes - 128 -> 256. Addresses BUKKIT-889 (2012-03-01)  ++* efc9ced12 - Fixed sending maxPlayers at initial login (2012-03-01)  ++* f1f9802de - Implemented new 1.2 entities - this fixes BUKKIT-872 and BUKKIT-885 (2012-03-01)  ++* 510856938 - Revert filtering by dynamic block range (2012-03-01)  ++* 0e7b9834f - Potentially fixed crash when building at max world height (2012-03-01)  ++* eb934c760 - Made the auto-update-checker suggest channels to server administrators if they're upgrading past their preferred channel. (2012-03-01)  ++* a5be07979 - Fixed compile issues with StructureGrowDelegate not implementing the new isEmpty method (2012-03-01)  ++* 6f1fecbd3 - Fixed cast issues when passing delegates to world generators, and WorldGenMegaTree method exception. This fixes BUKKIT-866, and references BUKKIT-868. (2012-03-01)  ++* aa3678a78 - Fixed NoSuchMethodError in WorldGenGroundBush (2012-03-01)  ++* 543c4879f - Updated CraftBukkit to 1.2 (2012-03-01)  ++* e9ca87000 - Updated version to 1.1-R6 for RB. (2012-03-01)  ++* a726f6de3 - Potentially fixed inventory issues. This (should) fix issue BUKKIT-860 (2012-03-01)  ++* fb668b428 - Updated version to 1.1-R5 for RB (2012-03-01)  ++* a53afd313 - We build for 1.5. (2012-03-01)  ++* 1161de3f6 - [Bleeding] Added Conversations API. Addresses BUKKIT-864 (2012-01-19)  ++* 818a61040 - [Bleeding] Added Help API. Addresses BUKKIT-863 (2012-03-01)  ++* c73adc953 - Fixed AchievementTest.java (2012-02-29)  ++* 33ba9f0a2 - Updated to rename revision 02 (2012-02-29)  ++* 8524ff8ef - Fix for Java 1.5 (2012-02-29)  ++* 0842bab48 - [Bleeding] Implementation of inventory framework. Addresses BUKKIT-856 (2012-02-29)  ++* 10e593649 - Imported from mc-dev: - TileEntity - Container - ContainerFurnace - ContainerDispenser - ContainerChest - ContainerEnchantTableSubcontainer - ContainerEnchantTableInventory - ContainerBrewingStand (2012-02-25)  ++* d20091e64 - Implementation of richer playEffect methods. Addresses BUKKIT-857 (2012-02-26)  ++* bf01e93ab - Added EntityTargetEvent for Experience Orbs, happens when it starts moving towards a human entity! Addresses BUKKIT-820 (2012-02-25)  ++* cd90cec48 - Implemented TeleportCause enums. Addresses BUKKIT-265 (2012-02-15)  ++* 53e4a034f - Moved getVehicle, leaveVehicle and isInsideVehicle from CraftLivingEntity to CraftEntity. Addresses BUKKIT-811 (2011-10-25)  ++* 1394926e5 - [Bleeding] Implement Metadata framework for Entities, Blocks, and Worlds (2011-12-08)  ++* 403f87478 - [Bleeding] Fix generics. Addresses BUKKIT-844 (2012-02-29)  ++* 257fd1624 - Added plugin-profiling setting to bukkit.yml. (2012-02-10)  ++* 92dfb2500 - Adjusted CraftBukkit to work with the entity event convenience patch in Bukkit. Addresses BUKKIT-809 (2012-02-21)  ++* dcf016822 - Fixed sneaking eye height. Addresses BUKKIT-808 (2012-02-22)  ++* f70f99d1a - Fixed CraftOfflinePlayer.getLastPlayed() returning the wrong result. Addresses BUKKIT-847 (2012-02-27)  ++* 397f25aa2 - Added plugin loading log entry (2012-02-15)  ++* cc2e721ff - Implement PortalCreateEvent reason codes. Addresses BUKKIT-833 (2011-12-25)  ++* f2d9d4174 - CraftSign changes. Addresses BUKKIT-824 (2012-02-25)  ++* 57bd84510 - [Bleeding] Made dragon eggs trigger BlockFromTo events when they teleport. Addresses BUKKIT-828 (2012-02-23)  ++* 5901a7456 - Fixed changes made to PlayerCommandPreprocess events having no effect. Fixes BUKKIT-376 (2012-02-25)  ++* d6c6b18ba - Fix for shaped recipes stripping enchantments from the result. Fixes BUKKIT-602 (2012-02-25)  ++* 2887f99fe - Fixed EntityArrow just to use the PVP setting if the destination is a Player. Fixes BUKKIT-803 (2012-02-19)  ++* a7f0b70a3 - Updated README.md with more coding and pull request conventions and tips to get your pull request accepted. (2012-02-23)  ++* 078e2511a - [Bleeding] Override not applicable (2012-02-23)  ++* 7a49e29b5 - [Bleeding] Undo changes to the tree WorldGenerators. (2011-12-23)  ++* 796d4a8a7 - [Bleeding] Fixed setTotalExp, any experience update bugs and removed Deprecated Methods. Fixes BUKKIT-798 and fixes BUKKIT-797 (2012-02-22)  ++* d7f6d2d92 - [Bleeding] Use player.getItemInHand(), instead of a new ItemStack. Addresses BUKKIT-767 (2012-02-18)  ++* 70c5f0642 - Fixed pom.xml (2012-02-22)  ++* 036b5c395 - [Bleeding] Added launchProjectile. (2012-02-16)  ++* af51313ff - [Bleeding] Added EntityType to replace CreatureType. (2012-02-06)  ++* 7792156fb - [Bleeding] Added BlockGrowEvent. Addresses BUKKIT-104 (2012-02-11)  ++* 847e1c62c - [Bleeding] Added BlockCrops, BlockReed, BlockStem, BlockNetherWart for diff visibility. (2012-02-11)  ++* 326091c13 - [Bleeding] Recipe API improvements and fixes. Addresses BUKKIT-738 and BUKKIT-624 (2011-07-23)  ++* 84ecdb543 - Imported from mc-dev: (2011-07-14)  ++* 39048be43 - [Bleeding] Cleanup clone method. (2012-02-19)  ++* 4d89a21a2 - Removed EndermanPickup/Place events, replaced with EntityChangeBlock event. (2012-02-19)  ++* 1922672f1 - [Bleeding] Fire EntityDamageByEntityEvent for EnderCrystal. Fixes BUKKIT-776 (2012-02-18)  ++* b06719dd0 - [Bleeding] Moved projectile EntityDamageByEntityEvent's to event factory. Addresses BUKKIT-775 (2012-02-10)  ++* 5316c43a8 - Add getEntitesByClass(Class), getEntitiesByClasses(Class...), deprecate getEntitiesByClass(Class...) (2012-01-27)  ++* 137880b72 - Deprecation cleanup. (2012-01-30)  ++* 3b634b14f - Fixed NPE when running a custom build of CraftBukkit. This fixes issue #BUKKIT-765 (2012-02-18)  ++* d057ee1e0 - Don't print stacktraces on DLB fetching errors. And because I forgot last commit; this adds BUKKIT-760 (2012-02-17)  ++* 236cfed61 - Added a built-in update checker. See http://wiki.bukkit.org/Bukkit.yml#auto-updater for new bukkit.yml options. (2012-02-16)  ++* 64264f61b - Revert "Remove tile entities when a block is removed." (2012-02-14)  ++* 8773c3ed4 - Updated version to 1.1-R5-SNAPSHOT for development towards next release. (2012-02-13)  ++* 0419d7963 - Updated version to 1.1-R4 in pom.xml for RB. (2012-02-13)  ++* 7076ef9de - Use createNMSItemStack on CraftingManager recipe registration. Fixes BUKKIT-602 (2012-02-10)  ++* 1c28c946f - Fixed sprinting while breaking a painting edge case. Fixes BUKKIT-740 (2012-02-13)  ++* 9b10970f6 - [Bleeding] Fixed EntityChangeBlock event reporting incorrect information for Enderman block placing. (2012-02-04)  ++* da1aead88 - Made splash options abide by PVP settings. Fixes BUKKIT-542 (2012-02-08)  ++* f52665348 - [Bleeding] Added Potions API. Fixes BUKKIT-389 (2012-01-09)  ++* 63b9ed9ab - Added configurable animal and monster ticks per spawn setting. (2012-02-10)  ++* c38fcb360 - Implemented JOCKEY and CHUNK_GEN SpawnReasons. (2012-02-10)  ++* 0170ae952 - Cleanup. (2012-02-10)  ++* 56741552e - Made damaging EntityEnderCrystals fire EntityDamageByEntity. Fixes BUKKIT-724 (2012-02-09)  ++* 391ac23c9 - [Bleeding] Fire EntityDamageByEntityEvent's for EnderDragon being hit by Projectiles. (2012-02-09)  ++* 7ff8c1756 - [Bleeding] Make sure we don't keep stale references to vanished players. (2012-02-09)  ++* d8ca2401f - [Bleeding] Send new player location after teleports only to nearby players. (2012-01-30)  ++* 80bae060c - [Bleeding] Use event values for damage. (2012-02-09)  ++* fa6fd24f2 - [Bleeding] Handle EntityHuman attack a bit more properly. (2012-02-08)  ++* 8ecfca47d - [Bleeding] Fixed EnderDragon suffocation. (2012-02-08)  ++* 6dda89d87 - [Bleeding] Deprecate Enderman events in favor of EntityChangeBlock (2012-02-04)  ++* 10ab7b96e - Made steps fire a BlockPlace event. Fixes BUKKIT-394 (2012-02-08)  ++* 6abd178ea - Added ItemStep for diff visibility. (2012-02-09)  ++* ad6bab8c6 - Implemented EntityTeleportEvent. Fixes BUKKIT-366 (2012-02-07)  ++* be0ecf467 - Pass EntityEnderCrystal to EntityExplode event. (2012-02-08)  ++* 39002fd39 - Added EntityEnderCrystal for diff visibility. (2012-02-08)  ++* ae333ded9 - Made flaming arrows respect PVP settings. Fixes BUKKIT-541 (2012-02-08)  ++* 879a87b1e - Fixed Pumpkins being reported as AIR in BlockPlace event when building snowmen. Fixes BUKKIT-697 (2012-02-08)  ++* 6d6745697 - Made BlockPumpkin report an appropriate SpawnReason.BUILD_SNOWMAN when a snowman is spawned. (2012-02-08)  ++* 8e7e07352 - Made Ender Dragons fire EntityRegainHealth events when getting healed by Ender Crystals. (2012-02-08)  ++* 0a52fd372 - Fixed VehicleBlockCollisionEvent returning the wrong block. Fixes BUKKIT-396 (2012-02-08)  ++* 497a0e247 - Made crafted maps fire MapInitializeEvent. Fixes BUKKIT-143 (2012-02-08)  ++* 274e8a141 - Made flaming arrows fire EntityCombustByEntity events. Fixes BUKKIT-707 (2012-02-08)  ++* 4d563342b - Added Spawner Egg support to CreatureSpawnEvent. (2012-02-05)  ++* 54e45b7d6 - Prevent the Vanish API from sending unnecessary packets. (2012-02-03)  ++* 5ae8f13fd - Fixed items losing their enchantments under certain circumstances. (2012-02-01)  ++* 329cf2966 - Added BlockFurnace for diff visibility. (2012-02-01)  ++* 37c886853 - [Bleeding] Implemented Vanish API. (2012-01-31)  ++* 028cbb8fe - Removed MONSTER CreatureType. (2012-02-03)  ++* 5479a2ca8 - Fixed being unable to cancel TNT placement. Fixes BUKKIT-89. (2012-02-02)  ++* 1884f2f76 - Added BlockTNT for diff visibility. (2012-02-02)  ++* 14bb77195 - Allow plugins to change ID and Data during BlockPlace event. (2012-02-02)  ++* 1bb011a54 - Fixed other types of 'block transmuters'. (2012-02-02)  ++* 8bf770c5f - Added debug to help with diagnosing tile entity issues in the future. (2012-02-02)  ++* 2dba592dc - Remove tile entities when a block is removed. (2012-02-02)  ++* 8b5289d43 - Fixed wrong game type being sent when a player is teleported across worlds. Fixes BUKKIT-510 (2012-02-01)  ++* b269d6b63 - Updated version to 1.1-R4-SNAPSHOT for development towards next release. (2012-01-30)  ++* ff28859a6 - Updated version to 1.1-R3 in pom.xml for RB. (2012-01-30)  ++* 69e766c5f - Fixed BlockPlace event. Fixes BUKKIT-663 (2012-01-30)  ++* 875219e28 - Fixed vanilla issue where chunks would be mislocated and corrupt. Big thanks to Wug for the fix. (2012-01-30)  ++* 72559fe63 - Added ChunkLoader.java and ChunkRegionLoader.java for diff visibility (2012-01-30)  ++* 48661b636 - Updated version to 1.1-R3-SNAPSHOT for development towards next release. (2012-01-29)  ++* 4e3aa6126 - Updated version to 1.1-R2 in pom.xml for RB. (2012-01-29)  ++* 3a419481e - Added 'generate-structure' setting support and WorldCreator property. (2012-01-29)  ++* f1a35effb - Added useExactLoginLocation(). Closes BUKKIT-145 (2012-01-29)  ++* c5a4bfd29 - Use OO > new method (2012-01-29)  ++* 3173b68bb - Filter null/AIR from items dropped on death. Fixes: BUKKIT-653 (2012-01-29)  ++* 4c2f57592 - Add some testing (2012-01-29)  ++* 1ea0037f4 - Fixed maps crashing/disconnecting the client under certain circumstances. (2012-01-29)  ++* 9b635aacc - Moved BlockPlace event. (2012-01-27)  ++* 7bdfea482 - Reverted onPlace changes. (2012-01-28)  ++* 9d9083972 - Put statement inside CraftBukkit block (2012-01-28)  ++* bb730f0ee - Cleanup. (2012-01-27)  ++* 38ad0ea5f - Prevent (Entity) null to be added to the entity list. (2012-01-27)  ++* 16d3b705c - Fix 'Block Transmute'. Bug where you could change the data of a block 'on demand'. (2012-01-27)  ++* 98fd1a360 - Let's be a little less tricky to the client. Relates to BUKKIT-637 (2012-01-26)  ++* 5900268e7 - Fixed the behaviour of fluid blocks. Fixes BUKKIT-629 (2012-01-26)  ++* 5bcb23502 - Trick the client instead of modifying the world. Fixes BUKKIT-637 (2012-01-26)  ++* 5451788eb - Updated version to 1.1-R2-SNAPSHOT for development towards next release. (2012-01-25)  ++* d01413653 - Updated versions to 1.1-R1 in pom.xml for RB. (2012-01-25)  ++* b987d1b05 - Really loosened the throttles strictness this time. (2012-01-24)  ++* 3e0a26f27 - Fixed redstone torches not updating indirect neighbors. Fixes BUKKIT-477 (2012-01-24)  ++* 989acd0af - Fix invalid data in pistons (2012-01-24)  ++* b416dd337 - Loosen throttle strictness. (2012-01-24)  ++* 39935eb3f - Fix diodes not updating indirect neighbors. (2012-01-24)  ++* 3b46222c5 - Persist locking of an animal's age to disk (2012-01-24)  ++* 94231f1ec - [Bleeding] Implemented EnchantmentTable API. (2012-01-21)  ++* c7716e1de - [Bleeding] Audit of onPlace methods, Moved to postPlace as appropriate. Closes BUKKIT-89 (2012-01-17)  ++* e92bdab57 - Fixed CraftLivingEntity.damage when the entity is an EntityComplex. (2012-01-23)  ++* 872dad554 - [Bleeding] Implemented PotionSplashEvent. Closes BUKKIT-307 (2012-01-20)  ++* 74ead3abd - Immediately tell client a block is broken, then process the event. (2012-01-17)  ++* cf521b5a5 - Only truncate player name when sending spawn packet. (2012-01-17)  ++* 97ce5c447 - Implemented PlayerShearEntityEvent in EntityMushroomCow. (2012-01-23)  ++* 93bc8ecd9 - [Bleeding] Implemented Sheep, Shear and EntityChangeBlock API. Thanks tips48! Closes BUKKIT-512 (2012-01-21)  ++* 229337bc8 - Use BlockFadeEvents to signal fire blocks burning out (2012-01-11)  ++* 51b29eff0 - Removed accidentally committed change. Needs more investigating (2012-01-21)  ++* 4f02563c6 - Reverted changes to getItem(). Will be reimplemented after RB. (2012-01-20)  ++* 1bbeec1f7 - Accounted for NMS getItem() returning null in recent commit. (2012-01-20)  ++* 85ab95cec - Nullcheck EntityItem's ItemStack where required. This fixes BUKKIT-552 (2012-01-20)  ++* 51a056ecd - Disallow colour names in offline-mode. This fixes BUKKIT-439. Thanks to cainfool for the discovery. (2012-01-20)  ++* 76d7a1ce1 - Properly handle null and air items. Fixes BUKKIT-435 and BUKKIT-550 (2012-01-20)  ++* 4b0f819af - Updated timing code for new event system (2012-01-19)  ++* 1aa084780 - Add updated repos to pom.xml (2012-01-19)  ++* 28fcbec3b - Prevent re-use of internal world dimension IDs. This fixes BUKKIT-448. Thanks to snowleo for the PR. (2012-01-19)  ++* b0f29b175 - Throw PlayerLevelChangeEvent and PlayerExpChangeEvent events. Thanks to feildmaster for the PR. (2012-01-19)  ++* 1f1c9c0d4 - Correctly take in ChatColor length when limiting player list size. This should fix BUKKIT-571 (2012-01-19)  ++* 737cf284e - Fix giving wrong arguments to callEntityDamageEvent. Forgot to update after changing the signature :( (2012-01-18)  ++* 112e0816b - Actually close the inventory on a *cross*-world teleport. (2012-01-17)  ++* f5f268f93 - Implement Player.setBedSpawnLocation(Location). Thanks md_5 (2012-01-17)  ++* b22e727cd - [Bleeding] Make BaseBiome to Biome mapping faster, detect missing mapping in future updates (2011-12-10)  ++* bcf6440bc - [Bleeding] Implement EntityShootBowEvent. Thanks Zeerix. (2011-12-28)  ++* edbb7358f - [Bleeding] Implementation of the brewing stand. (2012-01-17)  ++* 387d7319b - [Bleeding] Prevent BlockSnow from recursively calling a physics update. (2012-01-17)  ++* 1d4a9e1df - [Bleeding] Make sure to close any open inventory windows before teleporting. Thanks md_5. (2012-01-17)  ++* 1d04305ce - [Bleeding] Added event calls for healing and harming by potions (2012-01-14)  ++* 2cc70bb05 - [Bleeding] Implemented Block.breakNaturally and Block.getDrops (2012-01-12)  ++* fb1cfea89 - [Bleeding] Implemented Block.getLightFromSky() and Block.getLightFromBlocks() (2011-12-29)  ++* f7585e552 - [Bleeding] Implemented World.getEntitiesByClass(Class... classes) (2011-12-11)  ++* 29096577b - [Bleeding] Implement animal breeding API changes. (2012-01-05)  ++* 520cb5aa5 - Fixed bug involving pistons and powered rails. This fixes BUKKIT-517. (2012-01-15)  ++* 864397d6c - Added MinecartTrackLogic.java and BlockMinecartTrack.java for diff visibility (2012-01-15)  ++* d3b4375d3 - Fixed LongHashset incorrectly using read lock for popAll, and made it use write lock. This fixes BUKKIT-509 (2012-01-15)  ++* 95a72d1c5 - Implemented World.getWorldType (2012-01-15)  ++* 65f30fd99 - Dragons now throw events when creating portals (2012-01-15)  ++* 233de0de2 - Some efficiency updates to hit-mechanics. Thanks mintplant for the PR. (2012-01-15)  ++* a753ee587 - Implemented allowFlight methods. Thanks to Qala for the PR. (2012-01-15)  ++* 6d49b1133 - Made World.playEffect a bit more efficient. Thanks mintplant for the PR. (2012-01-15)  ++* 9c1534336 - Fix broadcasting to people without permission. Fixes BUKKIT-464. Thanks grandwazir for the PR. (2012-01-15)  ++* d7cec38c3 - Adding the option to suppress overload warnings as a bukkit.yml option. Thanks oloflarsson for the PR. (2012-01-15)  ++* 25050e38e - Disallow people spawning invalid entities using monster eggs. Thanks to md-5 for the PR. (2012-01-15)  ++* 390a79e09 - Added ItemMonsterEgg.java for diff visibility (2012-01-15)  ++* a4ce846d0 - Fix formatting. (2012-01-14)  ++* 61ec751ca - Update for 1.1_01 renames. (2012-01-14)  ++* 6495eee0c - Throw an EntityBlockFormEvent for snowmen. Thanks to feildmaster. (2012-01-15)  ++* 93b3c9612 - Don't allow explosions at the top of the world to wrap around. This fixes BUKKIT-232, thanks to wilsonsd for the PR. (2012-01-15)  ++* 23adb0d02 - Minor optimization in BlockGrass by only checking light once instead of twice. Thanks to oloflarsson for the PR. (2012-01-15)  ++* b36980559 - Don't allow players with modded clients to send empty (0 char) chat messages. Thanks to a PR by robin0van0der0v (2012-01-15)  ++* dfbcd36ab - Fixed a further exploit with players attacking more things that they shouldn't. (2012-01-14)  ++* 2ab160e48 - Implemented new PlayerDeathEvent methods for exp setting (2012-01-14)  ++* 548ccabe2 - Fixed .createWorld not respecting container folder 100%. Thanks to plleg for the PR. (2012-01-14)  ++* 366d31018 - Added .equals and .hashcode to CraftBlockState (2012-01-14)  ++* 657f458ba - Player.setPlayerListName no longer counts colors towards the 16-char limit. Thanks to an (unfortunately old) PR by ZachBora. (2012-01-14)  ++* d73c29aad - Implemented entity.playEffect. Thanks to main-- (2012-01-14)  ++* 743c623d5 - Modified ConsoleReader to use System.in instead of FileDescriptor.in. Big thanks to escortkeel for the (unfortunately very old) PR. (2012-01-14)  ++* 6cc56b8c2 - Added ItemDespawnEvent (2011-10-17)  ++* cc05bea45 - Prevent unbounded TickList growth on busy servers (>1000 events/tick). This completes another Bleeding request. (2011-12-14)  ++* 52c526f31 - Small optimization in EntityPlayer by caching the hashcode. Thanks to a very old PR by Belphemur. In addition, changed and slightly improved the hashcode formula for entities (2012-01-14)  ++* 77a12d4dc - Correct casting for creature target typechecking (2012-01-14)  ++* e6bb19f63 - Fixed any chance of creatures .getTarget throwing a class cast exception - thanks to an old PR by garbagemule! (2012-01-14)  ++* 3d31c2786 - Fixed players attempting to attack item entities - This fixes BUKKIT-341 (2012-01-14)  ++* d5438c30b - Fixed block.getBiome returning null in new 1.1 biomes. This fixes BUKKIT-496 (2012-01-14)  ++* 9da730c8e - Made Mycel blocks throw BlockFade and BlockSpread events. This fixes BUKKIT-488. Thanks to tips48 for the pull request. (2012-01-14)  ++* 64ac337d4 - Added BlockMycel.java for diff visibility (2012-01-14)  ++* 3ee8a2372 - Additional commit to fix #BUKKIT-24 (2012-01-14)  ++* 84b0310ae - Fixed items retaining enchantment visual effects after all enchantments are lost Issue #BUKKIT-24 - Upon removing enchantments, visual effect on item does not go away (2012-01-14)  ++* 0a2a38c25 - Added NBTTagCompound.java for diff visiblity (2012-01-14)  ++* 9ac06e772 - Fixed informing players of supported Plugin Channels (2012-01-14)  ++* 4dc2065f5 - Undo commit cc60920 to allow for proper integration with the new Bukkit enum values (2012-01-14)  ++* 24fe96ada - Add fix for new login protocol (2012-01-13)  ++* b4f215e91 - Implemented new Plugin Message API - see http://dinnerbone.com/blog/2012/01/13/minecraft-plugin-channels-messaging/ (2012-01-13)  ++* d8052a63e - Fix NPE involving WorldTypes when using CraftServer.createWorld(WorldCreator creator) (2012-01-13)  ++* 8aaa52876 - Fixed version in startup message (2012-01-12)  ++* 7219d4dd8 - Updated to Minecraft 1.1 (2012-01-12)  ++* dd5ef8725 - Bumped verison to 1.1-R1-SNAPSHOT (2012-01-12)  ++* 7d0e739f9 - Fix balance of CraftBukkit start/end. (2012-01-12)  ++* 897551e39 - Update to mc-dev rename revision 01 (2012-01-12)  ++* 7f079a0cd - Fix CraftBukkit comments. (2012-01-12)  ++* 42e473783 - Fixed our handling of network packets. (2012-01-10)  ++* 194f54a90 - Revert "Improved our handling of player interactions." (2012-01-10)  ++* bff4d0f69 - Improved our handling of player interactions. (2012-01-10)  ++* 67dbe71bd - Fix calling CombustEvent caused by enchantment (2012-01-09)  ++* 93aed40c4 - Fixed filled bottles not appearing in inventory. Fixes BUKKIT-325. Thanks md-5! (2012-01-07)  ++* 13470ccf7 - Inform the client when break events are cancelled. Thanks mrapple! (2012-01-07)  ++* 86fef037e - Fixed NPE in World. Fixes BUKKIT-306. Thanks Evenprime! (2012-01-07)  ++* b74a69041 - Fix door physics and revert to pre 1.0 behavior (2012-01-07)  ++* 483a619e8 - FIX: CraftServer.getOfflinePlayers was not converting set->array well. (2012-01-02)  ++* bcdad9f83 - Fix snowball not recognizing int damage values properly from Craftbukkit -- Thanks Sleaker (2011-12-29)  ++* 60a2d1225 - CraftItemStack: Make sure this.item is not null when cloning. (2011-12-29)  ++* 5124f8f46 - Test cloning of CraftItemStacks created with null nms ItemStacks (2011-12-29)  ++* 8b735bf47 - Made startup completion time actually be reported in seconds. Again. (2011-12-27)  ++* 8b21a0eee - Disconnected means disconnected. (2011-12-27)  ++* 066a95769 - fixed double firing of EntityDamageByEntityEvent (2011-12-27)  ++* 5adcf526a - moved firing of ProjectileHitEvent for mojang projectiles (2011-12-27)  ++* fb8a45b64 - Teach CraftServer.getOfflinePlayers to also give all online players. (2011-12-27)  ++* 834c42025 - Update for cleanup in Bukkit (2011-12-25)  ++* 81c751a8a - Fix for water and lava removal in creative mode BUKKIT-362 (2011-12-20)  ++* 474b7838a - Fix for big trees not growing BUKKIT-304 and BUKKIT-365 (thanks M D) (2011-12-20)  ++* 299a0d091 - Fixed signs being editable after placement. Fix for BUKKIT-364 (2011-12-20)  ++* 972b2087f - Fixed bonemeal not being consumed on failed growth attempts. This fixes BUKKIT-337. Thanks to md-5 for the pull request! (2011-12-19)  ++* 246d07482 - Fixed world.getHighestBlockYAt(x,z) returning 0 for existing but not loaded chunks. This fixes BUKKIT-327. Thanks for dredhorse for the pull request! (2011-12-19)  ++* bea7b1373 - Fixed vanilla->bukkit world migration for The End. This fixes BUKKIT-326. Thanks to chewi for the pull request! (2011-12-19)  ++* 3648fb571 - Make rcon .sendMessage each write on a new line. This fixes BUKKIT-353. Thanks to ks07 for the pull req. (2011-12-19)  ++* 1c6adc158 - Fix error when cloning enchanted ItemStacks. (2011-12-20)  ++* acfb4f2fb - Test cloning enchanted CraftItemStacks (2011-12-20)  ++* 18437f681 - Add support for junit testing (2011-09-23)  ++* b0ab68696 - Avoid some avoidable calls, clean PluginManager accessors (2011-12-19)  ++* a7744ac75 - Prevent VehicleEnterEvent being sent when player exits vehicle. (2011-12-16)  ++* 2c72f9f5a - Updated version to 1.0.1-R2-SNAPSHOT for development towards next release (2011-12-12)  ++* e1586e017 - ... Fixed dispensers again! (2011-12-12)  ++* 5412d6f5a - Fixed crash with dispensers dispensing dispensables (2011-12-12)  ++* fa7ad9a26 - Updated versions to 1.0.1-R1 in pom.xml for RB. (2011-12-12)  ++* 52faa415e - Fixed clients not seeing EXP update immediately after using .setTotalExp and level methods (2011-12-12)  ++* bd181fa04 - The dead are not meant to walk. Fixes BUKKIT-95. Thanks Evenprime! (2011-12-12)  ++* b653ce3c1 - Implemented (offline)player date methods (2011-12-12)  ++* 91ff0b059 - Made OfflinePlayer and Player share the same .equals and .hashcode (2011-12-12)  ++* 82965eb10 - Stop converting ItemStack to nms ItemStack by hand (2011-12-13)  ++* d34e28943 - Teach nms ItemStack constructor how to take enchantments (2011-12-13)  ++* 14754c71a - Added missing CraftBukkit comments in previous commit. (2011-12-12)  ++* 322330e94 - Fixed players not receiving movement packets after trying to leave The End. Fixes BUKKIT-289. (2011-12-12)  ++* d7d48d822 - Teach CraftWorld.spawn how to spawn a Giant (2011-12-12)  ++* b2af70e5c - Implemented getKiller in LivingEntity (2011-12-11)  ++* 1fc8092ea - Fixed corrupt mob spawners crashing on load - this fixes BUKKIT-69, BUKKIT-144 (2011-12-11)  ++* 88d151250 - Fixed issues with Ender Pearls. This fixes BUKKIT-248 and BUKKIT-264. (2011-12-11)  ++* 77c07095b - removed changes to MobSpawner behavior (2011-12-10)  ++* de1a32bb1 - Fixed spiders not respecting the EntityDeathEvent. This fixes BUKKIT-275. (2011-12-10)  ++* ec59dd917 - Fixed issues in our handling of The End as per BUKKIT-11. (2011-12-10)  ++* 84a19565d - Fixed (Bukkit multiworld) maps as described in BUKKIT-142. (2011-12-10)  ++* 32a913a22 - Linked thundering and storming. (2011-12-10)  ++* f7649724f - Implemented CraftServer.getAllowEnd(). Thanks codename-B! (2011-12-09)  ++* d36ac82c8 - Fixed NPE in ServerConfigurationManager when sometimes attempting to flee the End (2011-12-09)  ++* 5e43c61fa - Implemented onStructureGrow event, thanks to md-5. (2011-12-09)  ++* 076460b41 - Added ItemDye and WorldGenHugeMushroom for diff visibility (2011-12-09)  ++* d75d1660b - Make EntityEnderDragon call the ExplosionEventi (2011-12-08)  ++* a25151306 - Fix NPE as described in BUKKIT-245. Thanks snowleo (2011-12-08)  ++* b08b85bd2 - Teach EnderDragon how to throw EntityExplosionEvents when it breaks blocks (2011-12-08)  ++* 4e318dd1c - Implement new interface ConsoleCommandSender. (2011-12-07)  ++* 93a4a9ba8 - Teach MinecraftServer how to handle Remote Console commands. (2011-12-07)  ++* e4a839cbb - Fix for entity spawning and some code cleanup (2011-12-06)  ++* bc8f02788 - Performance update to remove several very high counts of temp object creation (2011-12-06)  ++* eead44a69 - fix NPE issue with CB inventory (2011-12-06)  ++* 57112887c - Another fix for enchantments when moving around inventory. (Still glitches visually at times) (2011-12-05)  ++* bf60f4401 - Teach EnderDragon how to throw EntityDamage events (2011-12-05)  ++* b1a3aa602 - Clean-up some events to maintain general style (2011-12-05)  ++* 8363eadca - CraftInventory.remove shouldn't care about amount (BUKKIT-138) (2011-12-05)  ++* dbd3ff71f - Implemented server.getOfflinePlayers (2011-12-04)  ++* c6d182286 - Fixed some various CraftInventory bugs related to dropping Enchantments (2011-12-04)  ++* 1185ca75f - Fixed player teleporting not working with a certain method. This fixes BUKKIT-198 (2011-12-04)  ++* 1dbebb459 - Fixed exp resetting upon teleporting cross-world (fixes BUKKIT-46. Again.) (2011-12-04)  ++* 98e062f0c - Fixed a few player-respawn issues. This should resolve BUKKIT-28 (Dupe bug), BUKKIT-29 (Poisons lasting), and BUKKIT-46 (XP resetting) (2011-12-04)  ++* 55a532c25 - Indicate when a teleport event was triggered by ender pearls or unknown internal teleports (2011-12-04)  ++* 645079be0 - Make the EnderDragon respect experience drop set in death event (2011-12-02)  ++* f15c466e8 - Add EntityEnderDragon (2011-12-02)  ++* 480376ef5 - Ensure that DeathEvents are raised even for non loot-dropping living entities (2011-12-02)  ++* c298c104e - Remove unused import (2011-12-02)  ++* 8511ef390 - Register damage caused by PrimedTNT entities as BLOCK_EXPLOSION (2011-12-02)  ++* 9fe552979 - Fixed ender pearls ignoring damage cancellation (2011-12-02)  ++* 0c958c0df - Fixed exploit with Ender Pearls, and made them perform a damage event. This fixes BUKKIT-38 (2011-12-01)  ++* 6f79ca5c5 - Don't disconnect a player if they're already disconnected (fixes BUKKIT-43) (2011-12-01)  ++* 6ea3cec76 - Made world.spawnCreature just delegate to world.spawn. This fixes BUKKIT-57 (2011-12-01)  ++* efed2f002 - Use 1.0.1 artifact (2011-12-01)  ++* 062d94d6b - Implemented 1.0.1 fixes. This fixes BUKKIT-3, BUKKIT-39, BUKKIT-150 (2011-12-01)  ++* 650717ad3 - Fire BlockPlace event when placing a lilypad, Thanks DiddiZ; Fixes BUKKIT-162 (2011-12-01)  ++* da6b412fd - Fix CraftBlock toString. (2011-12-01)  ++* 51f724f24 - Fix missing data-value when placing a stair-block (somehow gets set after the fact) - Fixes BUKKIT-40 (2011-12-01)  ++* df935a5ee - Add more information to 'Fetching addPacket' so we might be able to find the reason why it happens. Gives info for BUKKIT-32 (2011-11-30)  ++* d02a2eb49 - Fixed rare NPEs with CraftItemStack. This fixes BUKKIT-51 (2011-12-01)  ++* 4ce061ccb - Fixed Players from technically only dying once (thanks Qala) (2011-11-30)  ++* a51340600 - Fixed exp methods returning wrong values (2011-11-30)  ++* 8fbe78a2c - Updated to use mc-dev rename revision 1 (2011-11-29)  ++* 8665161ea - Fixed multiworld loading of some worlds, yay for 1 letter fixes :D (2011-11-30)  ++* 67924529a - Fix drops of StairBlocks (2011-11-30)  ++* c6af91911 - Fix CraftEnderCrystal so that it implements EnderCrystal, not EnderSignal. (2011-11-30)  ++* 9455ff177 - cleanup of projectiles (2011-11-29)  ++* a1ad0c010 - Add events for EntitySmallFireball (2011-11-29)  ++* 2759809ec - Fix Craft Entity constructors and toStrings. (2011-11-29)  ++* a51eb9c3c - Ignore minecraft resources in src directory (2011-11-29)  ++* 2b751111d - Add EntitySmallFireball.java from nms (2011-11-29)  ++* 3da00ee41 - Implementation of reworked EntityCombustEvents (2011-11-29)  ++* 0c88f05c0 - Fix CraftVillager constructor to only take an EntityVillager (2011-11-29)  ++* 89338db18 - BUKKIT-57 Fix using Bukkit interface instead of nmc Entity for type check. (2011-11-29)  ++* 7db72dfd2 - Doors and trapdoors should function correctly once again (2011-11-28)  ++* 91b673e37 - Ignore empty messages (not just null) for join and quit (2011-11-28)  ++* aa90f2ff9 - Made Snowmen obey animal spawning rules (thanks Amaranth) (2011-11-28)  ++* fe3756f7a - Fixed Enchantments being lost on inventory.setItem (2011-11-28)  ++* 99771b7b7 - Fixed magma slimes from being nonspawnable (2011-11-28)  ++* 4b87704c5 - Add new Entity types to CreatureSpawnEvent (2011-11-28)  ++* c0073e466 - Add CraftMagmaCube (2011-11-28)  ++* 9c2b11ae9 - Fixed gravel's enchantment detection (2011-11-27)  ++* f6dc6745e - Fixed EntityDeathEvent not throwing for Ghasts and Pig Zombies (fixes issue #13) (2011-11-27)  ++* 8d49f500e - Fixed NPE in CraftPlayer.getBedSpawnLocation (2011-11-27)  ++* 402e3c26e - Clone item enchantments unchecked (2011-11-27)  ++* 894ab9f94 - Fixed issue with enchantments reseting under certain conditions (2011-11-27)  ++* 139ad8c34 - Fixed crash when breaking gravel with a high fortune enchant (2011-11-27)  ++* eb7bd5f23 - Implemented Enchantment API (2011-11-27)  ++* ba608f55e - Remove expensive debugcalls from production code (2011-11-26)  ++* 990763813 - Fixed ancient vanilla typo in offline mode warnings. Thanks to Alexitaly92 for catching it. (2011-11-26)  ++* 256d4ba55 - Fixed the NPE in inventoryplayer once again, thanks to don4of4 (2011-11-26)  ++* 8062d5c7b - Added death events for blaze and snowman, fixed reported loot for chickens (2011-11-26)  ++* b9aaf3977 - Fixed NPE travelling to the nether from a custom world (2011-11-25)  ++* 197fdbd84 - Nether portals should now only work in the default world (2011-11-25)  ++* bb16e6c5c - Fixed portal event reporting wrong from-world (2011-11-25)  ++* a105ec32b - Fixed comment (2011-11-25)  ++* ef75a286a - Implemented world.getWorldFolder (2011-11-25)  ++* 20a0b0a9b - Changed Entity.isDead to be aware of health for living entities (2011-11-25)  ++* 620f10148 - Another attempt at the vanilla tile entity bug (2011-11-25)  ++* e31cedf58 - Fixed NPE in player inventory + don't ignore the cancel state of world unloads (2011-11-24)  ++* a7664a104 - Implemented new age methods in animals, and made spawned animals via eggs properly age back to children (2011-11-24)  ++* 47b4406b7 - I've either fixed going to The End, or made it worse. I'm sure we'll find out soon! (2011-11-24)  ++* 61edd3637 - Made BlockStates inform playes upon update (2011-11-24)  ++* c6beae887 - Fixed allow-nether being ignored (2011-11-24)  ++* de7402ea8 - Fixed fireballs sleeping on the job (2011-11-23)  ++* 03762600d - Fixed trapdoors + few comments (2011-11-23)  ++* 929e5ff6c - Implemented new biome values (2011-11-22)  ++* 774e59e17 - Fixed vanillas tile-entity placement bug (thanks Moo0) (2011-11-22)  ++* a3399c643 - Fixed crash on right clicking dragon eggs (2011-11-21)  ++* a83fc1d6a - Implemented new EnderCrystal entity class (2011-11-21)  ++* 0a8bd56f1 - fixed spawn method for projectiles (2011-11-20)  ++* f1c1e813b - Update to correct Bukkit version (2011-11-20)  ++* 246ff3b35 - Made the new Status info list plugins (test it out at http://dinnerbone.com/minecraft/tools/status/ ) (2011-11-05)  ++* 345ea36c7 - Update for 1.0.0 (2011-11-20)  ++* 589f66bd1 - Added new --noconsole command argument, thanks to mkurzeja for the idea (2011-11-05)  ++* 13561bca9 - Added distributionManagement section to POM. (2011-10-11)  ++* dd5507bda - Fix version string - RB 4 has already happened (2011-11-01)  ++* b1671be87 - Implemented bukkit versioning (2011-10-31)  ++* 6c9cb5a95 - Updated version for 1.8.1-R4 (2011-10-31)  ++* c69f5fda9 - added some missing comments for falling entities (2011-10-27)  ++* 2f1513cae - Add missing CraftBlock hashCode() (2011-10-20)  ++* 695f25a32 - Added a case previously not covered by VehicleDestroyEvent for boats. (2011-10-13)  ++* 8c0259925 - fixed mapping of Art <-> EnumArt in Paintings (2011-10-12)  ++* 7d153a9f5 - Added header to bukkit.yml (2011-10-12)  ++* 75d9b04de - Added new bukkit.yml entry (settings -> world-container) to control the directory worlds are stored in (2011-10-12)  ++* f4229fcad - Implemented getPlayer of OfflinePlayer (2011-10-11)  ++* fd57c7111 - Fixed fauxSleeping check on leaving bed (2011-10-11)  ++* af1838305 - Implemented entity age methods (2011-10-11)  ++* ac0641887 - Fixed Explosion cast error (2011-10-11)  ++* a49a35834 - Changing the blockList on explosions now correctly updates which blocks are changed (2011-10-11)  ++* 7e005474b - Added hashCode and equals to CraftWorld (2011-10-10)  ++* 1195944c9 - Removed deprecated ConcurrentSoftMap (2011-10-10)  ++* b05d4769d - Updated snakeyaml to reflect Bukkit (2011-10-10)  ++* c818414fd - Updated to the new Configuration api (2011-10-10)  ++* 255778b38 - Fix CraftBlock.equals as they are not singletons anymore (2011-10-07)  ++* d39c363e5 - another attempt at mob spawners - 3rd time's the charm? (2011-10-06)  ++* 696349884 - don't store weak references for EmptyChunks or cache CraftBlocks (2011-10-05)  ++* 8ab90b344 - fix for spawners not properly checking whether an entity can spawn (2011-10-05)  ++* d74145ef2 - hopeful fix for blocks not being pistons when they should be (2011-09-30)  ++* 73f419197 - Fixed Skeletons not dropping experience. (2011-10-04)  ++* 09801eeab - Exempted moving pistons from the tile entity fix. (2011-10-03)  ++* 1f4e671af - Fixed Silverfish having a base damage of 0. (2011-10-03)  ++* 9177c205b - Revert "Added callback line of sight methods. Thanks xZise!" (2011-10-03)  ++* 11b388ff3 - Fixed multiworld difficulty. (2011-10-03)  ++* 7c5007c01 - Added Difficulty API. (2011-10-03)  ++* 3a224266c - Fixed PlayerChangedWorld event. (2011-10-02)  ++* 3b2347093 - Added missing call for WorldUnload event. (2011-10-02)  ++* aaefd4ecb - Added callback line of sight methods. Thanks xZise! (2011-10-01)  ++* 80c2bc266 - Minimal diffs! Move methods for the new list-name away from nms (2011-10-03)  ++* bf0912135 - Attempt to fix any damage caused by misplaced tile entities (2011-10-02)  ++* 39674b6fb - Updated guava to 10.0 (2011-10-01)  ++* 199a5c2a7 - Implemented PlayerChangedWorldEvent. (2011-09-30)  ++* d53213690 - Fixed bed spawns for multiworld worlds. Thanks Meaglin! (2011-10-01)  ++* 22baa1389 - Painting improvements. Thanks CelticMinstrel! (2011-10-01)  ++* d53a155e4 - Packet handling improvements. (2011-10-01)  ++* aa6685111 - Correct biome data in ChunkSnapshot - wrong API used (2011-09-26)  ++* 64322ed26 - Added SlimeSplit event. Thanks garbagemule! (2011-09-30)  ++* b73d095a9 - revert change to make mobspawners drop a spawner of that type removed some debug code fixed a 1.5 compatibility issue (2011-09-29)  ++* 935313dea - Fixed players not receiving broadcasts (and other similar issues) after signing out and in rapidly (2011-09-27)  ++* 95666779f - added fallback code for invalid entities from mobspawners (2011-09-27)  ++* 40c8cc042 - Fixed monsters being spawned even when one was faux sleeping. Thanks to EdGruberman. (2011-09-26)  ++* afd95b7e3 - Added server list ping event. (2011-09-26)  ++* 87494d46f - Added Player.get/setListName to change the name of the player on the player list. (2011-09-26)  ++* 484376bba - Fixed saturation handling for FoodLevelChange event. (2011-09-26)  ++* 31eef6e00 - fixed build issues, code cleanup (2011-09-26)  ++* d226e551a - data improvements (2011-09-26)  ++* b7c43fbff - Boat get/set (double) occupied acceleration, (double) unoccupied deceleration, (boolean) work on land. Good values to maximize boat utility: 0.6 (fast accel.), 0.99 (no loss of boat), true/false, respectively. (2011-09-25)  ++* 8f8c62b71 - Ensure there's only one OfflinePlayer object per actual offline player (2011-09-25)  ++* a1f8d3fd4 - Changed max player count from 126 to 60 for ingame player list rendering fixes (2011-09-25)  ++* aece687d0 - Implementation of the Jukebox BlockState (2011-08-22)  ++* 6c6eef875 - Implemented get/setPickupDelay on Item entities, thanks robin0van0der0v (2011-09-25)  ++* ceba08270 - Implemented getOperators (2011-09-25)  ++* cb49379b2 - Adds a method that returns the File representation of the update folder. Thanks raphfrk (2011-09-25)  ++* 3c7a84394 - Made grass throw a BlockSpread event when growing and a BlockFade event when receding. (2011-09-16)  ++* f389ffd3c - Fixed typo in readme, thanks to b1naryth1ef for spotting it (2011-09-25)  ++* 77b9f0301 - Silence Eclipse's complaints about gitdescribe (2011-09-16)  ++* 79e7ae85d - Swapped an =="" for "".equals in EntityHuman (2011-09-25)  ++* fad2656c6 - Implemented world.getSeaLevel, made getHeight load from world instead of hardcoded (2011-09-25)  ++* 1fbd439dc - Implemented new createWorld method (2011-09-25)  ++* 44136f2e7 - Blocked access to ColouredConsoleSenders constructor, implemented getConsoleSender (2011-09-24)  ++* 0118a20d6 - Update to mcdev rename revision 01 for 1.8.1 (2011-09-24)  ++* 75ac4e00b - Cancel bed return method if entity is ignoring sleep. Thanks to EdGruberman. (2011-09-23)  ++* a2957c7b8 - Stop sending multiple time packets to each client (2011-09-23)  ++* e08535d68 - Fixed FoodLevelChange event adding too much to the food level. (2011-09-22)  ++* a7717d4d7 - Added RegainReason.SATIATED. (2011-09-22)  ++* aa0739d90 - Added FoodLevelChange event. (2011-09-21)  ++* 8d5a8667d - Made death message handling check for 'null' to disable death messages, along with an empty string. (2011-09-21)  ++* 217b41411 - Added EntityDamageEvent for caused by starving. (2011-09-21)  ++* e6e9cec1e - Added PlayerToggleSprint event and sprinting related API. (2011-09-21)  ++* 1da2d1f5b - Implements the ability to customise and remove Player death messages. (2011-09-21)  ++* 59908c43c - Ok, this'll have to do for exp orbs. (2011-09-21)  ++* 02f6e99d9 - Let's swap that around. More results! (2011-09-21)  ++* 5a8ec0cb9 - This should reduce the amount of exp-orbs quite a bunch (2011-09-21)  ++* 20ddc944b - Refactored a bunch of death code into the event factory (2011-09-21)  ++* 751ab82be - stopgap build - mostly stable (2011-09-21)  ++* f6ab0f861 - more chest checks (2011-09-21)  ++* 75e18f304 - better chest fix (2011-09-21)  ++* d06d111b9 - fix for stair data (2011-09-21)  ++* 905b97767 - Added getBedSpawnLocation to CraftPlayer. Thanks fernferret! (2011-09-20)  ++* 3f04f04be - Added/updated EntityDeathEvents to reflect changes to the Vanilla spec. (2011-09-20)  ++* 0a52c7f33 - Made health regeneration only occur if difficulty is set to 0 (Peaceful). (2011-09-20)  ++* e4d58faf5 - Fixed NPE when players are killed by (for example) dispensers (2011-09-21)  ++* a0216584b - Return OfflinePlayer for offline wolf tamers. Thanks robinjam (2011-09-20)  ++* 2d1d86b77 - Fixed endermen not loading carried-data properly (2011-09-20)  ++* 2ae6b431b - Added event for endermen picking up and placing blocks and methods to get/set what an enderman is holding. (2011-09-17)  ++* 167febd8e - Fixed allow-animals not applying to chunk generation. (2011-09-19)  ++* d01a3acd8 - Added missing //cb comments from dfa9c9bccb7feac44824c146d2dc11874b50b19d (2011-09-19)  ++* 5b68bae02 - Fixed NPE when people experience the chest crash (2011-09-19)  ++* 914a8a0c0 - Nullchex! (2011-09-19)  ++* 9954a3d8b - Missed closing the comment block -- doh (2011-09-18)  ++* a4355d4bd - Remove pingpacket updating completely for now -- this needs a better fix, the default original implementation has a hug bug (2011-09-18)  ++* af6ba0f02 - implementation of PlayerGameModeChangeEvent call (2011-09-16)  ++* 65052c8a5 - Workaround for crash when chests mix up with furnaces - need to investigate cause (2011-09-18)  ++* 3f4ee9ab5 - Added support back in for biome temperature and rainfall in snapshots. (2011-09-15)  ++* 5534efd66 - painting fix (2011-09-17)  ++* f5957c183 - Invalid position errors for chunks now display what world they're for (2011-09-17)  ++* 0ae6e1176 - Fix silly infiniteloop in pingpacket (2011-09-17)  ++* e83a19756 - Removed extra addEntity call in SpawnerCreature. (2011-09-17)  ++* 392e2a427 - Implemented configurable ping packet limit. (2011-09-16)  ++* 096672b3c - Added toString overrides to new Craft entities. (2011-09-16)  ++* 820c51ab9 - Added new entity mappings to CreatureSpawnEvent factory. (2011-09-16)  ++* fb26465c5 - passive fix for chests (add an active fix later) (2011-09-16)  ++* bd93cd718 - Fixed not being able to move properly around doors or trapdoors (2011-09-16)  ++* 900c54124 - Bunchafixes which may or may not have any end result (2011-09-16)  ++* 94d1338fe - Fix for doors breaking themselves in certain situations (2011-09-16)  ++* 88e57fbf2 - Fixed bow drawback not affecting arrow damage. (2011-09-16)  ++* 456ce5171 - More latency handling fixes. (2011-09-16)  ++* 76493f9c7 - Fixed fall distance accumulating while being in Creative mode. (2011-09-16)  ++* 72e5ea6cc - Fixed NPE when a client queries a server that is unable to handle it. (2011-09-16)  ++* 85c0c1bb5 - Fixed the client having an incorrect world seed on respawn/teleporting across worlds. (2011-09-16)  ++* f8d36cd09 - Fixed food data not persisting appropriately. (2011-09-16)  ++* e85c99289 - Fixed latency update issues. (2011-09-16)  ++* 2995a0832 - Removed some unneeded code, possibly fixed animal spawning (2011-09-15)  ++* 35defecc4 - Fixed a couple of minor obf translations (2011-09-15)  ++* cdbd318bb - Fixed missing PlayerInteractEvent call in creative mode (2011-09-15)  ++* 9252230e3 - Update for Minecraft 1.8.1 (2011-09-15)  ++* 2b5a61f03 - Rename revision 2 (2011-09-15)  ++* 3c5632de3 - Fixed Creative not having infinite items. (2011-09-15)  ++* 53b32f43c - Fixed minecarts forgetting their purpose in life (2011-09-15)  ++* 965b185c5 - Setting exp shouldn't add, it should set (2011-09-15)  ++* 8b0869617 - Implemented food methods + fixed dying resetting food (2011-09-15)  ++* 7eff77376 - Fixed spawning the new entities (2011-09-15)  ++* 548ecfdec - Implemented Exp Orb methods (2011-09-15)  ++* fce1a6125 - Fixed logging in to the wrong game mode (2011-09-15)  ++* 706f0da59 - Fix for ItemDoor crash (2011-09-15)  ++* 1c95476a0 - Implemented player experience methods (2011-09-15)  ++* ca57a1a1a - 1.8 rename fixes (2011-09-15)  ++* 6e44626d0 - Fixed item drop protection. (2011-09-14)  ++* d71e83d8d - Possible fix for flying. (2011-09-14)  ++* ca4810e8d - Implemented new entities (2011-09-15)  ++* a9b3a90dc - Implemented gamemode methods (2011-09-15)  ++* 5b2c774ed - Update for Minecraft 1.8 (2011-09-15)  ++* 54bcd1c1f - Indentation is important, ok? (2011-09-08)  ++* f36bca9fb - Implemented new GameMode methods (hint: You can't set game mode yet. Sorry.) (2011-09-09)  ++* 59babb2c3 - Fixed issue with console being subscribed multiple times to permissions (2011-09-04)  ++* c8d77561b - Added new Server.getPlayerExact() method, added whitelist methods and don't use vanilla commands (2011-09-03)  ++* 09d90e639 - Implemented new ban and unban methods (2011-09-03)  ++* 598be2280 - Implemented IP-banning methods (2011-09-03)  ++* 2547c4609 - Actually push the CraftOfflinePlayer implementation! (2011-09-03)  ++* 020675702 - Implemented OfflinePlayer (2011-09-03)  ++* fe0cd5405 - Implemented new broadcast method (2011-09-02)  ++* db691ff5c - Fixed player.setOp not deopping players (2011-09-02)  ++* 7c491b7bc - Fixed world.save, implemented autosave methods (2011-09-02)  ++* 0c2004596 - Implemented Server.shutdown() (2011-09-02)  ++* d69bbd38c - Commands are now "bukkit.command.x" instead of "craftbukkit.command.x", added legacy perms for compat (2011-09-02)  ++* 3915c15ef - Version message doesn't need to be printed manually now (2011-09-02)  ++* f165d4082 - Refactored some code from nms to ob for minimal diffs (2011-08-29)  ++* 1e8bbbfbd - Fixed PlayerDropItem event cancelling. (2011-08-23)  ++* e4a217728 - Fixed memory leak Chunk Compression handling. Thanks Zeerix! (2011-08-27)  ++* 6f8d4c3a5 - Fixed using custom PTAs for PlayerPortal event. (2011-08-27)  ++* 6e4b12cdf - safety check (and hopeful fix) for chunk saving (2011-08-19)  ++* 90d1afb74 - Refactored default permission registration. Added "craftbukkit" and "craftbukkit.command" parent perms, and fixed whitelist adding (2011-08-18)  ++* 26bd45c23 - Made suiciding through the /kill command not reliant on pvp being allowed. (2011-08-15)  ++* 8ea590bbc - Revert "Implements interface for changing the view distance." (2011-08-15)  ++* 12e377501 - Implements interface for changing the view distance. (2011-08-12)  ++* a6c03ded2 - Movement handling cleanup. (2011-08-13)  ++* 748a6288e - Added API for manipulating map items. Thanks SpaceManiac, codename_B, sk89q and dested! (2011-08-12)  ++* e6876a97d - Added permissions for each vanilla command - see http://wiki.bukkit.org/Vanilla_permissions. Removed op requirement for all server commands :o (2011-08-13)  ++* 27f7a9951 - Item drop handling changes. (2011-08-08)  ++* 96a0e8706 - Fixed chunks being overwritten with empty chunks when the memory setting is immediately changed after a world loads. (2011-08-11)  ++* f79505501 - Fixed a piston crash (AIOOBE). (2011-08-09)  ++* c1e85002b - Added missed colors to ColouredConsoleSender. Thanks flames! (2011-08-10)  ++* 587b9662c - More PlayerMove fixes. (2011-07-26)  ++* 28b3c9b0d - Fixed new type reporting in BlockFade event for snow and ice. Thanks DiddiZ! (2011-08-07)  ++* 831d97c8d - Added "getViewDistance()", "getAllowNether()", "hasWhitelist()" and "getAllowFlight()". Thanks robin0van0der0v! (2011-08-07)  ++* 47453c605 - Extremely experimental fix to the tile-entity wipe, thanks to Wug (2011-08-04)  ++* effc6c855 - Fix placement of scheduler tick (2011-08-07)  ++* bb8984763 - Map handling improvements. (2011-07-26)  ++* ae43b837b - Prevent Nether Portals from teleporting the player from Bukkit worlds to the Nether. (2011-07-26)  ++* a7f279886 - Made PlayerPortal event fire regardless of allow-nether setting. (2011-08-05)  ++* 4117d6b65 - Implemented per world setting to keep the spawn in memory or not. (2011-07-27)  ++* 6ae23e3f0 - Chunk Compression on seperate thread. Thanks to Zeerix. (2011-07-26)  ++* 85805e53a - Added ServerCommandEvent. Thanks celticminstrel! (2011-07-28)  ++* 817cd83f0 - Made PlayerAnimation cancellable. Thanks desmin88! (2011-07-28)  ++* 7d4ec8b18 - Retiring EntityDamageByProjectileEvent in favor of EntityDamageEvent. (2011-07-19)  ++* e2e4d7f4c - Added PlayerVelocityEvent. Thanks Evenprime! (2011-07-28)  ++* 57e0a106f - Fixed BlockPlace event for doublesteps. Thanks DiddiZ! (2011-07-28)  ++* a8df829a8 - Made /kill trigger a damage event. Thanks hollic! (2011-07-28)  ++* 6b9c7fa67 - Added Version startup argument to Main. Thanks cyberdudedk! (2011-07-28)  ++* 5b7b46593 - Added various utility methods to make chunk handling easier. Thanks Meaglin! (2011-07-28)  ++* 226318d8a - Removed deprecated methods. (2011-07-27)  ++* 4fdc22552 - Fixed crash caused by Jukeboxes under certain circumstances. (2011-07-24)  ++* f4a789b48 - Fixed NPE in BlockFurnace. (2011-07-22)  ++* a5f85b6f1 - Fixed map render distance when view-distance < 7. (2011-07-22)  ++* 97a6534ee - Fixed maps crashing/disconnecting the client under certain circumstances. (2011-07-21)  ++* bfa22f302 - Tweaked pom to specify guava as provided (2011-07-20)  ++* 7ad853a51 - Implemented maxheight (2011-07-20)  ++* 5d2a19583 - Implemented new permission system (2011-07-17)  ++* cc9ccc897 - Removed some old deprecated code and clean up javadocs + warnings (2011-07-17)  ++* fd260b0f4 - Allow colorchar to be uppercase (2011-07-17)  ++* f7712eb20 - Deprecated Block.getFace(Face) and Block.getFace(Face,int); use getRelative() (2011-07-17)  ++* f3a86eaac - Implemented BLOCK_PISTON_CONTRACT/EXPAND (2011-07-17)  ++* df9142cd1 - Use the regular repo-url again (2011-07-17)  ++* e4edbf288 - Don't use weak/soft references for keys, attempt to lessen memory impact further (2011-07-16)  ++* c101c3553 - Readded ConcurrentSoftMap because apparently some plugins need this. (They really, really shouldn't be using it. At all.) (2011-07-15)  ++* a507add4e - Fixed huge memory leak (gigabytes/hour!) by placing a bukkit under the ceiling. (2011-07-15)  ++* 0bd535e05 - Made fire spread trigger BlockSpreadEvent. Thanks N3X15! (2011-07-14)  ++* 30a382a6d - Made ProjectileHitEvent fire instantly when projectiles don't hit entities. (2011-07-14)  ++* 43492ab6a - Revert "Do not immediately re-queue repeating tasks, or they may simply keep repeating on this tick, until the 35ms time limit runs out." See https://github.com/Bukkit/CraftBukkit/commit/3632d99122e8795cadb8f94e14e42eb4aa6d7c4c#commitcomment-478252 (2011-07-14)  ++* 4a932c11d - Do not immediately re-queue repeating tasks, or they may simply keep repeating on this tick, until the 35ms time limit runs out. (2011-07-13)  ++* 958acee5a - Use ColouredConsoleSender to send chat to console. Thanks TheDgtl! (2011-07-14)  ++* 3c5ecd085 - Fixed missing BiomeBase.SKY to Biome.SKY mapping. Thanks mikeprimm! (2011-07-14)  ++* cc94325b2 - Implemented pig zombie get/set anger functions. (2011-07-02)  ++* c9979169b - Possibly fixed crashes caused by tile entities under certain circumstances again. (2011-07-13)  ++* 185d59014 - Fixed the accounting for world UID conflicts. (2011-07-13)  ++* 3d28c67c0 - Implemented helper methods + new biome methods (2011-07-13)  ++* 7f6e7060d - Account for world UID conflicts. (2011-07-13)  ++* eb19e4e8d - Fixed uuid code that was prematurely pushed. (2011-07-13)  ++* 9e49127c7 - Made the order of aliases matter. We may or may not re-do this in a later build. (2011-07-13)  ++* a9cdc36f2 - Possibly fixed crashes caused by tile entities under certain circumstances. (2011-07-12)  ++* d0f904fc5 - uuid changes (2011-07-13)  ++* 83fd8fad6 - Added command line logging configuration which enables log file: * Size limiting (--log-limit ) * Rotation (--log-count ) * Custom naming (--log-pattern ) * Append (--log-append ) Note: This is done via command line and not bukkit-settings as that would require lots of refactoring of both core server and CraftBukkit due to the current initialisation ordering and depenencies. All settings default to that of the standard server (2011-07-10)  ++* f6a06e8df - Temporarily relocated 1.7.3 jar to static location (2011-07-09)  ++* c56d0c084 - Use generators from bukkit.yml if none was specified at createWorld (2011-07-08)  ++* dac47b013 - Updated pom mc version (2011-07-08)  ++* 2f218ba6b - Update for 1.7.3 (2011-07-08)  ++* cc635ed51 - Try find conflicting UIDs (2011-07-07)  ++* 0993e6cbd - Okay, back to arbitrary offsets! (2011-07-07)  ++* 256404388 - No longer use an arbitrary offset to locate the correct map (2011-07-07)  ++* 83abbfe4d - Cleaned up this worlduid stuff a little. (2011-07-07)  ++* 4cab8635d - Made maps support MultiWorld worlds. (2011-07-03)  ++* 9ced39421 - Implements a World UID. (2011-07-05)  ++* 5515ce1ff - IntelliJ is awesome. (2011-07-05)  ++* 3789f61c7 - Added PlayerFish event. (2011-07-03)  ++* aacb95e27 - Fixed Sheep not firing EntityDeath event. (2011-07-02)  ++* f7e17b68d - Fixed PlayerPickupItem event returning wrong amount picked up and added function to get the amount remaining on the ground. (2011-07-02)  ++* 22097a996 - Fixed NPE in BlockFurnace. (2011-07-02)  ++* 7cd03e65d - Improved FurnaceBurn event. (2011-06-30)  ++* 68506e2a4 - Forgot version in CraftBukkit (2011-07-01)  ++* 1497eec04 - Update for 1.7.2 (2011-07-01)  ++* 25f72c9ca - Fixed doors not updating their state to reflect any redstone currents when placed. (2011-06-30)  ++* b53029975 - Made trapdoors fire BlockRedstone events. (2011-06-30)  ++* 1e209e8e1 - Improved PlayerMove event implementation. (2011-06-30)  ++* 49df44ad6 - Possible fix for cancelled CraftScheduler tasks still running. (2011-06-30)  ++* 8a521ec62 - Added reasons for entities regaining health. (2011-06-28)  ++* f518ced9a - Fixed BlockRedstone event firing too many times under certain circumstances. (2011-06-27)  ++* 61a7a0633 - Update to minecraft 1.7_01 (2011-06-30)  ++* a679e7f38 - Update to Minecraft 1.7 (2011-06-29)  ++* a98c7ba2c - Massive renaming update in nms. If you bypassed Bukkit, you will likely break. (2011-06-27)  ++* 9e5dba830 - Picking up arrows now also fires PlayerPickupItem (2011-06-26)  ++* f0402d9d6 - Fixed cancelling the PlayerPickup event, getAmount(), item duping issue. (2011-06-26)  ++* b4c0492b1 - Fixed Explosion.setYield(0) still dropping blocks. (2011-06-24)  ++* 528e8c722 - Don't register commands only on init (2011-06-26)  ++* 0b92a51ba - Fixed the fix of the EntityTame event. (2011-06-23)  ++* a5dd42adb - Portals created by fire now trigger PortalCreateEvent. (2011-06-23)  ++* b94bb2766 - Delayed alias registration until postworld (2011-06-24)  ++* 22c28e593 - We build for JDK 1.5. (2011-06-23)  ++* 6e746ef79 - Made bukkit settings reload on reload(). (2011-06-23)  ++* ebfd973d0 - Fixed PlayerPickupItem event firing even if the player could not pick up the item. (2011-06-23)  ++* 98098481e - Fixed default command alias to do an array (2011-06-22)  ++* 0a3b89c8f - Implemented new alias system (2011-06-22)  ++* e73b10cf9 - Fire WorldLoad events on default worlds for plugins who load:startup (2011-06-22)  ++* 7f0126a36 - You may now set a generator to a default world using plugin.yml (2011-06-22)  ++* d647e2098 - Implemented startup plugin loading (2011-06-22)  ++* ff67eda4c - Fixed players not healing in other worlds when spawn-monsters is false. (2011-06-22)  ++* 7efaa1a02 - Inform the client when a move event is cancelled. (2011-06-22)  ++* 568731f29 - Line endings. (2011-06-22)  ++* 79337d3aa - Added SpawnReasons to CreatureSpawn events. Thanks winsock! (2011-06-21)  ++* faab690dc - Added Sky biome for the Skylands. Thanks robin0van0der0v! (2011-06-21)  ++* cd1c3858e - Fixed spawn location offset. (2011-06-21)  ++* 064830207 - Implements isBedSpawn() to the PlayerRespawnEvent. (2011-06-21)  ++* 138c70183 - Changed Nether portals to be handled by a customiseable PortalTravelAgent and updated the PlayerPortalEvent (2011-06-20)  ++* 214d41250 - Added the abitility to spawn fireballs. (2011-06-20)  ++* 8df3fe62f - Remove Squid spawning restriction as Squids seem to obey spawn flags. (2011-06-20)  ++* 5335508c2 - Possible fix for furnaces leaving items behind. (2011-06-20)  ++* 918f488d2 - Added Furnace smelt and burn events. (2011-06-19)  ++* 6cf0fc4a7 - No more ghastly pigs! (2011-06-19)  ++* 57d677d1e - Fixed CraftWorld.spawn() having all the inheritance checks backwards. (2011-06-19)  ++* 7ac53dfc8 - Fixed NPEs in infinite item loss fix (2011-06-19)  ++* cb7b82d45 - Added API to allow plugins to set the world's spawn flags. (2011-06-19)  ++* 89a524678 - Added getOnlineMode() for the Server. Thanks Rigby! (2011-06-19)  ++* a6e5c9722 - Fixed losing an infinite item when interacting with an entity. Thanks for the help Rigby! (2011-06-19)  ++* 12b7499c4 - Added Entity target events to EntityGhast. Thanks winsock! (2011-06-19)  ++* 98f05f775 - Fixed hostile entities continuously targeting dead entities. Thanks Rigby! (2011-06-19)  ++* b292a9dfb - Added more events for Wolves. Thanks Deaygo! (2011-06-18)  ++* 155874eec - Implemented the concept of a projectile. (2011-06-18)  ++* 546e1306d - Fix for spawnMinecart. (2011-06-18)  ++* 0ef0bdb61 - I'm sorry Paintings... please come back... (2011-06-19)  ++* a6b8b80fa - Added PlayerToggleSneakEvent.isSneaking(). (2011-06-18)  ++* 4cefee5be - Added world seed display to 'Preparing level' log message for each world (2011-06-17)  ++* 87b421767 - Added wolf damage and target events. Thanks Deaygo! (2011-06-17)  ++* b0fcbe7fc - Fixed several NPEs within World. Thanks Deaygo! (2011-06-17)  ++* 68695fb9d - Fixed EntityTame event firing too many times. (2011-06-17)  ++* d48e9c22f - Added BlockSpread, BlockForm and BlockFade events. (2011-06-17)  ++* 22f26895e - Added Redstone event support for detector rails. (2011-06-17)  ++* b92f54639 - Added recommended work-around for handling player movement in such a way that it doesn't trigger the movement speed check. Thanks for the help Rigby! (2011-06-17)  ++* f3d25e647 - Added EntityRegainHealthEvent. Thanks TimWolla! (2011-06-17)  ++* fadd962b9 - Added the implementation of the concept of an Explosive. (2011-06-14)  ++* 10fb5dc84 - Added ChunkSnapShot improvements. Thanks mikeprimm! (2011-06-17)  ++* 105cc5393 - Forgot to account for code shuffling with player.dat fixes. (2011-06-17)  ++* 39332e5c8 - Added Instrument enum, Note class and get/setNote functions. Thanks xZise! (2011-06-17)  ++* cc1b0a005 - Added per player time support. Thanks eisental, Shamebot and needspeed10! (2011-06-17)  ++* a70a5abc3 - Added implementation of general spawn method. (2011-06-08)  ++* a8817b7bd - Implemented extended createExplosion methods. (2011-06-12)  ++* be45f900e - Fixed issues with infinite items. Thanks for the help Rigby! (2011-06-17)  ++* 0c56bfb62 - Possible Player.dat fixes to address issues with switching between Vanilla and Bukkit or vice versa. (2011-06-16)  ++* 7aadc3d66 - Moved spawn-protection from server.properties into (settings.)spawn-radius in bukkit.yml (2011-06-17)  ++* c0244eda0 - Implemented bukkit.yml command aliases (2011-06-17)  ++* 7e22faf9d - Moved some craftbukkit stuff down from WorldServer to World; should fix a few NPEs during generation, and saves on a lot of casting (2011-06-17)  ++* a818669be - When someone moves to Bukkit from a vanilla (or other mod) server, move the old nether folder to the bukkit location. (Yes, it sucks, no, there's no alternative.) (2011-06-16)  ++* e08568de4 - Implemented ChunkPopulateEvent (2011-06-16)  ++* 6f1d6a4ca - Fixed EntityTame event. (2011-06-12)  ++* e2c9e92d9 - Properly fixed BlockPlace event for Redstone wire. (2011-06-14)  ++* 9d8428607 - Fixed login message and CraftBukkit comment. (2011-06-13)  ++* 8bfa8e2d0 - Made Squids fire EntityDeath events. (2011-06-13)  ++* 9adc03aba - Generic cleanup of the org.bukkit.craftbukkit classes. (2011-06-12)  ++* b042f48b2 - Fixed random NPEs when generating a world (2011-06-11)  ++* 96b1b8a10 - Generic cleanup (2011-06-12)  ++* 938db4de2 - Updated the block place cancellation code for steps to handle many more cases. There's still one edge case left however. (2011-06-11)  ++* 73e34c2fe - Added ItemSpawnEvent. Thanks myers! (2011-06-11)  ++* 5b93f5565 - Fixed from and to worlds being the same for a PlayerTeleportEvent for crossworld teleports. Thanks for the help Rigby and Verrier! Tahg is responsible for the mess. (2011-06-10)  ++* cd12f057a - Fixed cancelled lighting strikes dealing damage. (2011-06-10)  ++* fb3e3ade9 - Possible fix for clay generation. (2011-06-10)  ++* 80770314d - Fixed fireball explosions not producing fire. (2011-06-10)  ++* a9e7b56ef - Improved handling of being sent to your bed spawn if the world saved in your player.dat no longer exists. (2011-06-10)  ++* a98f4f893 - Fixed not being able to login if the world saved in your player.dat no longer exists. Thanks for the help Rigby and Verrier! (2011-06-10)  ++* 8f4c36974 - Added world name to player logged in message. (2011-06-10)  ++* 6607b6785 - Fixed getting stuck in the ground when respawning to a bed under certain circumstances (2011-06-10)  ++* ad95bf409 - Redid packet prioritisation to fix chunk loss bug encountered when teleporting, also addresses issues caused by teleport fixes. (2011-06-10)  ++* cb9c7d1b2 - Fixed trapdoors not updating their state if a Player Interact event is cancelled. (2011-06-09)  ++* 7e3895b69 - Fixed Creepers being killed even if their Explosion Prime event is cancelled. (2011-06-09)  ++* e5c6b329d - Whoops, need this commit too. (2011-06-09)  ++* bf4a4a767 - Added some missing @Override. (2011-06-09)  ++* ccabbcbf0 - Added World.createExplosion() that takes a Location, instead of just raw X, Y, Z values. (2011-06-09)  ++* a25ab644d - Cleaned up some Javadocs. (2011-06-09)  ++* e45c502ec - Moved playSound/Effect(Player, ...) to Player.playEffect(Location, ...) to be consistent, and because the code didn't really do what the Javadoc said. (2011-06-09)  ++* 846bd468d - Changed sound playing to effect dispatching, since these seem more like more like encompassing effect than mere sounds. (2011-06-09)  ++* baf9a9f50 - Merge branch 'sound' of https://github.com/sunkid/CraftBukkit (2011-06-09)  ++|\ ++| * 5fe9ac362 - implementations of the playSound methods (2011-06-09)  ++* | f627b69be - Improved CreatureSpawnEvent and made Water Animals obey spawn-animals setting. (2011-06-09)  ++* | baa92bdd0 - reverted some changes that broke stuff (2011-06-09)  ++* | ca0711fdb - fixed support for multiworld beds (2011-06-09)  ++* | 4a0eb0a4a - Added method to create an explosion in world. Thanks Zaraza107! (2011-06-09)  ++* | b0714775e - Added EntityTame event. Thanks halvors! (2011-06-09)  ++* | 0c24f86a0 - Fixed redstone current being sent even if a BlockPlace was cancelled. (2011-06-09)  ++* | 053e05dd3 - Fixed weather changes affecting players in all worlds, instead of their respective worlds. (2011-06-09)  ++* | 569b1d274 - Made it possible to block punching fire out through PlayerInteract event. (2011-06-09)  ++* | 4bdc752ac - Fixed issues introduced by recent 'portal changes' commit. (2011-06-08)  ++* | 832091736 - Adds update chunk method for sending fake chunk updates to the client. This is to match the sendBlockChange method. (2011-05-21)  ++* | 1a1fc953c - Implemented 1.6 portal events. (2011-06-07)  ++* | a285a7b21 - Added more control over block placement on interactable objects. Thanks Acru! (2011-06-08)  ++* | b5d1619e7 - More teleport changes. Thanks Zeerix! (2011-06-08)  ++* | 5296f97cd - Portal changes. (2011-06-08)  ++* | 8b49a945c - Prevent effects of tickrate degradation on furnaces (2011-05-01)  ++* | 029ca3e2f - Prevent effects of tickrate degradation on item pickups (2011-04-30)  ++* | ce6524d45 - Fixing a serious issue caused by SpaceManiac. All his fault. (2011-06-07)  ++* | 147e3d684 - Fixed health on multiworld teleportation (2011-06-07)  ++* | 864f8d2f0 - Fixed nether's identity crises (2011-06-07)  ++|/ ++* 17c361a5e - Exempt Vehicles from Entity.java's sanity check (2011-06-07)  ++* d33c06ead - Added UniqueId to entities. Thanks Afforess! (2011-06-07)  ++* 95c19d5f2 - Added ChunkSnapshot for efficient, thread-safe copies of Chunk data. Thanks mikeprimm! (2011-06-07)  ++* 68608169c - Implemented unloadWorld(). Thanks Rigby! (2011-06-07)  ++* 57a1a7422 - Re-added per-world PVP setting support which was accidentally lost in translation. Thanks Rigby! (2011-06-07)  ++* 9fde27bfc - Fixed IPv6 support in NetworkManager. (2011-06-07)  ++* 6bd509ebd - Fixed durability changing regardless of whether or not damage was successful. Thanks Xolsom! (2011-06-07)  ++* ef9295707 - Fixed entity damaged by entity event firing twice when players damage each other. Thanks Xolsom! (2011-06-07)  ++* 8b3f90f23 - Use the custom set spawn (2011-06-06)  ++* d40c690c8 - Fix for generator stuff now being class (2011-06-06)  ++* fedcbdf25 - Implemented custom chunk generators and block populators (2011-06-06)  ++* 891dfbcef - Possible fix for some chunk loading issues experienced when teleporting. Thanks akrieger! (2011-06-05)  ++* 7499e2e0d - Fixed chunks saving more than they need to. Thanks Rigby! (2011-06-05)  ++* 86de98da9 - Squelch stacktrace for 'not so important'-'error' (2011-06-05)  ++* 5a29d6973 - map cursor rotation fix (2011-06-03)  ++* b9d8248a8 - attempted nether fix (2011-06-03)  ++* 5f684ef16 - fixed environments (2011-06-03)  ++* ebc478388 - fixed cross world teleport (2011-06-01)  ++* 66109d6e5 - moved respawn event (2011-05-31)  ++* 8835cb905 - More multiworld fixes (2011-05-31)  ++* 62b5da4e3 - Update for 1.6.6 (2011-05-31)  ++* 6dbd710bb - Update for 1.6.5 (2011-05-28)  ++* 9ec5d8b5d - Improved packet handling (2011-05-27)  ++* 1784e42d5 - Fixed a bunch of multiworld issues (entity tracking etc) (2011-05-26)  ++* 036f49ddb - Fixed the Bukkit Scheduler. (2011-05-26)  ++* 9934dd856 - Version fix (2011-05-26)  ++* 5e1c969af - Update for 1.6.4 (2011-05-26)  ++* dc76d3a64 - Update for 1.6.3 (2011-05-26)  ++* 6903f2024 - Implemented 1.6! (2011-05-26)  ++* f463453d7 - Fixed issue where the Bukkit entity was detected before the entirety of the entity's NBT data was read, causing affected entity types to not be differentiated correctly. (2011-05-23)  ++* 3cd135b08 - Possible fix for teleports triggering 'moved too quickly' check. (2011-05-23)  ++* 949634ad6 - Fixed animals not spawning when spawn-monsters is set to false. (2011-05-22)  ++* 8b0924bbb - Fixed duplicate console and player messages when built in server commands where used or an unknown command was issued (2011-05-22)  ++* 6319a1907 - Possible fix for -nojline printing blank lines (2011-05-19)  ++* 480c1b987 - Fixed -nojline. (2011-05-19)  ++* 962f05821 - Minimal diffs. (2011-05-19)  ++* afb08bb0c - Account for time drifting backwards on servers with the moved too quickly check changes. (2011-05-19)  ++* eac5b9623 - Added -nojline CLI option to emulate vanilla console behaviours. Added JLine disabling compatibility (removes the '>'). (2011-05-18)  ++* cd87e5163 - Fixed issues with updating redstone state under certain circumstances. (2011-05-17)  ++* 38ebaa53e - Limit human entity name length to 16 characters, as per the spec. (2011-05-16)  ++* bc5924bbc - Made the save-all modification respect the original save state. (2011-05-16)  ++* 605bfd972 - Fixed dispensers not working. (2011-05-16)  ++* c4138ff4d - Made save-all force saving like it says it does. (2011-05-16)  ++* f8d83d9e0 - Made player data save only if saving is turned on, in line with how the rest of saving works. (2011-05-16)  ++* 7f73594aa - Added get/setLastDamageCause. Thanks sunkid! (2011-05-16)  ++* 8de2b52a0 - Removed double firing of EntityDamage events by arrows. Thanks sunkid! (2011-05-16)  ++* 27e75c358 - Fixed trees being invisible under certain circumstances. Thanks Zeerix! (2011-05-15)  ++* a4570215f - Fixed TileEntity updates occurring upon a multi-block change. Thanks stoneLeaf! (2011-05-15)  ++* 3439b7f9d - Made setHealth(0) trigger EntityDeathEvent and drops. Thanks yetanotherx! (2011-05-15)  ++* 309846d73 - Whitespace + general cleanup (2011-05-14)  ++* e54d8c335 - Dead men tell no tales. (2011-05-12)  ++* 25a74b624 - Edited src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java via GitHub (2011-05-11)  ++* 88d0171c4 - Merge pull request #268 from xPaw/master (2011-05-11)  ++|\ ++| * 73aa3ac03 - Added hasSaddle/getSaddle (2011-04-26)  ++* | 32fd44771 - Cleaned up left over debug messages. (2011-05-10)  ++* | 5ca0a881a - Moved inventory cleaning to occur after the event is called to preserve the exact state of the inventory for plugin use. (2011-05-09)  ++* | 0faaf5af8 - Made the movement speed check more reliable on high load servers. (2011-05-09)  ++* | 98633a9f1 - Added dispenser event. (2011-05-08)  ++* | 6cbd4cdf9 - Added World.strikeLightningEffect() that does no damage. (2011-05-06)  ++* | c05cc33f7 - Changed LightningStrikeEvent to return a LightningStrike and not an Entity. (2011-05-06)  ++* | 99a7b91ef - Added an update on load feature for plugins. Thanks Raphfrk! (2011-05-05)  ++* | 54e225490 - Made teleporting between worlds 'smoother'. Thanks Raphfrk! (2011-05-04)  ++* | ef7e3689b - Possibly fixed chunk loss bug encountered when teleporting. Thanks Raphfrk! (2011-05-04)  ++* | 1f2c44e65 - Fixed 'Entity is already tracked' issues. (2011-05-04)  ++* | 41a2bc969 - Fixed crafting 'lag' introduced by additions to the Crafting API. (2011-05-04)  ++* | 93708cb74 - Added services manager framework. (2011-05-02)  ++* | bdcee9025 - Added method to fake a block change request for a player. (2011-05-02)  ++* | 80a1a4ac8 - Added Player.playNote(). (2011-05-02)  ++* | 98cea5cd1 - Added NoteBlock.play(instrument, note). (2011-05-02)  ++* | 83eecfbd4 - AnimalTamer implementations, refactor and clean-up of code (2011-05-03)  ++* | 02d7f32e8 - Fix isSitting()/setSitting(), add isTame()/setTame()/getOwner()/setOwner() methods (2011-04-08)  ++* | cd3c8fcfc - We build for Java 1.5, so no @Override for interface implementations (2011-05-02)  ++* | bf1f5b00d - Added PlayerInteractEntityEvent which fires when a player right clicks an entity. Thanks fullwall! (2011-05-02)  ++* | fdb077e81 - Improved the Scheduler. (2011-04-28)  ++* | aa7024091 - Added a setArmorContents method to PlayerInventory. (2011-04-29)  ++* | e56a8d472 - Added SnowFormEvent. Thanks aPunch! (2011-05-02)  ++* | f342db744 - Added per world PVP setting support. (2011-04-29)  ++* | 5a5ce7903 - Implemented addRecipe method in CraftServer and associated recipe classes. (2011-04-15)  ++* | 017b15c3a - Fixed block lag. (2011-04-29)  ++* | 955a78b8f - Handle NPE in ThreadLoginVerifier that occurs when trying to continue using a closed socket. (2011-04-29)  ++* | 9d7a03a64 - Cleaning up some redundant code. (2011-04-29)  ++* | 97c5f2bb8 - improved sign handling (2011-04-28)  ++* | b054cfdda - Fixed duping exploit. (2011-04-27)  ++* | b075a5865 - fixed painting NPE (2011-04-26)  ++* | 671197565 - Fixed PlayerQuitEvent.setMessage(). (2011-04-25)  ++* | fe75ab250 - Fixed CraftBukkit comments in World.java. (2011-04-25)  ++* | 57bc71df0 - Fixed sleeping. (2011-04-25)  ++* | 8f4ce0988 - Added missing CraftBukkit comments. (2011-04-25)  ++* | b2c558eab - Fixed rain not putting out fires due to a mistranslation issue. (2011-04-25)  ++* | d2a4c510b - Added events related to weather in 1.5. Thanks wizjany! (2011-04-25)  ++* | 1d0a6d56b - We need to reset the invalid position. (2011-04-25)  ++* | 70c177e0f - Implemented painting events (thanks verrier and tanelsuurhans) (2011-04-25)  ++* | 5fff84c5a - Added the ability to retrieve a world's Seed. (2011-04-23)  ++* | 1db5464d9 - Fix forgotten call of EntityInteractEvent for PressurePlates. (2011-04-25)  ++* | 88ebcc8db - Fix TextWrapping issues; Now limits the packets send to the client to either: 119 chars or 320 width. This will strip disallowed characters, propagate colors properly to the next line and not 'eat' multiple color-codes. (2011-04-25)  ++* | 6940f56d4 - Updated README for lineending demands (2011-04-25)  ++* | 2a9c15c97 - Fixed ENTITY_INTERACT event for BlockSoil. Thanks wizjany! (2011-04-25)  ++* | 0740e0c77 - Fixes the whitescreen issue some people were having. (2011-04-24)  ++* | d156fcf9c - Hid stacktrace for socket exceptions. (2011-04-23)  ++* | 5dfe732f1 - Added reset for pitch/yaw if they are somehow set to NaN. (2011-04-23)  ++* | 2ad7856d7 - Limited sign text length to 15 characters, as per the spec. (2011-04-23)  ++* | 932d70cde - Made the server not accept Packet27 as it is not used. (2011-04-22)  ++* | da85c1823 - Reduced console spam under certain conditions. (2011-04-22)  ++* | 8681752ee - Fixed NPE in lightning fire event. (2011-04-22)  ++* | a042ee1e2 - Add methods to control thunder. (2011-04-22)  ++* | c3ce6ce3a - Added weather control methods. (2011-04-22)  ++* | 6739d6d75 - Added World.strikeLightning(). Also renamed WeatherStorm -> LightningStrike. (2011-04-22)  ++* | 628fec752 - Added events for fires caused by lightning. (Not 100% sure that they get called though.) (2011-04-22)  ++* | 4ecbf5f59 - Changed Block.setTypeId() back to old behavior before the new translation process. (2011-04-21)  ++* | 58d3107e4 - Fixing CLI arguments for the 100th time - now with CraftBukkit comment-ey goodness. (2011-04-22)  ++* | c18e04ce8 - Proper fix for the console spam on disconnect/kick. (2011-04-21)  ++* | 8ba9f3216 - Fixed ordering of params used in SignChangeEvent. (2011-04-21)  ++* | 3afe2df24 - Implemented stats/achievement giving (2011-04-21)  ++* | 212ec7f33 - Reduced console spam on disconnect/kick. (2011-04-21)  ++* | 4d78c45d8 - Made reload support allow-flight. (2011-04-21)  ++|/ ++* 4ae695a17 - Fixed the fix of Creeper.setPowered (2011-04-21)  ++* f1b40ed4e - Fixed creeper.setPowered (2011-04-21)  ++* 0586e0498 - Implemented LIGHTNING damage (2011-04-21)  ++* d5ee48a0c - Implemented Weather and WeatherStorm (2011-04-21)  ++* 1a68a2aaf - Implemented Creeper.is/setPowered (2011-04-21)  ++* 7c455380a - Java compat (2011-04-21)  ++* a6c8a36dc - Update for 1.5_02. (2011-04-20)  ++* 2fd3f8d29 - Reapplying changes lost with our new system in CraftInventory and CraftInventoryPlayer. (2011-04-21)  ++* ddfa284be - Oops don't break the pom.xml (2011-04-20)  ++* 483a878b8 - Update for 1.4_00_01 -- if you bypassed Bukkit, you will most likely break. (2011-04-20)  ++* ac9f29744 - Don't want the scheduler taking invalid arguments as well. (2011-04-18)  ++* a450dcbb8 - Fixed CraftScheduler to catch exceptions thrown by tasks, rather than crash the server. (2011-04-18)  ++* 0048b22e4 - Fixed another issue involving invalid player positions or movement. (2011-04-19)  ++* 5e154b223 - Fixed name display in log messages for invalid yaw/pitch check. (2011-04-19)  ++* 8aa376fc2 - Added pre-login event for catching logins right after name verification has completed. This happens in a different thread from the server (and thus can also block). (2011-04-16)  ++* dc6c906e1 - The @Override annotation should only be used when overriding a method. Not when implementing an interface. (2011-04-14)  ++* 2c1f336e9 - Fixed an oversight allowing players to set invalid positions. (2011-04-13)  ++* f34f41a47 - Fixed the NaN check in Entity.java (2011-04-13)  ++* 70eb283bd - Removed redundant check due to merging the ifs. Ooops. (2011-04-12)  ++* 534d54600 - Fixed a crash involving invalid positions. (2011-04-12)  ++* 7baf5fa48 - Made fauxSleeping persist on death and cross-world teleport. (2011-04-11)  ++* 8de85b8af - Fixed potential NPE with bed leave event. (2011-04-11)  ++* 86c467cb5 - Fixin' the problem of AFK people not in bed. (2011-04-11)  ++* 2685de187 - Made what should be the last change missed in translation that might cause chunk issues. (2011-04-07)  ++* 62e10c774 - And Bukkit only provide avaje.ebean, oops :D (2011-04-08)  ++* 13e31d11c - Prevent maven shade-duplication spam where not needed (2011-04-08)  ++* 27d3396a3 - Added bed events and methods. (2011-04-07)  ++* e2480e134 - Fixed firstEmpty() by making it search for the first null instead of Material.AIR. (2011-04-07)  ++* 4525d1684 - Prevent nasty connection errors from hitting the console. (2011-04-05)  ++* c99dc2391 - Fix for invalid float values too (2011-04-07)  ++* 270310a3a - Made another change that was missed in translation that might cause chunk issues. This should address one of the chunk issues experienced when teleporting. (2011-04-06)  ++* 13218f55e - Fixed a crash in pitch/yaw calculation, probably a big improvement performance too (but then maybe not :D) (2011-04-07)  ++* 3c9944237 - Fixed Compile error (2011-04-06)  ++* e1acd683b - Fixed some NPE issues caused by previous commit (2011-04-06)  ++* 2c1f57e20 - Fixed stupidity in CraftInventory return types (2011-04-06)  ++* 92e3957a0 - getContents now returns null for items whose underlying item is null (2011-04-06)  ++* 8385b1436 - Allows eggs support with Slimes, Wolves and Monsters (2011-04-05)  ++* 8f461f5bb - Restored .gitignore (2011-04-05)  ++* 27c757172 - Added prerequisite org.avaje.ebean 2.7.3 to pom.xml (2011-04-05)  ++* 9849076db - Made changes that were missed in translation that might cause chunk issues. (2011-04-04)  ++* 7a99fd732 - added some API for entities (2011-04-04)  ++* d1e6408ea - Changed PlayerQuit to allow last minute modifications to player state. (2011-04-03)  ++* 0f3f3c552 - Added player.saveData and player.loadData. (2011-04-03)  ++* 5a0426205 - Prevent junit:junit from being packaged as its not needed to run (2011-04-03)  ++* 083e3ebd6 - Base digging/blockbreaks on actual time rather than the servers tickrate. (2011-04-03)  ++* 121bcd5ad - Added the ability to set the quit message (2011-04-02)  ++* c84d51f45 - Fix chunk.getEntities (2011-04-02)  ++* 5247bcba6 - Implemented entity.getNearbyEntities() (2011-03-27)  ++* a0b2a26c3 - implementation of Entity.isDead (2011-04-02)  ++* adb13029b - Forces clients to update to the new time immediately when setTime or setFullTime is called. (2011-04-02)  ++* 39972530f - Added VEHICLE_DESTROY event (2011-03-16)  ++* 325f4e0c2 - Implemented the new SpawnChangeEvent in CraftWorld.setSpawnLocation() (2011-03-29)  ++* d5096a019 - Changed default database location to {NAME}.db instead of database.db (2011-04-01)  ++* 12b2d5ee1 - Added mysql dep (2011-04-01)  ++* 8b2543398 - Implemented ebeans (2011-03-31)  ++* 160b54c96 - Made Server a singleton (2011-03-30)  ++* c16ba1f94 - Fix Entity.setVelocity (2011-04-01)  ++* 09cfbfbf7 - Fix world.getFullTime() (2011-04-01)  ++* c0a78fa6c - Exempt players from calling CreatureSpawn (2011-04-01)  ++* 7eeb0d8f4 - Fix coordinates on SIGN_CHANGE (2011-04-01)  ++* a3a1436df - Updated packet-filters (2011-04-01)  ++* eb422e4ad - Capture errors in plugins onLoad (2011-03-31)  ++* baa8c53be - Implemented Wolf (2011-03-31)  ++* 87c36febe - Updated to Minecraft version 1.4 (2011-03-31)  ++* 0635f7c1b - CreatureSpawnEvent: Fix forgotten inheritance with CreatureType (2011-03-30)  ++* e9cc4bbb0 - world.spawnCreature cast fix (2011-03-30)  ++* c69eac3f3 - Add MONSTER to CreatureSpawnEvent (2011-03-29)  ++* ec74fe8e3 - Move passenger-handling to CraftEntity (2011-03-29)  ++* 195423cd0 - Allow GIANTS to spawn from Eggs (2011-03-29)  ++* 33f7af519 - Changed the Kick result from KICK_BANNED to KICK_WHITELIST because not being on the whitelist doesn't mean your banned. (2011-03-20)  ++* a31f37262 - RegisterInterface reload bug fix (2011-03-07)  ++* 2ac43ce22 - Ctrl+C saves world before stopping (2011-03-29)  ++* b37dd48ae - Moved WORLD_LOAD event to after world is actually loaded (2011-03-26)  ++* ee815b7e4 - Fixed trickle exploit (2011-03-27)  ++* c47db7092 - Line endings, damnit! (2011-03-27)  ++* f1ffeb256 - Limit server to only send the packets it creates and only accept the packets the client creates (2011-03-27)  ++* ce5ee0996 - Updated for the changes done in Bukkit (2011-03-27)  ++* 84054ec68 - Fix some wrong event creations after previous change (2011-03-26)  ++* 8dc7b5574 - Reset 'stance' to something valid after receiving a broken one. Hopefully stops the server from falling over. (2011-03-26)  ++* e24b10dfd - Updated for the cleanups done in Bukkit (2011-03-26)  ++* 47497aa3f - Implement Sheep.get/setSheared. (2011-03-18)  ++* 9f30c9f8f - Implement Slime.set/getSize() (2011-03-18)  ++* cd50683f7 - World.spawnCreature now returns LivingEntity instead of Creature, to allow Ghasts and Slimes to be spawned using the command. (2011-03-19)  ++* abf7f8581 - Added ability to disable the join/leave notices by setting the message to null in the event. The join message is moved to the onJoinEvent rather than during login (2011-03-26)  ++* 8e53077ef - Switched biome coords from chunk based to block based (2011-03-26)  ++* 1cbed230d - Add LEFT_CLICK_BLOCK's face (2011-03-26)  ++* 49955d5a1 - Added Server.getServerId() for ID purposes. (2011-03-26)  ++* 5ee2d6790 - Updated README.md (2011-03-25)  ++* 1eb2f75f5 - Copy displayname when cross-world teleporting (2011-03-25)  ++* 9162a654c - Implement player.getCompassTarget (2011-03-25)  ++* 6fc4d9dcf - Fixed CraftWorld.getSpawnLocation() not return the exact spawn location. (2011-03-25)  ++* 95c08f854 - Fix inability to use items under certain circumstances (2011-03-25)  ++* f330025f1 - Fixed unable to eat/throw (2011-03-24)  ++* 92518f4fc - Stop GIANT discrimination (2011-03-24)  ++* ce714ab32 - Fix CreatureType of CreatureSpawn event (2011-03-24)  ++* 93fff2d5f - Prevent double CraftWorld for the same world (2011-03-24)  ++* 69d5132df - Reset blocks faster clientside (2011-03-24)  ++* d6c3fe23e - Minor logic change and small cleanups (2011-03-24)  ++* 748b71b3c - Fix accidental Double.MAX_VALUE coordinates in initial PlayerMoveEvent (2011-03-24)  ++* 312934886 - Implementation of LivingEntity maximumNoDamageTicks, noDamageTicks, lastDamage (2011-03-24)  ++* 267e74521 - Fix 'double RIGHT_CLICK' event on right-clicking a block with a non-interactive object (2011-03-24)  ++* 0b05cbb99 - Updated SoftMap to be concurrent. (2011-03-10)  ++* 946460272 - Update to PlayerMoveEvent. The From field is set the value of the previous To Field, and, Pitch or Yaw changes of more then 10 degrees will trigger the event (2011-03-07)  ++* fdcf1c3c3 - Now also handle entities spawning on a loading a world. (Redacted by Grum) (2011-03-20)  ++* 15baff855 - Fix the "Ghost minecart" issue. (2011-03-09)  ++* 69cbe7d22 - Allow Vehicle Motion to save properly (2011-03-21)  ++* e8e758144 - Small cleanup for the last commit (2011-03-23)  ++* 376ac51ce - Fixed the PLAYER_TELEPORT event so event.getTo().getWorld() is correct. (#451) (2011-03-22)  ++* d08ee1735 - Fix doors not updating after opening has been denied (2011-03-23)  ++* ca1c9ef2e - Minor cleanups (2011-03-23)  ++* 49043a8af - Re-Implement BlockDamage (2011-03-23)  ++* f33de669f - Major overhaul implementing PLAYER_INTERACT, removing PLAYER_ITEM, BLOCK_INTERACT, BLOCK_RIGHT_CLICK (2011-03-23)  ++* bb9558ade - Implement Bucket events (2011-03-16)  ++* 324efa822 - Fix BlockPlace (2011-03-21)  ++* 0d2dc3902 - Fix BlockCanBuild (2011-03-20)  ++* 11590f49f - Redstone torch fix (2011-03-16)  ++* 437025a17 - Fixing event names (2011-03-18)  ++* 4c420e6aa - BLOCK_PLACE supports pie, diode and reed (2011-03-18)  ++* 778079677 - Fix BLOCK_PLACED when placing on snow/step (2011-03-18)  ++* 114401336 - Hacky solution to expose ip. Will fix properly later if I care to give a **** (2011-03-18)  ++* f28f3a6a9 - BlockInteract fixed for pressure plates (2011-03-16)  ++* 2ae5b98d1 - Added missing EntitySquid, you can now prevent them from spawning! (2011-03-17)  ++* 41752f401 - TNT now gives its entity to the damage handler (2011-03-17)  ++* b6f87bb23 - Fireballs now give their entity to the damage handler (2011-03-17)  ++* d73245735 - Implement DamageType.VOID (2011-03-17)  ++* 28c9439f9 - Fixes minecart type reporting for VEHICLE_CREATE. (2011-03-02)  ++* 6ca1f24ee - Adds an onLoad method to Plugin. The onLoad method is called for all plugins before the onEnable calls (2011-03-12)  ++* 4a2bc3299 - Fixed setTypeIdAndData sending client updates when not using physics (2011-03-12)  ++* 7242f21a3 - This should fix the chunk ghosting bug (2011-03-11)  ++* 9869ace14 - fixed redstone torches (2011-03-14)  ++* 672b06727 - Also transfer the displayName when dying (2011-03-13)  ++* 6043797ce - Fix getDisplayName getting lost when getBukkitEntity is called (2011-03-13)  ++* 1be1b5ab4 - Removed CraftBukkit - Removed line from kick fix to help port process (2011-03-12)  ++* 07c98ea2a - Added methods to support RemoteBukkit This means all commands even "default" server commands work within the command structure returning output to the command sender (2011-03-12)  ++* ca3d0512f - Blocks now return power for sources other than redstone dust (2011-03-12)  ++* 1db4eab7e - TextWrapper now wraps text at the proper width and also prevent splitting unless it is needed (2011-03-12)  ++* 7729c8b51 - Sourcefiles shouldn't be executable (2011-03-12)  ++* 22baecaf7 - Clean code a bit (2011-03-12)  ++* d7ab27710 - Kill stupid encoding warnings finally (2011-03-12)  ++* 49a3d5bfb - Added Player.sendRawMessage(). (2011-03-12)  ++* 0ac5c7f4c - fixed diodes (2011-03-12)  ++* 79ccc5320 - more NPE fixes regarding redstone (2011-03-11)  ++* 5c4f1d75b - stupid ChunkPosition's are relative to the chunk (2011-03-11)  ++* 078f48c0f - Code cleanup, fixed doors, chunk entity fetching (2011-03-11)  ++* 786fdfb9f - NPE fix in redstone (2011-03-11)  ++* c06f3e0d7 - properly implement locks (2011-03-10)  ++* c0b3e80d1 - Fixing grammar and CraftBukkit comment. (2011-03-10)  ++* 803e67d55 - Redstone fixes (2011-03-07)  ++* 9428907e6 - Add redstone events to common blocks (2011-03-07)  ++* 39acc5817 - Additional hooks for chunks (2011-03-07)  ++* df02c501a - Additional redstone hooks (2011-03-07)  ++* 719038fce - Add non updating type/data sets (2011-03-07)  ++* 67cf10656 - Add locks to Hashset (2011-03-07)  ++* 54a05f3ce - Attempt to fix double disconnects (2011-03-10)  ++* 131a2c769 - Slight tweak to EntityPlayer to add toString for name+position for error tracking (2011-03-10)  ++* f040900d3 - Attempt to fix console crash (2011-03-09)  ++* 0df1d1a10 - Changed block cache to soft references (should help a lot with memory usage) (2011-03-09)  ++* 507e2be8e - Fixed LOGIN packet issue (2011-03-09)  ++* 9aa582885 - Fixed exploit allowing people to place blocks anywhere (2011-03-09)  ++* b819ffe8a - Implemented LivingEntity.getEyeLocation() (2011-03-10)  ++* 454da93a0 - Record invalid ItemInHandIndex packet (2011-03-09)  ++* f056fad76 - Fixed crash with bad holding slot (2011-03-09)  ++* 63f0de512 - Sign exploit fix is spammy no more. Probably. (2011-03-09)  ++* c607d212d - (Probably) fixed the sign exploit (2011-03-08)  ++* cdcb94753 - Fixed the fix of the inventory dupe bug (2011-03-08)  ++* 7de909103 - Fixed an exploit allowing item duplication upon death (2011-03-08)  ++* e0d8c1d7a - Fixed a minecraft exploit allowing anyone to pick their username (2011-03-08)  ++* e8e74992c - Purged deprecated MobType and MobSpawner (2011-03-07)  ++* 6a99d8c41 - Implemented LivingEntity.damage (2011-03-07)  ++* 03fae0a2f - Fixed BLOCK_CANBUILD never throwing (2011-03-07)  ++* 03a5bbc61 - Regenerate and refresh chunk methods (2011-03-02)  ++* 528b9b2e0 - Fixed isChunkInUse() (2011-03-02)  ++* 44c25340d - Velocity now sends updates to players (2011-03-05)  ++* 5636eea87 - Updated CraftServer to lowercase r in registerInterface method.. (2011-03-05)  ++* 9a64d7ec1 - Implemented Entity.get/setMomentum (2011-03-04)  ++* 770bb9e3b - Removed Block.getRawData (2011-03-04)  ++* 332b0c2ca - BlockFlowing NPE fix. (2011-03-02)  ++* 34458efd8 - Synchronized EntityTracking (2011-03-02)  ++* 9a264ed66 - Implements World.save and Server.savePlayers() (2011-02-25)  ++* 1505b4bf3 - RedstoneChange event thrown then the redstone *changes* not when it stays the same :D (2011-03-02)  ++* 9d9ad6bd1 - Java 1.5 compat. (2011-03-02)  ++* 87dc04b75 - limit chunk unloading to 50 per tick (2011-03-02)  ++* 9832ce06f - Synchronized and moved Hash classes (2011-03-01)  ++* 13fb0e07c - Ignore entity movement packets if distance == 0 (2011-03-01)  ++* 3dd60c168 - Fixed chat (2011-03-01)  ++* f54469f31 - Let's handle (bwhaha) the Craft* entities a bit better. (2011-03-01)  ++* e6583c0d4 - Added method to set spawn location (2011-02-28)  ++* d142fabfc - Sped up teleporting even more, + fixed isSneaking (2011-02-28)  ++* 5f20de34a - - fix VEHICLE_COLLISION_BLOCK event firing (2011-02-25)  ++* df2c0e230 - implement World.getPlayers (2011-02-24)  ++* d1e3d0103 - - add BedBlock - implement BLOCK_INTERACT for beds (2011-02-26)  ++* 016e50e6f - Hacky fix against block invulnerability (2011-02-28)  ++* 38c2103ff - Spiral teleporting! Wheeeee! (2011-02-28)  ++* 76d8016b3 - BUGFIX: Damage events should be using getDamage() to set damage. (2011-02-28)  ++* 41fea9b40 - Removing debug statements. (2011-02-27)  ++* ec0dde071 - Implemented Server.getPluginCommand (2011-02-28)  ++* b396707cb - Catch errors loading plugins (2011-02-27)  ++* cb2ff3c8b - Implemented chat recipients (2011-02-26)  ++* bdc8c8404 - Removed onCommand (2011-02-26)  ++* d7114a4f6 - Fixed empty console! Oops! (2011-02-26)  ++* 07b86b123 - Added command line option 'date-format' to control how dates are printed to console (not to log) (2011-02-26)  ++* bb8d9fbe9 - More PLAYER_ITEM blockFace fixes of static fails; (1!=l) -- Thanks Scient for pointing it out (2011-02-25)  ++* 88dea6189 - Prevent movement event to be spammed for moving less than a pixel. (2011-02-25)  ++* 78af4f97f - Startup time now reported in seconds, nanoseconds, Really? O.o (2011-02-25)  ++* 61339bcb2 - Properly handle PLAYER_ITEM and its clickedFace. (2011-02-25)  ++* 666c968da - Fixed 'sign'-BlockFace (1!=l). (2011-02-25)  ++* 43e36b5bd - All worlds should be saved on save-all. Player data should be saved when a save occurs. (2011-02-25)  ++* 685d4dbb3 - Added ">" to input command line, separated it from output buffer properly (2011-02-25)  ++* 2419e0b8a - Seal. Ooohh oooh. (2011-02-25)  ++* 57338bee5 - Much better console interaction. History, no more losing the command, colours, inline editing, etc. Shorter log output to console (but not to file). (2011-02-25)  ++* 659fa9eaf - Temporary fix for teleportation (2011-02-25)  ++* e53fd1367 - possible fix for block breaking bug (2011-02-24)  ++* 13f55ce0c - Fixed logging back in on non-default worlds (Yes really) (2011-02-24)  ++* c97fa40d2 - Fixed ENTITY_DAMAGE involving slimes (per DHowet) (2011-02-24)  ++* 51be9e77c - Attempt to convert multiworld worlds... world. (2011-02-24)  ++* 5d3b8de87 - Fixed some debug (2011-02-24)  ++* 280880d16 - synchronize hashmap lookups (2011-02-23)  ++* edb0debd1 - attempt to track down some bugs (2011-02-23)  ++* 2db976c84 - Corrected Exceptions text when loading and saving ops (2011-02-24)  ++* 92cbb2fc2 - Fixed CraftItem NPEs (2011-02-23)  ++* 09aa37fe4 - Generic code cleanup (2011-02-23)  ++* 332d9c4f1 - BlockStationary fix (2011-02-23)  ++* bfca34cad - ConsoleCommandSender no longer has a default constructor, use ConsoleCommandSender(server). Added entity.getServer and updated the version number of mc (2011-02-23)  ++* 6655b8903 - possible fix for levers, ladders, and buttons (2011-02-23)  ++* f622db3ea - Fixed bad cast in EntityItem (2011-02-23)  ++* b8023ac3f - Fix for isOp (2011-02-23)  ++* f759e0b60 - Update to Minecraft 1.3 beta (2011-02-23)  ++* a124bfdab - Fix PlayerRespawnEvent for multi-worlds (2011-02-22)  ++* 96435cfc7 - refactor Items (2011-02-21)  ++* f659231e3 - N.M.S cleanup in preparation for update (2011-02-21)  ++* 67cf64601 - Merge branch 'master' of github.com:Bukkit/CraftBukkit (2011-02-21)  ++|\ ++| * 30d1a5d3f - returning if a thread is not alive should happen before any changes to the list of workers, hence the return statement should be in the synchronized block. (2011-02-21)  ++| * 6269c1e63 - implementation of isQueued() (2011-02-21)  ++| * 6335a5af7 - Modify URI to repo.bukkit.org (2011-02-21)  ++| * bf9a55049 - Second part of NPE and arctan update :3 (2011-02-20)  ++| * cec04a736 - Added null pointer check and switched to a faster arctan method (2011-02-20)  ++| * 4f249b585 - Fix encoding in net.minecraft.server files. (2011-02-19)  ++| * 5121ebb65 - Fixed issue with color markers in messages sent to the client. (2011-02-20)  ++| * 09026095b - Minor cleaning of code (2011-02-20)  ++| * 6e3ee3133 - Prevent Blocks from getting lost when a chunk reloads (2011-02-20)  ++| * ca4076077 - fixed buttons, plates added yield to explosion added event for chunk unloading (2011-02-19)  ++| * d4b67c554 - Lowered the priority of the old command handler event. A number of plugins were using this event incorrectly. A new event, the command preprocesser event, has replaced the previous function of the original command event. (2011-02-19)  ++| * acd034445 - Added Entity.remove() which marks an entity for removal. (2011-02-18)  ++| * ec0eec586 - Added slime as a detected entity. (2011-02-18)  ++* | a59149c20 - Make all new loggers default to the same logging as "Minecraft" (to console + file, same format) (2011-02-20)  ++|/ ++* 264b5c331 - Redirect System.out and System.err to a Logger (2011-02-20)  ++* a6b396567 - Fixed CLI arguments (2011-02-19)  ++* b160913c4 - Magic - updated gitdescriber (2011-02-19)  ++* bddceeaf5 - When deprecating, the alternative should be provided. (2011-02-19)  ++* 41fe21191 - Added target block ray trace functionality. (2011-02-13)  ++* e97889e80 - Added setFireTicks(), getFireTicks() and getMaxFireTicks(). (2011-02-14)  ++* 7b6713b91 - Added pull request conventions that should be followed if you want your pull request accepted. (2011-02-18)  ++* 7fe0aa746 - Implemented a whole buncha Location overrides in CraftWorld (2011-02-18)  ++* a5ca3e1c1 - Don't kick players if a command failed from an exception (2011-02-18)  ++* e544fb71c - Changed hatchingType to MobType from CreatureType as refactoring (and so plugin breaking) will take place in a week. (2011-02-17)  ++* da6ce2d80 - Implementation of spawnCreature(Location, CreatureType) (2011-02-17)  ++* 0703f4f45 - Updated to use CreatureType and CreatureSpawner (2011-02-17)  ++* 5f940cf76 - Added Player.chat(). (2011-02-16)  ++* 03c118f34 - Added CREATURE_SPAWN event per ss2man44 (2011-02-16)  ++* dc4594616 - implementation of isCurrentlyRunning(int taskId); Burrows down to the worker thread assigned to this task, and returns its alive status. If no such thread exists, then the task is not running! (2011-02-14)  ++* cf6c435c6 - That messed up Jenkins (2011-02-15)  ++* 33bcae40c - Further POM haxx. Now reads git description during build process. (2011-02-15)  ++* c806adb06 - Add repository info to POM (2011-02-15)  ++* 973d61c41 - Allows calling of functions in the main thread (2011-02-12)  ++* 4a4b67cc4 - Implementation of BlockBreakEvent (2011-02-01)  ++* 9715e7785 - Fixes a deadlock issue in CraftScheduler (2011-02-13)  ++* 40f7986a1 - Make the spawning listen to the server spawn-settings (2011-02-13)  ++* f789c9e74 - Replace a net.minecraft accessor with a public attr. (2011-02-12)  ++* 5aa95ee46 - Added MaxSpeed methods to minecarts. Added MaxSpeed methods to boats. Added SlowWhenEmpty, FlyingMod, and DerailedMod methods to minecarts. (2011-02-12)  ++* be9a26424 - Fixed bug in event when taking fall damage. Now uses event damage. (2011-02-12)  ++* e2899b9dd - Added EXPLOSION_PRIMED event. (2011-02-03)  ++* 348e6c75c - Added SIGN_CHANGE event. (2011-02-10)  ++* c097fd9ac - Added implementation of Colorable to CraftSheep (2011-02-12)  ++* 09c6389b3 - Adding PLAYER_PICKUP_ITEM event hook (2011-02-11)  ++* 82931a601 - Adding PLAYER_DROP_ITEM event hook (2011-02-11)  ++* 71f97ffc5 - Send a BlockRedstoneEvent if powered redstone is destroyed (2011-02-09)  ++* 4b6c63365 - Removed debug and fixed //craftbukkit comments from 0239b76f611597f8486a (2011-02-11)  ++* c0b940d61 - more chunk fixes (2011-02-11)  ++* 41e136b88 - fix in LongHashset.java (2011-02-10)  ++* 89232b826 - fixes for chunks (2011-02-10)  ++* 524f966ef - Merge branch 'master' of https://github.com/Bukkit/CraftBukkit (2011-02-10)  ++|\ ++| * 1d49e5a4b - Fixed chunk unloading (2011-02-10)  ++| * a52f5ef52 - Threadsafe World.c(int i, int j) (2011-02-10)  ++| * 96794e15d - Added spawn-protection property to server.properties (2011-02-10)  ++| * 1da852265 - Added spawn-protection property to server.properties (2011-02-10)  ++| * fbe54b05f - Added spawn-protection property to server.properties (2011-02-10)  ++| * 814c9d444 - Fixed LongHashtable.values() (2011-02-09)  ++| * 18efbd82b - Worlds are now in the order they are loaded, with [0] being default (2011-02-09)  ++| * 6e58053eb - Probably fixed getLoadedChunks() (2011-02-09)  ++| * 7401ee54a - Added Creature.getTarget (2011-02-09)  ++| * e3011157b - Added Creature.setTarget per jlogsdon (2011-02-03)  ++| * 798834536 - Added call to new event on world save (at stop and force save). (Per EyvindRM) (2011-02-09)  ++| * 0592b334f - Terrain generation bugfix (will also be in Mojang 1.3) (2011-02-09)  ++* | 03be05790 - added method to force an inventory update (2011-02-08)  ++|/ ++* 43ef3b303 - fixed explosions (2011-02-08)  ++* 61b79e8f9 - inventory fixes (2011-02-08)  ++* b76bc9cfb - Unseal net.bukkit Fix fail Prepare to seal. THIS IS ONE WEEK'S NOTICE. (2011-02-08)  ++* b9a37399a - changed fence behaviour (2011-02-08)  ++* 2d2f54cf0 - JAR is now sealed! No com.bukkit, org.bukkit or net.bukkit packaged plugins will load. (2011-02-08)  ++* 6ad4ca2a4 - Implemented Sneak event (2011-01-25)  ++* 1a983aceb - Just cleaning some commits. Don't mind me. (2011-02-08)  ++* 3526a66fb - Added loadChunk, unloadChunk and unloadChunkRequest. (2011-02-08)  ++* 6b9b59db4 - Added getContents() to TileEntityDispenser to be compatible with InventoryChanged TileEntityDispenser to be built against latest mc-dev Merge branch 'merge-fork' of https://github.com/Hidendra/CraftBukkit (2011-02-08)  ++* a9a0ad627 - Adding Craftbukkit comment-tags. (2011-02-07)  ++* f20af7b12 - Make Explosion remember whether it was canceled so that WorldServer can avoid sending unneeded explode packets. (2011-02-07)  ++* 499d44763 - Finalizing the breakage! (2011-02-08)  ++* 7d1849567 - Implemented WORLD_LOADED (2011-02-08)  ++* bcf9b5ca1 - Oops! This matters. (2011-02-08)  ++* 6751433a8 - Implemented new Server methods (getWorld + changes to createWorld) (2011-02-08)  ++* 50e42496e - @Override interface implementation is 1.6 exclusively (2011-02-07)  ++* 7b840489a - Oopsie on compile issue (2011-02-07)  ++* 2497a6104 - Moved changes we did to WorldServer back down to World. (2011-02-07)  ++* 421d1c1c1 - Fixing missing mandatory comments. (2011-02-07)  ++* 8acebcd7d - Fixed Chunk cache in world (2011-02-07)  ++* 362958086 - Chunk fetching improvements (2011-02-07)  ++* 172db788b - I'm quite aware that I fail at merging. (2011-02-07)  ++* 919023fe5 - CraftWorld.toString has name (2011-02-07)  ++* 7a71347cd - Fixed logging into the correct world (2011-02-07)  ++* 3f8d9c0e1 - Fixed inventory transition (2011-02-07)  ++* e9b1607fd - Fixed entity updating (2011-02-06)  ++* 7bdc19063 - Possibly fixed block/chunk leaking (2011-02-06)  ++* 8b14c72a8 - Changes to reflect new Environment enum (2011-02-06)  ++* 4e6f4e303 - NPE (2011-02-06)  ++* dcabbda57 - Fixed invisibility after cross-world teleportation (2011-02-06)  ++* 590b3874a - Fixed various multiworld teleporting issues (2011-02-06)  ++* 4c9f1a227 - Fixed NPE after traveling to another world (2011-02-05)  ++* 7e81245ca - Probably definitely fixed mob leaking (2011-02-05)  ++* ac899e51c - Possibly fixed world leaks (mobs crossing into other worlds) (2011-02-05)  ++* 550ad6f9d - Proper 'otherworld' chunkloading (2011-02-05)  ++* b229931ce - Attempt to clear loaded chunks during multiworld teleportation (2011-02-05)  ++* bf304ddc4 - Fixed player teleportation (2011-02-05)  ++* 2be5181b0 - Added internal MC support for multiple worlds (2011-02-05)  ++* 9e7991ab5 - Scheduler (2011-02-02)  ++* b64667cde - Remove deprecated [gs]etTime calls (2011-02-06)  ++* 002b5ebef - Added PlayerKick (setReason, setLeaveMessage, setCancelled) and PlayerRespawn (setLocation) (2011-02-04)  ++* 228b5e7cc - Added VEHICLE_COLLISION_ENTITY which vanished after porting the code (2011-02-06)  ++* 4026cd656 - Added CraftBlock.getVector(). (2011-02-05)  ++* 4ede62219 - Updated README.md (2011-02-05)  ++* 101d01ef6 - getLoadedChunks method (2011-02-04)  ++* 73f0347eb - Modified .gitignore to remove Mac filesystem dust (/.DS_Store) (2011-01-23)  ++* 767c15369 - Added version output to CraftBukkit that displays on startup. (2011-02-05)  ++* 8932430ae - Addded: int getMaxPlayers() (2011-02-04)  ++* 10f4f33ed - fixed addItem hopefully (2011-02-04)  ++* d59a2332f - Merge branch 'master' of https://github.com/Bukkit/CraftBukkit (2011-02-05)  ++|\ ++| * e79139d3f - Save player data on save-all. (2011-02-04)  ++* | 2c798a9e9 - Fix for multi-stack adds (2011-02-05)  ++|/ ++* be10e5423 - Fixed NPE on missing kick-reason - http://redmine.bukkit.org/issues/359 (2011-02-04)  ++* 059d23b4c - Half-step placement bug fix, all credits to Brettflan (2011-02-03)  ++* 3a19f9e42 - Merge branch 'master' of github.com:Bukkit/CraftBukkit (2011-02-03)  ++|\ ++| * 058ac3430 - Added brief coding conventions - these may not be complete. (2011-02-03)  ++* | 2f2bc2891 - Fixes placement cancellation of single-step blocks, such as in protected areas like the spawn area. The first line edited fixes it so other blocks placed on a single-step block aren't considered (only single-step blocks), and so that they're only considered when placed on the top face of the existing single-step block. The second section of changed code keeps the final world.setTypeIdAndData() call from being incorrectly applied if it was indeed a single-block placed on an existing single-block. (2011-02-03)  ++|/ ++* dde3f5b47 - Removed tab on line 97. (2011-02-03)  ++* e77b080d8 - Implemented Inventory.contains with a minimum amount of item required. As per feature request #187 (2011-01-24)  ++* c1c61b73c - Totally useless commit to satisfy lukegb's outrageous demands (2011-02-02)  ++* 04be2b9b3 - Generic cleanup/reformat. (2011-02-02)  ++* 001a45804 - Clean vehicle code. (2011-02-01)  ++* 1dac92a76 - Update chunk handling. (2011-02-01)  ++* 21b8ef443 - Added CraftNoteBlock.play (2011-02-01)  ++* e0416ca7f - Added CraftDispenser.dispense() (2011-02-01)  ++* d228e0c31 - Fixed the onDisable() event of plugins again after it was overwritten some days ago. (2011-02-02)  ++* 661f209b7 - Fixed dispenser (2011-02-01)  ++* f8cdbe1d8 - Fixed tabs (2011-02-01)  ++* 3a3a0e616 - Introduce better versioning system, mark 2. (2011-02-01)  ++* eea070ed8 - Dispensers now obey BLOCK_INTERACT (2011-01-27)  ++* 5c467e941 - Actually implement the spiral stuff now, oops (2011-02-01)  ++* a3fbada1e - Chunkloading around player now happens in a spiral! No more floating over the void waiting for the floor to load! (2011-02-01)  ++* 21b8c1688 - Commands can be sent from the console (WIP, needs improvements) (2011-02-01)  ++* 657913fae - Dinner time! (2011-02-01)  ++* 923ab54e3 - Don't hate me :( (2011-02-01)  ++* 743ff05b2 - Added setItemStack(ItemStack stack) to CraftItemDrop (2011-02-01)  ++* 24f140d1f - Implemented VEHICLE_UPDATE (2011-02-01)  ++* 2b0ab5a13 - Fixed VEHICLE_MOVE (2011-02-01)  ++* 408ed37a0 - Implemented VEHICLE_EXIT (2011-02-01)  ++* 6f13c9dc5 - Implemented VEHICLE_COLLISION_BLOCK (2011-01-31)  ++* 82febb388 - ENTITY_DAMAGED now knows hot from wet (2011-01-31)  ++* c2fdd5cad - Implemented PLAYER_ITEM_HELD (2011-01-31)  ++* 7369ef730 - Implemented getRemainingAir/setRemainingAir/getMaximumAir/setMaximumAir on LivingEntity (2011-01-31)  ++* c75e53935 - Renamed ItemStack.set/getDamage to durability, which is now a short (2011-01-31)  ++* 0dd9e4873 - Fixed BLOCK_DAMAGED (2011-01-31)  ++* 1c9e7f9ae - toString! (2011-01-30)  ++* 639d3e3f9 - Added support for different tree generation types and a callback. (2011-01-30)  ++* 1bc9c5423 - Implemented ENTITY_DEATH for players (2011-01-30)  ++* 35aac1223 - Re-add BlockBurnEvent (2011-01-30)  ++* 914688e2a - Implemented ENTITY_DEATH for monsters and animals (2011-01-30)  ++* 0bc5bd54b - Fixed missing PLAYER_JOIN event call (2011-01-30)  ++* 6c60b54fd - Optimized blockCache, now only stores blocks asked for (2011-01-30)  ++* da00e2e3a - Fixed rogue chmods (2011-01-30)  ++* b2a0c5a2a - Reworked getEntity; Hi instanceof, bay 16 classes (2011-01-30)  ++* 75ba9a0f2 - Fixed initialization of CraftServer (2011-01-30)  ++* 0582ac769 - Updated pom to reference 'second patched version' of the server. (2011-01-30)  ++* df6904732 - Port to new mc-dev format. (2011-01-29)  ++* d0cd8c6cc - Fixed drowning damage event. (2011-01-30)  ++* d92376e10 - Merge branch 'master' of github.com:Bukkit/CraftBukkit (2011-01-29)  ++|\ ++| * 8fdd45ab4 - Fixed an issue where fire spread cancellation changed the behavior of natural fire. (2011-01-28)  ++| * 0daa2420d - Fixed fire spread hook providing the wrong block. (2011-01-28)  ++| * 61c37bd36 - Added Block.isBlockPowered(), block.isBlockIndirectlyPowered(). (2011-01-28)  ++| * b6b5a1ef7 - server.reload() now reloads plugins (2011-01-28)  ++| * c2d9af58f - Implemented player.performCommand(String) (2011-01-28)  ++| * cab61f169 - onDisable on stop - stephank (2011-01-27)  ++| * 105a14d6d - You don't override for interfaces! (2011-01-27)  ++| * f11e575a7 - BlockBurnEvent (2011-01-26)  ++| * 7a898bdba - Added methods to get a list of entities to World. This replies on net.minecraft.server.Entity.bukkitEntity not being null (otherwise it won't be returned). (2011-01-26)  ++| * c07e32c1d - EntityTargetEvent (2011-01-26)  ++* | 4301a76b3 - Updated commands to use CommandSender instead of Player (2011-01-29)  ++|/ ++* 0ba870434 - Fixed chunk corruption with mobspawners (2011-01-25)  ++* 02a1c2474 - added load chunk method (2011-01-21)  ++* 3477a8699 - Added getBlockReplacedState to BlockPlaceEvent, in case one wants to see what type of block was there previously. (2011-01-24)  ++* 0675ead16 - Added PlayerEggThrowEvent.getEgg(). (2011-01-23)  ++* 78db3d2ec - Added squid as a spawnable type by EntityEgg. (2011-01-23)  ++* 5f997be0b - Fixed painting placement (2011-01-23)  ++* ab3412e87 - removed some potential bugs from some items (2011-01-24)  ++* a809e4e6e - removed all instances of new CraftEntity* where appropriate. Entity.getBukkitEntity() is now used instead. (2011-01-23)  ++* 9cd81ddd6 - Added full tile entity data support for all block types that use it, including chests, dispensers, furnaces, mob spawners, and note blocks. (2011-01-23)  ++* e0b04001a - Fixed placement of blocks with meta-data. (Dyed wool, logs etc) (2011-01-22)  ++* 10f46b5fe - Fix NPE from location incorrectly being implemented in Explosion. (2011-01-22)  ++* 8c91ee9c5 - Reordered calls to fix use before assignment issue (2011-01-21)  ++* d98c8e210 - Revert "Entity's bukkitEntity field now holds a CraftEntity by default." (2011-01-21)  ++* bf9d55d9e - Simple fix for minecart tracks not curving as expected following commit https://github.com/Bukkit/CraftBukkit/commit/baff42c4d38dac382d3b4d06292f73591a591d28 (2011-01-22)  ++* 9c28b2134 - Fixes "?" console command. (2011-01-20)  ++* 3931be421 - Entity's bukkitEntity field now holds a CraftEntity by default. (2011-01-21)  ++* efdf9b8af - Expanded .gitignore with some potential build folders and files. (2011-01-21)  ++* 5555265e9 - Explosion remembers its Location. (2011-01-22)  ++* 2106eeef5 - CraftBlock instance getLocation() method. (2011-01-21)  ++* 1cbde901b - Entity audit. Adds checks for null entities, and adds conformity. (2011-01-21)  ++* 1dad7de4f - Modified POM for better Bamboo integration (2011-01-20)  ++* 0357c8f93 - Added compass setting methods. (2011-01-20)  ++* 62624a079 - Added suffocation damage as an event. (2011-01-20)  ++* 62344b57f - Expanded scope of change comments. (2011-01-20)  ++* d3e8f792e - Added fall damage event. (2011-01-20)  ++* 11de6b91d - Fixes to projectile events to check for null entities. (2011-01-20)  ++* cbebfbd6d - Implemented server reload (2011-01-20)  ++* 45381e17d - Fixed half-step placing (2011-01-20)  ++* 2c5dd11c6 - Cleared up spawn distance calculation. (2011-01-16)  ++* 0e821e60c - Implement getSpawnLocation(). (2011-01-16)  ++* bded4fb31 - Fixed CLI arguments (2011-01-20)  ++* 46e1b54a7 - Fixed blockcache being inaccurate (2011-01-20)  ++* 0284663ae - Address Feature#105:Implement support for PLAYER_ANIMATION hook/event. (2011-01-19)  ++* 55b619a39 - Probable fix for Bug #231. (2011-01-19)  ++* 8bbb0749e - fixes some explosion events to stop accessing null entities. Placed some tags against some spammy events. (2011-01-19)  ++* e93061be4 - Fix up NPE's in EntityMinecart/CraftVehicle and removed a little un-needed code in EntityArrow (2011-01-20)  ++* eabdc7ffa - Fix for NPE with dispenser+arrow bug. (2011-01-20)  ++* bdd3c4dab - Change block ignite in flint and steel to be seperate from item use (2011-01-19)  ++* abb3c5eee - reverted # from server console (2011-01-18)  ++* eace2d0f8 - Further fixes to fire events (2011-01-19)  ++* abc4b35bc - Fix BlockIgniteEvent after someone updated it and missed some stuff. (2011-01-19)  ++* 90c52739c - Fixed getChunkAt and usage. (2011-01-18)  ++* 3143e503f - Fix to slow fire spread hook, to check if a block is on fire before trying to set it on fire. (2011-01-18)  ++* e99980983 - Merge branch 'EntityDamageEvent_bugFixes' into HEAD (2011-01-18)  ++|\ ++| * e275f727d - small change to block event with lava and cactus, to improve readability and consistency (2011-01-18)  ++| * 26a590f03 - fixed imports on all Entities (2011-01-18)  ++| * d7d7a68f9 - fixes to combust event so that it is raised only once on combustion. minor fixes to imports (2011-01-18)  ++| * ddc30dd6e - Fixing some entity damage events (2011-01-18)  ++* | 73cbfcb6b - Fixing some entity damage events (2011-01-18)  ++|/ ++* 8088a329c - Updated plugin commands to allow for aliases and fallback on name collision. (2011-01-18)  ++* 73d6070d8 - Fixed: http://redmine.bukkit.org/issues/204 - fixed armor-slot order. (2011-01-18)  ++* 19e98ffc7 - fixed exact name matching (2011-01-17)  ++* 1b7279b7c - Merge branch 'master' of https://github.com/Bukkit/CraftBukkit (2011-01-17)  ++|\ ++| * 14d412e82 - EntityExplodeEvent commit for craftbukkit. (2011-01-18)  ++* | c20a40a58 - fixed health (2011-01-17)  ++* | 42099e737 - allowed partial name matching (2011-01-17)  ++|/ ++* ca9d52364 - moved built in command namespace, fixed EntityItem (2011-01-17)  ++* c862626c0 - Depreceated getCraftEntity() as it has been superceded by getBukkitEntity() (2011-01-17)  ++* 6a3b096fb - Addition of all Entity classes. Each Entity creates a corresponding instance of a Craft Entity, to be used whenever sending instances to an event handler with getBukkitEntity(). (2011-01-17)  ++* 431f2f62c - New Entity Classes implementing the new Bukkit interfaces. (2011-01-17)  ++* 5209e17e1 - Adding all Entities into CraftBukkit. These are needed to properly allow for determining class type, in accordance with current practice. (2011-01-17)  ++* 5f2c8108b - Updates to all Entities to use getBukkitEntity() any time an event is raised. Similar update to CraftVehicle and CraftLivingEntity (2011-01-17)  ++* 3400eafaf - added handling of powered and storage minecarts (2011-01-17)  ++* 2de3e2e7e - created getBukkitEntity() in minecraft.server.Entity This returns a protected field that is set in the constructor of each minecraft.server.Entity to a new CraftEntity of some specific type. (2011-01-17)  ++* 95cb03b50 - Fixed melee knockback/sheep shearing (2011-01-17)  ++* 80a59397c - Updated CraftInventory to make use of the proper generics in the Inventory interface. Updated loads of return values to now return actual Craft* objects. Added a shitton of constructors to CraftItemStack so you can now finally properly make your ItemStacks. (2011-01-17)  ++* 0c492912d - Updated CraftHumanEntity to refresh the inventory on death, should fix odd behavior around that. (2011-01-17)  ++* 74d746b6c - Fixed error in CraftInventory.setContents(). (2011-01-16)  ++* d048167d1 - Fixed removeItem implementation (2011-01-16)  ++* 7ea93a110 - Added registration of plugin commands on plugin load. (2011-01-16)  ++* 78cd77ef7 - Implement removeItem(ItemStack...) (2011-01-16)  ++* d85a28e97 - Remove some debug messages, again, last time >.> (2011-01-16)  ++* 0ae550a11 - Fixed NPE while clearing a slot (2011-01-16)  ++* ceaf94d5b - Implementation of the EntityDamage*Events. (2011-01-12)  ++* 807de6ee2 - Moved the source block definition higher in BlockFlowing to ensure its accuracy. (2011-01-15)  ++* 9e65c243e - Fixed an issue where the block cache became out of date and events were giving erroneous block information. (2011-01-15)  ++* c62e38787 - Added Block.getRelative(BlockFace). (2011-01-15)  ++* 5d93ab3e5 - Added item-in-hand related API. (2011-01-15)  ++* 44ae0531e - Added CraftInventory.setContents(); made CraftInventory.setItem(), CraftInventory.getItem(), and CraftItemStack() damage-aware. (2011-01-15)  ++* f78b8c12a - Fixed compilation issues (+small import cleanup in CraftWorld) (2011-01-15)  ++* 7fd0125db - Fixed World.dropItemNaturally() not specifying the Y and Z coordinates correctly. (2011-01-15)  ++* 5dafc601d - Moved org.bukkit.Vector to org.bukkit.util. (2011-01-15)  ++* f6d4979aa - Added Server.broadcastMessage(). (2011-01-15)  ++* 4d1c1fe5e - Moved org.bukkit.craftbukkit.Block to org.bukkit.craftbukkit.block.Block (2011-01-15)  ++* 0db8d5d11 - Moved block stuff from org.bukkit to org.bukkit.block (2011-01-15)  ++* 787722988 - Missed an Entity (2011-01-15)  ++* 2fe673741 - All inventory stuff in org.bukkit.craftbukkit moved to org.bukkit.craftbukkit.inventory (2011-01-15)  ++* 6b9ad41a0 - All inventory stuff in org.bukkit moved to org.bukkit.inventory (2011-01-15)  ++* 9150e8d85 - All entity stuff in org.bukkit.craftbukkit moved to org.bukkit.craftbukkit.entity (2011-01-15)  ++* d501bbf1a - All entity stuff in org.bukkit moved to org.bukkit.entity (2011-01-15)  ++* 34674e779 - Remove debug stuff, oops (2011-01-15)  ++* 4dc907f2f - Implemented clear/remove for inventories (2011-01-15)  ++* 8c8f53fd4 - Events should be present tense, not paste tense. (2011-01-15)  ++* 2184d240d - Changed BlockFace enum to match coding standards (2011-01-15)  ++* 5aa1bc269 - Implemented int getBlockTypeIdAt(int x, int y, int z). (2011-01-15)  ++* dea72d662 - Global ID -> Id rename (2011-01-15)  ++* e4a31ce20 - Implemented BlockState MaterialData (2011-01-15)  ++* 55959488a - Added kick player (2011-01-15)  ++* 0318cfc74 - Updated pom once more! proper repo this time :D (2011-01-15)  ++* 81882dea3 - Moved to more permanent maven repo (2011-01-15)  ++* 80707c0a2 - Various fixes; boats, minecarts, musicblocks (2011-01-14)  ++* 5cb6edd5a - Really fixed block placement... Really. (2011-01-14)  ++* 202e44ab1 - Fixed blocks not keeping data on placement (2011-01-14)  ++* fe4d5db0e - Fixed levers + buttons (2011-01-14)  ++* dea7d3a81 - Update to Minecraft Server 1.2_01 (2011-01-14)  ++* 2761b5984 - Update to Minecraft Server 1.2 (2011-01-14)  ++* e6e50ddf9 - Fixed Vehicle.eject() not ejecting players properly. (2011-01-12)  ++* be6cd7ed9 - add redstone hooks (2011-01-12)  ++* 45bac533b - Merge branch 'eggThrown' of https://github.com/tkelly910/CraftBukkit into tkelly910-eggThrown (2011-01-11)  ++|\ ++| * 6a34f200a - updated EntityEgg (2011-01-11)  ++| * 94bccb6f9 - EggThrown Event (2011-01-11)  ++* | 9922c69d6 - Small whitespace/warning sanitation (2011-01-11)  ++* | 22dab8e98 - Updated against new mc-dev format, takes out quite some casting troubles at the cost of extra ()'s (2011-01-11)  ++|/ ++* 75654e8db - Fixed BROKEN spamming (2011-01-10)  ++* dda7ca005 - Fixed CraftWorld.spawnArrow() not setting X, Y, Z positions correctly. (2011-01-10)  ++* 5993b21b8 - Fixed file name mismatch :( (2011-01-11)  ++* 6a15ae252 - Clean up and fix bug in NetworkAcceptThread and NetworkListenThread classes. (2011-01-11)  ++* 802a46a70 - Added hooks for BlockIgniteEvent (2011-01-11)  ++* 136ad76e6 - Remember, minimal diffs and *NO TABS* (2011-01-10)  ++* b1ee09f73 - Fixed NPE (2011-01-09)  ++* 11b114ca1 - Revert "Bukkit Timers, now with 100% less github-services branch." (2011-01-10)  ++* 0a15f98a2 - Fixed CIP (2011-01-10)  ++* 750cc107a - Fixed NPE (2011-01-10)  ++* c6d80df80 - Fixed EntityZombie (2011-01-10)  ++* e91d52364 - Bukkit Timers, now with 100% less github-services branch. (2011-01-10)  ++* e5d7a4602 - - (2011-01-10)  ++* 21e7f1c44 - BlockDamagedEvent (2011-01-10)  ++* 103d4ee88 - EntityCombustEvent (2011-01-08)  ++* 814967ddd - PlayerInventory.getSize should not count armor slots. (2011-01-10)  ++* 4eeceacde - Fixed some bugs with inventory (2011-01-09)  ++* d3b87965c - Merge branch 'master' of https://github.com/Bukkit/CraftBukkit (2011-01-09)  ++|\ ++| * 3d8263f9f - Tahg's fix for BlockDoor needs to downcast (2011-01-09)  ++| * e8a565e6c - Added getContents() to IInventory and implemented it. Implemented Inventory and PlayerInventory and updated StorageMinecart and Slot. Added getMaxStackSize to CraftItemStack. (2011-01-09)  ++| * b72dad0a6 - Added compile instructions in README.md (2011-01-03)  ++| * db3142987 - Another dumb bucket bug. (2011-01-09)  ++| * 3e71c0a69 - Fixed stupid bug with buckets and signs. (2011-01-09)  ++| * fd2087618 - Implemented item drops. (2011-01-08)  ++| * e83d9f676 - Changed Block.setTypeID() to return a boolean indicating whether the block was changed (as provided by Minecraft). (2011-01-08)  ++| * eb4b30185 - Added BLOCK_INTERACT event (2011-01-08)  ++| * fab66092e - Fixed lack of calling callEvent(event), finished Item Use (2011-01-08)  ++| * 65c8df24b - Partial Player Item, Block RightClick, Block Place (2011-01-08)  ++| * f71e2b4ed - Implemented block.getBiome (2011-01-08)  ++| * 603156ea2 - Added World.getName and World.getId (2011-01-08)  ++| * 81f920d92 - Added Entity.teleportTo(Entity) (2011-01-08)  ++| * 860e1b762 - Fixed block type/data not updating with the world (2011-01-08)  ++| * d374bff8d - Implemented BlockState.update(boolean), signs should now work, cleaned up some code a little (2011-01-08)  ++| * c9efe9454 - Added passenger methods to Vehicle/LivingEntity. (2011-01-07)  ++| * e968096fc - Changed resolution order in CraftWorld.toCraftEntity() to give CraftMappable precedence. (2011-01-07)  ++| * 6d6668aae - Implemented World.spawnBoat(), added CraftMappable interface that defines a method to get an org.bukkit.craftbukkit.CraftEntity from implementing net.minecart.server.Entity entities, changed CraftWorld.toCraftEntity() to use this new interface for boats and minecarts. (2011-01-07)  ++| * eb2cc2da4 - Moved CraftVehicle.*Velocity() to CraftEntity as velocity is a component of all entities. (2011-01-07)  ++| * 22c2fdeaf - Implemented boat, fixed some event issues with minecarts, and implemented the events for boats that were implemented for minecarts. (2011-01-07)  ++| * 592f51022 - Moved some minecart flags that don't belong in the event out of the event. (2011-01-07)  ++| * 544bd76b1 - Implemented more minecart hooks. (2011-01-07)  ++| * 7722e750e - Updated Minecart/vehicle Bukkit implementation. (2011-01-07)  ++| * 4de1915f6 - Added World.toCraftEntity() to convert Minecraft entities to CraftBukkit entities. (2011-01-07)  ++| * 65de896c1 - Implemented LivingEntity.shootArrow(). (2011-01-07)  ++| * 55e952295 - Start of update() + added sign (2011-01-07)  ++| * 08a62e37a - Implemented CraftBlockState (2011-01-07)  ++| * 1edd1fa0c - Make matchPlayer return only the exact-matched player, if there is one. (2011-01-08)  ++| * 2e0413558 - Use the display format defined by plugins (2011-01-07)  ++| * e3e8e99fe - Player display name is shown in chat (2011-01-07)  ++| * 8c10938f6 - Implemented Player.getDisplayName/setDisplayName (2011-01-07)  ++| * 96afc3822 - Implemented PlayerItemEvent and PlayerBlockItemEvent (2011-01-07)  ++| * c5c714582 - Block.getFace(BlockFace) is an override for Block.getFace(BlockFace, int) (2011-01-07)  ++| * 14b929f38 - Added block.getFace(Block) and block.getFace(BlockFace, int) (2011-01-07)  ++| * 7d12239ab - Better implementation of matchPlayer(String) - return List of potential matches (2011-01-07)  ++| * 1e3c5a393 - Added CraftServer.matchPlayer(String) - partial-name matching (2011-01-06)  ++| * 6a786c1c2 - Fixed plugins being loaded before world. (2011-01-07)  ++| * 687ae0533 - Create a concept of a null item stack (2011-01-06)  ++* | 45c701311 - Added function to get player ip (2011-01-09)  ++|/ ++* 95c53f09f - Fixed CraftPlayer.isOnline (2011-01-06)  ++* a0c449559 - Show reason for invalid plugin (2011-01-05)  ++* 72c378f1d - Merge remote branch 'upstream/master' (2011-01-05)  ++|\ ++| * 786488603 - Added Server.getTime and Server.setTime (2011-01-04)  ++| * 4792d55a0 - Actually allow cancellation of player chat events (2011-01-05)  ++| * 8e66e5295 - fixed bug where water wasn't flowing (2011-01-05)  ++* | b73e343dc - fixed bug where water wasn't flowing (2011-01-05)  ++|/ ++* 0aa7b970a - Merge remote branch 'upstream/master' (2011-01-05)  ++|\ ++| * 25d519aaf - Initial implementation of inventory stuff, (read-)only for StorageMinecart sofar (2011-01-05)  ++| * 3dbacbc2c - Implemented LEAVES_DECAY (2011-01-04)  ++| * 8c9f1090a - More NPEs! (2011-01-04)  ++| * 4a9c76170 - Fixed random NPE on startup (2011-01-04)  ++| * ca765c351 - Fixed building in water (2011-01-04)  ++| * 1ed14de10 - Implemented CHUNK_LOADED (2011-01-04)  ++| * a2c944d3c - Implemented Chunk.getWorld() (2011-01-04)  ++* | 3df833797 - Beginnings of block_placed (2011-01-05)  ++* | 4c483edf0 - Merge remote branch 'upstream/master' (2011-01-03)  ++|\| ++| * 8680ee387 - Added -w for world directory (2011-01-04)  ++| * e3b3dcfde - Merge branch 'master' of github.com:Bukkit/CraftBukkit (2011-01-04)  ++| |\ ++| | * 43db386fe - Added getHighestBlockYAt (2011-01-04)  ++| * | 7b08efd9d - Added command-line arguments, forced nogui (2011-01-04)  ++| |/ ++* | 8a717ddda - Merge remote branch 'upstream/master' (2011-01-03)  ++|\| ++| * b7f7c3ffb - Fixed NPE on Player related methods in CraftServer (2011-01-03)  ++| * fd5892db5 - Fixed compile errors (2011-01-03)  ++| * d6aff6629 - Direct fire exposure event (2011-01-03)  ++| * 7a9de3159 - Explosion damage entity hook. (2011-01-03)  ++| * baf59f745 - Cactus damage event. (2011-01-03)  ++| * 8f358b4b2 - Mark CraftEntity as abstract, add dummy health methods to CraftArrowEntity. (2011-01-03)  ++| * 5a9b2d0c2 - Added LivingEntity.throwEgg() and LivingEntity.throwSnowball(). (2011-01-03)  ++| * 497de4d81 - Fixed missing import for craftworld (2011-01-03)  ++| * 198ffee20 - Implemented some minecart vehicle hooks, but there's a some things missing in CraftBukkit before the implementation can be finished. (2011-01-03)  ++| * 9d6803541 - Added minecart classes and World.spawn*Minecart(). Minecart.getPassenger() is still a stub that needs to be implemented (due to of a need of a MC entity -> CraftBukkit entity lookup) and StorageMinecart.getInventory() is waiting on the implementation of inventory. (2011-01-02)  ++| * ca47ccf67 - Renamed ArrowEntity->Arrow to be consistent. (2011-01-03)  ++* | a712a74c2 - Merge remote branch 'upstream/master' (2011-01-02)  ++|\| ++| * 31c589474 - Light levels are bytes (2011-01-03)  ++| * 7ecc3d5b4 - Fixed isChunkLoaded(Chunk chunk) (2011-01-03)  ++| * b2812b74d - Added world.spawnTree(), world.spawnBigTree(). (2011-01-02)  ++| * fe34bbbb1 - Block.getLightLevel() (2011-01-02)  ++* | f48118461 - fixed spelling error in comment (2011-01-02)  ++|/ ++* 853d00fe9 - Changed to pluginmanager direct for enabling plugins (2011-01-03)  ++* c7b0db5f5 - Enable plugins by default the right way (2011-01-03)  ++* 620c42b32 - Added getPlayer(String name) to server (2011-01-03)  ++* 904c220d5 - Removed @Override for the interface method spawnArrow (2011-01-02)  ++* 1c5d80a8c - Merge remote branch 'upstream/master' into HEAD (2011-01-02)  ++|\ ++| * 5c37168fc - We're LGPL. (2011-01-02)  ++| * 8222af3e4 - Implemented arrows. (2011-01-02)  ++* | e70828125 - Added notchToBlockFace convenience method (2011-01-02)  ++* | 54c2780d1 - Merge remote branch 'upstream/master' (2011-01-02)  ++|\| ++| * 32224b916 - Fixed a bunch of warnings. (2011-01-02)  ++* | c80748c8c - Changed BLOCK_CANBUILD to have some checks that user can't override (building on top of themselves, for example) (2011-01-01)  ++* | cb7e2ee23 - Changed commenting to use the system of writing XXX for methods that we copied out of World.java (2011-01-01)  ++|/ ++* ce271f8ab - Changed base of the source file to be based off of grum/mc-dev: net/minecraft/server/BlockFlowing.java (2011-01-01)  ++* ebc0eeec2 - POM version crap (2011-01-01)  ++* 653dd79a6 - Java 1.5! (2011-01-01)  ++* 98b405139 - Updated pom.xml to produce a 'ready to run' jar (2011-01-01)  ++* f199cc719 - Changed tabs to 4 spaces, removed unnecessary imports (2011-01-01)  ++* 84bf373c5 - Transition to Maven (2011-01-01)  ++* fc58672e6 - Changed BlockCanBuildEvent to store the int and not the material (2011-01-01)  ++* 3094b40b8 - Changed BlockCanBuild event to pass the material (2011-01-01)  ++* 49b225ac0 - Fixed Material (2011-01-01)  ++* c7d680163 - Didn't work correctly before. Now it does (2011-01-01)  ++* 2efc265b9 - Implemented BLOCK_CANBUILD (2011-01-01)  ++* 02c469a93 - Changed Block to CraftBlock. Changed callHook to getServer (2010-12-31)  ++* 4af385af1 - Reimplemented BlockFlow to use multiple BlockFromToEvents (2010-12-31)  ++* d72ecbaf3 - Merge branch 'master' of github.com:Dinnerbone/Craftbukkit (2010-12-31)  ++|\ ++| * ea0b61649 - Implemented BLOCK_FLOW (2010-12-31)  ++| * 4d05943ba - Added callHook method to WorldServer so we can get callEvents from any world instance (2010-12-31)  ++* | 1795a66df - Fixed physics event (2010-12-31)  ++* | a69c75bed - Implemented BLOCK_PHYSICS (2010-12-30)  ++|/ ++* a9191c24b - Fixed insane fall damage (entities reset on death) (2010-12-30)  ++* a06303621 - Fixed player handle being reset on death or disconnection (2010-12-30)  ++* bd53a823d - Implemented Player.sendMessage() (2010-12-30)  ++* f8e01e128 - Don't override getName in CraftPlayer (2010-12-30)  ++* 416964ef5 - No lookup for worlds, store on object (2010-12-30)  ++* c57530392 - Implemented entities (2010-12-30)  ++* 193bf0136 - Moved the PLAYER_MOVE and PLAYER_TELEPORT hooks to be packet-based, fixed player.getLocation() to return pitch/yaw (2010-12-29)  ++* 6d28eb011 - Made Block.setType/Block.setData functional (2010-12-29)  ++* 36b95edc0 - Merge branch 'master' of github.com:Dinnerbone/Craftbukkit (2010-12-29)  ++|\ ++| * 5faa47655 - Updated PLAYER_MOVE hook to deal correctly with a cancelled event. (2010-12-29)  ++* | e85cabeb4 - Add some .toString()s (2010-12-29)  ++* | b3c6a7953 - Merge branch 'master' of github.com:Dinnerbone/Craftbukkit (2010-12-28)  ++|\| ++| * 5402eb5c8 - Added support for event PLAYER_MOVE (2010-12-29)  ++* | 804b5e7d2 - Keep Blocks updated when changed by the world (2010-12-28)  ++|/ ++* ef622b20d - Implemented PLAYER_LOGIN (2010-12-28)  ++* f9eb5a92a - Implemented PLAYER_CHAT and PLAYER_COMMAND (2010-12-28)  ++* c49239fa8 - Moved from jd-gui to jad (2010-12-28)  ++* 656f8a8e4 - Changed event calling to reflect new event structure (2010-12-28)  ++* b04fa07b4 - Added chunk/block/location/world (2010-12-27)  ++* b5aa87627 - Changed quit to use PlayerEvent (2010-12-27)  ++* 01a0562ca - Call hooks, update to new code (2010-12-26)  ++* 2798e5b84 - PluginManager => SimplePluginManager (2010-12-25)  ++* cc734a3aa - No longer hardcoding sample plugin, now uses plugins dir (2010-12-24)  ++* c8b9f833d - Fixed a few bugs getting sample plugin to load (2010-12-24)  ++* 827465536 - Load sample plugin for now (2010-12-24)  ++* a799b1463 - Hook onto the server, and added player (2010-12-22)  ++* 84f7c6c8d - Initial structure (2010-12-21)  diff --git a/Spigot-Server-Patches/0536-Fix-AdvancementDataPlayer-leak-due-from-quitting-ear.patch b/Spigot-Server-Patches/0536-Fix-AdvancementDataPlayer-leak-due-from-quitting-ear.patch index b7ef24fea8..d53d5ae953 100644 --- a/Spigot-Server-Patches/0536-Fix-AdvancementDataPlayer-leak-due-from-quitting-ear.patch +++ b/Spigot-Server-Patches/0536-Fix-AdvancementDataPlayer-leak-due-from-quitting-ear.patch @@ -70,10 +70,18 @@ index c2ee816af000f0c94782d704e6372cd93fd34bb3..c6388223daa26b200dc16cd562bcef19 if (t0.b().a(loottableinfo) && predicate.test(t0)) { if (list == null) { diff --git a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java -index e1d3f7e63c731f9376900a86abe17282e9b55ded..17f508f07f7a3a0608150558595809bdcd3bbe96 100644 +index e1d3f7e63c731f9376900a86abe17282e9b55ded..cc89bc1880a8c095942ba4e34c1bf4202e8dbedc 100644 --- a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java +++ b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java -@@ -69,6 +69,10 @@ public class AdvancementDataPlayer { +@@ -39,6 +39,7 @@ import net.minecraft.advancements.CriterionInstance; + import net.minecraft.advancements.CriterionProgress; + import net.minecraft.advancements.CriterionTrigger; + import net.minecraft.advancements.CriterionTriggers; ++import net.minecraft.advancements.critereon.CriterionTriggerAbstract; + import net.minecraft.network.chat.ChatMessage; + import net.minecraft.network.chat.ChatMessageType; + import net.minecraft.network.protocol.game.PacketPlayOutAdvancements; +@@ -69,6 +70,10 @@ public class AdvancementDataPlayer { private Advancement l; private boolean m = true; diff --git a/Spigot-Server-Patches/0540-Incremental-player-saving.patch b/Spigot-Server-Patches/0540-Incremental-player-saving.patch index 43ff7c07a7..18f64b3e21 100644 --- a/Spigot-Server-Patches/0540-Incremental-player-saving.patch +++ b/Spigot-Server-Patches/0540-Incremental-player-saving.patch @@ -47,10 +47,10 @@ index 31a083730536177c5ff5ae463ca0b9780968a5d8..1f7435c78b1b522ba76a43440cf3a4e6 // Paper start for (WorldServer world : getWorlds()) { diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 9c30a74dae5df5a187b3384e36cdabc227edd1b9..8e75c55460aba3885f52f7b0dc6e320101d402ba 100644 +index 5d6865fd7b67c2031440a8bd862099244d2ea407..81fd2efd25d9f5ffdabd40fb29f356db053ceef9 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -172,6 +172,7 @@ import org.bukkit.inventory.MainHand; +@@ -174,6 +174,7 @@ import org.bukkit.inventory.MainHand; public class EntityPlayer extends EntityHuman implements ICrafting { private static final Logger LOGGER = LogManager.getLogger(); @@ -59,10 +59,10 @@ index 9c30a74dae5df5a187b3384e36cdabc227edd1b9..8e75c55460aba3885f52f7b0dc6e3201 public NetworkManager networkManager; // Paper public final MinecraftServer server; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 3c122087ecf53c517df415464af2742168f988d0..9349997bb63be6ffca4993f378fb4d20e98d65ba 100644 +index 503ad38073fd8334d6692df97ea3fb68ded694d5..7127e5f2cd8eb72220c959cb83711ad9b9c240c2 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -555,6 +555,7 @@ public abstract class PlayerList { +@@ -563,6 +563,7 @@ public abstract class PlayerList { protected void savePlayerFile(EntityPlayer entityplayer) { if (!entityplayer.getBukkitEntity().isPersistent()) return; // CraftBukkit if (!entityplayer.didPlayerJoinEvent) return; // Paper - If we never fired PJE, we disconnected during login. Data has not changed, and additionally, our saved vehicle is not loaded! If we save now, we will lose our vehicle (CraftBukkit bug) @@ -70,7 +70,7 @@ index 3c122087ecf53c517df415464af2742168f988d0..9349997bb63be6ffca4993f378fb4d20 this.playerFileData.save(entityplayer); ServerStatisticManager serverstatisticmanager = (ServerStatisticManager) entityplayer.getStatisticManager(); // CraftBukkit -@@ -1214,10 +1215,21 @@ public abstract class PlayerList { +@@ -1222,10 +1223,21 @@ public abstract class PlayerList { } public void savePlayers() { diff --git a/Spigot-Server-Patches/0547-Brand-support.patch b/Spigot-Server-Patches/0547-Brand-support.patch index c2ccbba8fb..69ad6579b7 100644 --- a/Spigot-Server-Patches/0547-Brand-support.patch +++ b/Spigot-Server-Patches/0547-Brand-support.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Brand support diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index e38e3b6f0efac9d7723706c2a03a1ce3e67a445f..15e6cecbec38f82ddec3c1963fa98c68fac32c13 100644 +index bd6f3e9d321abcf039875dd5c9f7ccc59afd2dd2..0d65ffcad016a5f3fa9ddf616bc549087bf1335b 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java @@ -5,6 +5,7 @@ import com.google.common.primitives.Doubles; @@ -16,7 +16,15 @@ index e38e3b6f0efac9d7723706c2a03a1ce3e67a445f..15e6cecbec38f82ddec3c1963fa98c68 import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; import it.unimi.dsi.fastutil.ints.Int2ShortMap; -@@ -258,6 +259,8 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -37,6 +38,7 @@ import net.minecraft.nbt.NBTTagCompound; + import net.minecraft.nbt.NBTTagList; + import net.minecraft.nbt.NBTTagString; + import net.minecraft.network.NetworkManager; ++import net.minecraft.network.PacketDataSerializer; + import net.minecraft.network.chat.ChatComponentText; + import net.minecraft.network.chat.ChatMessage; + import net.minecraft.network.chat.ChatMessageType; +@@ -258,6 +260,8 @@ public class PlayerConnection implements PacketListenerPlayIn { private static final int MAX_SIGN_LINE_LENGTH = Integer.getInteger("Paper.maxSignLength", 80); private static final long KEEPALIVE_LIMIT = Long.getLong("paper.playerconnection.keepalive", 30) * 1000; // Paper - provide property to set keepalive limit @@ -25,7 +33,7 @@ index e38e3b6f0efac9d7723706c2a03a1ce3e67a445f..15e6cecbec38f82ddec3c1963fa98c68 public PlayerConnection(MinecraftServer minecraftserver, NetworkManager networkmanager, EntityPlayer entityplayer) { this.minecraftServer = minecraftserver; this.networkManager = networkmanager; -@@ -2986,6 +2989,8 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -2986,6 +2990,8 @@ public class PlayerConnection implements PacketListenerPlayIn { private static final MinecraftKey CUSTOM_REGISTER = new MinecraftKey("register"); private static final MinecraftKey CUSTOM_UNREGISTER = new MinecraftKey("unregister"); @@ -34,7 +42,7 @@ index e38e3b6f0efac9d7723706c2a03a1ce3e67a445f..15e6cecbec38f82ddec3c1963fa98c68 @Override public void a(PacketPlayInCustomPayload packetplayincustompayload) { PlayerConnectionUtils.ensureMainThread(packetplayincustompayload, this, this.player.getWorldServer()); -@@ -3013,6 +3018,16 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -3013,6 +3019,16 @@ public class PlayerConnection implements PacketListenerPlayIn { try { byte[] data = new byte[packetplayincustompayload.data.readableBytes()]; packetplayincustompayload.data.readBytes(data); @@ -51,7 +59,7 @@ index e38e3b6f0efac9d7723706c2a03a1ce3e67a445f..15e6cecbec38f82ddec3c1963fa98c68 server.getMessenger().dispatchIncomingMessage(player.getBukkitEntity(), packetplayincustompayload.tag.toString(), data); } catch (Exception ex) { PlayerConnection.LOGGER.error("Couldn\'t dispatch custom payload", ex); -@@ -3022,6 +3037,12 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -3022,6 +3038,12 @@ public class PlayerConnection implements PacketListenerPlayIn { } @@ -65,7 +73,7 @@ index e38e3b6f0efac9d7723706c2a03a1ce3e67a445f..15e6cecbec38f82ddec3c1963fa98c68 return (!this.player.joining && !this.networkManager.isConnected()) || this.processedDisconnect; // Paper } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index b00f8dbe7398ea7711b50adaa6061b3e2026b8b6..2a92df0d9eb1f4357bba9ad688e699c108ea0691 100644 +index bfca937a85ea8249f81b746a15835520a3b22dd1..d75bf9ecb70224f5e9772f98ac5633244828202e 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2378,6 +2378,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -75,7 +83,7 @@ index b00f8dbe7398ea7711b50adaa6061b3e2026b8b6..2a92df0d9eb1f4357bba9ad688e699c1 + // Paper start - brand support + @Override + public String getClientBrandName() { -+ return getHandle().playerConnection.getClientBrandName(); ++ return getHandle().playerConnection != null ? getHandle().playerConnection.getClientBrandName() : null; + } + // Paper end + diff --git a/Spigot-Server-Patches/0551-Add-setMaxPlayers-API.patch b/Spigot-Server-Patches/0551-Add-setMaxPlayers-API.patch index 2d9c2e6a83..235bebe743 100644 --- a/Spigot-Server-Patches/0551-Add-setMaxPlayers-API.patch +++ b/Spigot-Server-Patches/0551-Add-setMaxPlayers-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add #setMaxPlayers API diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 9349997bb63be6ffca4993f378fb4d20e98d65ba..8214bd759b306f86d44a53b2aa07dc053f72f282 100644 +index 7127e5f2cd8eb72220c959cb83711ad9b9c240c2..231a1cf2a4bad62f9d317138c96f5922c14f1762 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -137,7 +137,7 @@ public abstract class PlayerList { +@@ -145,7 +145,7 @@ public abstract class PlayerList { public final WorldNBTStorage playerFileData; private boolean hasWhitelist; private final IRegistryCustom.Dimension s; diff --git a/Spigot-Server-Patches/0552-Add-playPickupItemAnimation-to-LivingEntity.patch b/Spigot-Server-Patches/0552-Add-playPickupItemAnimation-to-LivingEntity.patch index ed2dbaf79a..22fffc954c 100644 --- a/Spigot-Server-Patches/0552-Add-playPickupItemAnimation-to-LivingEntity.patch +++ b/Spigot-Server-Patches/0552-Add-playPickupItemAnimation-to-LivingEntity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add playPickupItemAnimation to LivingEntity diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 97cc5b6b8bf1f44804e2c0528b631c51c75ab325..9e9bdf9bc2e5c4d72d811fcb439628d946741324 100644 +index 5563e7c1ecc9e607ba0be21ae16a544b24d6f030..090e0931df410526cb7b0aab196a01f57ffbb285 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -804,5 +804,9 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -814,5 +814,9 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { } } diff --git a/Spigot-Server-Patches/0554-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch b/Spigot-Server-Patches/0554-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch index 5b646d10ba..ad5f568ff9 100644 --- a/Spigot-Server-Patches/0554-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch +++ b/Spigot-Server-Patches/0554-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix SpawnChangeEvent not firing for all use-cases diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 2181fbc31e96c74679185a49abbb3d7a2d5b6e9f..9f16a524b435c93edea0c8e2b4ebd5bbe63d34f8 100644 +index 0e738ace7d37011547378954aae91f79c7ebd544..7f5d3bcf8be30a6bcdd077bfbc416079e3d969c1 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -1984,12 +1984,14 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1987,12 +1987,14 @@ public class WorldServer extends World implements GeneratorAccessSeed { } // Paper end diff --git a/Spigot-Server-Patches/0556-Prevent-headless-pistons-from-being-created.patch b/Spigot-Server-Patches/0556-Prevent-headless-pistons-from-being-created.patch index 8879901b52..f6e166986f 100644 --- a/Spigot-Server-Patches/0556-Prevent-headless-pistons-from-being-created.patch +++ b/Spigot-Server-Patches/0556-Prevent-headless-pistons-from-being-created.patch @@ -23,10 +23,27 @@ index fdbd8b89bb8bf3b61f60b812b90483c98a3d5ccb..faa1b775e45563b93ac1d5b904938b1f public static int maxPlayerAutoSavePerTick = 10; private static void playerAutoSaveRate() { diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 0b3479aae8f7cad7bd0b8b64aa2dead43baf4c56..61ac9a68c864fdbb75137767eafdb96efdee640d 100644 +index 0b3479aae8f7cad7bd0b8b64aa2dead43baf4c56..79008bda42558ea7d28ccf51b66405a3bdb52da7 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -163,6 +163,15 @@ public class Explosion { +@@ -16,6 +16,7 @@ import java.util.Set; + import javax.annotation.Nullable; + import net.minecraft.core.BaseBlockPosition; + import net.minecraft.core.BlockPosition; ++import net.minecraft.core.EnumDirection; + import net.minecraft.core.particles.Particles; + import net.minecraft.server.level.WorldServer; + import net.minecraft.sounds.SoundCategory; +@@ -34,6 +35,8 @@ import net.minecraft.world.level.block.Block; + import net.minecraft.world.level.block.BlockFireAbstract; + import net.minecraft.world.level.block.Blocks; + import net.minecraft.world.level.block.entity.TileEntity; ++import net.minecraft.world.level.block.piston.BlockPistonExtension; ++import net.minecraft.world.level.block.piston.TileEntityPiston; + import net.minecraft.world.level.block.state.IBlockData; + import net.minecraft.world.level.material.Fluid; + import net.minecraft.world.level.storage.loot.LootTableInfo; +@@ -163,6 +166,15 @@ public class Explosion { if (f > 0.0F && this.l.a(this, this.world, blockposition, iblockdata, f) && blockposition.getY() < 256 && blockposition.getY() >= 0) { // CraftBukkit - don't wrap explosions set.add(blockposition); diff --git a/Spigot-Server-Patches/0558-Add-BellRingEvent.patch b/Spigot-Server-Patches/0557-Add-BellRingEvent.patch similarity index 100% rename from Spigot-Server-Patches/0558-Add-BellRingEvent.patch rename to Spigot-Server-Patches/0557-Add-BellRingEvent.patch diff --git a/Spigot-Server-Patches/0557-Brand-support.patch b/Spigot-Server-Patches/0557-Brand-support.patch deleted file mode 100644 index 1507a4cdea..0000000000 --- a/Spigot-Server-Patches/0557-Brand-support.patch +++ /dev/null @@ -1,20 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: DigitalRegent -Date: Sat, 11 Apr 2020 13:10:58 +0200 -Subject: [PATCH] Brand support - -TODO(Proximyst): Fixup this into the other brand support patch - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 105572b2847207e83580808bba3b5abf6960d049..31aad6440e23ef3bbef90418923747a71709854c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2381,7 +2381,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - // Paper start - brand support - @Override - public String getClientBrandName() { -- return getHandle().playerConnection.getClientBrandName(); -+ return getHandle().playerConnection != null ? getHandle().playerConnection.getClientBrandName() : null; - } - // Paper end - diff --git a/Spigot-Server-Patches/0559-Add-zombie-targets-turtle-egg-config.patch b/Spigot-Server-Patches/0558-Add-zombie-targets-turtle-egg-config.patch similarity index 100% rename from Spigot-Server-Patches/0559-Add-zombie-targets-turtle-egg-config.patch rename to Spigot-Server-Patches/0558-Add-zombie-targets-turtle-egg-config.patch diff --git a/Spigot-Server-Patches/0560-Buffer-joins-to-world.patch b/Spigot-Server-Patches/0559-Buffer-joins-to-world.patch similarity index 63% rename from Spigot-Server-Patches/0560-Buffer-joins-to-world.patch rename to Spigot-Server-Patches/0559-Buffer-joins-to-world.patch index adeb4f3f7f..eab3a0db62 100644 --- a/Spigot-Server-Patches/0560-Buffer-joins-to-world.patch +++ b/Spigot-Server-Patches/0559-Buffer-joins-to-world.patch @@ -22,10 +22,18 @@ index faa1b775e45563b93ac1d5b904938b1f5ad8d80c..545948f20efd6c8dd42140b565af94cd + } } diff --git a/src/main/java/net/minecraft/network/NetworkManager.java b/src/main/java/net/minecraft/network/NetworkManager.java -index 54a90c51f3090d0d2d6ea72b152829bc11d3ffbc..b865e759ff522051c20534fea726d8610b7694ca 100644 +index 8e591f75b2c80fdb7e012574e9d7c348f1ffc90d..421a1556ef40f98320775b1793487680205d8c64 100644 --- a/src/main/java/net/minecraft/network/NetworkManager.java +++ b/src/main/java/net/minecraft/network/NetworkManager.java -@@ -375,10 +375,22 @@ public class NetworkManager extends SimpleChannelInboundHandler> { +@@ -33,6 +33,7 @@ import net.minecraft.network.protocol.game.PacketPlayOutTabComplete; + import net.minecraft.network.protocol.game.PacketPlayOutTitle; + import net.minecraft.server.CancelledPacketHandleException; + import net.minecraft.server.MCUtil; ++import net.minecraft.server.MinecraftServer; + import net.minecraft.server.level.EntityPlayer; + import net.minecraft.server.network.LoginListener; + import net.minecraft.server.network.PlayerConnection; +@@ -382,10 +383,22 @@ public class NetworkManager extends SimpleChannelInboundHandler> { } // Paper end @@ -48,3 +56,16 @@ index 54a90c51f3090d0d2d6ea72b152829bc11d3ffbc..b865e759ff522051c20534fea726d861 } if (this.packetListener instanceof PlayerConnection) { +diff --git a/src/main/java/net/minecraft/server/network/LoginListener.java b/src/main/java/net/minecraft/server/network/LoginListener.java +index 78a8eb89e9113a1002ba6177f96d5734a10e8d7d..39aa50a386d0ab94914cd8f85c69cf404e0dc4b2 100644 +--- a/src/main/java/net/minecraft/server/network/LoginListener.java ++++ b/src/main/java/net/minecraft/server/network/LoginListener.java +@@ -416,7 +416,7 @@ public class LoginListener implements PacketLoginInListener { + return new GameProfile(uuid, gameprofile.getName()); + } + +- static enum EnumProtocolState { ++ public enum EnumProtocolState { // Paper - package private -> public + + HELLO, KEY, AUTHENTICATING, NEGOTIATING, READY_TO_ACCEPT, DELAY_ACCEPT, ACCEPTED; + diff --git a/Spigot-Server-Patches/0561-Optimize-redstone-algorithm.patch b/Spigot-Server-Patches/0560-Optimize-redstone-algorithm.patch similarity index 98% rename from Spigot-Server-Patches/0561-Optimize-redstone-algorithm.patch rename to Spigot-Server-Patches/0560-Optimize-redstone-algorithm.patch index ca54b1f7fb..4e538c9eb3 100644 --- a/Spigot-Server-Patches/0561-Optimize-redstone-algorithm.patch +++ b/Spigot-Server-Patches/0560-Optimize-redstone-algorithm.patch @@ -39,29 +39,28 @@ index 36ecdfce84141ac731b827e469ac842f5c666259..02bb85364560784adea47c877c13291c } diff --git a/src/main/java/com/destroystokyo/paper/util/RedstoneWireTurbo.java b/src/main/java/com/destroystokyo/paper/util/RedstoneWireTurbo.java new file mode 100644 -index 0000000000000000000000000000000000000000..b69803cbf2db2781aa050b145bf88468254880ae +index 0000000000000000000000000000000000000000..167e0aaec8c2f83856465b7efc9ac9e5f9389d91 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/util/RedstoneWireTurbo.java -@@ -0,0 +1,915 @@ +@@ -0,0 +1,914 @@ +package com.destroystokyo.paper.util; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; + ++import net.minecraft.core.BlockPosition; ++import net.minecraft.world.item.ItemStack; ++import net.minecraft.world.item.Items; ++import net.minecraft.world.level.World; ++import net.minecraft.world.level.block.Block; ++import net.minecraft.world.level.block.BlockRedstoneWire; ++import net.minecraft.world.level.block.state.IBlockData; +import org.bukkit.event.block.BlockRedstoneEvent; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + -+import net.minecraft.server.Block; -+import net.minecraft.server.BlockPosition; -+import net.minecraft.server.BlockRedstoneWire; -+import net.minecraft.server.IBlockData; -+import net.minecraft.server.Items; -+import net.minecraft.server.ItemStack; -+import net.minecraft.server.World; -+ +/** + * Used for the faster redstone algorithm. + * Original author: theosib @@ -959,10 +958,10 @@ index 0000000000000000000000000000000000000000..b69803cbf2db2781aa050b145bf88468 + } +} diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index ada4a04506a32421bd4b9e661dfe87aa8a2b98bd..1aa9b47287b4b8e8516fcf3ead96c03a84e47b0f 100644 +index 9369a0c6c0ae2d8518ebfb17f2c93ead2647ab8d..307a89c431739ed15d8869faace7b08927626f60 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -651,6 +651,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -659,6 +659,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { } @@ -970,7 +969,7 @@ index ada4a04506a32421bd4b9e661dfe87aa8a2b98bd..1aa9b47287b4b8e8516fcf3ead96c03a public void a(BlockPosition blockposition, Block block, BlockPosition blockposition1) { if (!this.isClientSide) { IBlockData iblockdata = this.getType(blockposition); -@@ -1279,6 +1280,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1287,6 +1288,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { return this.getBlockFacePower(blockposition.down(), EnumDirection.DOWN) > 0 ? true : (this.getBlockFacePower(blockposition.up(), EnumDirection.UP) > 0 ? true : (this.getBlockFacePower(blockposition.north(), EnumDirection.NORTH) > 0 ? true : (this.getBlockFacePower(blockposition.south(), EnumDirection.SOUTH) > 0 ? true : (this.getBlockFacePower(blockposition.west(), EnumDirection.WEST) > 0 ? true : this.getBlockFacePower(blockposition.east(), EnumDirection.EAST) > 0)))); } diff --git a/Spigot-Server-Patches/0562-Fix-hex-colors-not-working-in-some-kick-messages.patch b/Spigot-Server-Patches/0561-Fix-hex-colors-not-working-in-some-kick-messages.patch similarity index 97% rename from Spigot-Server-Patches/0562-Fix-hex-colors-not-working-in-some-kick-messages.patch rename to Spigot-Server-Patches/0561-Fix-hex-colors-not-working-in-some-kick-messages.patch index 9685f44699..d8ff93e0d4 100644 --- a/Spigot-Server-Patches/0562-Fix-hex-colors-not-working-in-some-kick-messages.patch +++ b/Spigot-Server-Patches/0561-Fix-hex-colors-not-working-in-some-kick-messages.patch @@ -43,10 +43,10 @@ index 6d001843d8f899e91f19c384ddf57e6987bfb79e..b97d289afdff81d9959e238639f4e3e1 this.getNetworkManager().close(chatmessage); return; diff --git a/src/main/java/net/minecraft/server/network/LoginListener.java b/src/main/java/net/minecraft/server/network/LoginListener.java -index 6bfb703ffafd707fb83743abc7d1bfbb96f867f1..d3863d73e80fb1252ea39cfb4c8ed2c76d39c28d 100644 +index 39aa50a386d0ab94914cd8f85c69cf404e0dc4b2..185667110cd6f566b23546728d20fc79223f3c92 100644 --- a/src/main/java/net/minecraft/server/network/LoginListener.java +++ b/src/main/java/net/minecraft/server/network/LoginListener.java -@@ -104,14 +104,7 @@ public class LoginListener implements PacketLoginInListener { +@@ -106,14 +106,7 @@ public class LoginListener implements PacketLoginInListener { // CraftBukkit start @Deprecated public void disconnect(String s) { diff --git a/Spigot-Server-Patches/0563-PortalCreateEvent-needs-to-know-its-entity.patch b/Spigot-Server-Patches/0562-PortalCreateEvent-needs-to-know-its-entity.patch similarity index 70% rename from Spigot-Server-Patches/0563-PortalCreateEvent-needs-to-know-its-entity.patch rename to Spigot-Server-Patches/0562-PortalCreateEvent-needs-to-know-its-entity.patch index c74d6db2e0..19dafc69d3 100644 --- a/Spigot-Server-Patches/0563-PortalCreateEvent-needs-to-know-its-entity.patch +++ b/Spigot-Server-Patches/0562-PortalCreateEvent-needs-to-know-its-entity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] PortalCreateEvent needs to know its entity diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 8b5aaa18d278f20e32e25edddc2a10069c2ba5e6..81c7aed22bd63179e6016de801497d17d804e301 100644 +index 9f0aad908cf662aa7ba1e62c0639abf06d30568c..bcaef8702fb0fbcf4f737abb5a094bf74a56d3a3 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -367,7 +367,7 @@ public final class ItemStack { +@@ -368,7 +368,7 @@ public final class ItemStack { IBlockData block = world.getType(newblockposition); if (!(block.getBlock() instanceof BlockTileEntity)) { // Containers get placed automatically @@ -18,10 +18,18 @@ index 8b5aaa18d278f20e32e25edddc2a10069c2ba5e6..81c7aed22bd63179e6016de801497d17 world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getType(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point diff --git a/src/main/java/net/minecraft/world/level/block/BlockFire.java b/src/main/java/net/minecraft/world/level/block/BlockFire.java -index f940d93c5bceb4b130a40c1cde06ab8d2e82cd74..c695528d7e69fea5c168951583fea5841ddb80f1 100644 +index e6ea1d29c7f3f4cb6039df0e35c8db94b6f38c3e..70c32b7a53a1107cced3491ebac19b0eaf4fec2e 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockFire.java +++ b/src/main/java/net/minecraft/world/level/block/BlockFire.java -@@ -363,8 +363,10 @@ public class BlockFire extends BlockFireAbstract { +@@ -15,6 +15,7 @@ import net.minecraft.core.EnumDirection; + import net.minecraft.server.MCUtil; + import net.minecraft.server.level.WorldServer; + import net.minecraft.world.item.context.BlockActionContext; ++import net.minecraft.world.item.context.ItemActionContext; + import net.minecraft.world.level.GameRules; + import net.minecraft.world.level.GeneratorAccess; + import net.minecraft.world.level.IBlockAccess; +@@ -364,8 +365,10 @@ public class BlockFire extends BlockFireAbstract { } @Override @@ -35,10 +43,18 @@ index f940d93c5bceb4b130a40c1cde06ab8d2e82cd74..c695528d7e69fea5c168951583fea584 } diff --git a/src/main/java/net/minecraft/world/level/block/BlockFireAbstract.java b/src/main/java/net/minecraft/world/level/block/BlockFireAbstract.java -index b86513497b7ca8bde84176f5228ef9c479a73abb..2ddedcf3e56b8958671b81e6fe8768535951ee25 100644 +index b86513497b7ca8bde84176f5228ef9c479a73abb..02047bf07c2008c7de8daf3d76b660e25b77bce8 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockFireAbstract.java +++ b/src/main/java/net/minecraft/world/level/block/BlockFireAbstract.java -@@ -66,14 +66,17 @@ public abstract class BlockFireAbstract extends Block { +@@ -7,6 +7,7 @@ import net.minecraft.world.damagesource.DamageSource; + import net.minecraft.world.entity.Entity; + import net.minecraft.world.entity.player.EntityHuman; + import net.minecraft.world.item.context.BlockActionContext; ++import net.minecraft.world.item.context.ItemActionContext; + import net.minecraft.world.level.GeneratorAccess; + import net.minecraft.world.level.IBlockAccess; + import net.minecraft.world.level.World; +@@ -66,14 +67,17 @@ public abstract class BlockFireAbstract extends Block { super.a(iblockdata, world, blockposition, entity); } @@ -59,10 +75,18 @@ index b86513497b7ca8bde84176f5228ef9c479a73abb..2ddedcf3e56b8958671b81e6fe876853 } } diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java -index 1fcbb2e78904aa9f6ab870d7e2bc95ae25fbd33a..ffb5dc4fabb9249dfc1c8521025eaad0d6205329 100644 +index 1fcbb2e78904aa9f6ab870d7e2bc95ae25fbd33a..07985725b6edb0a1a4c2b5c64e947ff2a0121e72 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java -@@ -119,6 +119,12 @@ public abstract class BlockBase { +@@ -31,6 +31,7 @@ import net.minecraft.world.item.EnumColor; + import net.minecraft.world.item.Item; + import net.minecraft.world.item.ItemStack; + import net.minecraft.world.item.context.BlockActionContext; ++import net.minecraft.world.item.context.ItemActionContext; + import net.minecraft.world.level.BlockAccessAir; + import net.minecraft.world.level.GeneratorAccess; + import net.minecraft.world.level.IBlockAccess; +@@ -119,6 +120,12 @@ public abstract class BlockBase { PacketDebug.a(world, blockposition); } @@ -76,10 +100,18 @@ index 1fcbb2e78904aa9f6ab870d7e2bc95ae25fbd33a..ffb5dc4fabb9249dfc1c8521025eaad0 public void onPlace(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) { org.spigotmc.AsyncCatcher.catchOp("block onPlace"); // Spigot diff --git a/src/main/java/net/minecraft/world/level/portal/BlockPortalShape.java b/src/main/java/net/minecraft/world/level/portal/BlockPortalShape.java -index 9f7ff56e43a3dc0cc57ed3a2c6dbc729afafa1f8..1a5845a0da039fafca7ef08f968fe3b800e01991 100644 +index 9f7ff56e43a3dc0cc57ed3a2c6dbc729afafa1f8..3f8a674345bcad8289a48d2daa5e2a283528e952 100644 --- a/src/main/java/net/minecraft/world/level/portal/BlockPortalShape.java +++ b/src/main/java/net/minecraft/world/level/portal/BlockPortalShape.java -@@ -177,7 +177,10 @@ public class BlockPortalShape { +@@ -11,6 +11,7 @@ import net.minecraft.tags.Tag; + import net.minecraft.tags.TagsBlock; + import net.minecraft.util.MathHelper; + import net.minecraft.world.entity.EntitySize; ++import net.minecraft.world.item.context.ItemActionContext; + import net.minecraft.world.level.GeneratorAccess; + import net.minecraft.world.level.block.BlockPortal; + import net.minecraft.world.level.block.Blocks; +@@ -177,7 +178,10 @@ public class BlockPortalShape { } // CraftBukkit start - return boolean @@ -91,7 +123,7 @@ index 9f7ff56e43a3dc0cc57ed3a2c6dbc729afafa1f8..1a5845a0da039fafca7ef08f968fe3b8 org.bukkit.World bworld = this.b.getMinecraftWorld().getWorld(); // Copy below for loop -@@ -189,7 +192,7 @@ public class BlockPortalShape { +@@ -189,7 +193,7 @@ public class BlockPortalShape { blocks.add(state); }); diff --git a/Spigot-Server-Patches/0564-Fix-CraftTeam-null-check.patch b/Spigot-Server-Patches/0563-Fix-CraftTeam-null-check.patch similarity index 90% rename from Spigot-Server-Patches/0564-Fix-CraftTeam-null-check.patch rename to Spigot-Server-Patches/0563-Fix-CraftTeam-null-check.patch index 486f6939e4..52281e3135 100644 --- a/Spigot-Server-Patches/0564-Fix-CraftTeam-null-check.patch +++ b/Spigot-Server-Patches/0563-Fix-CraftTeam-null-check.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix CraftTeam null check diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java -index d641a9cd493ff7039db592d90d7cad1b5cf459bb..2b75210cd9b5c5bdc85e24a9cadf6bcfa90b5213 100644 +index c631934fe9d205a06956c900d5b58a1d8a781c19..d637c2941ad0680299378b58ba0db7f7a6be07dc 100644 --- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java +++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java @@ -254,7 +254,7 @@ final class CraftTeam extends CraftScoreboardComponent implements Team { diff --git a/Spigot-Server-Patches/0565-Add-more-Evoker-API.patch b/Spigot-Server-Patches/0564-Add-more-Evoker-API.patch similarity index 100% rename from Spigot-Server-Patches/0565-Add-more-Evoker-API.patch rename to Spigot-Server-Patches/0564-Add-more-Evoker-API.patch diff --git a/Spigot-Server-Patches/0566-Add-a-way-to-get-translation-keys-for-blocks-entitie.patch b/Spigot-Server-Patches/0565-Add-a-way-to-get-translation-keys-for-blocks-entitie.patch similarity index 95% rename from Spigot-Server-Patches/0566-Add-a-way-to-get-translation-keys-for-blocks-entitie.patch rename to Spigot-Server-Patches/0565-Add-a-way-to-get-translation-keys-for-blocks-entitie.patch index 537c52b0d5..47c3fd06d3 100644 --- a/Spigot-Server-Patches/0566-Add-a-way-to-get-translation-keys-for-blocks-entitie.patch +++ b/Spigot-Server-Patches/0565-Add-a-way-to-get-translation-keys-for-blocks-entitie.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Add a way to get translation keys for blocks, entities and diff --git a/src/main/java/net/minecraft/world/entity/EntityTypes.java b/src/main/java/net/minecraft/world/entity/EntityTypes.java -index 82f42f73b9696220be6d8003ec8c108a4ba3f082..f0cc46e07c462dfe733c3ce011292e5ec61cf392 100644 +index 9d2955f05aadd4bbc6dcfec068a55d7fe6950ba0..f2cf33d42839710a3bbdf0c8ea0be28af6fcb19d 100644 --- a/src/main/java/net/minecraft/world/entity/EntityTypes.java +++ b/src/main/java/net/minecraft/world/entity/EntityTypes.java -@@ -277,6 +277,7 @@ public class EntityTypes { +@@ -278,6 +278,7 @@ public class EntityTypes { return IRegistry.ENTITY_TYPE.getKey(entitytypes); } @@ -17,7 +17,7 @@ index 82f42f73b9696220be6d8003ec8c108a4ba3f082..f0cc46e07c462dfe733c3ce011292e5e public static Optional> a(String s) { return IRegistry.ENTITY_TYPE.getOptional(MinecraftKey.a(s)); } -@@ -430,6 +431,7 @@ public class EntityTypes { +@@ -431,6 +432,7 @@ public class EntityTypes { return this.bg; } diff --git a/Spigot-Server-Patches/0567-Create-HoverEvent-from-ItemStack-Entity.patch b/Spigot-Server-Patches/0566-Create-HoverEvent-from-ItemStack-Entity.patch similarity index 100% rename from Spigot-Server-Patches/0567-Create-HoverEvent-from-ItemStack-Entity.patch rename to Spigot-Server-Patches/0566-Create-HoverEvent-from-ItemStack-Entity.patch diff --git a/Spigot-Server-Patches/0568-Cache-block-data-strings.patch b/Spigot-Server-Patches/0567-Cache-block-data-strings.patch similarity index 100% rename from Spigot-Server-Patches/0568-Cache-block-data-strings.patch rename to Spigot-Server-Patches/0567-Cache-block-data-strings.patch diff --git a/Spigot-Server-Patches/0569-Fix-Entity-Teleportation-and-cancel-velocity-if-tele.patch b/Spigot-Server-Patches/0568-Fix-Entity-Teleportation-and-cancel-velocity-if-tele.patch similarity index 90% rename from Spigot-Server-Patches/0569-Fix-Entity-Teleportation-and-cancel-velocity-if-tele.patch rename to Spigot-Server-Patches/0568-Fix-Entity-Teleportation-and-cancel-velocity-if-tele.patch index eb656e8b0d..2e3cf160a4 100644 --- a/Spigot-Server-Patches/0569-Fix-Entity-Teleportation-and-cancel-velocity-if-tele.patch +++ b/Spigot-Server-Patches/0568-Fix-Entity-Teleportation-and-cancel-velocity-if-tele.patch @@ -9,10 +9,10 @@ as this is how Vanilla teleports entities. Cancel any pending motion when teleported. diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 15e6cecbec38f82ddec3c1963fa98c68fac32c13..3ba3322c031e1a8795cbebdeaad3fe5cc49018a2 100644 +index 0d65ffcad016a5f3fa9ddf616bc549087bf1335b..acbb629345d09f6ea9b18d20ab3e334c039e3191 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java -@@ -690,7 +690,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -691,7 +691,7 @@ public class PlayerConnection implements PacketListenerPlayIn { public void a(PacketPlayInTeleportAccept packetplayinteleportaccept) { PlayerConnectionUtils.ensureMainThread(packetplayinteleportaccept, this, this.player.getWorldServer()); if (packetplayinteleportaccept.b() == this.teleportAwait && this.teleportPos != null) { // CraftBukkit @@ -21,7 +21,7 @@ index 15e6cecbec38f82ddec3c1963fa98c68fac32c13..3ba3322c031e1a8795cbebdeaad3fe5c this.o = this.teleportPos.x; this.p = this.teleportPos.y; this.q = this.teleportPos.z; -@@ -1534,7 +1534,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1535,7 +1535,7 @@ public class PlayerConnection implements PacketListenerPlayIn { // CraftBukkit end this.A = this.e; @@ -31,10 +31,10 @@ index 15e6cecbec38f82ddec3c1963fa98c68fac32c13..3ba3322c031e1a8795cbebdeaad3fe5c this.player.playerConnection.sendPacket(new PacketPlayOutPosition(d0 - d3, d1 - d4, d2 - d5, f - f2, f1 - f3, set, this.teleportAwait)); } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1aa2f0f5c021345643c13fd9b6ef0a070c34c43c..bfd1f4012b20f3e9eadbbdd0613239622776982d 100644 +index f0e120e0d0da6949b7a5a12e5217b3d70ccec7fa..0a853ffc658d8e82c21af7853bdaa9112a4e1e20 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -139,6 +139,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -145,6 +145,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne // CraftBukkit start private static final int CURRENT_LEVEL = 2; @@ -42,7 +42,7 @@ index 1aa2f0f5c021345643c13fd9b6ef0a070c34c43c..bfd1f4012b20f3e9eadbbdd061323962 static boolean isLevelAtLeast(NBTTagCompound tag, int level) { return tag.hasKey("Bukkit.updateLevel") && tag.getInt("Bukkit.updateLevel") >= level; } -@@ -1402,6 +1403,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1408,6 +1409,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } public void setPositionRotation(double d0, double d1, double d2, float f, float f1) { diff --git a/Spigot-Server-Patches/0570-Add-additional-open-container-api-to-HumanEntity.patch b/Spigot-Server-Patches/0569-Add-additional-open-container-api-to-HumanEntity.patch similarity index 97% rename from Spigot-Server-Patches/0570-Add-additional-open-container-api-to-HumanEntity.patch rename to Spigot-Server-Patches/0569-Add-additional-open-container-api-to-HumanEntity.patch index 4bcdba8fd5..578a8fabd1 100644 --- a/Spigot-Server-Patches/0570-Add-additional-open-container-api-to-HumanEntity.patch +++ b/Spigot-Server-Patches/0569-Add-additional-open-container-api-to-HumanEntity.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add additional open container api to HumanEntity diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index bc1f8a0470e4720ff60f5b9c6f1c4172d903d15a..d3b29ddb9375b9c026e9c5d023f42dcf011aa79f 100644 +index 2f93a5bc694bfe97022ec227132f76f57a8fffb0..7bbcb41ef43a54f03474581064ff7e051122769a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -456,6 +456,70 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { diff --git a/Spigot-Server-Patches/0571-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch b/Spigot-Server-Patches/0570-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch similarity index 100% rename from Spigot-Server-Patches/0571-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch rename to Spigot-Server-Patches/0570-Cache-DataFixerUpper-Rewrite-Rules-on-demand.patch diff --git a/Spigot-Server-Patches/0572-Extend-block-drop-capture-to-capture-all-items-added.patch b/Spigot-Server-Patches/0571-Extend-block-drop-capture-to-capture-all-items-added.patch similarity index 78% rename from Spigot-Server-Patches/0572-Extend-block-drop-capture-to-capture-all-items-added.patch rename to Spigot-Server-Patches/0571-Extend-block-drop-capture-to-capture-all-items-added.patch index bb3233d5ff..acdfc830ed 100644 --- a/Spigot-Server-Patches/0572-Extend-block-drop-capture-to-capture-all-items-added.patch +++ b/Spigot-Server-Patches/0571-Extend-block-drop-capture-to-capture-all-items-added.patch @@ -25,10 +25,18 @@ index 8b6367d3bb4cbb007bf68d957a6c1f701f5643b6..86d1a7625bb3016093ee8a46f91fd657 // Drop event experience if (flag && event != null) { diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 9f16a524b435c93edea0c8e2b4ebd5bbe63d34f8..ae2cb0139e71ff41cfac9346179f1037a4401fa1 100644 +index 7f5d3bcf8be30a6bcdd077bfbc416079e3d969c1..595194e0a0e746c45e3766433bb827b7b51129b5 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -1286,6 +1286,13 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -99,6 +99,7 @@ import net.minecraft.world.entity.animal.EntityWaterAnimal; + import net.minecraft.world.entity.animal.horse.EntityHorseSkeleton; + import net.minecraft.world.entity.boss.EntityComplexPart; + import net.minecraft.world.entity.boss.enderdragon.EntityEnderDragon; ++import net.minecraft.world.entity.item.EntityItem; + import net.minecraft.world.entity.npc.NPC; + import net.minecraft.world.entity.player.EntityHuman; + import net.minecraft.world.entity.raid.PersistentRaid; +@@ -1289,6 +1290,13 @@ public class WorldServer extends World implements GeneratorAccessSeed { } else if (this.isUUIDTaken(entity)) { return false; } else { diff --git a/Spigot-Server-Patches/0573-Don-t-mark-dirty-in-invalid-locations-SPIGOT-6086.patch b/Spigot-Server-Patches/0572-Don-t-mark-dirty-in-invalid-locations-SPIGOT-6086.patch similarity index 100% rename from Spigot-Server-Patches/0573-Don-t-mark-dirty-in-invalid-locations-SPIGOT-6086.patch rename to Spigot-Server-Patches/0572-Don-t-mark-dirty-in-invalid-locations-SPIGOT-6086.patch diff --git a/Spigot-Server-Patches/0574-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch b/Spigot-Server-Patches/0573-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch similarity index 90% rename from Spigot-Server-Patches/0574-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch rename to Spigot-Server-Patches/0573-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch index 34475ea59b..5431711460 100644 --- a/Spigot-Server-Patches/0574-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch +++ b/Spigot-Server-Patches/0573-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Expose the Entity Counter to allow plugins to use valid and diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index bfd1f4012b20f3e9eadbbdd0613239622776982d..646f06d5a7c67cc2bef83840bdfe3b102f1f3d5a 100644 +index 0a853ffc658d8e82c21af7853bdaa9112a4e1e20..1b3371b087efa8c184f3c07fe560a709f76db4f7 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3467,4 +3467,10 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -3473,4 +3473,10 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne void accept(Entity entity, double d0, double d1, double d2); } diff --git a/Spigot-Server-Patches/0575-Lazily-track-plugin-scoreboards-by-default.patch b/Spigot-Server-Patches/0574-Lazily-track-plugin-scoreboards-by-default.patch similarity index 100% rename from Spigot-Server-Patches/0575-Lazily-track-plugin-scoreboards-by-default.patch rename to Spigot-Server-Patches/0574-Lazily-track-plugin-scoreboards-by-default.patch diff --git a/Spigot-Server-Patches/0576-Entity-isTicking.patch b/Spigot-Server-Patches/0575-Entity-isTicking.patch similarity index 71% rename from Spigot-Server-Patches/0576-Entity-isTicking.patch rename to Spigot-Server-Patches/0575-Entity-isTicking.patch index ce47887366..7973cb5192 100644 --- a/Spigot-Server-Patches/0576-Entity-isTicking.patch +++ b/Spigot-Server-Patches/0575-Entity-isTicking.patch @@ -5,10 +5,18 @@ Subject: [PATCH] Entity#isTicking diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 646f06d5a7c67cc2bef83840bdfe3b102f1f3d5a..e45af93ddb67361a5b67a79f4bc9b66bbdb3a14b 100644 +index 1b3371b087efa8c184f3c07fe560a709f76db4f7..80f3e124ad6230789e27e8ddf20be08befb0a86f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3472,5 +3472,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -48,6 +48,7 @@ import net.minecraft.resources.MinecraftKey; + import net.minecraft.resources.ResourceKey; + import net.minecraft.server.MCUtil; + import net.minecraft.server.MinecraftServer; ++import net.minecraft.server.level.ChunkProviderServer; + import net.minecraft.server.level.EntityPlayer; + import net.minecraft.server.level.PlayerChunkMap; + import net.minecraft.server.level.TicketType; +@@ -3478,5 +3479,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public static int nextEntityId() { return entityCount.incrementAndGet(); } diff --git a/Spigot-Server-Patches/0577-Fix-deop-kicking-non-whitelisted-player-when-white-l.patch b/Spigot-Server-Patches/0576-Fix-deop-kicking-non-whitelisted-player-when-white-l.patch similarity index 100% rename from Spigot-Server-Patches/0577-Fix-deop-kicking-non-whitelisted-player-when-white-l.patch rename to Spigot-Server-Patches/0576-Fix-deop-kicking-non-whitelisted-player-when-white-l.patch diff --git a/Spigot-Server-Patches/0578-Fix-Not-a-string-Map-Conversion-spam.patch b/Spigot-Server-Patches/0577-Fix-Not-a-string-Map-Conversion-spam.patch similarity index 100% rename from Spigot-Server-Patches/0578-Fix-Not-a-string-Map-Conversion-spam.patch rename to Spigot-Server-Patches/0577-Fix-Not-a-string-Map-Conversion-spam.patch diff --git a/Spigot-Server-Patches/0579-Fix-CME-on-adding-a-passenger-in-CreatureSpawnEvent.patch b/Spigot-Server-Patches/0578-Fix-CME-on-adding-a-passenger-in-CreatureSpawnEvent.patch similarity index 84% rename from Spigot-Server-Patches/0579-Fix-CME-on-adding-a-passenger-in-CreatureSpawnEvent.patch rename to Spigot-Server-Patches/0578-Fix-CME-on-adding-a-passenger-in-CreatureSpawnEvent.patch index 7d30f3f5bb..e67968426a 100644 --- a/Spigot-Server-Patches/0579-Fix-CME-on-adding-a-passenger-in-CreatureSpawnEvent.patch +++ b/Spigot-Server-Patches/0578-Fix-CME-on-adding-a-passenger-in-CreatureSpawnEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix CME on adding a passenger in CreatureSpawnEvent diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index e45af93ddb67361a5b67a79f4bc9b66bbdb3a14b..8d37f9b3880d3e456b82f4a03197cf2868714e09 100644 +index 80f3e124ad6230789e27e8ddf20be08befb0a86f..04c2b1ed98efc47b0f5a46668f4aef1c6531e73e 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3170,7 +3170,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -3177,7 +3177,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } public Stream recursiveStream() { diff --git a/Spigot-Server-Patches/0580-MC-147729-Drop-items-that-are-extra-from-a-crafting-.patch b/Spigot-Server-Patches/0579-MC-147729-Drop-items-that-are-extra-from-a-crafting-.patch similarity index 100% rename from Spigot-Server-Patches/0580-MC-147729-Drop-items-that-are-extra-from-a-crafting-.patch rename to Spigot-Server-Patches/0579-MC-147729-Drop-items-that-are-extra-from-a-crafting-.patch diff --git a/Spigot-Server-Patches/0581-Reset-Ender-Crystals-on-Dragon-Spawn.patch b/Spigot-Server-Patches/0580-Reset-Ender-Crystals-on-Dragon-Spawn.patch similarity index 100% rename from Spigot-Server-Patches/0581-Reset-Ender-Crystals-on-Dragon-Spawn.patch rename to Spigot-Server-Patches/0580-Reset-Ender-Crystals-on-Dragon-Spawn.patch diff --git a/Spigot-Server-Patches/0582-Fix-for-large-move-vectors-crashing-server.patch b/Spigot-Server-Patches/0581-Fix-for-large-move-vectors-crashing-server.patch similarity index 93% rename from Spigot-Server-Patches/0582-Fix-for-large-move-vectors-crashing-server.patch rename to Spigot-Server-Patches/0581-Fix-for-large-move-vectors-crashing-server.patch index 1292d2ba4c..7fb46146f6 100644 --- a/Spigot-Server-Patches/0582-Fix-for-large-move-vectors-crashing-server.patch +++ b/Spigot-Server-Patches/0581-Fix-for-large-move-vectors-crashing-server.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix for large move vectors crashing server Check movement distance also based on current position. diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 3ba3322c031e1a8795cbebdeaad3fe5cc49018a2..741011eed09109f8653fb8066ce636297f44b371 100644 +index acbb629345d09f6ea9b18d20ab3e334c039e3191..d44f3d1dea2a52c8a82fc1551663e125594432ea 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java -@@ -515,19 +515,24 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -516,19 +516,24 @@ public class PlayerConnection implements PacketListenerPlayIn { if (entity != this.player && entity.getRidingPassenger() == this.player && entity == this.r) { WorldServer worldserver = this.player.getWorldServer(); @@ -41,7 +41,7 @@ index 3ba3322c031e1a8795cbebdeaad3fe5cc49018a2..741011eed09109f8653fb8066ce63629 // CraftBukkit start - handle custom speeds and skipped ticks -@@ -1229,7 +1234,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1230,7 +1235,7 @@ public class PlayerConnection implements PacketListenerPlayIn { double d2 = this.player.locZ(); double d3 = this.player.locY(); double d4 = packetplayinflying.a(this.player.locX());double toX = d4; // Paper - OBFHELPER @@ -50,7 +50,7 @@ index 3ba3322c031e1a8795cbebdeaad3fe5cc49018a2..741011eed09109f8653fb8066ce63629 double d6 = packetplayinflying.c(this.player.locZ());double toZ = d6; // Paper - OBFHELPER float f = packetplayinflying.a(this.player.yaw); float f1 = packetplayinflying.b(this.player.pitch); -@@ -1237,7 +1242,12 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1238,7 +1243,12 @@ public class PlayerConnection implements PacketListenerPlayIn { double d8 = d5 - this.m; double d9 = d6 - this.n; double d10 = this.player.getMot().g(); diff --git a/Spigot-Server-Patches/0583-Optimise-getType-calls.patch b/Spigot-Server-Patches/0582-Optimise-getType-calls.patch similarity index 100% rename from Spigot-Server-Patches/0583-Optimise-getType-calls.patch rename to Spigot-Server-Patches/0582-Optimise-getType-calls.patch diff --git a/Spigot-Server-Patches/0584-Villager-resetOffers.patch b/Spigot-Server-Patches/0583-Villager-resetOffers.patch similarity index 100% rename from Spigot-Server-Patches/0584-Villager-resetOffers.patch rename to Spigot-Server-Patches/0583-Villager-resetOffers.patch diff --git a/Spigot-Server-Patches/0585-Improve-inlinig-for-some-hot-IBlockData-methods.patch b/Spigot-Server-Patches/0584-Improve-inlinig-for-some-hot-IBlockData-methods.patch similarity index 91% rename from Spigot-Server-Patches/0585-Improve-inlinig-for-some-hot-IBlockData-methods.patch rename to Spigot-Server-Patches/0584-Improve-inlinig-for-some-hot-IBlockData-methods.patch index cd28fe650f..99a3ee2f6e 100644 --- a/Spigot-Server-Patches/0585-Improve-inlinig-for-some-hot-IBlockData-methods.patch +++ b/Spigot-Server-Patches/0584-Improve-inlinig-for-some-hot-IBlockData-methods.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Improve inlinig for some hot IBlockData methods diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java -index ffb5dc4fabb9249dfc1c8521025eaad0d6205329..6f429103ce21dc9c8eab25973809907df73691c9 100644 +index 07985725b6edb0a1a4c2b5c64e947ff2a0121e72..ac3709c8158d42ccafd457cfa44a16dc8c9eb949 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java -@@ -389,7 +389,14 @@ public abstract class BlockBase { +@@ -390,7 +390,14 @@ public abstract class BlockBase { } // Paper end @@ -23,7 +23,7 @@ index ffb5dc4fabb9249dfc1c8521025eaad0d6205329..6f429103ce21dc9c8eab25973809907d if (!this.getBlock().o()) { this.a = new BlockBase.BlockData.Cache(this.p()); } -@@ -428,19 +435,19 @@ public abstract class BlockBase { +@@ -429,19 +436,19 @@ public abstract class BlockBase { return this.getBlock().d(this.p(), iblockaccess, blockposition); } @@ -47,7 +47,7 @@ index ffb5dc4fabb9249dfc1c8521025eaad0d6205329..6f429103ce21dc9c8eab25973809907d return this.f; } -@@ -506,7 +513,7 @@ public abstract class BlockBase { +@@ -507,7 +514,7 @@ public abstract class BlockBase { } } @@ -56,7 +56,7 @@ index ffb5dc4fabb9249dfc1c8521025eaad0d6205329..6f429103ce21dc9c8eab25973809907d return this.k; } -@@ -678,12 +685,12 @@ public abstract class BlockBase { +@@ -679,12 +686,12 @@ public abstract class BlockBase { return this.getBlock().a(block); } diff --git a/Spigot-Server-Patches/0586-Retain-block-place-order-when-capturing-blockstates.patch b/Spigot-Server-Patches/0585-Retain-block-place-order-when-capturing-blockstates.patch similarity index 88% rename from Spigot-Server-Patches/0586-Retain-block-place-order-when-capturing-blockstates.patch rename to Spigot-Server-Patches/0585-Retain-block-place-order-when-capturing-blockstates.patch index 00d0b5a12d..418df80756 100644 --- a/Spigot-Server-Patches/0586-Retain-block-place-order-when-capturing-blockstates.patch +++ b/Spigot-Server-Patches/0585-Retain-block-place-order-when-capturing-blockstates.patch @@ -10,10 +10,10 @@ In general, look at making this logic more robust (i.e properly handling cases where a captured entry is overriden) - but for now this will do. diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 1aa9b47287b4b8e8516fcf3ead96c03a84e47b0f..d14c38fbf7eb76dd7581c13258ee6832f5f70513 100644 +index 307a89c431739ed15d8869faace7b08927626f60..ae5f9a6af810b524f6dcbed64bc943122f0536cc 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -127,7 +127,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -135,7 +135,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { public boolean captureBlockStates = false; public boolean captureTreeGeneration = false; public Map capturedBlockStates = new java.util.LinkedHashMap<>(); // Paper diff --git a/Spigot-Server-Patches/0587-Reduce-blockpos-allocation-from-pathfinding.patch b/Spigot-Server-Patches/0586-Reduce-blockpos-allocation-from-pathfinding.patch similarity index 100% rename from Spigot-Server-Patches/0587-Reduce-blockpos-allocation-from-pathfinding.patch rename to Spigot-Server-Patches/0586-Reduce-blockpos-allocation-from-pathfinding.patch diff --git a/Spigot-Server-Patches/0588-Fix-item-locations-dropped-from-campfires.patch b/Spigot-Server-Patches/0587-Fix-item-locations-dropped-from-campfires.patch similarity index 100% rename from Spigot-Server-Patches/0588-Fix-item-locations-dropped-from-campfires.patch rename to Spigot-Server-Patches/0587-Fix-item-locations-dropped-from-campfires.patch diff --git a/Spigot-Server-Patches/0589-Player-elytra-boost-API.patch b/Spigot-Server-Patches/0588-Player-elytra-boost-API.patch similarity index 93% rename from Spigot-Server-Patches/0589-Player-elytra-boost-API.patch rename to Spigot-Server-Patches/0588-Player-elytra-boost-API.patch index 6ded81f8b5..b2a39fb564 100644 --- a/Spigot-Server-Patches/0589-Player-elytra-boost-API.patch +++ b/Spigot-Server-Patches/0588-Player-elytra-boost-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Player elytra boost API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 31aad6440e23ef3bbef90418923747a71709854c..f166f23381d892e7ddda439d52243b7a9c5d09e8 100644 +index d75bf9ecb70224f5e9772f98ac5633244828202e..69f2f575eb8ea91a5f5ce0115286d6ea741e89ff 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2274,6 +2274,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/Spigot-Server-Patches/0590-Fixed-TileEntityBell-memory-leak.patch b/Spigot-Server-Patches/0589-Fixed-TileEntityBell-memory-leak.patch similarity index 100% rename from Spigot-Server-Patches/0590-Fixed-TileEntityBell-memory-leak.patch rename to Spigot-Server-Patches/0589-Fixed-TileEntityBell-memory-leak.patch diff --git a/Spigot-Server-Patches/0591-Avoid-error-bubbling-up-when-item-stack-is-empty-in-.patch b/Spigot-Server-Patches/0590-Avoid-error-bubbling-up-when-item-stack-is-empty-in-.patch similarity index 100% rename from Spigot-Server-Patches/0591-Avoid-error-bubbling-up-when-item-stack-is-empty-in-.patch rename to Spigot-Server-Patches/0590-Avoid-error-bubbling-up-when-item-stack-is-empty-in-.patch diff --git a/Spigot-Server-Patches/0592-Add-getOfflinePlayerIfCached-String.patch b/Spigot-Server-Patches/0591-Add-getOfflinePlayerIfCached-String.patch similarity index 93% rename from Spigot-Server-Patches/0592-Add-getOfflinePlayerIfCached-String.patch rename to Spigot-Server-Patches/0591-Add-getOfflinePlayerIfCached-String.patch index d3a8b2067e..108e44fb11 100644 --- a/Spigot-Server-Patches/0592-Add-getOfflinePlayerIfCached-String.patch +++ b/Spigot-Server-Patches/0591-Add-getOfflinePlayerIfCached-String.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add getOfflinePlayerIfCached(String) diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 93364d6a287282948f6ea9b75e8e56c4fc9482d7..b1e7494fe57cfd93a57b7cee62db692c599619ce 100644 +index 1199644c6342379df21840aa144e731e9e9245ca..fe2ad3f9298af4d405711b4798e34ae484a19db9 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1607,6 +1607,28 @@ public final class CraftServer implements Server { diff --git a/Spigot-Server-Patches/0593-Add-ignore-discounts-API.patch b/Spigot-Server-Patches/0592-Add-ignore-discounts-API.patch similarity index 100% rename from Spigot-Server-Patches/0593-Add-ignore-discounts-API.patch rename to Spigot-Server-Patches/0592-Add-ignore-discounts-API.patch diff --git a/Spigot-Server-Patches/0594-Toggle-for-removing-existing-dragon.patch b/Spigot-Server-Patches/0593-Toggle-for-removing-existing-dragon.patch similarity index 100% rename from Spigot-Server-Patches/0594-Toggle-for-removing-existing-dragon.patch rename to Spigot-Server-Patches/0593-Toggle-for-removing-existing-dragon.patch diff --git a/Spigot-Server-Patches/0595-Fix-client-lag-on-advancement-loading.patch b/Spigot-Server-Patches/0594-Fix-client-lag-on-advancement-loading.patch similarity index 93% rename from Spigot-Server-Patches/0595-Fix-client-lag-on-advancement-loading.patch rename to Spigot-Server-Patches/0594-Fix-client-lag-on-advancement-loading.patch index 515328442a..8fe188d060 100644 --- a/Spigot-Server-Patches/0595-Fix-client-lag-on-advancement-loading.patch +++ b/Spigot-Server-Patches/0594-Fix-client-lag-on-advancement-loading.patch @@ -15,10 +15,10 @@ manually reload the advancement data for all players, which normally takes place as a part of the datapack reloading. diff --git a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java -index 17f508f07f7a3a0608150558595809bdcd3bbe96..4f7a1bdc1c7e6ef0d1a1954ccd5d95318a5bceaf 100644 +index cc89bc1880a8c095942ba4e34c1bf4202e8dbedc..10da42010d8f3a6a7863d3b594ece33a5b130aa7 100644 --- a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java +++ b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java -@@ -96,6 +96,7 @@ public class AdvancementDataPlayer { +@@ -97,6 +97,7 @@ public class AdvancementDataPlayer { } @@ -26,7 +26,7 @@ index 17f508f07f7a3a0608150558595809bdcd3bbe96..4f7a1bdc1c7e6ef0d1a1954ccd5d9531 public void a(AdvancementDataWorld advancementdataworld) { this.a(); this.data.clear(); -@@ -392,6 +393,7 @@ public class AdvancementDataPlayer { +@@ -393,6 +394,7 @@ public class AdvancementDataPlayer { } diff --git a/Spigot-Server-Patches/0596-Item-no-age-no-player-pickup.patch b/Spigot-Server-Patches/0595-Item-no-age-no-player-pickup.patch similarity index 94% rename from Spigot-Server-Patches/0596-Item-no-age-no-player-pickup.patch rename to Spigot-Server-Patches/0595-Item-no-age-no-player-pickup.patch index e4f0983714..84124da98a 100644 --- a/Spigot-Server-Patches/0596-Item-no-age-no-player-pickup.patch +++ b/Spigot-Server-Patches/0595-Item-no-age-no-player-pickup.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Item no age & no player pickup diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -index d6a64e4ecf9225f9a93523c50b2f1375296b406e..bcbaad11852a51436a00c8e172bdd841ba93ec3c 100644 +index 5988cdd18b7e4bfca0075fd2356cfe9c4e673954..7a78ef2f6f673568c0528fa46168c69d21f51a66 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java @@ -10,6 +10,12 @@ import org.bukkit.entity.Item; diff --git a/Spigot-Server-Patches/0597-Beacon-API-custom-effect-ranges.patch b/Spigot-Server-Patches/0596-Beacon-API-custom-effect-ranges.patch similarity index 100% rename from Spigot-Server-Patches/0597-Beacon-API-custom-effect-ranges.patch rename to Spigot-Server-Patches/0596-Beacon-API-custom-effect-ranges.patch diff --git a/Spigot-Server-Patches/0598-Add-API-for-quit-reason.patch b/Spigot-Server-Patches/0597-Add-API-for-quit-reason.patch similarity index 87% rename from Spigot-Server-Patches/0598-Add-API-for-quit-reason.patch rename to Spigot-Server-Patches/0597-Add-API-for-quit-reason.patch index f0fd210d45..003a78ab42 100644 --- a/Spigot-Server-Patches/0598-Add-API-for-quit-reason.patch +++ b/Spigot-Server-Patches/0597-Add-API-for-quit-reason.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add API for quit reason diff --git a/src/main/java/net/minecraft/network/NetworkManager.java b/src/main/java/net/minecraft/network/NetworkManager.java -index b865e759ff522051c20534fea726d8610b7694ca..9a919542f1a4a23fdf64753a88de9b421e2b2a25 100644 +index 421a1556ef40f98320775b1793487680205d8c64..75390f648f416e9588d93d64afb69c9f369c6fd3 100644 --- a/src/main/java/net/minecraft/network/NetworkManager.java +++ b/src/main/java/net/minecraft/network/NetworkManager.java -@@ -129,12 +129,15 @@ public class NetworkManager extends SimpleChannelInboundHandler> { +@@ -137,12 +137,15 @@ public class NetworkManager extends SimpleChannelInboundHandler> { this.u = true; if (this.channel.isOpen()) { @@ -25,10 +25,10 @@ index b865e759ff522051c20534fea726d8610b7694ca..9a919542f1a4a23fdf64753a88de9b42 NetworkManager.LOGGER.debug("Failed to sent packet", throwable); this.sendPacket(new PacketPlayOutKickDisconnect(chatmessage), (future) -> { diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 8e75c55460aba3885f52f7b0dc6e320101d402ba..8fa8d2e1e85fa382af9e9d65322bd98a87a6e3a9 100644 +index 81fd2efd25d9f5ffdabd40fb29f356db053ceef9..a8873609744b617a55098a818a9d3b7e679edd4a 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -257,6 +257,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -259,6 +259,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { double lastEntitySpawnRadiusSquared; // Paper - optimise isOutsideRange, this field is in blocks boolean needsChunkCenterUpdate; // Paper - no-tick view distance @@ -37,10 +37,10 @@ index 8e75c55460aba3885f52f7b0dc6e320101d402ba..8fa8d2e1e85fa382af9e9d65322bd98a public EntityPlayer(MinecraftServer minecraftserver, WorldServer worldserver, GameProfile gameprofile, PlayerInteractManager playerinteractmanager) { super(worldserver, worldserver.getSpawn(), worldserver.v(), gameprofile); diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 741011eed09109f8653fb8066ce636297f44b371..54a72470275cce96f86fe1e7219f931b738c71ec 100644 +index d44f3d1dea2a52c8a82fc1551663e125594432ea..9ec4316c8d517f8af9f36f586e833b5a3ad30895 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java -@@ -446,6 +446,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -447,6 +447,7 @@ public class PlayerConnection implements PacketListenerPlayIn { final IChatBaseComponent ichatbasecomponent = PaperAdventure.asVanilla(event.reason()); // Paper - Adventure // CraftBukkit end @@ -49,10 +49,10 @@ index 741011eed09109f8653fb8066ce636297f44b371..54a72470275cce96f86fe1e7219f931b this.networkManager.close(ichatbasecomponent); }); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 8214bd759b306f86d44a53b2aa07dc053f72f282..c7464ee5f29aa5ee0994fd4a352756a59055d9ee 100644 +index 231a1cf2a4bad62f9d317138c96f5922c14f1762..c146e91c323504a96b800769d412c59d98e5ccf4 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -582,7 +582,7 @@ public abstract class PlayerList { +@@ -590,7 +590,7 @@ public abstract class PlayerList { entityplayer.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.DISCONNECT); // Paper } diff --git a/Spigot-Server-Patches/0599-Seed-based-feature-search.patch b/Spigot-Server-Patches/0598-Seed-based-feature-search.patch similarity index 97% rename from Spigot-Server-Patches/0599-Seed-based-feature-search.patch rename to Spigot-Server-Patches/0598-Seed-based-feature-search.patch index 6f11354e4c..00261682eb 100644 --- a/Spigot-Server-Patches/0599-Seed-based-feature-search.patch +++ b/Spigot-Server-Patches/0598-Seed-based-feature-search.patch @@ -50,10 +50,10 @@ index e41d63596c32eee5f0c04a6f043d576d8021ff1a..53eb5b65683a2ab208edfc3f3bbf78ff return this.z << 4; } diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index d14c38fbf7eb76dd7581c13258ee6832f5f70513..96d648bfef28417edac9298e892c191b0e8e24b8 100644 +index ae5f9a6af810b524f6dcbed64bc943122f0536cc..f40be366ebc5f98b417b677565fa89d3f817f3fb 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -1503,8 +1503,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1511,8 +1511,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { return this.methodProfiler; } diff --git a/Spigot-Server-Patches/0600-Add-Wandering-Trader-spawn-rate-config-options.patch b/Spigot-Server-Patches/0599-Add-Wandering-Trader-spawn-rate-config-options.patch similarity index 100% rename from Spigot-Server-Patches/0600-Add-Wandering-Trader-spawn-rate-config-options.patch rename to Spigot-Server-Patches/0599-Add-Wandering-Trader-spawn-rate-config-options.patch diff --git a/Spigot-Server-Patches/0601-Significantly-improve-performance-of-the-end-generat.patch b/Spigot-Server-Patches/0600-Significantly-improve-performance-of-the-end-generat.patch similarity index 100% rename from Spigot-Server-Patches/0601-Significantly-improve-performance-of-the-end-generat.patch rename to Spigot-Server-Patches/0600-Significantly-improve-performance-of-the-end-generat.patch diff --git a/Spigot-Server-Patches/0602-Expose-world-spawn-angle.patch b/Spigot-Server-Patches/0601-Expose-world-spawn-angle.patch similarity index 94% rename from Spigot-Server-Patches/0602-Expose-world-spawn-angle.patch rename to Spigot-Server-Patches/0601-Expose-world-spawn-angle.patch index 25e5003638..53cbcb2261 100644 --- a/Spigot-Server-Patches/0602-Expose-world-spawn-angle.patch +++ b/Spigot-Server-Patches/0601-Expose-world-spawn-angle.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose world spawn angle diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index c7464ee5f29aa5ee0994fd4a352756a59055d9ee..bd318c058a0a99472486d1c3eaf1f9fa2879aaf6 100644 +index c146e91c323504a96b800769d412c59d98e5ccf4..e4eeacd86824463944966199017e98c877858a75 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -886,7 +886,7 @@ public abstract class PlayerList { +@@ -894,7 +894,7 @@ public abstract class PlayerList { if (location == null) { worldserver1 = this.server.getWorldServer(World.OVERWORLD); blockposition = entityplayer1.getSpawnPoint(worldserver1); diff --git a/Spigot-Server-Patches/0603-Add-Destroy-Speed-API.patch b/Spigot-Server-Patches/0602-Add-Destroy-Speed-API.patch similarity index 100% rename from Spigot-Server-Patches/0603-Add-Destroy-Speed-API.patch rename to Spigot-Server-Patches/0602-Add-Destroy-Speed-API.patch diff --git a/Spigot-Server-Patches/0604-Fix-Player-spawnParticle-x-y-z-precision-loss.patch b/Spigot-Server-Patches/0603-Fix-Player-spawnParticle-x-y-z-precision-loss.patch similarity index 93% rename from Spigot-Server-Patches/0604-Fix-Player-spawnParticle-x-y-z-precision-loss.patch rename to Spigot-Server-Patches/0603-Fix-Player-spawnParticle-x-y-z-precision-loss.patch index 811ef56afe..a70abbf02a 100644 --- a/Spigot-Server-Patches/0604-Fix-Player-spawnParticle-x-y-z-precision-loss.patch +++ b/Spigot-Server-Patches/0603-Fix-Player-spawnParticle-x-y-z-precision-loss.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix Player spawnParticle x/y/z precision loss diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 5cfccc27daa758f36e14fd6526a0ab6532a20aa6..7d57a21517e6a7c3d3cb75ff1960f682dc7d2f50 100644 +index 69f2f575eb8ea91a5f5ce0115286d6ea741e89ff..adebc5b1d110983feb6d43f371bf2569ddca4088 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2005,7 +2005,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/Spigot-Server-Patches/0605-Add-LivingEntity-clearActiveItem.patch b/Spigot-Server-Patches/0604-Add-LivingEntity-clearActiveItem.patch similarity index 84% rename from Spigot-Server-Patches/0605-Add-LivingEntity-clearActiveItem.patch rename to Spigot-Server-Patches/0604-Add-LivingEntity-clearActiveItem.patch index 7d0dc8916c..7856335fa1 100644 --- a/Spigot-Server-Patches/0605-Add-LivingEntity-clearActiveItem.patch +++ b/Spigot-Server-Patches/0604-Add-LivingEntity-clearActiveItem.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add LivingEntity#clearActiveItem diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 9e9bdf9bc2e5c4d72d811fcb439628d946741324..1fc356d0b74c1cbb19bf7527088f1f61b6da5422 100644 +index 090e0931df410526cb7b0aab196a01f57ffbb285..5d2ed8a0cf8351df1c8b2946f8a614fe13c34673 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -775,6 +775,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -785,6 +785,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { return getHandle().activeItem.asBukkitMirror(); } diff --git a/Spigot-Server-Patches/0606-Add-PlayerItemCooldownEvent.patch b/Spigot-Server-Patches/0605-Add-PlayerItemCooldownEvent.patch similarity index 100% rename from Spigot-Server-Patches/0606-Add-PlayerItemCooldownEvent.patch rename to Spigot-Server-Patches/0605-Add-PlayerItemCooldownEvent.patch diff --git a/Spigot-Server-Patches/0607-More-lightning-API.patch b/Spigot-Server-Patches/0606-More-lightning-API.patch similarity index 100% rename from Spigot-Server-Patches/0607-More-lightning-API.patch rename to Spigot-Server-Patches/0606-More-lightning-API.patch diff --git a/Spigot-Server-Patches/0608-Climbing-should-not-bypass-cramming-gamerule.patch b/Spigot-Server-Patches/0607-Climbing-should-not-bypass-cramming-gamerule.patch similarity index 93% rename from Spigot-Server-Patches/0608-Climbing-should-not-bypass-cramming-gamerule.patch rename to Spigot-Server-Patches/0607-Climbing-should-not-bypass-cramming-gamerule.patch index 055cbbcf49..863919af3f 100644 --- a/Spigot-Server-Patches/0608-Climbing-should-not-bypass-cramming-gamerule.patch +++ b/Spigot-Server-Patches/0607-Climbing-should-not-bypass-cramming-gamerule.patch @@ -19,10 +19,10 @@ index b4d76494851601d61a69e2f060727a68f4461267..6262246c4018c660705fbad028f297fc + } } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 8d37f9b3880d3e456b82f4a03197cf2868714e09..7ad4d20cd43ad100ab8a1987d061bb523fb66ea5 100644 +index 04c2b1ed98efc47b0f5a46668f4aef1c6531e73e..0618c0bb7587dd1dc7560d0f0800036ff596edab 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1568,6 +1568,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1575,6 +1575,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } public boolean isCollidable() { @@ -36,10 +36,10 @@ index 8d37f9b3880d3e456b82f4a03197cf2868714e09..7ad4d20cd43ad100ab8a1987d061bb52 } diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index f6f43ef74086bd963432a0f40e7e01b92387b437..ff7ece39d86cb01d8bfa3bdc7a0fdf3c9ae16c81 100644 +index 593805ac08e783546be99b025b22e40c654e05d1..9a826ae0319dd52ca7d98ea5d7312fb773736ddb 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java -@@ -136,7 +136,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; +@@ -137,7 +137,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; // CraftBukkit end @@ -47,7 +47,7 @@ index f6f43ef74086bd963432a0f40e7e01b92387b437..ff7ece39d86cb01d8bfa3bdc7a0fdf3c public abstract class EntityLiving extends Entity { -@@ -2958,7 +2957,7 @@ public abstract class EntityLiving extends Entity { +@@ -2959,7 +2958,7 @@ public abstract class EntityLiving extends Entity { return; } // Paper - end don't run getEntities if we're not going to use its result @@ -56,7 +56,7 @@ index f6f43ef74086bd963432a0f40e7e01b92387b437..ff7ece39d86cb01d8bfa3bdc7a0fdf3c if (!list.isEmpty()) { // Paper - move up -@@ -3096,9 +3095,16 @@ public abstract class EntityLiving extends Entity { +@@ -3097,9 +3096,16 @@ public abstract class EntityLiving extends Entity { return !this.dead && this.collides; // CraftBukkit } @@ -139,10 +139,10 @@ index d05391290dc11440aae5f38328a0530c500ac601..d678e3164ecdb7f0c600597bcb39d105 } diff --git a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -index 6c5dc2ee5e720b574557ffbae539ec42dfbfe6cc..48071a938db4adca639e457682f0d03053f26442 100644 +index 5eb900619951083b9a777b1645cb5495b99968ec..c0e0750adef0ae6aff7635c84f6585f06c5fc38d 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/EntityArmorStand.java -@@ -361,7 +361,7 @@ public class EntityArmorStand extends EntityLiving { +@@ -362,7 +362,7 @@ public class EntityArmorStand extends EntityLiving { } @Override diff --git a/Spigot-Server-Patches/0609-Added-missing-default-perms-for-commands.patch b/Spigot-Server-Patches/0608-Added-missing-default-perms-for-commands.patch similarity index 100% rename from Spigot-Server-Patches/0609-Added-missing-default-perms-for-commands.patch rename to Spigot-Server-Patches/0608-Added-missing-default-perms-for-commands.patch diff --git a/Spigot-Server-Patches/0610-Add-PlayerShearBlockEvent.patch b/Spigot-Server-Patches/0609-Add-PlayerShearBlockEvent.patch similarity index 100% rename from Spigot-Server-Patches/0610-Add-PlayerShearBlockEvent.patch rename to Spigot-Server-Patches/0609-Add-PlayerShearBlockEvent.patch diff --git a/Spigot-Server-Patches/0611-Add-warning-for-servers-not-running-on-Java-11.patch b/Spigot-Server-Patches/0610-Add-warning-for-servers-not-running-on-Java-11.patch similarity index 100% rename from Spigot-Server-Patches/0611-Add-warning-for-servers-not-running-on-Java-11.patch rename to Spigot-Server-Patches/0610-Add-warning-for-servers-not-running-on-Java-11.patch diff --git a/Spigot-Server-Patches/0612-Set-spigots-verbose-world-setting-to-false-by-def.patch b/Spigot-Server-Patches/0611-Set-spigots-verbose-world-setting-to-false-by-def.patch similarity index 89% rename from Spigot-Server-Patches/0612-Set-spigots-verbose-world-setting-to-false-by-def.patch rename to Spigot-Server-Patches/0611-Set-spigots-verbose-world-setting-to-false-by-def.patch index dda892e52b..95be56a7de 100644 --- a/Spigot-Server-Patches/0612-Set-spigots-verbose-world-setting-to-false-by-def.patch +++ b/Spigot-Server-Patches/0611-Set-spigots-verbose-world-setting-to-false-by-def.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Set spigots verbose world setting to false by def diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 9859e0c964e4d1e7dc7689cb97f40643a8e5cdd7..61ad08b09cd2fe25471bb6c838b8bb3d8102e693 100644 +index 6b015c1f26facb4e82d75b252164dec05731ca6c..094a934c168d232b0550c3efe722f2ebfbdf8e24 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java @@ -20,7 +20,7 @@ public class SpigotWorldConfig diff --git a/Spigot-Server-Patches/0613-Fix-curing-zombie-villager-discount-exploit.patch b/Spigot-Server-Patches/0612-Fix-curing-zombie-villager-discount-exploit.patch similarity index 100% rename from Spigot-Server-Patches/0613-Fix-curing-zombie-villager-discount-exploit.patch rename to Spigot-Server-Patches/0612-Fix-curing-zombie-villager-discount-exploit.patch diff --git a/Spigot-Server-Patches/0614-Fix-curing-villager-makes-equipment-disappear.patch b/Spigot-Server-Patches/0613-Fix-curing-villager-makes-equipment-disappear.patch similarity index 100% rename from Spigot-Server-Patches/0614-Fix-curing-villager-makes-equipment-disappear.patch rename to Spigot-Server-Patches/0613-Fix-curing-villager-makes-equipment-disappear.patch diff --git a/Spigot-Server-Patches/0615-Limit-recipe-packets.patch b/Spigot-Server-Patches/0614-Limit-recipe-packets.patch similarity index 91% rename from Spigot-Server-Patches/0615-Limit-recipe-packets.patch rename to Spigot-Server-Patches/0614-Limit-recipe-packets.patch index bd499de084..41f1e4f94b 100644 --- a/Spigot-Server-Patches/0615-Limit-recipe-packets.patch +++ b/Spigot-Server-Patches/0614-Limit-recipe-packets.patch @@ -23,7 +23,7 @@ index 7d50aded88f5b7dfebaea1aebc86231f7b5c4e25..652d87fc5d566dba8018c81676329f0e public static boolean velocityOnlineMode; public static byte[] velocitySecretKey; diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 54a72470275cce96f86fe1e7219f931b738c71ec..a55b196ffe0f6367f24bf7ea749252e48fbf2855 100644 +index 9ec4316c8d517f8af9f36f586e833b5a3ad30895..c6b33b355b8e06d4ef6a8f542ab460c55af8c00e 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java @@ -1,5 +1,6 @@ @@ -33,7 +33,7 @@ index 54a72470275cce96f86fe1e7219f931b738c71ec..a55b196ffe0f6367f24bf7ea749252e4 import com.google.common.collect.Lists; import com.google.common.primitives.Doubles; import com.google.common.primitives.Floats; -@@ -175,6 +176,7 @@ import net.minecraft.world.inventory.InventoryClickType; +@@ -176,6 +177,7 @@ import net.minecraft.world.inventory.InventoryClickType; import net.minecraft.world.item.crafting.IRecipe; import net.minecraft.world.level.RayTrace; import net.minecraft.world.phys.MovingObjectPosition; @@ -41,7 +41,7 @@ index 54a72470275cce96f86fe1e7219f931b738c71ec..a55b196ffe0f6367f24bf7ea749252e4 import org.bukkit.Location; import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.craftbukkit.event.CraftEventFactory; -@@ -231,6 +233,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -232,6 +234,7 @@ public class PlayerConnection implements PacketListenerPlayIn { private volatile int chatThrottle; private static final AtomicIntegerFieldUpdater chatSpamField = AtomicIntegerFieldUpdater.newUpdater(PlayerConnection.class, "chatThrottle"); private final java.util.concurrent.atomic.AtomicInteger tabSpamLimiter = new java.util.concurrent.atomic.AtomicInteger(); // Paper - configurable tab spam limits @@ -49,7 +49,7 @@ index 54a72470275cce96f86fe1e7219f931b738c71ec..a55b196ffe0f6367f24bf7ea749252e4 // CraftBukkit end private int j; private final Int2ShortMap k = new Int2ShortOpenHashMap(); -@@ -379,6 +382,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -380,6 +383,7 @@ public class PlayerConnection implements PacketListenerPlayIn { // CraftBukkit start for (int spam; (spam = this.chatThrottle) > 0 && !chatSpamField.compareAndSet(this, spam, spam - 1); ) ; if (tabSpamLimiter.get() > 0) tabSpamLimiter.getAndDecrement(); // Paper - split to seperate variable @@ -57,7 +57,7 @@ index 54a72470275cce96f86fe1e7219f931b738c71ec..a55b196ffe0f6367f24bf7ea749252e4 /* Use thread-safe field access instead if (this.chatThrottle > 0) { --this.chatThrottle; -@@ -2773,6 +2777,14 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -2774,6 +2778,14 @@ public class PlayerConnection implements PacketListenerPlayIn { @Override public void a(PacketPlayInAutoRecipe packetplayinautorecipe) { diff --git a/Spigot-Server-Patches/0616-Fix-CraftSound-backwards-compatibility.patch b/Spigot-Server-Patches/0615-Fix-CraftSound-backwards-compatibility.patch similarity index 89% rename from Spigot-Server-Patches/0616-Fix-CraftSound-backwards-compatibility.patch rename to Spigot-Server-Patches/0615-Fix-CraftSound-backwards-compatibility.patch index 0bc3d2f64a..8a131ca40a 100644 --- a/Spigot-Server-Patches/0616-Fix-CraftSound-backwards-compatibility.patch +++ b/Spigot-Server-Patches/0615-Fix-CraftSound-backwards-compatibility.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix CraftSound backwards compatibility diff --git a/src/main/java/org/bukkit/craftbukkit/CraftSound.java b/src/main/java/org/bukkit/craftbukkit/CraftSound.java -index a7137123f698929263d342d5f8da1b34be3c9d5e..1b6a1a5fb86d0790713c09de4f36b287663a9bbf 100644 +index e839d50c7b1cc3c9a6e463c497489ad580aceabd..84fb7d96bea3b47f2f6c6dc8d0086fee13d07ada 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftSound.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftSound.java @@ -27,4 +27,10 @@ public class CraftSound { diff --git a/Spigot-Server-Patches/0617-MC-4-Fix-item-position-desync.patch b/Spigot-Server-Patches/0616-MC-4-Fix-item-position-desync.patch similarity index 100% rename from Spigot-Server-Patches/0617-MC-4-Fix-item-position-desync.patch rename to Spigot-Server-Patches/0616-MC-4-Fix-item-position-desync.patch diff --git a/Spigot-Server-Patches/0618-Player-Chunk-Load-Unload-Events.patch b/Spigot-Server-Patches/0617-Player-Chunk-Load-Unload-Events.patch similarity index 89% rename from Spigot-Server-Patches/0618-Player-Chunk-Load-Unload-Events.patch rename to Spigot-Server-Patches/0617-Player-Chunk-Load-Unload-Events.patch index c6958eeb3a..815a12afe7 100644 --- a/Spigot-Server-Patches/0618-Player-Chunk-Load-Unload-Events.patch +++ b/Spigot-Server-Patches/0617-Player-Chunk-Load-Unload-Events.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player Chunk Load/Unload Events diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 8fa8d2e1e85fa382af9e9d65322bd98a87a6e3a9..a2971272602f5c2556ccb46042926617138a1d55 100644 +index a8873609744b617a55098a818a9d3b7e679edd4a..ae78a491da09945b8e51dc5a0e70eadea66f6873 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -136,6 +136,8 @@ import net.minecraft.world.scores.ScoreboardScore; +@@ -138,6 +138,8 @@ import net.minecraft.world.scores.ScoreboardScore; import net.minecraft.world.scores.ScoreboardTeam; import net.minecraft.world.scores.ScoreboardTeamBase; import net.minecraft.world.scores.criteria.IScoreboardCriteria; @@ -17,7 +17,7 @@ index 8fa8d2e1e85fa382af9e9d65322bd98a87a6e3a9..a2971272602f5c2556ccb46042926617 import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -@@ -2085,11 +2087,21 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -2087,11 +2089,21 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public void a(ChunkCoordIntPair chunkcoordintpair, Packet packet, Packet packet1) { this.playerConnection.sendPacket(packet1); this.playerConnection.sendPacket(packet); diff --git a/Spigot-Server-Patches/0619-Optimize-Dynamic-get-Missing-Keys.patch b/Spigot-Server-Patches/0618-Optimize-Dynamic-get-Missing-Keys.patch similarity index 100% rename from Spigot-Server-Patches/0619-Optimize-Dynamic-get-Missing-Keys.patch rename to Spigot-Server-Patches/0618-Optimize-Dynamic-get-Missing-Keys.patch diff --git a/Spigot-Server-Patches/0620-Expose-LivingEntity-hurt-direction.patch b/Spigot-Server-Patches/0619-Expose-LivingEntity-hurt-direction.patch similarity index 83% rename from Spigot-Server-Patches/0620-Expose-LivingEntity-hurt-direction.patch rename to Spigot-Server-Patches/0619-Expose-LivingEntity-hurt-direction.patch index 11936bb787..6aef15e6b9 100644 --- a/Spigot-Server-Patches/0620-Expose-LivingEntity-hurt-direction.patch +++ b/Spigot-Server-Patches/0619-Expose-LivingEntity-hurt-direction.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Expose LivingEntity hurt direction diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index ff7ece39d86cb01d8bfa3bdc7a0fdf3c9ae16c81..3a1eb1570f76f13d1633a24b7fa7ed448b705978 100644 +index 9a826ae0319dd52ca7d98ea5d7312fb773736ddb..800a8b8e1a49eb6ec920abaad4514a9a91a3542e 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java -@@ -162,7 +162,7 @@ public abstract class EntityLiving extends Entity { +@@ -163,7 +163,7 @@ public abstract class EntityLiving extends Entity { public int am; public int hurtTicks; public int hurtDuration; @@ -18,10 +18,10 @@ index ff7ece39d86cb01d8bfa3bdc7a0fdf3c9ae16c81..3a1eb1570f76f13d1633a24b7fa7ed44 public float ar; public float as; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index c665a1c48ac3a08b3b55909ce4e87827c8b668a5..07a8d184038231b5f1a9c112c978528aaf79f34b 100644 +index 5d2ed8a0cf8351df1c8b2946f8a614fe13c34673..e574e2453c7bc848168ff24372d6772bd423b672 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -815,5 +815,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -825,5 +825,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { public void playPickupItemAnimation(org.bukkit.entity.Item item, int quantity) { getHandle().receive(((CraftItem) item).getHandle(), quantity); } diff --git a/Spigot-Server-Patches/0621-Add-OBSTRUCTED-reason-to-BedEnterResult.patch b/Spigot-Server-Patches/0620-Add-OBSTRUCTED-reason-to-BedEnterResult.patch similarity index 86% rename from Spigot-Server-Patches/0621-Add-OBSTRUCTED-reason-to-BedEnterResult.patch rename to Spigot-Server-Patches/0620-Add-OBSTRUCTED-reason-to-BedEnterResult.patch index 5be5c22303..22dc7f31e0 100644 --- a/Spigot-Server-Patches/0621-Add-OBSTRUCTED-reason-to-BedEnterResult.patch +++ b/Spigot-Server-Patches/0620-Add-OBSTRUCTED-reason-to-BedEnterResult.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add OBSTRUCTED reason to BedEnterResult diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index e2dd012c646f25ef83a8b10896acc31611084df4..71aead62d776b4241295835510dff17726054ef6 100644 +index be2aa53a45b98d6d6de0c464653264399510d630..89c6d1f05878d6c220090af82939cbba4fa2555f 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -262,6 +262,10 @@ public class CraftEventFactory { +@@ -264,6 +264,10 @@ public class CraftEventFactory { return BedEnterResult.TOO_FAR_AWAY; case NOT_SAFE: return BedEnterResult.NOT_SAFE; diff --git a/Spigot-Server-Patches/0622-Do-not-crash-from-invalid-ingredient-lists-in-Villag.patch b/Spigot-Server-Patches/0621-Do-not-crash-from-invalid-ingredient-lists-in-Villag.patch similarity index 100% rename from Spigot-Server-Patches/0622-Do-not-crash-from-invalid-ingredient-lists-in-Villag.patch rename to Spigot-Server-Patches/0621-Do-not-crash-from-invalid-ingredient-lists-in-Villag.patch diff --git a/Spigot-Server-Patches/0623-added-PlayerTradeEvent.patch b/Spigot-Server-Patches/0622-added-PlayerTradeEvent.patch similarity index 94% rename from Spigot-Server-Patches/0623-added-PlayerTradeEvent.patch rename to Spigot-Server-Patches/0622-added-PlayerTradeEvent.patch index 8b9bcb62c9..b24c22edd8 100644 --- a/Spigot-Server-Patches/0623-added-PlayerTradeEvent.patch +++ b/Spigot-Server-Patches/0622-added-PlayerTradeEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] added PlayerTradeEvent diff --git a/src/main/java/net/minecraft/world/entity/EntityInsentient.java b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -index 54d72f211b964a42009eb4d07060a35e3b91017a..7e608cc9ff4a03a6b1eac5c74c072ac5febc38c3 100644 +index 89d24d7532a256434513a45c901946e28db396bd..ff482e3774f580d8ba7028f6c5141888d3bd907a 100644 --- a/src/main/java/net/minecraft/world/entity/EntityInsentient.java +++ b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -@@ -90,7 +90,7 @@ import org.bukkit.event.entity.EntityUnleashEvent.UnleashReason; +@@ -93,7 +93,7 @@ import org.bukkit.event.entity.EntityUnleashEvent.UnleashReason; public abstract class EntityInsentient extends EntityLiving { private static final DataWatcherObject b = DataWatcher.a(EntityInsentient.class, DataWatcherRegistry.a); @@ -17,7 +17,7 @@ index 54d72f211b964a42009eb4d07060a35e3b91017a..7e608cc9ff4a03a6b1eac5c74c072ac5 protected int f; protected ControllerLook lookController; protected ControllerMove moveController; -@@ -292,6 +292,7 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -295,6 +295,7 @@ public abstract class EntityInsentient extends EntityLiving { this.datawatcher.register(EntityInsentient.b, (byte) 0); } diff --git a/Spigot-Server-Patches/0624-Implement-TargetHitEvent.patch b/Spigot-Server-Patches/0623-Implement-TargetHitEvent.patch similarity index 100% rename from Spigot-Server-Patches/0624-Implement-TargetHitEvent.patch rename to Spigot-Server-Patches/0623-Implement-TargetHitEvent.patch diff --git a/Spigot-Server-Patches/0625-Additional-Block-Material-API-s.patch b/Spigot-Server-Patches/0624-Additional-Block-Material-API-s.patch similarity index 93% rename from Spigot-Server-Patches/0625-Additional-Block-Material-API-s.patch rename to Spigot-Server-Patches/0624-Additional-Block-Material-API-s.patch index 8c1a7d4e84..0a14a14e1a 100644 --- a/Spigot-Server-Patches/0625-Additional-Block-Material-API-s.patch +++ b/Spigot-Server-Patches/0624-Additional-Block-Material-API-s.patch @@ -9,7 +9,7 @@ process to do this in the Bukkit API Adds API for buildable, replaceable, burnable too. diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -index 6fde449aca446001145e49b5859725f840cc317c..1a1445e31c94cd279fef8db8484c12b13649f6e4 100644 +index a1ab9afb9bd2e714d8598013e0e66cc5fcbe371a..3372dac5b03ebe518b36a28bb4f64e7b516a2cc9 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -620,6 +620,25 @@ public class CraftBlock implements Block { diff --git a/Spigot-Server-Patches/0626-Fix-harming-potion-dupe.patch b/Spigot-Server-Patches/0625-Fix-harming-potion-dupe.patch similarity index 100% rename from Spigot-Server-Patches/0626-Fix-harming-potion-dupe.patch rename to Spigot-Server-Patches/0625-Fix-harming-potion-dupe.patch diff --git a/Spigot-Server-Patches/0627-Implement-API-to-get-Material-from-Boats-and-Minecar.patch b/Spigot-Server-Patches/0626-Implement-API-to-get-Material-from-Boats-and-Minecar.patch similarity index 100% rename from Spigot-Server-Patches/0627-Implement-API-to-get-Material-from-Boats-and-Minecar.patch rename to Spigot-Server-Patches/0626-Implement-API-to-get-Material-from-Boats-and-Minecar.patch diff --git a/Spigot-Server-Patches/0628-Optimized-tick-ready-check.patch b/Spigot-Server-Patches/0627-Optimized-tick-ready-check.patch similarity index 92% rename from Spigot-Server-Patches/0628-Optimized-tick-ready-check.patch rename to Spigot-Server-Patches/0627-Optimized-tick-ready-check.patch index 319236d158..522f5db773 100644 --- a/Spigot-Server-Patches/0628-Optimized-tick-ready-check.patch +++ b/Spigot-Server-Patches/0627-Optimized-tick-ready-check.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Optimized tick ready check diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java -index 96d648bfef28417edac9298e892c191b0e8e24b8..9b32c6bb4df50bd00fe26adeb9f0cfe62b80c3e0 100644 +index f40be366ebc5f98b417b677565fa89d3f817f3fb..78dcba08d6d796d5d97c8304bf1f1e7d1e650d5d 100644 --- a/src/main/java/net/minecraft/world/level/World.java +++ b/src/main/java/net/minecraft/world/level/World.java -@@ -846,13 +846,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -854,13 +854,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable { if (!tileentity.isRemoved() && tileentity.hasWorld()) { BlockPosition blockposition = tileentity.getPosition(); @@ -24,7 +24,7 @@ index 96d648bfef28417edac9298e892c191b0e8e24b8..9b32c6bb4df50bd00fe26adeb9f0cfe6 ((ITickable) tileentity).tick(); } else { tileentity.w(); -@@ -885,9 +885,11 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -893,9 +893,11 @@ public abstract class World implements GeneratorAccess, AutoCloseable { this.tileEntityListTick.remove(tileTickPosition--); // Spigot end //this.tileEntityList.remove(tileentity); // Paper - remove unused list @@ -38,7 +38,7 @@ index 96d648bfef28417edac9298e892c191b0e8e24b8..9b32c6bb4df50bd00fe26adeb9f0cfe6 } } -@@ -906,8 +908,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -914,8 +916,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { } // CraftBukkit end */ diff --git a/Spigot-Server-Patches/0629-Cache-burn-durations.patch b/Spigot-Server-Patches/0628-Cache-burn-durations.patch similarity index 100% rename from Spigot-Server-Patches/0629-Cache-burn-durations.patch rename to Spigot-Server-Patches/0628-Cache-burn-durations.patch diff --git a/Spigot-Server-Patches/0630-Allow-disabling-mob-spawner-spawn-egg-transformation.patch b/Spigot-Server-Patches/0629-Allow-disabling-mob-spawner-spawn-egg-transformation.patch similarity index 100% rename from Spigot-Server-Patches/0630-Allow-disabling-mob-spawner-spawn-egg-transformation.patch rename to Spigot-Server-Patches/0629-Allow-disabling-mob-spawner-spawn-egg-transformation.patch diff --git a/Spigot-Server-Patches/0631-Implement-PlayerFlowerPotManipulateEvent.patch b/Spigot-Server-Patches/0630-Implement-PlayerFlowerPotManipulateEvent.patch similarity index 100% rename from Spigot-Server-Patches/0631-Implement-PlayerFlowerPotManipulateEvent.patch rename to Spigot-Server-Patches/0630-Implement-PlayerFlowerPotManipulateEvent.patch diff --git a/Spigot-Server-Patches/0632-Fix-interact-event-not-being-called-in-adventure.patch b/Spigot-Server-Patches/0631-Fix-interact-event-not-being-called-in-adventure.patch similarity index 90% rename from Spigot-Server-Patches/0632-Fix-interact-event-not-being-called-in-adventure.patch rename to Spigot-Server-Patches/0631-Fix-interact-event-not-being-called-in-adventure.patch index 5bde5191d7..9cd2def0ae 100644 --- a/Spigot-Server-Patches/0632-Fix-interact-event-not-being-called-in-adventure.patch +++ b/Spigot-Server-Patches/0631-Fix-interact-event-not-being-called-in-adventure.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix interact event not being called in adventure Call PlayerInteractEvent when left-clicking on a block in adventure mode diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index a55b196ffe0f6367f24bf7ea749252e48fbf2855..3da824081892a2ab9071351b77150b42915742d0 100644 +index c6b33b355b8e06d4ef6a8f542ab460c55af8c00e..60b72fc3cf859fab80aba310882b0309fd68ff37 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java -@@ -1699,7 +1699,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1700,7 +1700,7 @@ public class PlayerConnection implements PacketListenerPlayIn { IChatMutableComponent ichatmutablecomponent = (new ChatMessage("build.tooHigh", new Object[]{this.minecraftServer.getMaxBuildHeight()})).a(EnumChatFormat.RED); this.player.playerConnection.sendPacket(new PacketPlayOutChat(ichatmutablecomponent, ChatMessageType.GAME_INFO, SystemUtils.b)); @@ -18,7 +18,7 @@ index a55b196ffe0f6367f24bf7ea749252e48fbf2855..3da824081892a2ab9071351b77150b42 this.player.swingHand(enumhand, true); } } -@@ -2200,7 +2200,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -2201,7 +2201,7 @@ public class PlayerConnection implements PacketListenerPlayIn { Vec3D vec3d1 = vec3d.add((double) f7 * d3, (double) f6 * d3, (double) f8 * d3); MovingObjectPosition movingobjectposition = this.player.world.rayTrace(new RayTrace(vec3d, vec3d1, RayTrace.BlockCollisionOption.OUTLINE, RayTrace.FluidCollisionOption.NONE, player)); diff --git a/Spigot-Server-Patches/0633-Zombie-API-breaking-doors.patch b/Spigot-Server-Patches/0632-Zombie-API-breaking-doors.patch similarity index 100% rename from Spigot-Server-Patches/0633-Zombie-API-breaking-doors.patch rename to Spigot-Server-Patches/0632-Zombie-API-breaking-doors.patch diff --git a/Spigot-Server-Patches/0634-Fix-nerfed-slime-when-splitting.patch b/Spigot-Server-Patches/0633-Fix-nerfed-slime-when-splitting.patch similarity index 100% rename from Spigot-Server-Patches/0634-Fix-nerfed-slime-when-splitting.patch rename to Spigot-Server-Patches/0633-Fix-nerfed-slime-when-splitting.patch diff --git a/Spigot-Server-Patches/0635-Add-EntityLoadCrossbowEvent.patch b/Spigot-Server-Patches/0634-Add-EntityLoadCrossbowEvent.patch similarity index 100% rename from Spigot-Server-Patches/0635-Add-EntityLoadCrossbowEvent.patch rename to Spigot-Server-Patches/0634-Add-EntityLoadCrossbowEvent.patch diff --git a/Spigot-Server-Patches/0636-Guardian-beam-workaround.patch b/Spigot-Server-Patches/0635-Guardian-beam-workaround.patch similarity index 100% rename from Spigot-Server-Patches/0636-Guardian-beam-workaround.patch rename to Spigot-Server-Patches/0635-Guardian-beam-workaround.patch diff --git a/Spigot-Server-Patches/0637-Added-WorldGameRuleChangeEvent.patch b/Spigot-Server-Patches/0636-Added-WorldGameRuleChangeEvent.patch similarity index 100% rename from Spigot-Server-Patches/0637-Added-WorldGameRuleChangeEvent.patch rename to Spigot-Server-Patches/0636-Added-WorldGameRuleChangeEvent.patch diff --git a/Spigot-Server-Patches/0638-Added-ServerResourcesReloadedEvent.patch b/Spigot-Server-Patches/0637-Added-ServerResourcesReloadedEvent.patch similarity index 100% rename from Spigot-Server-Patches/0638-Added-ServerResourcesReloadedEvent.patch rename to Spigot-Server-Patches/0637-Added-ServerResourcesReloadedEvent.patch diff --git a/Spigot-Server-Patches/0639-Added-world-settings-for-mobs-picking-up-loot.patch b/Spigot-Server-Patches/0638-Added-world-settings-for-mobs-picking-up-loot.patch similarity index 100% rename from Spigot-Server-Patches/0639-Added-world-settings-for-mobs-picking-up-loot.patch rename to Spigot-Server-Patches/0638-Added-world-settings-for-mobs-picking-up-loot.patch diff --git a/Spigot-Server-Patches/0640-Implemented-BlockFailedDispenseEvent.patch b/Spigot-Server-Patches/0639-Implemented-BlockFailedDispenseEvent.patch similarity index 93% rename from Spigot-Server-Patches/0640-Implemented-BlockFailedDispenseEvent.patch rename to Spigot-Server-Patches/0639-Implemented-BlockFailedDispenseEvent.patch index 8a1636ed57..ee3fc75f17 100644 --- a/Spigot-Server-Patches/0640-Implemented-BlockFailedDispenseEvent.patch +++ b/Spigot-Server-Patches/0639-Implemented-BlockFailedDispenseEvent.patch @@ -29,7 +29,7 @@ index ccab4714bf5a6be8afd92430874fd6f881d4f92f..223cc0ba06cf4b007049880daad881e5 } else { ItemStack itemstack = tileentitydispenser.getItem(i); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 314d0fb3dc55febbaf8449fff97b16122b3e03b0..618a18fc8f3ce07f8e12bf3dd83afe5d626e8161 100644 +index 89c6d1f05878d6c220090af82939cbba4fa2555f..228638d503cb6491e47920386994f2dfd6eb122e 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -4,6 +4,7 @@ import com.google.common.base.Function; @@ -40,7 +40,7 @@ index 314d0fb3dc55febbaf8449fff97b16122b3e03b0..618a18fc8f3ce07f8e12bf3dd83afe5d import java.net.InetAddress; import java.util.ArrayList; import java.util.Collections; -@@ -117,7 +118,6 @@ import org.bukkit.entity.ThrownPotion; +@@ -119,7 +120,6 @@ import org.bukkit.entity.ThrownPotion; import org.bukkit.entity.Vehicle; import org.bukkit.entity.Villager; import org.bukkit.entity.Villager.Profession; @@ -48,7 +48,7 @@ index 314d0fb3dc55febbaf8449fff97b16122b3e03b0..618a18fc8f3ce07f8e12bf3dd83afe5d import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.Event.Result; -@@ -1760,4 +1760,12 @@ public class CraftEventFactory { +@@ -1762,4 +1762,12 @@ public class CraftEventFactory { return event; } diff --git a/Spigot-Server-Patches/0641-Added-PlayerLecternPageChangeEvent.patch b/Spigot-Server-Patches/0640-Added-PlayerLecternPageChangeEvent.patch similarity index 100% rename from Spigot-Server-Patches/0641-Added-PlayerLecternPageChangeEvent.patch rename to Spigot-Server-Patches/0640-Added-PlayerLecternPageChangeEvent.patch diff --git a/Spigot-Server-Patches/0642-Fire-event-on-GS4-query.patch b/Spigot-Server-Patches/0641-Fire-event-on-GS4-query.patch similarity index 100% rename from Spigot-Server-Patches/0642-Fire-event-on-GS4-query.patch rename to Spigot-Server-Patches/0641-Fire-event-on-GS4-query.patch diff --git a/Spigot-Server-Patches/0643-Added-PlayerLoomPatternSelectEvent.patch b/Spigot-Server-Patches/0642-Added-PlayerLoomPatternSelectEvent.patch similarity index 100% rename from Spigot-Server-Patches/0643-Added-PlayerLoomPatternSelectEvent.patch rename to Spigot-Server-Patches/0642-Added-PlayerLoomPatternSelectEvent.patch diff --git a/Spigot-Server-Patches/0644-Configurable-door-breaking-difficulty.patch b/Spigot-Server-Patches/0643-Configurable-door-breaking-difficulty.patch similarity index 95% rename from Spigot-Server-Patches/0644-Configurable-door-breaking-difficulty.patch rename to Spigot-Server-Patches/0643-Configurable-door-breaking-difficulty.patch index 96a4f24a85..5ae39b3398 100644 --- a/Spigot-Server-Patches/0644-Configurable-door-breaking-difficulty.patch +++ b/Spigot-Server-Patches/0643-Configurable-door-breaking-difficulty.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable door breaking difficulty diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index c42e5d9f9c9f67988383c4c25123d8a629ede9e3..c5495e02c3fe271b26f62ea2ec64e07957edf37e 100644 +index c42e5d9f9c9f67988383c4c25123d8a629ede9e3..946c12abc0e25ccfe09ee64a7ac8b045ba5c46a9 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -5,8 +5,12 @@ import java.util.EnumMap; @@ -15,9 +15,9 @@ index c42e5d9f9c9f67988383c4c25123d8a629ede9e3..c5495e02c3fe271b26f62ea2ec64e079 +import java.util.stream.Collectors; import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray.EngineMode; -+import net.minecraft.server.EntityVindicator; -+import net.minecraft.server.EntityZombie; -+import net.minecraft.server.EnumDifficulty; ++import net.minecraft.world.EnumDifficulty; ++import net.minecraft.world.entity.monster.EntityVindicator; ++import net.minecraft.world.entity.monster.EntityZombie; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; diff --git a/Spigot-Server-Patches/0645-Empty-commands-shall-not-be-dispatched.patch b/Spigot-Server-Patches/0644-Empty-commands-shall-not-be-dispatched.patch similarity index 100% rename from Spigot-Server-Patches/0645-Empty-commands-shall-not-be-dispatched.patch rename to Spigot-Server-Patches/0644-Empty-commands-shall-not-be-dispatched.patch diff --git a/Spigot-Server-Patches/0646-Implement-API-to-expose-exact-interaction-point.patch b/Spigot-Server-Patches/0645-Implement-API-to-expose-exact-interaction-point.patch similarity index 89% rename from Spigot-Server-Patches/0646-Implement-API-to-expose-exact-interaction-point.patch rename to Spigot-Server-Patches/0645-Implement-API-to-expose-exact-interaction-point.patch index 5d0786b1e8..19f88178d4 100644 --- a/Spigot-Server-Patches/0646-Implement-API-to-expose-exact-interaction-point.patch +++ b/Spigot-Server-Patches/0645-Implement-API-to-expose-exact-interaction-point.patch @@ -18,18 +18,20 @@ index 86d1a7625bb3016093ee8a46f91fd657d8bc2546..6ac3cf976205ea939e2a124bf9699e65 interactResult = event.useItemInHand() == Event.Result.DENY; interactPosition = blockposition.immutableCopy(); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 618a18fc8f3ce07f8e12bf3dd83afe5d626e8161..013ef80b91c03bb6baf6249d8584ba1a393b0dec 100644 +index 228638d503cb6491e47920386994f2dfd6eb122e..40c56301f497f66f8e8f6c737a5c5c8a26d372df 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -67,6 +67,7 @@ import net.minecraft.world.phys.MovingObjectPosition; +@@ -68,7 +68,9 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParameters; + import net.minecraft.world.phys.MovingObjectPosition; import net.minecraft.world.phys.MovingObjectPositionBlock; import net.minecraft.world.phys.MovingObjectPositionEntity; ++import net.minecraft.world.phys.Vec3D; import org.bukkit.Bukkit; +import org.bukkit.Location; // Paper import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.Server; -@@ -467,7 +468,13 @@ public class CraftEventFactory { +@@ -469,7 +471,13 @@ public class CraftEventFactory { return callPlayerInteractEvent(who, action, position, direction, itemstack, false, hand); } @@ -43,7 +45,7 @@ index 618a18fc8f3ce07f8e12bf3dd83afe5d626e8161..013ef80b91c03bb6baf6249d8584ba1a Player player = (who == null) ? null : (Player) who.getBukkitEntity(); CraftItemStack itemInHand = CraftItemStack.asCraftMirror(itemstack); -@@ -493,7 +500,10 @@ public class CraftEventFactory { +@@ -495,7 +503,10 @@ public class CraftEventFactory { itemInHand = null; } diff --git a/Spigot-Server-Patches/0647-Remove-stale-POIs.patch b/Spigot-Server-Patches/0646-Remove-stale-POIs.patch similarity index 86% rename from Spigot-Server-Patches/0647-Remove-stale-POIs.patch rename to Spigot-Server-Patches/0646-Remove-stale-POIs.patch index 3fb4c84a9a..b3acb7e6d4 100644 --- a/Spigot-Server-Patches/0647-Remove-stale-POIs.patch +++ b/Spigot-Server-Patches/0646-Remove-stale-POIs.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove stale POIs diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index ae2cb0139e71ff41cfac9346179f1037a4401fa1..0bd2ce4f27182c4190892c0a20ab6d99727f27b9 100644 +index 595194e0a0e746c45e3766433bb827b7b51129b5..5da7d1df97e70248d01cb1c452b26cfba415a5b0 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -2062,8 +2062,16 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -2066,8 +2066,16 @@ public class WorldServer extends World implements GeneratorAccessSeed { Optional optional = VillagePlaceType.b(iblockdata); Optional optional1 = VillagePlaceType.b(iblockdata1); @@ -26,7 +26,7 @@ index ae2cb0139e71ff41cfac9346179f1037a4401fa1..0bd2ce4f27182c4190892c0a20ab6d99 optional.ifPresent((villageplacetype) -> { this.getMinecraftServer().execute(() -> { -@@ -2080,6 +2088,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -2084,6 +2092,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } } @@ -35,10 +35,10 @@ index ae2cb0139e71ff41cfac9346179f1037a4401fa1..0bd2ce4f27182c4190892c0a20ab6d99 return this.getChunkProvider().j(); } diff --git a/src/main/java/net/minecraft/world/entity/ai/village/poi/VillagePlace.java b/src/main/java/net/minecraft/world/entity/ai/village/poi/VillagePlace.java -index 6f3f968b30fdc210e47cb8d99139173869df1638..69e0fce81e4a5d538e6e2e04e251f0b24192f324 100644 +index 04b01cb841dc4f34ded5aaa4ea7a8e6d4b470183..ce165233739c7b92a76031b949f269bd0a11149c 100644 --- a/src/main/java/net/minecraft/world/entity/ai/village/poi/VillagePlace.java +++ b/src/main/java/net/minecraft/world/entity/ai/village/poi/VillagePlace.java -@@ -52,6 +52,7 @@ public class VillagePlace extends RegionFileSection { +@@ -54,6 +54,7 @@ public class VillagePlace extends RegionFileSection { ((VillagePlaceSection) this.e(SectionPosition.a(blockposition).s())).a(blockposition, villageplacetype); } @@ -46,7 +46,7 @@ index 6f3f968b30fdc210e47cb8d99139173869df1638..69e0fce81e4a5d538e6e2e04e251f0b2 public void a(BlockPosition blockposition) { ((VillagePlaceSection) this.e(SectionPosition.a(blockposition).s())).a(blockposition); } -@@ -136,6 +137,7 @@ public class VillagePlace extends RegionFileSection { +@@ -138,6 +139,7 @@ public class VillagePlace extends RegionFileSection { return ((VillagePlaceSection) this.e(SectionPosition.a(blockposition).s())).c(blockposition); } diff --git a/Spigot-Server-Patches/0648-Fix-villager-boat-exploit.patch b/Spigot-Server-Patches/0647-Fix-villager-boat-exploit.patch similarity index 67% rename from Spigot-Server-Patches/0648-Fix-villager-boat-exploit.patch rename to Spigot-Server-Patches/0647-Fix-villager-boat-exploit.patch index a59d8a9ec2..03d1ccda95 100644 --- a/Spigot-Server-Patches/0648-Fix-villager-boat-exploit.patch +++ b/Spigot-Server-Patches/0647-Fix-villager-boat-exploit.patch @@ -5,10 +5,18 @@ Subject: [PATCH] Fix villager boat exploit diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index bd318c058a0a99472486d1c3eaf1f9fa2879aaf6..0a84f70371dc458ccaa567e917706ecd8b6bbefa 100644 +index e4eeacd86824463944966199017e98c877858a75..0cd0b268af5ef7903ce46387540e289f62077e7c 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -613,6 +613,15 @@ public abstract class PlayerList { +@@ -77,6 +77,7 @@ import net.minecraft.util.MathHelper; + import net.minecraft.world.effect.MobEffect; + import net.minecraft.world.entity.Entity; + import net.minecraft.world.entity.EntityTypes; ++import net.minecraft.world.entity.npc.EntityVillagerAbstract; + import net.minecraft.world.entity.player.EntityHuman; + import net.minecraft.world.level.ChunkCoordIntPair; + import net.minecraft.world.level.EnumGamemode; +@@ -621,6 +622,15 @@ public abstract class PlayerList { for (Iterator iterator = entity.getAllPassengers().iterator(); iterator.hasNext(); entity1.dead = true) { entity1 = (Entity) iterator.next(); diff --git a/Spigot-Server-Patches/0649-Entity-load-save-limit-per-chunk.patch b/Spigot-Server-Patches/0648-Entity-load-save-limit-per-chunk.patch similarity index 90% rename from Spigot-Server-Patches/0649-Entity-load-save-limit-per-chunk.patch rename to Spigot-Server-Patches/0648-Entity-load-save-limit-per-chunk.patch index 44b5a79152..202226a888 100644 --- a/Spigot-Server-Patches/0649-Entity-load-save-limit-per-chunk.patch +++ b/Spigot-Server-Patches/0648-Entity-load-save-limit-per-chunk.patch @@ -9,17 +9,17 @@ defaults are only included for certain entites, this allows setting limits for any entity type. diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index c5495e02c3fe271b26f62ea2ec64e07957edf37e..234d2daecc5d0bf6a99c0a5f4a87f947a15029d9 100644 +index 946c12abc0e25ccfe09ee64a7ac8b045ba5c46a9..bda4eeb032bea452ea368c679f96b2bd93118730 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -@@ -11,6 +11,7 @@ import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray.Engin - import net.minecraft.server.EntityVindicator; - import net.minecraft.server.EntityZombie; - import net.minecraft.server.EnumDifficulty; -+import net.minecraft.server.EntityTypes; +@@ -9,6 +9,7 @@ import java.util.stream.Collectors; + + import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray.EngineMode; + import net.minecraft.world.EnumDifficulty; ++import net.minecraft.world.entity.EntityTypes; + import net.minecraft.world.entity.monster.EntityVindicator; + import net.minecraft.world.entity.monster.EntityZombie; import org.bukkit.Bukkit; - import org.bukkit.Material; - import org.bukkit.configuration.ConfigurationSection; @@ -761,4 +762,18 @@ public class PaperWorldConfig { EnumDifficulty.class ); diff --git a/Spigot-Server-Patches/0650-Add-sendOpLevel-API.patch b/Spigot-Server-Patches/0649-Add-sendOpLevel-API.patch similarity index 86% rename from Spigot-Server-Patches/0650-Add-sendOpLevel-API.patch rename to Spigot-Server-Patches/0649-Add-sendOpLevel-API.patch index df288af91e..a532bed433 100644 --- a/Spigot-Server-Patches/0650-Add-sendOpLevel-API.patch +++ b/Spigot-Server-Patches/0649-Add-sendOpLevel-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add sendOpLevel API diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 0a84f70371dc458ccaa567e917706ecd8b6bbefa..5a371a7ce4cc70d5916b87874a960427c882f9b1 100644 +index 0cd0b268af5ef7903ce46387540e289f62077e7c..e00de9eba84de57b1b79d1860bd1eff8d1b71705 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1129,6 +1129,11 @@ public abstract class PlayerList { +@@ -1138,6 +1138,11 @@ public abstract class PlayerList { } private void a(EntityPlayer entityplayer, int i) { @@ -20,7 +20,7 @@ index 0a84f70371dc458ccaa567e917706ecd8b6bbefa..5a371a7ce4cc70d5916b87874a960427 if (entityplayer.playerConnection != null) { byte b0; -@@ -1143,8 +1148,10 @@ public abstract class PlayerList { +@@ -1152,8 +1157,10 @@ public abstract class PlayerList { entityplayer.playerConnection.sendPacket(new PacketPlayOutEntityStatus(entityplayer, b0)); } @@ -32,7 +32,7 @@ index 0a84f70371dc458ccaa567e917706ecd8b6bbefa..5a371a7ce4cc70d5916b87874a960427 // Paper start diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 9fdd17865bf8fe0fd0704846652b8f593808f664..21304d60f90dbf2254ebf19cfda372f8c6d7c7f1 100644 +index adebc5b1d110983feb6d43f371bf2569ddca4088..89737dfb0244a6dfe3a2cc2d77a7b16a64f469bb 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2288,6 +2288,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/Spigot-Server-Patches/0651-Add-StructureLocateEvent.patch b/Spigot-Server-Patches/0650-Add-StructureLocateEvent.patch similarity index 100% rename from Spigot-Server-Patches/0651-Add-StructureLocateEvent.patch rename to Spigot-Server-Patches/0650-Add-StructureLocateEvent.patch diff --git a/Spigot-Server-Patches/0652-Collision-option-for-requiring-a-player-participant.patch b/Spigot-Server-Patches/0651-Collision-option-for-requiring-a-player-participant.patch similarity index 94% rename from Spigot-Server-Patches/0652-Collision-option-for-requiring-a-player-participant.patch rename to Spigot-Server-Patches/0651-Collision-option-for-requiring-a-player-participant.patch index 12b433f5d7..2c70325fcb 100644 --- a/Spigot-Server-Patches/0652-Collision-option-for-requiring-a-player-participant.patch +++ b/Spigot-Server-Patches/0651-Collision-option-for-requiring-a-player-participant.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Collision option for requiring a player participant diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 234d2daecc5d0bf6a99c0a5f4a87f947a15029d9..89f3a28c20f0e4db4650c435dbcbc923b7bde8aa 100644 +index bda4eeb032bea452ea368c679f96b2bd93118730..5801fe872aff240dc8209069b978d6a4dba30f06 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -716,6 +716,18 @@ public class PaperWorldConfig { @@ -28,10 +28,10 @@ index 234d2daecc5d0bf6a99c0a5f4a87f947a15029d9..89f3a28c20f0e4db4650c435dbcbc923 public int wanderingTraderSpawnDayTicks = 24000; public int wanderingTraderSpawnChanceFailureIncrement = 25; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 7ad4d20cd43ad100ab8a1987d061bb523fb66ea5..f64d37aa1183fe1a7c6f3131f945d9bd4e43bf3c 100644 +index 0618c0bb7587dd1dc7560d0f0800036ff596edab..8b4df4affb798c19a8f2e968b3ca77aa22241201 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1460,6 +1460,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1467,6 +1467,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public void collide(Entity entity) { if (!this.isSameVehicle(entity)) { if (!entity.noclip && !this.noclip) { diff --git a/Spigot-Server-Patches/0653-Make-ProjectileHitEvent-Cancellable.patch b/Spigot-Server-Patches/0652-Make-ProjectileHitEvent-Cancellable.patch similarity index 94% rename from Spigot-Server-Patches/0653-Make-ProjectileHitEvent-Cancellable.patch rename to Spigot-Server-Patches/0652-Make-ProjectileHitEvent-Cancellable.patch index c5def0ff78..072cb11cbe 100644 --- a/Spigot-Server-Patches/0653-Make-ProjectileHitEvent-Cancellable.patch +++ b/Spigot-Server-Patches/0652-Make-ProjectileHitEvent-Cancellable.patch @@ -32,10 +32,10 @@ index 0e3c646dca1fa1fa895c3aece037367a9b2cf378..054785a3db3c787f5c1444613d3e8fe2 if (movingobjectposition_enummovingobjecttype == MovingObjectPosition.EnumMovingObjectType.ENTITY) { diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 013ef80b91c03bb6baf6249d8584ba1a393b0dec..7ad42020c0ac735d5c24912a7de98d7a40870d0a 100644 +index 40c56301f497f66f8e8f6c737a5c5c8a26d372df..acb65ec8bd09b642c79bb8304bd82fb22a48608b 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1295,9 +1295,9 @@ public class CraftEventFactory { +@@ -1298,9 +1298,9 @@ public class CraftEventFactory { return event; } @@ -47,7 +47,7 @@ index 013ef80b91c03bb6baf6249d8584ba1a393b0dec..7ad42020c0ac735d5c24912a7de98d7a } Block hitBlock = null; -@@ -1314,7 +1314,7 @@ public class CraftEventFactory { +@@ -1317,7 +1317,7 @@ public class CraftEventFactory { } ProjectileHitEvent event = new ProjectileHitEvent((Projectile) entity.getBukkitEntity(), hitEntity, hitBlock, hitFace); diff --git a/Spigot-Server-Patches/0654-Return-chat-component-with-empty-text-instead-of-thr.patch b/Spigot-Server-Patches/0653-Return-chat-component-with-empty-text-instead-of-thr.patch similarity index 66% rename from Spigot-Server-Patches/0654-Return-chat-component-with-empty-text-instead-of-thr.patch rename to Spigot-Server-Patches/0653-Return-chat-component-with-empty-text-instead-of-thr.patch index a074b98c1b..812ef9c07e 100644 --- a/Spigot-Server-Patches/0654-Return-chat-component-with-empty-text-instead-of-thr.patch +++ b/Spigot-Server-Patches/0653-Return-chat-component-with-empty-text-instead-of-thr.patch @@ -6,10 +6,18 @@ Subject: [PATCH] Return chat component with empty text instead of throwing diff --git a/src/main/java/net/minecraft/world/inventory/Container.java b/src/main/java/net/minecraft/world/inventory/Container.java -index 9c6330da4e026a7753698b5d103c009730154c3e..cd30924d2b7768bbc9a429462319c8ca0822444d 100644 +index 9c6330da4e026a7753698b5d103c009730154c3e..bdd00608a72dd81003731ff5fbe774dfdc5220e5 100644 --- a/src/main/java/net/minecraft/world/inventory/Container.java +++ b/src/main/java/net/minecraft/world/inventory/Container.java -@@ -61,7 +61,12 @@ public abstract class Container { +@@ -11,6 +11,7 @@ import net.minecraft.CrashReportSystemDetails; + import net.minecraft.ReportedException; + import net.minecraft.core.IRegistry; + import net.minecraft.core.NonNullList; ++import net.minecraft.network.chat.ChatComponentText; + import net.minecraft.server.level.EntityPlayer; + import net.minecraft.util.MathHelper; + import net.minecraft.world.IInventory; +@@ -61,7 +62,12 @@ public abstract class Container { } private IChatBaseComponent title; public final IChatBaseComponent getTitle() { diff --git a/Spigot-Server-Patches/0655-Make-schedule-command-per-world.patch b/Spigot-Server-Patches/0654-Make-schedule-command-per-world.patch similarity index 100% rename from Spigot-Server-Patches/0655-Make-schedule-command-per-world.patch rename to Spigot-Server-Patches/0654-Make-schedule-command-per-world.patch diff --git a/Spigot-Server-Patches/0656-Configurable-max-leash-distance.patch b/Spigot-Server-Patches/0655-Configurable-max-leash-distance.patch similarity index 96% rename from Spigot-Server-Patches/0656-Configurable-max-leash-distance.patch rename to Spigot-Server-Patches/0655-Configurable-max-leash-distance.patch index d9c34d52f9..cab50cf8eb 100644 --- a/Spigot-Server-Patches/0656-Configurable-max-leash-distance.patch +++ b/Spigot-Server-Patches/0655-Configurable-max-leash-distance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable max leash distance diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 89f3a28c20f0e4db4650c435dbcbc923b7bde8aa..4735dcba31b556fafe9c7d7440c89e940755c81f 100644 +index 5801fe872aff240dc8209069b978d6a4dba30f06..849603de7c918788f1f80d7effb93658a69b0fd6 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -167,6 +167,12 @@ public class PaperWorldConfig { diff --git a/Spigot-Server-Patches/0657-Implement-BlockPreDispenseEvent.patch b/Spigot-Server-Patches/0656-Implement-BlockPreDispenseEvent.patch similarity index 88% rename from Spigot-Server-Patches/0657-Implement-BlockPreDispenseEvent.patch rename to Spigot-Server-Patches/0656-Implement-BlockPreDispenseEvent.patch index 7a6ff4e374..6249fe789c 100644 --- a/Spigot-Server-Patches/0657-Implement-BlockPreDispenseEvent.patch +++ b/Spigot-Server-Patches/0656-Implement-BlockPreDispenseEvent.patch @@ -17,18 +17,18 @@ index 966051ab3e720e5b3f0fb9ab852c8908c5f23f3b..9b92824f1c2797e321ced953d33d2c2f tileentitydispenser.setItem(i, idispensebehavior.dispense(sourceblock, itemstack)); } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 7ad42020c0ac735d5c24912a7de98d7a40870d0a..ed006c05510cd4113463efff6d28791275c2b214 100644 +index acb65ec8bd09b642c79bb8304bd82fb22a48608b..8330c04124c0c1f4f9c78ad43c34d4b00e6b42ed 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -66,6 +66,7 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParameters; - import net.minecraft.world.phys.MovingObjectPosition; +@@ -69,6 +69,7 @@ import net.minecraft.world.phys.MovingObjectPosition; import net.minecraft.world.phys.MovingObjectPositionBlock; import net.minecraft.world.phys.MovingObjectPositionEntity; + import net.minecraft.world.phys.Vec3D; +import io.papermc.paper.event.block.BlockPreDispenseEvent; // Paper import org.bukkit.Bukkit; import org.bukkit.Location; // Paper import org.bukkit.Material; -@@ -1777,5 +1778,11 @@ public class CraftEventFactory { +@@ -1780,5 +1781,11 @@ public class CraftEventFactory { BlockFailedDispenseEvent event = new BlockFailedDispenseEvent(block); return event.callEvent(); } diff --git a/Spigot-Server-Patches/0658-Added-Vanilla-Entity-Tags.patch b/Spigot-Server-Patches/0657-Added-Vanilla-Entity-Tags.patch similarity index 100% rename from Spigot-Server-Patches/0658-Added-Vanilla-Entity-Tags.patch rename to Spigot-Server-Patches/0657-Added-Vanilla-Entity-Tags.patch diff --git a/Spigot-Server-Patches/0659-added-Wither-API.patch b/Spigot-Server-Patches/0658-added-Wither-API.patch similarity index 100% rename from Spigot-Server-Patches/0659-added-Wither-API.patch rename to Spigot-Server-Patches/0658-added-Wither-API.patch diff --git a/Spigot-Server-Patches/0660-Added-firing-of-PlayerChangeBeaconEffectEvent.patch b/Spigot-Server-Patches/0659-Added-firing-of-PlayerChangeBeaconEffectEvent.patch similarity index 100% rename from Spigot-Server-Patches/0660-Added-firing-of-PlayerChangeBeaconEffectEvent.patch rename to Spigot-Server-Patches/0659-Added-firing-of-PlayerChangeBeaconEffectEvent.patch diff --git a/Spigot-Server-Patches/0661-Fix-console-spam-when-removing-chests-in-water.patch b/Spigot-Server-Patches/0660-Fix-console-spam-when-removing-chests-in-water.patch similarity index 100% rename from Spigot-Server-Patches/0661-Fix-console-spam-when-removing-chests-in-water.patch rename to Spigot-Server-Patches/0660-Fix-console-spam-when-removing-chests-in-water.patch diff --git a/Spigot-Server-Patches/0662-Add-toggle-for-always-placing-the-dragon-egg.patch b/Spigot-Server-Patches/0661-Add-toggle-for-always-placing-the-dragon-egg.patch similarity index 95% rename from Spigot-Server-Patches/0662-Add-toggle-for-always-placing-the-dragon-egg.patch rename to Spigot-Server-Patches/0661-Add-toggle-for-always-placing-the-dragon-egg.patch index 504d8e7ebd..a722e61d82 100644 --- a/Spigot-Server-Patches/0662-Add-toggle-for-always-placing-the-dragon-egg.patch +++ b/Spigot-Server-Patches/0661-Add-toggle-for-always-placing-the-dragon-egg.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add toggle for always placing the dragon egg diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 4735dcba31b556fafe9c7d7440c89e940755c81f..ac96011d4e104c99bb37833d91b8121f03b9d349 100644 +index 849603de7c918788f1f80d7effb93658a69b0fd6..1ceacb6bbfe99069763845a8aef48a3fb4841e32 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -794,4 +794,9 @@ public class PaperWorldConfig { diff --git a/Spigot-Server-Patches/0663-Added-PlayerStonecutterRecipeSelectEvent.patch b/Spigot-Server-Patches/0662-Added-PlayerStonecutterRecipeSelectEvent.patch similarity index 97% rename from Spigot-Server-Patches/0663-Added-PlayerStonecutterRecipeSelectEvent.patch rename to Spigot-Server-Patches/0662-Added-PlayerStonecutterRecipeSelectEvent.patch index ef33f09d13..6444ee5cbe 100644 --- a/Spigot-Server-Patches/0663-Added-PlayerStonecutterRecipeSelectEvent.patch +++ b/Spigot-Server-Patches/0662-Added-PlayerStonecutterRecipeSelectEvent.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Added PlayerStonecutterRecipeSelectEvent Co-Authored-By: MiniDigger diff --git a/src/main/java/net/minecraft/world/inventory/Container.java b/src/main/java/net/minecraft/world/inventory/Container.java -index cd30924d2b7768bbc9a429462319c8ca0822444d..eddd35c91f590755fe11a05c73f3b75a89294175 100644 +index bdd00608a72dd81003731ff5fbe774dfdc5220e5..b58ec4abff2840556eb06e08b241a2eaa85c2c7f 100644 --- a/src/main/java/net/minecraft/world/inventory/Container.java +++ b/src/main/java/net/minecraft/world/inventory/Container.java -@@ -117,7 +117,7 @@ public abstract class Container { +@@ -118,7 +118,7 @@ public abstract class Container { return slot; } diff --git a/Spigot-Server-Patches/0664-Add-dropLeash-variable-to-EntityUnleashEvent.patch b/Spigot-Server-Patches/0663-Add-dropLeash-variable-to-EntityUnleashEvent.patch similarity index 94% rename from Spigot-Server-Patches/0664-Add-dropLeash-variable-to-EntityUnleashEvent.patch rename to Spigot-Server-Patches/0663-Add-dropLeash-variable-to-EntityUnleashEvent.patch index 036edd98ca..5c4e0e0941 100644 --- a/Spigot-Server-Patches/0664-Add-dropLeash-variable-to-EntityUnleashEvent.patch +++ b/Spigot-Server-Patches/0663-Add-dropLeash-variable-to-EntityUnleashEvent.patch @@ -37,10 +37,10 @@ index 20570580367697e37e6c45147168c3beb6c8d31b..831414980d40f4382cf7370db28dd8fa } else if (f > 6.0F) { double d0 = (entity.locX() - this.locX()) / (double) f; diff --git a/src/main/java/net/minecraft/world/entity/EntityInsentient.java b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -index 7e608cc9ff4a03a6b1eac5c74c072ac5febc38c3..b618a10e18281e33529cda83eb1e154c0fe4cb69 100644 +index ff482e3774f580d8ba7028f6c5141888d3bd907a..a246edd09854dabf095da75c9d200f5cf26e7138 100644 --- a/src/main/java/net/minecraft/world/entity/EntityInsentient.java +++ b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -@@ -85,6 +85,7 @@ import org.bukkit.event.entity.EntityTargetEvent; +@@ -88,6 +88,7 @@ import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.EntityTransformEvent; import org.bukkit.event.entity.EntityUnleashEvent; import org.bukkit.event.entity.EntityUnleashEvent.UnleashReason; @@ -48,7 +48,7 @@ index 7e608cc9ff4a03a6b1eac5c74c072ac5febc38c3..b618a10e18281e33529cda83eb1e154c // CraftBukkit end public abstract class EntityInsentient extends EntityLiving { -@@ -1204,12 +1205,15 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1207,12 +1208,15 @@ public abstract class EntityInsentient extends EntityLiving { return EnumInteractionResult.PASS; } else if (this.getLeashHolder() == entityhuman) { // CraftBukkit start - fire PlayerUnleashEntityEvent @@ -66,7 +66,7 @@ index 7e608cc9ff4a03a6b1eac5c74c072ac5febc38c3..b618a10e18281e33529cda83eb1e154c return EnumInteractionResult.a(this.world.isClientSide); } else { EnumInteractionResult enuminteractionresult = this.c(entityhuman, enumhand); -@@ -1363,8 +1367,11 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1366,8 +1370,11 @@ public abstract class EntityInsentient extends EntityLiving { if (this.leashHolder != null) { if (!this.isAlive() || !this.leashHolder.isAlive()) { @@ -80,7 +80,7 @@ index 7e608cc9ff4a03a6b1eac5c74c072ac5febc38c3..b618a10e18281e33529cda83eb1e154c } } -@@ -1432,8 +1439,11 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1435,8 +1442,11 @@ public abstract class EntityInsentient extends EntityLiving { boolean flag1 = super.a(entity, flag); if (flag1 && this.isLeashed()) { @@ -94,7 +94,7 @@ index 7e608cc9ff4a03a6b1eac5c74c072ac5febc38c3..b618a10e18281e33529cda83eb1e154c } return flag1; -@@ -1635,7 +1645,10 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1638,7 +1648,10 @@ public abstract class EntityInsentient extends EntityLiving { @Override protected void bN() { super.bN(); @@ -138,10 +138,10 @@ index 8f6d2a6a388021f437ac5554e9ece8eca89e1f46..519f0cabadcf97a44a112fd963a8d3ab } } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index ed006c05510cd4113463efff6d28791275c2b214..c0a66ca6c8f32cbd04cebfbb0e6f2ea668295cf0 100644 +index 8330c04124c0c1f4f9c78ad43c34d4b00e6b42ed..97f9ec2706a3cbda76731f84ef80d5a4ea36e713 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1447,8 +1447,10 @@ public class CraftEventFactory { +@@ -1450,8 +1450,10 @@ public class CraftEventFactory { return itemInHand; } diff --git a/Spigot-Server-Patches/0665-Skip-distance-map-update-when-spawning-disabled.patch b/Spigot-Server-Patches/0664-Skip-distance-map-update-when-spawning-disabled.patch similarity index 87% rename from Spigot-Server-Patches/0665-Skip-distance-map-update-when-spawning-disabled.patch rename to Spigot-Server-Patches/0664-Skip-distance-map-update-when-spawning-disabled.patch index 3f37100ac5..7a7430bb0a 100644 --- a/Spigot-Server-Patches/0665-Skip-distance-map-update-when-spawning-disabled.patch +++ b/Spigot-Server-Patches/0664-Skip-distance-map-update-when-spawning-disabled.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Skip distance map update when spawning disabled. diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 3a7b7df4080c04b618dfaf0b47cc54293332c41d..f74d027fc1b4ffaaa056eec697eccf8bf54271e5 100644 +index f7e684e550ac531a978113c6f5861fd912d3cfd1..15add2a57891b3e0d18392198f5b0ba139e53f4c 100644 --- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -822,7 +822,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -825,7 +825,7 @@ public class ChunkProviderServer extends IChunkProvider { int l = this.chunkMapDistance.b(); // Paper start - per player mob spawning SpawnerCreature.d spawnercreature_d; // moved down diff --git a/Spigot-Server-Patches/0666-Reset-shield-blocking-on-dimension-change.patch b/Spigot-Server-Patches/0665-Reset-shield-blocking-on-dimension-change.patch similarity index 83% rename from Spigot-Server-Patches/0666-Reset-shield-blocking-on-dimension-change.patch rename to Spigot-Server-Patches/0665-Reset-shield-blocking-on-dimension-change.patch index 2f3f867f20..ae2ac213e0 100644 --- a/Spigot-Server-Patches/0666-Reset-shield-blocking-on-dimension-change.patch +++ b/Spigot-Server-Patches/0665-Reset-shield-blocking-on-dimension-change.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Reset shield blocking on dimension change diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index a2971272602f5c2556ccb46042926617138a1d55..667bb0288324f8be79b6a5e4c22c784fdeae4327 100644 +index ae78a491da09945b8e51dc5a0e70eadea66f6873..1212084923780ab4fa0fb67afb4fe326159890e8 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -1114,6 +1114,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1116,6 +1116,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { this.world.getServer().getPluginManager().callEvent(changeEvent); // CraftBukkit end } diff --git a/Spigot-Server-Patches/0667-add-DragonEggFormEvent.patch b/Spigot-Server-Patches/0666-add-DragonEggFormEvent.patch similarity index 100% rename from Spigot-Server-Patches/0667-add-DragonEggFormEvent.patch rename to Spigot-Server-Patches/0666-add-DragonEggFormEvent.patch diff --git a/Spigot-Server-Patches/0668-EntityMoveEvent.patch b/Spigot-Server-Patches/0667-EntityMoveEvent.patch similarity index 90% rename from Spigot-Server-Patches/0668-EntityMoveEvent.patch rename to Spigot-Server-Patches/0667-EntityMoveEvent.patch index 4c89c0b625..723d13b324 100644 --- a/Spigot-Server-Patches/0668-EntityMoveEvent.patch +++ b/Spigot-Server-Patches/0667-EntityMoveEvent.patch @@ -25,19 +25,19 @@ index d7f52ceaca74d5db239d0c6ac151b0ba184bb58c..36823b17aea61af9b0bf4565e3b33ade this.methodProfiler.a(() -> { diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 0bd2ce4f27182c4190892c0a20ab6d99727f27b9..25d69db585c77da26d579c8a5d5dee1014031441 100644 +index 5da7d1df97e70248d01cb1c452b26cfba415a5b0..07396504fbabc2eb006f2b7f8e53faafe67d5672 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -209,6 +209,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -213,6 +213,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { public final Convertable.ConversionSession convertable; public final UUID uuid; - boolean hasPhysicsEvent = true; // Paper -+ boolean hasEntityMoveEvent = false; // Paper + public boolean hasPhysicsEvent = true; // Paper ++ public boolean hasEntityMoveEvent = false; // Paper private static Throwable getAddToWorldStackTrace(Entity entity) { return new Throwable(entity + " Added to world at " + new java.util.Date()); } diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index 3a1eb1570f76f13d1633a24b7fa7ed448b705978..088a5f7ed100ccc963e26573292e42099ddef6d5 100644 +index 800a8b8e1a49eb6ec920abaad4514a9a91a3542e..b0ee9e98d5f1e56c8d82e90dd7761c8ef79cfb1c 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java @@ -10,6 +10,7 @@ import com.mojang.datafixers.util.Pair; @@ -48,7 +48,7 @@ index 3a1eb1570f76f13d1633a24b7fa7ed448b705978..088a5f7ed100ccc963e26573292e4209 import java.util.Collection; import java.util.ConcurrentModificationException; import java.util.Iterator; -@@ -2911,6 +2912,20 @@ public abstract class EntityLiving extends Entity { +@@ -2912,6 +2913,20 @@ public abstract class EntityLiving extends Entity { this.collideNearby(); this.world.getMethodProfiler().exit(); diff --git a/Spigot-Server-Patches/0669-added-option-to-disable-pathfinding-updates-on-block.patch b/Spigot-Server-Patches/0668-added-option-to-disable-pathfinding-updates-on-block.patch similarity index 85% rename from Spigot-Server-Patches/0669-added-option-to-disable-pathfinding-updates-on-block.patch rename to Spigot-Server-Patches/0668-added-option-to-disable-pathfinding-updates-on-block.patch index 690f7e9c68..233f4b2be0 100644 --- a/Spigot-Server-Patches/0669-added-option-to-disable-pathfinding-updates-on-block.patch +++ b/Spigot-Server-Patches/0668-added-option-to-disable-pathfinding-updates-on-block.patch @@ -5,7 +5,7 @@ Subject: [PATCH] added option to disable pathfinding updates on block changes diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index ac96011d4e104c99bb37833d91b8121f03b9d349..0776e68340b0510cc99084bea80791d562dfea40 100644 +index 1ceacb6bbfe99069763845a8aef48a3fb4841e32..d2f6e1308a4dfec663770e2c7f4de0cf22402a97 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -799,4 +799,9 @@ public class PaperWorldConfig { @@ -19,10 +19,10 @@ index ac96011d4e104c99bb37833d91b8121f03b9d349..0776e68340b0510cc99084bea80791d5 + } } diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 25d69db585c77da26d579c8a5d5dee1014031441..b4db139720e803c72b5a835646548b10f1d99ea0 100644 +index 07396504fbabc2eb006f2b7f8e53faafe67d5672..0a698a5a4a6502a488c9afb0ad97165e60030896 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java -@@ -1680,6 +1680,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1684,6 +1684,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { @Override public void notify(BlockPosition blockposition, IBlockData iblockdata, IBlockData iblockdata1, int i) { this.getChunkProvider().flagDirty(blockposition); @@ -30,7 +30,7 @@ index 25d69db585c77da26d579c8a5d5dee1014031441..b4db139720e803c72b5a835646548b10 VoxelShape voxelshape = iblockdata.getCollisionShape(this, blockposition); VoxelShape voxelshape1 = iblockdata1.getCollisionShape(this, blockposition); -@@ -1708,6 +1709,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1712,6 +1713,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { this.tickingEntities = wasTicking; // Paper } diff --git a/Spigot-Server-Patches/0670-Inline-shift-direction-fields.patch b/Spigot-Server-Patches/0669-Inline-shift-direction-fields.patch similarity index 100% rename from Spigot-Server-Patches/0670-Inline-shift-direction-fields.patch rename to Spigot-Server-Patches/0669-Inline-shift-direction-fields.patch diff --git a/Spigot-Server-Patches/0671-Allow-adding-items-to-BlockDropItemEvent.patch b/Spigot-Server-Patches/0670-Allow-adding-items-to-BlockDropItemEvent.patch similarity index 92% rename from Spigot-Server-Patches/0671-Allow-adding-items-to-BlockDropItemEvent.patch rename to Spigot-Server-Patches/0670-Allow-adding-items-to-BlockDropItemEvent.patch index f15a692696..5dbd9e55fd 100644 --- a/Spigot-Server-Patches/0671-Allow-adding-items-to-BlockDropItemEvent.patch +++ b/Spigot-Server-Patches/0670-Allow-adding-items-to-BlockDropItemEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow adding items to BlockDropItemEvent diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index c0a66ca6c8f32cbd04cebfbb0e6f2ea668295cf0..9687d864311d6fb98c5c5b535073e0bc0601112a 100644 +index 97f9ec2706a3cbda76731f84ef80d5a4ea36e713..926440e846eff2c1aaa262aa2b3975b7dd225332 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -380,13 +380,30 @@ public class CraftEventFactory { +@@ -383,13 +383,30 @@ public class CraftEventFactory { } public static void handleBlockDropItemEvent(Block block, BlockState state, EntityPlayer player, List items) { diff --git a/Spigot-Server-Patches/0672-Add-getMainThreadExecutor-to-BukkitScheduler.patch b/Spigot-Server-Patches/0671-Add-getMainThreadExecutor-to-BukkitScheduler.patch similarity index 100% rename from Spigot-Server-Patches/0672-Add-getMainThreadExecutor-to-BukkitScheduler.patch rename to Spigot-Server-Patches/0671-Add-getMainThreadExecutor-to-BukkitScheduler.patch diff --git a/Spigot-Server-Patches/0673-living-entity-allow-attribute-registration.patch b/Spigot-Server-Patches/0672-living-entity-allow-attribute-registration.patch similarity index 87% rename from Spigot-Server-Patches/0673-living-entity-allow-attribute-registration.patch rename to Spigot-Server-Patches/0672-living-entity-allow-attribute-registration.patch index 3f8f8f25e0..73c28af9be 100644 --- a/Spigot-Server-Patches/0673-living-entity-allow-attribute-registration.patch +++ b/Spigot-Server-Patches/0672-living-entity-allow-attribute-registration.patch @@ -5,7 +5,7 @@ Subject: [PATCH] living entity allow attribute registration diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMapBase.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMapBase.java -index 8f6b78c68da555f96033df567da581af52195e6c..efced2c92dc56da9cc60d7eeb3661eb5e40e634b 100644 +index 8f6b78c68da555f96033df567da581af52195e6c..e4cd1848e8700de4ab64f3037bb0c41d99e7c97d 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMapBase.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMapBase.java @@ -21,7 +21,7 @@ import org.apache.logging.log4j.Logger; @@ -24,7 +24,7 @@ index 8f6b78c68da555f96033df567da581af52195e6c..efced2c92dc56da9cc60d7eeb3661eb5 + + // Paper - start + public void registerAttribute(AttributeBase attributeBase) { -+ net.minecraft.server.AttributeModifiable attributeModifiable = new net.minecraft.server.AttributeModifiable(attributeBase, net.minecraft.server.AttributeModifiable::getAttribute); ++ AttributeModifiable attributeModifiable = new AttributeModifiable(attributeBase, AttributeModifiable::getAttribute); + attributeMap.put(attributeBase, attributeModifiable); + } + // Paper - end @@ -50,10 +50,10 @@ index 673948947bd918c1dbb6c4c99486b4200e3c09fe..2e83b8855070077e90e5ab2c4beae819 return IRegistry.ATTRIBUTE.get(CraftNamespacedKey.toMinecraft(attribute.getKey())); } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 07a8d184038231b5f1a9c112c978528aaf79f34b..4c3bad053d15c50cad2715e459ec0ace45ee1580 100644 +index e574e2453c7bc848168ff24372d6772bd423b672..3d497f69f89455b88fba423de8effb3db83e7af4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -665,6 +665,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -675,6 +675,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { return getHandle().craftAttributes.getAttribute(attribute); } diff --git a/Spigot-Server-Patches/0674-fix-dead-slime-setSize-invincibility.patch b/Spigot-Server-Patches/0673-fix-dead-slime-setSize-invincibility.patch similarity index 89% rename from Spigot-Server-Patches/0674-fix-dead-slime-setSize-invincibility.patch rename to Spigot-Server-Patches/0673-fix-dead-slime-setSize-invincibility.patch index 56fb90423a..33f5d17581 100644 --- a/Spigot-Server-Patches/0674-fix-dead-slime-setSize-invincibility.patch +++ b/Spigot-Server-Patches/0673-fix-dead-slime-setSize-invincibility.patch @@ -5,7 +5,7 @@ Subject: [PATCH] fix dead slime setSize invincibility diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java -index 6e9f1b66dfc12491c945f87c51e81aa02424e885..ac28923df49e7ac8c69665454c806dac5186c48c 100644 +index cf5c6030105e56813f526e710e5db0c59d88c99e..13ab1a430f9ad2ece73ab50455bfcddbc9b236e2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java @@ -18,7 +18,7 @@ public class CraftSlime extends CraftMob implements Slime { diff --git a/Spigot-Server-Patches/0675-Merchant-getRecipes-should-return-an-immutable-list.patch b/Spigot-Server-Patches/0674-Merchant-getRecipes-should-return-an-immutable-list.patch similarity index 100% rename from Spigot-Server-Patches/0675-Merchant-getRecipes-should-return-an-immutable-list.patch rename to Spigot-Server-Patches/0674-Merchant-getRecipes-should-return-an-immutable-list.patch diff --git a/Spigot-Server-Patches/0676-misc-debugging-dumps.patch b/Spigot-Server-Patches/0675-misc-debugging-dumps.patch similarity index 100% rename from Spigot-Server-Patches/0676-misc-debugging-dumps.patch rename to Spigot-Server-Patches/0675-misc-debugging-dumps.patch diff --git a/Spigot-Server-Patches/0677-Add-support-for-hex-color-codes-in-console.patch b/Spigot-Server-Patches/0676-Add-support-for-hex-color-codes-in-console.patch similarity index 100% rename from Spigot-Server-Patches/0677-Add-support-for-hex-color-codes-in-console.patch rename to Spigot-Server-Patches/0676-Add-support-for-hex-color-codes-in-console.patch diff --git a/Spigot-Server-Patches/0678-Clear-SyncLoadInfo.patch b/Spigot-Server-Patches/0677-Clear-SyncLoadInfo.patch similarity index 88% rename from Spigot-Server-Patches/0678-Clear-SyncLoadInfo.patch rename to Spigot-Server-Patches/0677-Clear-SyncLoadInfo.patch index 8c1c49c71b..5f1ef784b9 100644 --- a/Spigot-Server-Patches/0678-Clear-SyncLoadInfo.patch +++ b/Spigot-Server-Patches/0677-Clear-SyncLoadInfo.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Clear SyncLoadInfo This patch merely adds the extra argument "clear" after /paper syncloadinfo to clear currently stored syncload info. diff --git a/src/main/java/com/destroystokyo/paper/PaperCommand.java b/src/main/java/com/destroystokyo/paper/PaperCommand.java -index 352f1ce8ecfc8457d141c10f7ce698bea45b342b..4994f0e3934c4c3a7dd74b92a9a7c6c1b9a17614 100644 +index 4b3efe01750d79bcc27a42b5a145d9aa6b124d18..12313a37ceeb6a0b6a539c38fdba67e5e43d7413 100644 --- a/src/main/java/com/destroystokyo/paper/PaperCommand.java +++ b/src/main/java/com/destroystokyo/paper/PaperCommand.java @@ -295,6 +295,13 @@ public class PaperCommand extends Command { @@ -24,10 +24,10 @@ index 352f1ce8ecfc8457d141c10f7ce698bea45b342b..4994f0e3934c4c3a7dd74b92a9a7c6c1 "sync-load-info" + DateTimeFormatter.ofPattern("yyyy-MM-dd_HH.mm.ss").format(LocalDateTime.now()) + ".txt"); file.getParentFile().mkdirs(); diff --git a/src/main/java/com/destroystokyo/paper/io/SyncLoadFinder.java b/src/main/java/com/destroystokyo/paper/io/SyncLoadFinder.java -index 1a68a8012f83bab9e814159c76b8c3710c7b1112..82a1e4386522684876e5febaf90bbe161a2f1ed2 100644 +index d381f91cf105bfc01846ada90da8971a3618e784..c51401bcfac0a1e45099af1dd355073c19790476 100644 --- a/src/main/java/com/destroystokyo/paper/io/SyncLoadFinder.java +++ b/src/main/java/com/destroystokyo/paper/io/SyncLoadFinder.java -@@ -27,6 +27,10 @@ public class SyncLoadFinder { +@@ -26,6 +26,10 @@ public class SyncLoadFinder { public final Long2IntOpenHashMap coordinateTimes = new Long2IntOpenHashMap(); } diff --git a/Spigot-Server-Patches/0679-Expose-Tracked-Players.patch b/Spigot-Server-Patches/0678-Expose-Tracked-Players.patch similarity index 83% rename from Spigot-Server-Patches/0679-Expose-Tracked-Players.patch rename to Spigot-Server-Patches/0678-Expose-Tracked-Players.patch index 5633e8856a..94ba59394e 100644 --- a/Spigot-Server-Patches/0679-Expose-Tracked-Players.patch +++ b/Spigot-Server-Patches/0678-Expose-Tracked-Players.patch @@ -5,20 +5,20 @@ Subject: [PATCH] Expose Tracked Players diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f64d37aa1183fe1a7c6f3131f945d9bd4e43bf3c..bb3211d0177f569b018852fc2a9094431e952b02 100644 +index 8b4df4affb798c19a8f2e968b3ca77aa22241201..038e44fc94b9920f2af9e2ede626950d1add06bc 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -165,7 +165,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -172,7 +172,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public com.destroystokyo.paper.loottable.PaperLootableInventoryData lootableData; // Paper private CraftEntity bukkitEntity; - PlayerChunkMap.EntityTracker tracker; // Paper + public PlayerChunkMap.EntityTracker tracker; // Paper package private -> public - boolean collisionLoadChunks = false; // Paper - Throwable addedToWorldStack; // Paper - entity debug + public boolean collisionLoadChunks = false; // Paper + public Throwable addedToWorldStack; // Paper - entity debug public CraftEntity getBukkitEntity() { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 21304d60f90dbf2254ebf19cfda372f8c6d7c7f1..8a14343c253768c4a6a566e007e322cf0fb4f05c 100644 +index 89737dfb0244a6dfe3a2cc2d77a7b16a64f469bb..c86d7435346d9cb04cf798939ccfa54488f20480 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -16,6 +16,7 @@ import java.net.InetSocketAddress; diff --git a/Spigot-Server-Patches/0680-Remove-streams-from-SensorNearest.patch b/Spigot-Server-Patches/0679-Remove-streams-from-SensorNearest.patch similarity index 100% rename from Spigot-Server-Patches/0680-Remove-streams-from-SensorNearest.patch rename to Spigot-Server-Patches/0679-Remove-streams-from-SensorNearest.patch diff --git a/Spigot-Server-Patches/0681-do-not-create-unnecessary-copies-of-passenger-list.patch b/Spigot-Server-Patches/0680-do-not-create-unnecessary-copies-of-passenger-list.patch similarity index 95% rename from Spigot-Server-Patches/0681-do-not-create-unnecessary-copies-of-passenger-list.patch rename to Spigot-Server-Patches/0680-do-not-create-unnecessary-copies-of-passenger-list.patch index 11c76f2b57..d32eb2798c 100644 --- a/Spigot-Server-Patches/0681-do-not-create-unnecessary-copies-of-passenger-list.patch +++ b/Spigot-Server-Patches/0680-do-not-create-unnecessary-copies-of-passenger-list.patch @@ -44,10 +44,10 @@ index aa5ba862f18ff706f11b0b26cea55a904a5a9473..f65eb0168ed365e5c1b490c56ec84e3b } diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index f3f906d8ffa195b100d5bd2d232ae8489d48d60d..5e5545f16daf20682e7984e1b4d3ffa0151ad1c1 100644 +index 033dee28da5b788b90b6c6651b2ab92efd1d2f21..cb75fb64b28827097eb4f3e778ab3bbcd8ed0779 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -2297,7 +2297,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2307,7 +2307,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially list.add(entity); } @@ -57,10 +57,10 @@ index f3f906d8ffa195b100d5bd2d232ae8489d48d60d..5e5545f16daf20682e7984e1b4d3ffa0 } } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index bb3211d0177f569b018852fc2a9094431e952b02..f88af0aa6a86d7d2f7e12b710fce4d37c9ee421f 100644 +index 038e44fc94b9920f2af9e2ede626950d1add06bc..afd443a30e2839d4fbb7200d1f767cadc162fb9d 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2223,7 +2223,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2230,7 +2230,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } protected boolean q(Entity entity) { @@ -69,7 +69,7 @@ index bb3211d0177f569b018852fc2a9094431e952b02..f88af0aa6a86d7d2f7e12b710fce4d37 } public final float getCollisionBorderSize() { return bg(); } // Paper - OBFHELPER -@@ -2319,7 +2319,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2326,7 +2326,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } public boolean isVehicle() { @@ -78,7 +78,7 @@ index bb3211d0177f569b018852fc2a9094431e952b02..f88af0aa6a86d7d2f7e12b710fce4d37 } public boolean bt() { -@@ -3131,7 +3131,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -3138,7 +3138,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } public boolean w(Entity entity) { @@ -87,7 +87,7 @@ index bb3211d0177f569b018852fc2a9094431e952b02..f88af0aa6a86d7d2f7e12b710fce4d37 Entity entity1; -@@ -3147,7 +3147,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -3154,7 +3154,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } public boolean a(Class oclass) { @@ -96,7 +96,7 @@ index bb3211d0177f569b018852fc2a9094431e952b02..f88af0aa6a86d7d2f7e12b710fce4d37 Entity entity; -@@ -3164,7 +3164,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -3171,7 +3171,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public Collection getAllPassengers() { Set set = Sets.newHashSet(); @@ -105,7 +105,7 @@ index bb3211d0177f569b018852fc2a9094431e952b02..f88af0aa6a86d7d2f7e12b710fce4d37 while (iterator.hasNext()) { Entity entity = (Entity) iterator.next(); -@@ -3190,7 +3190,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -3197,7 +3197,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne private void a(boolean flag, Set set) { Entity entity; diff --git a/Spigot-Server-Patches/0682-MC-29274-Fix-Wither-hostility-towards-players.patch b/Spigot-Server-Patches/0681-MC-29274-Fix-Wither-hostility-towards-players.patch similarity index 95% rename from Spigot-Server-Patches/0682-MC-29274-Fix-Wither-hostility-towards-players.patch rename to Spigot-Server-Patches/0681-MC-29274-Fix-Wither-hostility-towards-players.patch index ee2363ade3..53f85dfd86 100644 --- a/Spigot-Server-Patches/0682-MC-29274-Fix-Wither-hostility-towards-players.patch +++ b/Spigot-Server-Patches/0681-MC-29274-Fix-Wither-hostility-towards-players.patch @@ -5,7 +5,7 @@ Subject: [PATCH] MC-29274: Fix Wither hostility towards players diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 0776e68340b0510cc99084bea80791d562dfea40..b473709774fbbd502d5e04c98041ae7c829b4083 100644 +index d2f6e1308a4dfec663770e2c7f4de0cf22402a97..3e6132211912d29e34c94042b0819f11a3bd123e 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -804,4 +804,10 @@ public class PaperWorldConfig { diff --git a/Spigot-Server-Patches/0683-Throw-proper-exception-on-empty-JsonList-file.patch b/Spigot-Server-Patches/0682-Throw-proper-exception-on-empty-JsonList-file.patch similarity index 100% rename from Spigot-Server-Patches/0683-Throw-proper-exception-on-empty-JsonList-file.patch rename to Spigot-Server-Patches/0682-Throw-proper-exception-on-empty-JsonList-file.patch diff --git a/Spigot-Server-Patches/0684-Improve-ServerGUI.patch b/Spigot-Server-Patches/0683-Improve-ServerGUI.patch similarity index 99% rename from Spigot-Server-Patches/0684-Improve-ServerGUI.patch rename to Spigot-Server-Patches/0683-Improve-ServerGUI.patch index b1e5476621..ae8862a977 100644 --- a/Spigot-Server-Patches/0684-Improve-ServerGUI.patch +++ b/Spigot-Server-Patches/0683-Improve-ServerGUI.patch @@ -7,10 +7,10 @@ Subject: [PATCH] Improve ServerGUI - Show tps in the server stats diff --git a/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java b/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java -index e463a86a6ad6c4f2885f4df159411bad294e1208..d21d081ef3e3eee1d14ce3dfdd8c810cc8382b80 100644 +index 67d064e3959ed8d886df30ce9d97f86c2443fa39..dc6bc1910ad0f9b27144d5750078c3ca607d03d3 100644 --- a/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java +++ b/src/main/java/com/destroystokyo/paper/gui/RAMDetails.java -@@ -58,9 +58,18 @@ public class RAMDetails extends JList { +@@ -57,9 +57,18 @@ public class RAMDetails extends JList { public void update() { GraphData data = RAMGraph.DATA.peekLast(); Vector vector = new Vector<>(); @@ -29,7 +29,7 @@ index e463a86a6ad6c4f2885f4df159411bad294e1208..d21d081ef3e3eee1d14ce3dfdd8c810c setListData(vector); } -@@ -71,4 +80,9 @@ public class RAMDetails extends JList { +@@ -70,4 +79,9 @@ public class RAMDetails extends JList { } return ((double) total / (double) tickTimes.length) * 1.0E-6D; } diff --git a/Spigot-Server-Patches/0685-stop-firing-pressure-plate-EntityInteractEvent-for-i.patch b/Spigot-Server-Patches/0684-stop-firing-pressure-plate-EntityInteractEvent-for-i.patch similarity index 100% rename from Spigot-Server-Patches/0685-stop-firing-pressure-plate-EntityInteractEvent-for-i.patch rename to Spigot-Server-Patches/0684-stop-firing-pressure-plate-EntityInteractEvent-for-i.patch diff --git a/Spigot-Server-Patches/0686-fix-converting-txt-to-json-file.patch b/Spigot-Server-Patches/0685-fix-converting-txt-to-json-file.patch similarity index 96% rename from Spigot-Server-Patches/0686-fix-converting-txt-to-json-file.patch rename to Spigot-Server-Patches/0685-fix-converting-txt-to-json-file.patch index 03a0dd8e54..082b19bb5e 100644 --- a/Spigot-Server-Patches/0686-fix-converting-txt-to-json-file.patch +++ b/Spigot-Server-Patches/0685-fix-converting-txt-to-json-file.patch @@ -49,10 +49,10 @@ index c4df472050622eb2469b2ddb4d2ed917994f6e95..52bb528e75eb43156ee2bf19877bc051 return false; } else { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 5a371a7ce4cc70d5916b87874a960427c882f9b1..213c9c425722c670f950d0485263c115d7f22812 100644 +index e00de9eba84de57b1b79d1860bd1eff8d1b71705..c7d81efa41fd9dd248ba85a29386cbad470f8f66 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -166,6 +166,7 @@ public abstract class PlayerList { +@@ -175,6 +175,7 @@ public abstract class PlayerList { this.maxPlayers = i; this.playerFileData = worldnbtstorage; } diff --git a/Spigot-Server-Patches/0687-Add-worldborder-events.patch b/Spigot-Server-Patches/0686-Add-worldborder-events.patch similarity index 100% rename from Spigot-Server-Patches/0687-Add-worldborder-events.patch rename to Spigot-Server-Patches/0686-Add-worldborder-events.patch diff --git a/Spigot-Server-Patches/0688-added-PlayerNameEntityEvent.patch b/Spigot-Server-Patches/0687-added-PlayerNameEntityEvent.patch similarity index 100% rename from Spigot-Server-Patches/0688-added-PlayerNameEntityEvent.patch rename to Spigot-Server-Patches/0687-added-PlayerNameEntityEvent.patch diff --git a/Spigot-Server-Patches/0689-Prevent-grindstones-from-overstacking-items.patch b/Spigot-Server-Patches/0688-Prevent-grindstones-from-overstacking-items.patch similarity index 100% rename from Spigot-Server-Patches/0689-Prevent-grindstones-from-overstacking-items.patch rename to Spigot-Server-Patches/0688-Prevent-grindstones-from-overstacking-items.patch diff --git a/Spigot-Server-Patches/0690-Add-recipe-to-cook-events.patch b/Spigot-Server-Patches/0689-Add-recipe-to-cook-events.patch similarity index 100% rename from Spigot-Server-Patches/0690-Add-recipe-to-cook-events.patch rename to Spigot-Server-Patches/0689-Add-recipe-to-cook-events.patch diff --git a/Spigot-Server-Patches/0691-Add-Block-isValidTool.patch b/Spigot-Server-Patches/0690-Add-Block-isValidTool.patch similarity index 87% rename from Spigot-Server-Patches/0691-Add-Block-isValidTool.patch rename to Spigot-Server-Patches/0690-Add-Block-isValidTool.patch index 5ec6849f38..438b6421f8 100644 --- a/Spigot-Server-Patches/0691-Add-Block-isValidTool.patch +++ b/Spigot-Server-Patches/0690-Add-Block-isValidTool.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add Block#isValidTool diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -index 3d4edb6e57f133ac28a417d2c7262230f15ced0f..e26486be387ebeae5d3abce7989f38a9793b6c84 100644 +index 3372dac5b03ebe518b36a28bb4f64e7b516a2cc9..4b6cfe09c256b43ca59f9c8a52330004c198438b 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -794,5 +794,9 @@ public class CraftBlock implements Block { diff --git a/Spigot-Server-Patches/0692-Allow-using-signs-inside-spawn-protection.patch b/Spigot-Server-Patches/0691-Allow-using-signs-inside-spawn-protection.patch similarity index 71% rename from Spigot-Server-Patches/0692-Allow-using-signs-inside-spawn-protection.patch rename to Spigot-Server-Patches/0691-Allow-using-signs-inside-spawn-protection.patch index c1f601db71..75946b49d0 100644 --- a/Spigot-Server-Patches/0692-Allow-using-signs-inside-spawn-protection.patch +++ b/Spigot-Server-Patches/0691-Allow-using-signs-inside-spawn-protection.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow using signs inside spawn protection diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index b473709774fbbd502d5e04c98041ae7c829b4083..fd675585c61387156892b179af593ad640873d45 100644 +index 3e6132211912d29e34c94042b0819f11a3bd123e..921253a06daa414aed7dc6824effc65db09ea7a5 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -810,4 +810,9 @@ public class PaperWorldConfig { @@ -19,15 +19,23 @@ index b473709774fbbd502d5e04c98041ae7c829b4083..fd675585c61387156892b179af593ad6 + } } diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 3da824081892a2ab9071351b77150b42915742d0..f7e73d69f88e1952c05c674073fc0922c5fddf54 100644 +index 60b72fc3cf859fab80aba310882b0309fd68ff37..a15230235ba0244c42346f51cabb470cb362a455 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java -@@ -1688,7 +1688,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -143,6 +143,7 @@ import net.minecraft.world.level.GameRules; + import net.minecraft.world.level.IWorldReader; + import net.minecraft.world.level.World; + import net.minecraft.world.level.block.BlockCommand; ++import net.minecraft.world.level.block.BlockSign; + import net.minecraft.world.level.block.Blocks; + import net.minecraft.world.level.block.entity.TileEntity; + import net.minecraft.world.level.block.entity.TileEntityCommand; +@@ -1689,7 +1690,7 @@ public class PlayerConnection implements PacketListenerPlayIn { this.player.resetIdleTimer(); if (blockposition.getY() < this.minecraftServer.getMaxBuildHeight()) { - if (this.teleportPos == null && this.player.h((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D) < 64.0D && worldserver.a((EntityHuman) this.player, blockposition)) { -+ if (this.teleportPos == null && this.player.h((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D) < 64.0D && (worldserver.a((EntityHuman) this.player, blockposition) || (worldserver.getType(blockposition).getBlock() instanceof net.minecraft.server.BlockSign && worldserver.paperConfig.allowUsingSignsInsideSpawnProtection))) { // Paper ++ if (this.teleportPos == null && this.player.h((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D) < 64.0D && (worldserver.a((EntityHuman) this.player, blockposition) || (worldserver.getType(blockposition).getBlock() instanceof BlockSign && worldserver.paperConfig.allowUsingSignsInsideSpawnProtection))) { // Paper // CraftBukkit start - Check if we can actually do something over this large a distance // Paper - move check up this.player.clearActiveItem(); // SPIGOT-4706 diff --git a/Spigot-Server-Patches/0693-Implement-Keyed-on-World.patch b/Spigot-Server-Patches/0692-Implement-Keyed-on-World.patch similarity index 100% rename from Spigot-Server-Patches/0693-Implement-Keyed-on-World.patch rename to Spigot-Server-Patches/0692-Implement-Keyed-on-World.patch diff --git a/Spigot-Server-Patches/0694-Add-fast-alternative-constructor-for-Vector3f.patch b/Spigot-Server-Patches/0693-Add-fast-alternative-constructor-for-Vector3f.patch similarity index 100% rename from Spigot-Server-Patches/0694-Add-fast-alternative-constructor-for-Vector3f.patch rename to Spigot-Server-Patches/0693-Add-fast-alternative-constructor-for-Vector3f.patch diff --git a/Spigot-Server-Patches/0695-Item-Rarity-API.patch b/Spigot-Server-Patches/0694-Item-Rarity-API.patch similarity index 100% rename from Spigot-Server-Patches/0695-Item-Rarity-API.patch rename to Spigot-Server-Patches/0694-Item-Rarity-API.patch diff --git a/Spigot-Server-Patches/0695-fixup-Load-chunks-asynchronously-for-players.patch b/Spigot-Server-Patches/0695-fixup-Load-chunks-asynchronously-for-players.patch new file mode 100644 index 0000000000..d98f255fcd --- /dev/null +++ b/Spigot-Server-Patches/0695-fixup-Load-chunks-asynchronously-for-players.patch @@ -0,0 +1,18 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Mariell Hoversholm +Date: Tue, 16 Mar 2021 11:25:11 +0100 +Subject: [PATCH] fixup! Load chunks asynchronously for players. + + +diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java +index 1212084923780ab4fa0fb67afb4fe326159890e8..37c9b5fd712e30a9a0faccc840f738f4b2cfc723 100644 +--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java ++++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java +@@ -31,6 +31,7 @@ import net.minecraft.core.NonNullList; + import net.minecraft.core.SectionPosition; + import net.minecraft.nbt.DynamicOpsNBT; + import net.minecraft.nbt.NBTTagCompound; ++import net.minecraft.network.NetworkManager; + import net.minecraft.network.chat.ChatComponentText; + import net.minecraft.network.chat.ChatHoverable; + import net.minecraft.network.chat.ChatMessage;