From 818e88dbc52e747e67e2b265bedf686089c25e20 Mon Sep 17 00:00:00 2001 From: Shane Freeder Date: Fri, 26 Apr 2019 02:24:00 +0100 Subject: [PATCH] More work for 1.14 --- ...ch => 0045-Expose-server-CommandMap.patch} | 6 +- ...-informative-in-maxHealth-exception.patch} | 6 +- ...0047-Player-Tab-List-and-Title-APIs.patch} | 15 +- ...> 0048-Ensure-inv-drag-is-in-bounds.patch} | 12 +- ...entation-of-tile-entity-removal-list.patch | 23 ++ ...dd-configurable-portal-search-radius.patch | 41 ++++ ...patch => 0051-Add-velocity-warnings.patch} | 27 +- ...le-inter-world-teleportation-safety.patch} | 10 +- ...dd-configurable-portal-search-radius.patch | 58 ----- ... 0053-Add-exception-reporting-event.patch} | 231 ++++++++---------- ...don-t-need-to-when-cerealising-text.patch} | 6 +- ...reboards-for-non-players-by-default.patch} | 16 +- ...orking-with-arrows-stuck-in-living-.patch} | 6 +- ... => 0057-Complete-resource-pack-API.patch} | 12 +- ....patch => 0058-Chunk-Save-Reattempt.patch} | 44 ++-- ...ding-permissions.yml-before-plugins.patch} | 16 +- ...low-Reloading-of-Custom-Permissions.patch} | 6 +- ...h => 0061-Remove-Metadata-on-reload.patch} | 6 +- ...patch => 0062-Undead-horse-leashing.patch} | 14 +- ...63-Handle-Item-Meta-Inconsistencies.patch} | 92 ++++--- ...rable-Non-Player-Arrow-Despawn-Rate.patch} | 12 +- ...atch => 0065-Add-World-Util-Methods.patch} | 42 ++-- ...-Custom-replacement-for-eaten-items.patch} | 12 +- ...h-absorb-values-and-repair-bad-data.patch} | 16 +- ...ch => 0068-Waving-banner-workaround.patch} | 6 +- ...69-Use-a-Shared-Random-for-Entities.patch} | 12 +- ...e-spawn-chances-for-skeleton-horses.patch} | 24 +- ...opper-searches-if-there-are-no-items.patch | 0 ...entation-of-tile-entity-removal-list.patch | 0 .../0061-Chunk-save-queue-improvements.patch | 0 ...70-Optimized-Light-Level-Comparisons.patch | 0 .../0071-Pass-world-to-Village-creation.patch | 0 ...atch-Async-PlayerChunkMap-operations.patch | 0 .../0077-Don-t-teleport-dead-entities.patch | 0 .../1.14}/0078-Optimize-Chunk-Access.patch | 0 35 files changed, 371 insertions(+), 400 deletions(-) rename Spigot-Server-Patches/{0048-Expose-server-CommandMap.patch => 0045-Expose-server-CommandMap.patch} (76%) rename Spigot-Server-Patches/{0049-Be-a-bit-more-informative-in-maxHealth-exception.patch => 0046-Be-a-bit-more-informative-in-maxHealth-exception.patch} (85%) rename Spigot-Server-Patches/{0050-Player-Tab-List-and-Title-APIs.patch => 0047-Player-Tab-List-and-Title-APIs.patch} (94%) rename Spigot-Server-Patches/{0051-Ensure-inv-drag-is-in-bounds.patch => 0048-Ensure-inv-drag-is-in-bounds.patch} (73%) create mode 100644 Spigot-Server-Patches/0049-Change-implementation-of-tile-entity-removal-list.patch create mode 100644 Spigot-Server-Patches/0050-Add-configurable-portal-search-radius.patch rename Spigot-Server-Patches/{0054-Add-velocity-warnings.patch => 0051-Add-velocity-warnings.patch} (85%) rename Spigot-Server-Patches/{0055-Configurable-inter-world-teleportation-safety.patch => 0052-Configurable-inter-world-teleportation-safety.patch} (89%) delete mode 100644 Spigot-Server-Patches/0053-Add-configurable-portal-search-radius.patch rename Spigot-Server-Patches/{0056-Add-exception-reporting-event.patch => 0053-Add-exception-reporting-event.patch} (62%) rename Spigot-Server-Patches/{0057-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch => 0054-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch} (89%) rename Spigot-Server-Patches/{0058-Disable-Scoreboards-for-non-players-by-default.patch => 0055-Disable-Scoreboards-for-non-players-by-default.patch} (84%) rename Spigot-Server-Patches/{0059-Add-methods-for-working-with-arrows-stuck-in-living-.patch => 0056-Add-methods-for-working-with-arrows-stuck-in-living-.patch} (83%) rename Spigot-Server-Patches/{0060-Complete-resource-pack-API.patch => 0057-Complete-resource-pack-API.patch} (89%) rename Spigot-Server-Patches/{0062-Chunk-Save-Reattempt.patch => 0058-Chunk-Save-Reattempt.patch} (54%) rename Spigot-Server-Patches/{0063-Default-loading-permissions.yml-before-plugins.patch => 0059-Default-loading-permissions.yml-before-plugins.patch} (80%) rename Spigot-Server-Patches/{0064-Allow-Reloading-of-Custom-Permissions.patch => 0060-Allow-Reloading-of-Custom-Permissions.patch} (89%) rename Spigot-Server-Patches/{0065-Remove-Metadata-on-reload.patch => 0061-Remove-Metadata-on-reload.patch} (87%) rename Spigot-Server-Patches/{0066-Undead-horse-leashing.patch => 0062-Undead-horse-leashing.patch} (83%) rename Spigot-Server-Patches/{0067-Handle-Item-Meta-Inconsistencies.patch => 0063-Handle-Item-Meta-Inconsistencies.patch} (84%) rename Spigot-Server-Patches/{0068-Configurable-Non-Player-Arrow-Despawn-Rate.patch => 0064-Configurable-Non-Player-Arrow-Despawn-Rate.patch} (88%) rename Spigot-Server-Patches/{0069-Add-World-Util-Methods.patch => 0065-Add-World-Util-Methods.patch} (80%) rename Spigot-Server-Patches/{0072-Custom-replacement-for-eaten-items.patch => 0066-Custom-replacement-for-eaten-items.patch} (86%) rename Spigot-Server-Patches/{0073-handle-NaN-health-absorb-values-and-repair-bad-data.patch => 0067-handle-NaN-health-absorb-values-and-repair-bad-data.patch} (84%) rename Spigot-Server-Patches/{0075-Waving-banner-workaround.patch => 0068-Waving-banner-workaround.patch} (86%) rename Spigot-Server-Patches/{0076-Use-a-Shared-Random-for-Entities.patch => 0069-Use-a-Shared-Random-for-Entities.patch} (86%) rename Spigot-Server-Patches/{0079-Configurable-spawn-chances-for-skeleton-horses.patch => 0070-Configurable-spawn-chances-for-skeleton-horses.patch} (51%) rename {Spigot-Server-Patches => removed/1.14}/0047-Avoid-hopper-searches-if-there-are-no-items.patch (100%) rename {Spigot-Server-Patches => removed/1.14}/0052-Change-implementation-of-tile-entity-removal-list.patch (100%) rename {Spigot-Server-Patches => removed/1.14}/0061-Chunk-save-queue-improvements.patch (100%) rename {Spigot-Server-Patches => removed/1.14}/0070-Optimized-Light-Level-Comparisons.patch (100%) rename {Spigot-Server-Patches => removed/1.14}/0071-Pass-world-to-Village-creation.patch (100%) rename {Spigot-Server-Patches => removed/1.14}/0074-Catch-Async-PlayerChunkMap-operations.patch (100%) rename {Spigot-Server-Patches => removed/1.14}/0077-Don-t-teleport-dead-entities.patch (100%) rename {Spigot-Server-Patches => removed/1.14}/0078-Optimize-Chunk-Access.patch (100%) diff --git a/Spigot-Server-Patches/0048-Expose-server-CommandMap.patch b/Spigot-Server-Patches/0045-Expose-server-CommandMap.patch similarity index 76% rename from Spigot-Server-Patches/0048-Expose-server-CommandMap.patch rename to Spigot-Server-Patches/0045-Expose-server-CommandMap.patch index b29ed8c1bc..a06f41bb79 100644 --- a/Spigot-Server-Patches/0048-Expose-server-CommandMap.patch +++ b/Spigot-Server-Patches/0045-Expose-server-CommandMap.patch @@ -1,14 +1,14 @@ -From 275f3eef9f154b760b5b1a5284f704fff1f4694c Mon Sep 17 00:00:00 2001 +From cbac1504f2d1b1c6ebe7c912bbe54df2e4a856f9 Mon Sep 17 00:00:00 2001 From: kashike Date: Thu, 3 Mar 2016 02:15:57 -0600 Subject: [PATCH] Expose server CommandMap diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index c6e6ae4fe7..19fef2496e 100644 +index 9c54d151df..1c96beab7d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1643,6 +1643,7 @@ public final class CraftServer implements Server { +@@ -1579,6 +1579,7 @@ public final class CraftServer implements Server { return helpMap; } diff --git a/Spigot-Server-Patches/0049-Be-a-bit-more-informative-in-maxHealth-exception.patch b/Spigot-Server-Patches/0046-Be-a-bit-more-informative-in-maxHealth-exception.patch similarity index 85% rename from Spigot-Server-Patches/0049-Be-a-bit-more-informative-in-maxHealth-exception.patch rename to Spigot-Server-Patches/0046-Be-a-bit-more-informative-in-maxHealth-exception.patch index c1e7a04e7e..ce147a8bf5 100644 --- a/Spigot-Server-Patches/0049-Be-a-bit-more-informative-in-maxHealth-exception.patch +++ b/Spigot-Server-Patches/0046-Be-a-bit-more-informative-in-maxHealth-exception.patch @@ -1,14 +1,14 @@ -From 03ecaeca914d17d06f7a507ffbccba95a17d5c6f Mon Sep 17 00:00:00 2001 +From a4560c5d987300561be8cf3e09f690b885d9b221 Mon Sep 17 00:00:00 2001 From: kashike Date: Thu, 3 Mar 2016 02:18:39 -0600 Subject: [PATCH] Be a bit more informative in maxHealth exception diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 3a15b47dd6..5f14fb8501 100644 +index d01e06f1b9..defcfc9337 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -100,7 +100,10 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -99,7 +99,10 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { public void setHealth(double health) { health = (float) health; if ((health < 0) || (health > getMaxHealth())) { diff --git a/Spigot-Server-Patches/0050-Player-Tab-List-and-Title-APIs.patch b/Spigot-Server-Patches/0047-Player-Tab-List-and-Title-APIs.patch similarity index 94% rename from Spigot-Server-Patches/0050-Player-Tab-List-and-Title-APIs.patch rename to Spigot-Server-Patches/0047-Player-Tab-List-and-Title-APIs.patch index 0332d3e776..148e021868 100644 --- a/Spigot-Server-Patches/0050-Player-Tab-List-and-Title-APIs.patch +++ b/Spigot-Server-Patches/0047-Player-Tab-List-and-Title-APIs.patch @@ -1,14 +1,14 @@ -From 6648715ea2f2eec29832094e11db75f068948fc0 Mon Sep 17 00:00:00 2001 +From 7ee3c5a8e6f38b0679e2450f39f8e2e9e2413c03 Mon Sep 17 00:00:00 2001 From: Techcable Date: Thu, 3 Mar 2016 02:32:10 -0600 Subject: [PATCH] Player Tab List and Title APIs diff --git a/src/main/java/net/minecraft/server/IChatBaseComponent.java b/src/main/java/net/minecraft/server/IChatBaseComponent.java -index 62fba42c37..48fecffdfe 100644 +index aa8601920b..6e867e2347 100644 --- a/src/main/java/net/minecraft/server/IChatBaseComponent.java +++ b/src/main/java/net/minecraft/server/IChatBaseComponent.java -@@ -398,6 +398,7 @@ public interface IChatBaseComponent extends Message, Iterable { +@@ -43,12 +43,29 @@ public class PacketPlayOutTitle implements Packet { } } @@ -36,6 +36,7 @@ index 7b18c16402..15d62cf066 100644 + } + // Paper end + @Override public void b(PacketDataSerializer packetdataserializer) throws IOException { packetdataserializer.a((Enum) this.a); if (this.a == PacketPlayOutTitle.EnumTitleAction.TITLE || this.a == PacketPlayOutTitle.EnumTitleAction.SUBTITLE || this.a == PacketPlayOutTitle.EnumTitleAction.ACTIONBAR) { @@ -51,7 +52,7 @@ index 7b18c16402..15d62cf066 100644 if (this.a == PacketPlayOutTitle.EnumTitleAction.TIMES) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 5496fae409..b8400876e5 100644 +index 6b93cc3a57..d56fbdf80b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1,5 +1,6 @@ @@ -61,7 +62,7 @@ index 5496fae409..b8400876e5 100644 import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.io.BaseEncoding; -@@ -201,6 +202,96 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -206,6 +207,96 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } } diff --git a/Spigot-Server-Patches/0051-Ensure-inv-drag-is-in-bounds.patch b/Spigot-Server-Patches/0048-Ensure-inv-drag-is-in-bounds.patch similarity index 73% rename from Spigot-Server-Patches/0051-Ensure-inv-drag-is-in-bounds.patch rename to Spigot-Server-Patches/0048-Ensure-inv-drag-is-in-bounds.patch index 28ab9cd977..9cd4a474b5 100644 --- a/Spigot-Server-Patches/0051-Ensure-inv-drag-is-in-bounds.patch +++ b/Spigot-Server-Patches/0048-Ensure-inv-drag-is-in-bounds.patch @@ -1,22 +1,22 @@ -From 645bb0bb0df195ec9f1eb576f86119b6eb3e4012 Mon Sep 17 00:00:00 2001 +From 55aad3b4034fa8a84069684e9dca4cddfd304fc5 Mon Sep 17 00:00:00 2001 From: Joseph Hirschfeld Date: Thu, 3 Mar 2016 02:33:53 -0600 Subject: [PATCH] Ensure inv drag is in bounds diff --git a/src/main/java/net/minecraft/server/Container.java b/src/main/java/net/minecraft/server/Container.java -index b06f229534..2f0f667ad6 100644 +index 7a27993476..a2805011df 100644 --- a/src/main/java/net/minecraft/server/Container.java +++ b/src/main/java/net/minecraft/server/Container.java -@@ -139,7 +139,7 @@ public abstract class Container { - this.c(); +@@ -201,7 +201,7 @@ public abstract class Container { + this.d(); } - } else if (this.g == 1) { + } else if (this.h == 1) { - Slot slot = (Slot) this.slots.get(i); + Slot slot = i < this.slots.size() ? this.slots.get(i) : null; // Paper - Ensure drag in bounds itemstack1 = playerinventory.getCarried(); - if (slot != null && a(slot, itemstack1, true) && slot.isAllowed(itemstack1) && (this.dragType == 2 || itemstack1.getCount() > this.h.size()) && this.b(slot)) { + if (slot != null && a(slot, itemstack1, true) && slot.isAllowed(itemstack1) && (this.dragType == 2 || itemstack1.getCount() > this.i.size()) && this.b(slot)) { -- 2.21.0 diff --git a/Spigot-Server-Patches/0049-Change-implementation-of-tile-entity-removal-list.patch b/Spigot-Server-Patches/0049-Change-implementation-of-tile-entity-removal-list.patch new file mode 100644 index 0000000000..36163633f5 --- /dev/null +++ b/Spigot-Server-Patches/0049-Change-implementation-of-tile-entity-removal-list.patch @@ -0,0 +1,23 @@ +From c79c27636c3f13a9de8cce8b259d834129af3c1f Mon Sep 17 00:00:00 2001 +From: Joseph Hirschfeld +Date: Thu, 3 Mar 2016 02:39:54 -0600 +Subject: [PATCH] Change implementation of (tile)entity removal list + +use sets for faster removal + +diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java +index 48360c2b47..25e5216e25 100644 +--- a/src/main/java/net/minecraft/server/World.java ++++ b/src/main/java/net/minecraft/server/World.java +@@ -40,7 +40,7 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose + public final List tileEntityList = Lists.newArrayList(); + public final List tileEntityListTick = Lists.newArrayList(); + protected final List tileEntityListPending = Lists.newArrayList(); +- protected final List tileEntityListUnload = Lists.newArrayList(); ++ protected final java.util.Set tileEntityListUnload = com.google.common.collect.Sets.newHashSet(); // Paper + private final long b = 16777215L; + private final Thread c; + private int d; +-- +2.21.0 + diff --git a/Spigot-Server-Patches/0050-Add-configurable-portal-search-radius.patch b/Spigot-Server-Patches/0050-Add-configurable-portal-search-radius.patch new file mode 100644 index 0000000000..64fd0c1e9f --- /dev/null +++ b/Spigot-Server-Patches/0050-Add-configurable-portal-search-radius.patch @@ -0,0 +1,41 @@ +From 07c480b2091dfcf5cc56db87c01a25f65eb6b0f2 Mon Sep 17 00:00:00 2001 +From: Joseph Hirschfeld +Date: Thu, 3 Mar 2016 02:46:17 -0600 +Subject: [PATCH] Add configurable portal search radius + + +diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +index be91b11242..320fd07c62 100644 +--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java ++++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +@@ -186,4 +186,9 @@ public class PaperWorldConfig { + private void allChunksAreSlimeChunks() { + allChunksAreSlimeChunks = getBoolean("all-chunks-are-slime-chunks", false); + } ++ ++ public int portalSearchRadius; ++ private void portalSearchRadius() { ++ portalSearchRadius = getInt("portal-search-radius", 128); ++ } + } +diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java +index 1685e694ba..e7ca777c16 100644 +--- a/src/main/java/net/minecraft/server/PortalTravelAgent.java ++++ b/src/main/java/net/minecraft/server/PortalTravelAgent.java +@@ -70,10 +70,11 @@ public class PortalTravelAgent { + } else { + double d2 = Double.MAX_VALUE; + +- for (int i = -128; i <= 128; ++i) { ++ int portalSearchRadius = world.paperConfig.portalSearchRadius; // Paper ++ for (int i = portalSearchRadius; i <= portalSearchRadius; ++i) { // Paper + BlockPosition blockposition2; + +- for (int j = -128; j <= 128; ++j) { ++ for (int j = -world.paperConfig.portalSearchRadius; j <= world.paperConfig.portalSearchRadius; ++j) { // Paper + for (BlockPosition blockposition3 = blockposition.b(i, this.world.getHeight() - 1 - blockposition.getY(), j); blockposition3.getY() >= 0; blockposition3 = blockposition2) { + blockposition2 = blockposition3.down(); + if (this.world.getType(blockposition3).getBlock() == PortalTravelAgent.b) { +-- +2.21.0 + diff --git a/Spigot-Server-Patches/0054-Add-velocity-warnings.patch b/Spigot-Server-Patches/0051-Add-velocity-warnings.patch similarity index 85% rename from Spigot-Server-Patches/0054-Add-velocity-warnings.patch rename to Spigot-Server-Patches/0051-Add-velocity-warnings.patch index 9fc80d5f14..8ecc264d84 100644 --- a/Spigot-Server-Patches/0054-Add-velocity-warnings.patch +++ b/Spigot-Server-Patches/0051-Add-velocity-warnings.patch @@ -1,39 +1,36 @@ -From 85717e8f26f10adcd7edff6d7eb6af12f850e5ac Mon Sep 17 00:00:00 2001 +From e37717afd97ae4f98d32fda26f0c0cc1b1d78dc1 Mon Sep 17 00:00:00 2001 From: Joseph Hirschfeld Date: Thu, 3 Mar 2016 02:48:12 -0600 Subject: [PATCH] Add velocity warnings diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 19fef2496e..54864fe761 100644 +index 1c96beab7d..01d5a49cf7 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -201,6 +201,7 @@ public final class CraftServer implements Server { +@@ -230,6 +230,7 @@ public final class CraftServer implements Server { public boolean ignoreVanillaPermissions = false; private final List playerView; public int reloadCount; + public static Exception excessiveVelEx; // Paper - Velocity warnings - private final class BooleanWrapper { - private boolean value = true; + static { + ConfigurationSerialization.registerClass(CraftOfflinePlayer.class); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 660e59ba15..466750f779 100644 +index 852de0d625..5d9b4a58e2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -266,12 +266,44 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -397,10 +397,41 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { public void setVelocity(Vector velocity) { Preconditions.checkArgument(velocity != null, "velocity"); velocity.checkFinite(); -+ + // Paper start - Warn server owners when plugins try to set super high velocities + if (!(this instanceof org.bukkit.entity.Projectile) && isUnsafeVelocity(velocity)) { + CraftServer.excessiveVelEx = new Exception("Excessive velocity set detected: tried to set velocity of entity " + entity.getName() + " id #" + getEntityId() + " to (" + velocity.getX() + "," + velocity.getY() + "," + velocity.getZ() + ")."); + } + // Paper end + - entity.motX = velocity.getX(); - entity.motY = velocity.getY(); - entity.motZ = velocity.getZ(); + entity.setMot(CraftVector.toNMS(velocity)); entity.velocityChanged = true; } @@ -64,9 +61,9 @@ index 660e59ba15..466750f779 100644 + @Override public double getHeight() { - return getHandle().length; + return getHandle().getHeight(); diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index 8e32c4e2cd..c080a61185 100644 +index 70b187190f..56f5f54bd1 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java @@ -76,7 +76,19 @@ public class WatchdogThread extends Thread @@ -88,8 +85,8 @@ index 8e32c4e2cd..c080a61185 100644 + } + // Paper end log.log( Level.SEVERE, "------------------------------" ); - log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" ); - dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().primaryThread.getId(), Integer.MAX_VALUE ), log ); + log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" ); // Paper + dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE ), log ); -- 2.21.0 diff --git a/Spigot-Server-Patches/0055-Configurable-inter-world-teleportation-safety.patch b/Spigot-Server-Patches/0052-Configurable-inter-world-teleportation-safety.patch similarity index 89% rename from Spigot-Server-Patches/0055-Configurable-inter-world-teleportation-safety.patch rename to Spigot-Server-Patches/0052-Configurable-inter-world-teleportation-safety.patch index d7eacf7dd4..bcf12fcd49 100644 --- a/Spigot-Server-Patches/0055-Configurable-inter-world-teleportation-safety.patch +++ b/Spigot-Server-Patches/0052-Configurable-inter-world-teleportation-safety.patch @@ -1,4 +1,4 @@ -From 7df97e1da4f97dcc72060dcede1d6ae5af0b9e03 Mon Sep 17 00:00:00 2001 +From 3b560988fe8b70cd78cf8e5913ef9b8963cab5c2 Mon Sep 17 00:00:00 2001 From: Sudzzy Date: Thu, 3 Mar 2016 02:50:31 -0600 Subject: [PATCH] Configurable inter-world teleportation safety @@ -16,10 +16,10 @@ The wanted destination was on top of the emerald block however the player ended This only is the case if the player is teleporting between worlds. diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 3137128780..40b54191e6 100644 +index 320fd07c62..94f5c90b3c 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -@@ -199,4 +199,9 @@ public class PaperWorldConfig { +@@ -191,4 +191,9 @@ public class PaperWorldConfig { private void portalSearchRadius() { portalSearchRadius = getInt("portal-search-radius", 128); } @@ -30,10 +30,10 @@ index 3137128780..40b54191e6 100644 + } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index b8400876e5..237210cc89 100644 +index d56fbdf80b..b993d236b5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -717,7 +717,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -743,7 +743,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (fromWorld == toWorld) { entity.playerConnection.teleport(to); } else { diff --git a/Spigot-Server-Patches/0053-Add-configurable-portal-search-radius.patch b/Spigot-Server-Patches/0053-Add-configurable-portal-search-radius.patch deleted file mode 100644 index fac523a366..0000000000 --- a/Spigot-Server-Patches/0053-Add-configurable-portal-search-radius.patch +++ /dev/null @@ -1,58 +0,0 @@ -From e268b8b3e6cbcbb37ebcd90d00a8d2c99c1394ed Mon Sep 17 00:00:00 2001 -From: Joseph Hirschfeld -Date: Thu, 3 Mar 2016 02:46:17 -0600 -Subject: [PATCH] Add configurable portal search radius - - -diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 05d2d50e54..3137128780 100644 ---- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -@@ -194,4 +194,9 @@ public class PaperWorldConfig { - private void allChunksAreSlimeChunks() { - allChunksAreSlimeChunks = getBoolean("all-chunks-are-slime-chunks", false); - } -+ -+ public int portalSearchRadius; -+ private void portalSearchRadius() { -+ portalSearchRadius = getInt("portal-search-radius", 128); -+ } - } -diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java -index b911d830a0..aca4071420 100644 ---- a/src/main/java/net/minecraft/server/PortalTravelAgent.java -+++ b/src/main/java/net/minecraft/server/PortalTravelAgent.java -@@ -13,7 +13,7 @@ import org.bukkit.util.Vector; - public class PortalTravelAgent { - - private static final BlockPortal a = (BlockPortal) Blocks.NETHER_PORTAL; -- private final WorldServer world; -+ public final WorldServer world; // Paper - private -> public - private final Random c; - private final Long2ObjectMap d = new Long2ObjectOpenHashMap(4096); - -@@ -93,7 +93,7 @@ public class PortalTravelAgent { - - public boolean b(Entity entity, float f) { - // CraftBukkit start - Modularize portal search process and entity teleportation -- BlockPosition found = this.findPortal(entity.locX, entity.locY, entity.locZ, 128); -+ BlockPosition found = this.findPortal(entity.locX, entity.locY, entity.locZ, world.paperConfig.portalSearchRadius); // Paper - Configurable search radius - if (found == null) { - return false; - } -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java b/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java -index d4639c8221..e1eb3aa0f3 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java -@@ -12,7 +12,7 @@ public class CraftTravelAgent extends PortalTravelAgent implements TravelAgent { - - public static TravelAgent DEFAULT = null; - -- private int searchRadius = 128; -+ private int searchRadius = world.paperConfig.portalSearchRadius; // Paper - Configurable search radius - private int creationRadius = 16; - private boolean canCreatePortal = true; - --- -2.21.0 - diff --git a/Spigot-Server-Patches/0056-Add-exception-reporting-event.patch b/Spigot-Server-Patches/0053-Add-exception-reporting-event.patch similarity index 62% rename from Spigot-Server-Patches/0056-Add-exception-reporting-event.patch rename to Spigot-Server-Patches/0053-Add-exception-reporting-event.patch index 439fcb92ea..f884aa1ef1 100644 --- a/Spigot-Server-Patches/0056-Add-exception-reporting-event.patch +++ b/Spigot-Server-Patches/0053-Add-exception-reporting-event.patch @@ -1,4 +1,4 @@ -From db3e4015bc83abf1027c05c559d97961b7855218 Mon Sep 17 00:00:00 2001 +From 4a49b7191988e3bc5f52e7ed14194198b26c4c3c Mon Sep 17 00:00:00 2001 From: Joseph Hirschfeld Date: Thu, 3 Mar 2016 03:15:41 -0600 Subject: [PATCH] Add exception reporting event @@ -49,7 +49,7 @@ index 0000000000..f699ce18ca + } +} diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index cb56d067b9..67cd4af4f5 100644 +index 1cf5e388e4..c4103680d4 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -1,5 +1,6 @@ @@ -57,30 +57,22 @@ index cb56d067b9..67cd4af4f5 100644 +import com.destroystokyo.paper.exception.ServerInternalException; import com.google.common.collect.Maps; - import com.google.common.collect.Queues; import com.google.common.collect.Sets; -@@ -424,6 +425,7 @@ public class Chunk implements IChunkAccess { - return this.getBlockData(i, j, k).b(this.world, new BlockPosition(i, j, k)); - } - -+ public IBlockData getBlockData(BlockPosition blockposition) { return getType(blockposition); } // Paper - public IBlockData getType(BlockPosition blockposition) { - return this.getBlockData(blockposition.getX(), blockposition.getY(), blockposition.getZ()); - } -@@ -820,10 +822,15 @@ public class Chunk implements IChunkAccess { + import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +@@ -528,10 +529,15 @@ public class Chunk implements IChunkAccess { this.tileEntities.remove(blockposition); // Paper end } else { - System.out.println("Attempted to place a tile entity (" + tileentity + ") at " + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ() - + " (" + getType(blockposition) + ") where there was no entity tile!"); -- System.out.println("Chunk coordinates: " + (this.locX * 16) + "," + (this.locZ * 16)); +- System.out.println("Chunk coordinates: " + (this.loc.x * 16) + "," + (this.loc.z * 16)); - new Exception().printStackTrace(); + // Paper start + ServerInternalException e = new ServerInternalException( + "Attempted to place a tile entity (" + tileentity + ") at " + tileentity.position.getX() + "," + + tileentity.position.getY() + "," + tileentity.position.getZ() -+ + " (" + getBlockData(blockposition) + ") where there was no entity tile!\n" + -+ "Chunk coordinates: " + (this.locX * 16) + "," + (this.locZ * 16)); ++ + " (" + getType(blockposition) + ") where there was no entity tile!\n" + ++ "Chunk coordinates: " + (this.loc.x * 16) + "," + (this.loc.z * 16)); + e.printStackTrace(); + ServerInternalException.reportInternalException(e); + // Paper end @@ -88,38 +80,21 @@ index cb56d067b9..67cd4af4f5 100644 } } diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index c2ecc034e8..1ed7c7e2c9 100644 +index 4f0fbe4a0d..2dd1c28fab 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java -@@ -13,6 +13,7 @@ import java.util.concurrent.CompletableFuture; +@@ -14,6 +14,9 @@ import java.util.concurrent.Executor; import java.util.function.BooleanSupplier; - import java.util.function.Consumer; + import java.util.function.Supplier; import javax.annotation.Nullable; +import com.destroystokyo.paper.exception.ServerInternalException; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; ++import org.apache.logging.log4j.LogManager; ++import org.apache.logging.log4j.Logger; -@@ -209,9 +210,16 @@ public class ChunkProviderServer implements IChunkProvider { - ichunkaccess.setLastSaved(this.world.getTime()); - this.chunkLoader.saveChunk(this.world, ichunkaccess, unloaded); // Spigot - } catch (IOException ioexception) { -- ChunkProviderServer.a.error("Couldn't save chunk", ioexception); -+ // Paper start -+ String msg = "Couldn\'t save chunk"; -+ ChunkProviderServer.a.error(msg, ioexception); -+ ServerInternalException.reportInternalException(ioexception); - } catch (ExceptionWorldConflict exceptionworldconflict) { -- ChunkProviderServer.a.error("Couldn't save chunk; already in use by another instance of Minecraft?", exceptionworldconflict); -+ ChunkProviderServer.a.error("Couldn\'t save chunk; already in use by another instance of Minecraft?", exceptionworldconflict); -+ String msg = "Couldn\'t save chunk; already in use by another instance of Minecraft?"; -+ ChunkProviderServer.a.error(msg, exceptionworldconflict); -+ ServerInternalException.reportInternalException(exceptionworldconflict); -+ // Paper end - } + public class ChunkProviderServer extends IChunkProvider { - } diff --git a/src/main/java/net/minecraft/server/NameReferencingFileConverter.java b/src/main/java/net/minecraft/server/NameReferencingFileConverter.java -index 09ef8729d9..bf67dbf54a 100644 +index 1dd793d2fb..61ea2818b1 100644 --- a/src/main/java/net/minecraft/server/NameReferencingFileConverter.java +++ b/src/main/java/net/minecraft/server/NameReferencingFileConverter.java @@ -1,5 +1,6 @@ @@ -145,8 +120,28 @@ index 09ef8729d9..bf67dbf54a 100644 } } // CraftBukkit end +diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java +index 528d0f0cd2..be903252be 100644 +--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java ++++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java +@@ -621,6 +621,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + this.world.checkSession(); + } catch (ExceptionWorldConflict exceptionworldconflict) { + PlayerChunkMap.LOGGER.error("Couldn't save chunk; already in use by another instance of Minecraft?", exceptionworldconflict); ++ com.destroystokyo.paper.exception.ServerInternalException.reportInternalException(exceptionworldconflict); // Paper + return; + } + +@@ -647,6 +648,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + this.write(chunkcoordintpair, nbttagcompound); + } catch (Exception exception) { + PlayerChunkMap.LOGGER.error("Failed to save chunk {},{}", chunkcoordintpair.x, chunkcoordintpair.z, exception); ++ com.destroystokyo.paper.exception.ServerInternalException.reportInternalException(exception); // Paper + } + + } diff --git a/src/main/java/net/minecraft/server/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java -index ab151a14d0..0f1c74dd33 100644 +index d4a9af975d..88b5aa3a51 100644 --- a/src/main/java/net/minecraft/server/RegionFile.java +++ b/src/main/java/net/minecraft/server/RegionFile.java @@ -1,5 +1,6 @@ @@ -156,71 +151,52 @@ index ab151a14d0..0f1c74dd33 100644 import com.google.common.collect.Lists; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; -@@ -103,6 +104,7 @@ public class RegionFile { - } - } catch (IOException ioexception) { - ioexception.printStackTrace(); -+ ServerInternalException.reportInternalException(ioexception); // Paper - } - - } -@@ -275,6 +277,7 @@ public class RegionFile { - this.b(i, j, (int) (SystemUtils.getTimeMillis() / 1000L)); - } catch (IOException ioexception) { - ioexception.printStackTrace(); -+ ServerInternalException.reportInternalException(ioexception); // Paper - } - - } -diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java -index c5ca896919..e507a996f1 100644 ---- a/src/main/java/net/minecraft/server/RegionFileCache.java -+++ b/src/main/java/net/minecraft/server/RegionFileCache.java -@@ -1,5 +1,6 @@ - package net.minecraft.server; - -+import com.destroystokyo.paper.exception.ServerInternalException; - import com.google.common.collect.Maps; - import java.io.DataInputStream; - import java.io.DataOutputStream; -@@ -71,6 +72,7 @@ public class RegionFileCache { +@@ -142,6 +143,7 @@ public class RegionFile implements AutoCloseable { } - } catch (IOException ioexception) { - ioexception.printStackTrace(); -+ ServerInternalException.reportInternalException(ioexception); // Paper } + } catch (IOException ioexception) { ++ ServerInternalException.reportInternalException(ioexception); // Paper + return null; + } + } +@@ -252,6 +254,7 @@ public class RegionFile implements AutoCloseable { + this.b(chunkcoordintpair, (int) (SystemUtils.getTimeMillis() / 1000L)); + } catch (IOException ioexception) { + ioexception.printStackTrace(); ++ ServerInternalException.reportInternalException(ioexception); // Paper } + } diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java -index 6720a9648e..2aa0db5c22 100644 +index 9d4febfbb6..7e58e4714a 100644 --- a/src/main/java/net/minecraft/server/SpawnerCreature.java +++ b/src/main/java/net/minecraft/server/SpawnerCreature.java -@@ -10,6 +10,7 @@ import org.apache.logging.log4j.LogManager; +@@ -8,6 +8,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; // CraftBukkit start +import com.destroystokyo.paper.exception.ServerInternalException; - import org.bukkit.craftbukkit.util.LongHash; - import org.bukkit.craftbukkit.util.LongHashSet; import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; -@@ -171,6 +172,7 @@ public final class SpawnerCreature { - entityinsentient = (EntityInsentient) biomebase_biomemeta.b.a((World) worldserver); - } catch (Exception exception) { - SpawnerCreature.a.warn("Failed to create mob", exception); -+ ServerInternalException.reportInternalException(exception); // Paper - return j1; - } + // CraftBukkit end -@@ -291,6 +293,7 @@ public final class SpawnerCreature { - entityinsentient = (EntityInsentient) biomebase_biomemeta.b.a(generatoraccess.getMinecraftWorld()); +@@ -83,6 +84,7 @@ public final class SpawnerCreature { + entityinsentient = (EntityInsentient) entity; + } catch (Exception exception) { + SpawnerCreature.LOGGER.warn("Failed to create mob", exception); ++ ServerInternalException.reportInternalException(exception); // Paper + return; + } + +@@ -208,6 +210,7 @@ public final class SpawnerCreature { + entity = biomebase_biomemeta.b.a(generatoraccess.getMinecraftWorld()); } catch (Exception exception) { - SpawnerCreature.a.warn("Failed to create mob", exception); + SpawnerCreature.LOGGER.warn("Failed to create mob", exception); + ServerInternalException.reportInternalException(exception); // Paper continue; } diff --git a/src/main/java/net/minecraft/server/VillageSiege.java b/src/main/java/net/minecraft/server/VillageSiege.java -index 58122b18eb..0ac1fb53a4 100644 +index d004494aea..d3ed749e1c 100644 --- a/src/main/java/net/minecraft/server/VillageSiege.java +++ b/src/main/java/net/minecraft/server/VillageSiege.java @@ -1,5 +1,7 @@ @@ -229,80 +205,85 @@ index 58122b18eb..0ac1fb53a4 100644 +import com.destroystokyo.paper.exception.ServerInternalException; + import java.util.Iterator; - import java.util.List; import javax.annotation.Nullable; -@@ -136,6 +138,7 @@ public class VillageSiege { - entityzombie.prepare(this.a.getDamageScaler(new BlockPosition(entityzombie)), (GroupDataEntity) null, (NBTTagCompound) null); + +@@ -98,6 +100,7 @@ public class VillageSiege { + entityzombie.prepare(this.a, this.a.getDamageScaler(new BlockPosition(entityzombie)), EnumMobSpawn.EVENT, (GroupDataEntity) null, (NBTTagCompound) null); } catch (Exception exception) { exception.printStackTrace(); + ServerInternalException.reportInternalException(exception); // Paper - return false; + return; } diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 09cf98ccdd..6e7c0c9da4 100644 +index 25e5216e25..55e8c7c7d4 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -1,6 +1,8 @@ - package net.minecraft.server; +@@ -2,6 +2,12 @@ package net.minecraft.server; + import co.aikar.timings.Timing; import co.aikar.timings.Timings; ++<<<<<<< HEAD ++======= +import com.destroystokyo.paper.event.server.ServerExceptionEvent; +import com.destroystokyo.paper.exception.ServerInternalException; - import com.google.common.base.MoreObjects; ++import com.google.common.base.MoreObjects; ++>>>>>>> Add exception reporting event import com.google.common.collect.Lists; - import it.unimi.dsi.fastutil.longs.LongSet; -@@ -1151,8 +1153,10 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc - } catch (Throwable throwable1) { - entity.tickTimer.stopTiming(); - // Paper start - Prevent tile entity and entity crashes -- System.err.println("Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ); -+ String msg = "Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ; -+ System.err.println(msg); - throwable1.printStackTrace(); -+ getServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable1))); - entity.dead = true; - continue; - // Paper end -@@ -1217,8 +1221,10 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc - this.methodProfiler.exit(); - } catch (Throwable throwable2) { + import java.io.IOException; + import java.util.Collection; +@@ -675,8 +681,11 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose + gameprofilerfiller.exit(); + } 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(); + System.err.println(msg); - throwable2.printStackTrace(); -+ getServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable2))); + throwable.printStackTrace(); ++ getServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable))); ++ // Paper end tilesThisCycle--; this.tileEntityListTick.remove(tileTickPosition--); continue; +@@ -750,8 +759,10 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose + consumer.accept(entity); + } catch (Throwable throwable) { + // Paper start - Prevent tile entity and entity crashes +- System.err.println("Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ); ++ String msg = "Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ; ++ System.err.println(msg); + throwable.printStackTrace(); ++ getServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable))); + entity.dead = true; + return; + // Paper end diff --git a/src/main/java/net/minecraft/server/WorldPersistentData.java b/src/main/java/net/minecraft/server/WorldPersistentData.java -index 478bf49976..8d51af2867 100644 +index 3c5b3fe101..47a4ea9985 100644 --- a/src/main/java/net/minecraft/server/WorldPersistentData.java +++ b/src/main/java/net/minecraft/server/WorldPersistentData.java -@@ -138,6 +138,7 @@ public class WorldPersistentData { - - nbttagcompound = GameProfileSerializer.a(idatamanager.i(), DataFixTypes.SAVED_DATA, nbttagcompound1, j, i); - } catch (Throwable throwable1) { -+ com.destroystokyo.paper.exception.ServerInternalException.reportInternalException(throwable1); // Paper - throwable = throwable1; - throw throwable1; +@@ -113,6 +113,7 @@ public class WorldPersistentData { + nbttagcompound = GameProfileSerializer.a(this.c, DataFixTypes.SAVED_DATA, nbttagcompound1, j, i); + } catch (Throwable throwable4) { + throwable = throwable4; ++ com.destroystokyo.paper.exception.ServerInternalException.reportInternalException(throwable); // Paper + throw throwable4; } finally { + if (pushbackinputstream != null) { diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index d75cc42e11..0e9d5fe3a7 100644 +index d99634062b..86a5ee8aac 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -@@ -17,6 +17,9 @@ import java.util.function.Consumer; +@@ -16,6 +16,9 @@ import java.util.concurrent.atomic.AtomicInteger; + import java.util.concurrent.atomic.AtomicReference; + import java.util.function.Consumer; import java.util.logging.Level; - - import co.aikar.timings.MinecraftTimings; // Paper +import com.destroystokyo.paper.ServerSchedulerReportingWrapper; +import com.destroystokyo.paper.event.server.ServerExceptionEvent; +import com.destroystokyo.paper.exception.ServerSchedulerException; import org.apache.commons.lang.Validate; import org.bukkit.plugin.IllegalPluginAccessException; import org.bukkit.plugin.Plugin; -@@ -391,20 +394,26 @@ public class CraftScheduler implements BukkitScheduler { +@@ -390,20 +393,26 @@ public class CraftScheduler implements BukkitScheduler { try { task.run(); } catch (final Throwable throwable) { diff --git a/Spigot-Server-Patches/0057-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch b/Spigot-Server-Patches/0054-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch similarity index 89% rename from Spigot-Server-Patches/0057-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch rename to Spigot-Server-Patches/0054-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch index d6330b5a4b..2e8f25e442 100644 --- a/Spigot-Server-Patches/0057-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch +++ b/Spigot-Server-Patches/0054-Don-t-nest-if-we-don-t-need-to-when-cerealising-text.patch @@ -1,4 +1,4 @@ -From eca375524913b4560c8084481d44c4f819cdca13 Mon Sep 17 00:00:00 2001 +From 4d06ddd34329ea79d1a5fde510b9f360cafb0b24 Mon Sep 17 00:00:00 2001 From: kashike Date: Tue, 8 Mar 2016 18:28:43 -0800 Subject: [PATCH] Don't nest if we don't need to when cerealising text @@ -6,10 +6,10 @@ Subject: [PATCH] Don't nest if we don't need to when cerealising text diff --git a/src/main/java/net/minecraft/server/PacketPlayOutChat.java b/src/main/java/net/minecraft/server/PacketPlayOutChat.java -index 28a2628350..eba6aadad7 100644 +index fa4eab5b0b..0ab611564e 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutChat.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutChat.java -@@ -27,7 +27,14 @@ public class PacketPlayOutChat implements Packet { +@@ -29,7 +29,14 @@ public class PacketPlayOutChat implements Packet { public void b(PacketDataSerializer packetdataserializer) throws IOException { // Spigot start if (components != null) { diff --git a/Spigot-Server-Patches/0058-Disable-Scoreboards-for-non-players-by-default.patch b/Spigot-Server-Patches/0055-Disable-Scoreboards-for-non-players-by-default.patch similarity index 84% rename from Spigot-Server-Patches/0058-Disable-Scoreboards-for-non-players-by-default.patch rename to Spigot-Server-Patches/0055-Disable-Scoreboards-for-non-players-by-default.patch index d2856489c3..f8a639f537 100644 --- a/Spigot-Server-Patches/0058-Disable-Scoreboards-for-non-players-by-default.patch +++ b/Spigot-Server-Patches/0055-Disable-Scoreboards-for-non-players-by-default.patch @@ -1,4 +1,4 @@ -From 9ec1a2698aee9535ee3990f479b4a66dcee686cc Mon Sep 17 00:00:00 2001 +From 3e23947760e0ec7eb777f34679372e128c282a02 Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 8 Mar 2016 23:25:45 -0500 Subject: [PATCH] Disable Scoreboards for non players by default @@ -11,10 +11,10 @@ So avoid looking up scoreboards and short circuit to the "not on a team" logic which is most likely to be true. diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 40b54191e6..06417c8250 100644 +index 94f5c90b3c..30f0dcfd51 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -@@ -204,4 +204,9 @@ public class PaperWorldConfig { +@@ -196,4 +196,9 @@ public class PaperWorldConfig { private void disableTeleportationSuffocationCheck() { disableTeleportationSuffocationCheck = getBoolean("disable-teleportation-suffocation-check", false); } @@ -25,10 +25,10 @@ index 40b54191e6..06417c8250 100644 + } } diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index ad30cdd824..c7f83d4343 100644 +index 49245b5c5f..9ad8893943 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -2264,6 +2264,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2188,6 +2188,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @Nullable public ScoreboardTeamBase getScoreboardTeam() { @@ -37,15 +37,15 @@ index ad30cdd824..c7f83d4343 100644 } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index c5cc0b471b..0ba15fce63 100644 +index d85172e728..e3613a8e67 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -538,6 +538,7 @@ public abstract class EntityLiving extends Entity { +@@ -578,6 +578,7 @@ public abstract class EntityLiving extends Entity { if (nbttagcompound.hasKeyOfType("Team", 8)) { String s = nbttagcompound.getString("Team"); ScoreboardTeam scoreboardteam = this.world.getScoreboard().getTeam(s); + if (!world.paperConfig.nonPlayerEntitiesOnScoreboards && !(this instanceof EntityHuman)) { scoreboardteam = null; } // Paper - boolean flag = scoreboardteam != null && this.world.getScoreboard().addPlayerToTeam(this.bu(), scoreboardteam); + boolean flag = scoreboardteam != null && this.world.getScoreboard().addPlayerToTeam(this.getUniqueIDString(), scoreboardteam); if (!flag) { -- diff --git a/Spigot-Server-Patches/0059-Add-methods-for-working-with-arrows-stuck-in-living-.patch b/Spigot-Server-Patches/0056-Add-methods-for-working-with-arrows-stuck-in-living-.patch similarity index 83% rename from Spigot-Server-Patches/0059-Add-methods-for-working-with-arrows-stuck-in-living-.patch rename to Spigot-Server-Patches/0056-Add-methods-for-working-with-arrows-stuck-in-living-.patch index 238cccefe1..79079dd0fb 100644 --- a/Spigot-Server-Patches/0059-Add-methods-for-working-with-arrows-stuck-in-living-.patch +++ b/Spigot-Server-Patches/0056-Add-methods-for-working-with-arrows-stuck-in-living-.patch @@ -1,14 +1,14 @@ -From 6ed6c06f48ff7c4a5a206dccd1ef433b8bbdd2ad Mon Sep 17 00:00:00 2001 +From 36f151f93826062aa0d486731dd87c96c6ced8dc Mon Sep 17 00:00:00 2001 From: mrapple Date: Sun, 25 Nov 2012 13:43:39 -0600 Subject: [PATCH] Add methods for working with arrows stuck in living entities diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 5f14fb8501..716eda9902 100644 +index defcfc9337..424b2b7088 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -537,4 +537,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -538,4 +538,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { public boolean isCollidable() { return getHandle().collides; } diff --git a/Spigot-Server-Patches/0060-Complete-resource-pack-API.patch b/Spigot-Server-Patches/0057-Complete-resource-pack-API.patch similarity index 89% rename from Spigot-Server-Patches/0060-Complete-resource-pack-API.patch rename to Spigot-Server-Patches/0057-Complete-resource-pack-API.patch index bb12034984..6cf29e262d 100644 --- a/Spigot-Server-Patches/0060-Complete-resource-pack-API.patch +++ b/Spigot-Server-Patches/0057-Complete-resource-pack-API.patch @@ -1,14 +1,14 @@ -From ced6f93ab463262802669d48ad20f64237f9cf3e Mon Sep 17 00:00:00 2001 +From a48383fd414daf754066154d927930852400201e Mon Sep 17 00:00:00 2001 From: Jedediah Smith Date: Sat, 4 Apr 2015 23:17:52 -0400 Subject: [PATCH] Complete resource pack API diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 9a83e5fc0b..8a403354d9 100644 +index 9d7bbafe02..e83ebaf4f4 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -1302,7 +1302,11 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable { +@@ -1344,7 +1344,11 @@ public class PlayerConnection implements PacketListenerPlayIn { // CraftBukkit start public void a(PacketPlayInResourcePackStatus packetplayinresourcepackstatus) { PlayerConnectionUtils.ensureMainThread(packetplayinresourcepackstatus, this, this.player.getWorldServer()); @@ -22,10 +22,10 @@ index 9a83e5fc0b..8a403354d9 100644 // CraftBukkit end diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 237210cc89..5b9f2dd4a6 100644 +index b993d236b5..326200fd58 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -126,6 +126,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -131,6 +131,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { private double health = 20; private boolean scaledHealth = false; private double healthScale = 20; @@ -36,7 +36,7 @@ index 237210cc89..5b9f2dd4a6 100644 public CraftPlayer(CraftServer server, EntityPlayer entity) { super(server, entity); -@@ -1737,6 +1741,32 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1753,6 +1757,32 @@ public class CraftPlayer extends CraftHumanEntity implements Player { getHandle().server.getCommandDispatcher().a(getHandle()); } diff --git a/Spigot-Server-Patches/0062-Chunk-Save-Reattempt.patch b/Spigot-Server-Patches/0058-Chunk-Save-Reattempt.patch similarity index 54% rename from Spigot-Server-Patches/0062-Chunk-Save-Reattempt.patch rename to Spigot-Server-Patches/0058-Chunk-Save-Reattempt.patch index 11e2efa311..21b000f827 100644 --- a/Spigot-Server-Patches/0062-Chunk-Save-Reattempt.patch +++ b/Spigot-Server-Patches/0058-Chunk-Save-Reattempt.patch @@ -1,4 +1,4 @@ -From c1b75aa5e3a7cdc24024773406bb873d6e33943f Mon Sep 17 00:00:00 2001 +From dfe7064ed97f2a3c987416aea3c613aea3fc8a7a Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 4 Mar 2013 23:46:10 -0500 Subject: [PATCH] Chunk Save Reattempt @@ -6,12 +6,12 @@ Subject: [PATCH] Chunk Save Reattempt We commonly have "Stream Closed" errors on chunk saving, so this code should re-try to save the chunk in the event of failure and hopefully prevent rollbacks. diff --git a/src/main/java/net/minecraft/server/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java -index 0f1c74dd33..9626396745 100644 +index 88b5aa3a51..b062a31c49 100644 --- a/src/main/java/net/minecraft/server/RegionFile.java +++ b/src/main/java/net/minecraft/server/RegionFile.java -@@ -276,8 +276,7 @@ public class RegionFile { +@@ -253,8 +253,7 @@ public class RegionFile implements AutoCloseable { - this.b(i, j, (int) (SystemUtils.getTimeMillis() / 1000L)); + this.b(chunkcoordintpair, (int) (SystemUtils.getTimeMillis() / 1000L)); } catch (IOException ioexception) { - ioexception.printStackTrace(); - ServerInternalException.reportInternalException(ioexception); // Paper @@ -20,39 +20,33 @@ index 0f1c74dd33..9626396745 100644 } diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java -index e507a996f1..5dbd1d517a 100644 +index ad76ed27dc..75731c9195 100644 --- a/src/main/java/net/minecraft/server/RegionFileCache.java +++ b/src/main/java/net/minecraft/server/RegionFileCache.java -@@ -95,11 +95,29 @@ public class RegionFileCache { +@@ -79,6 +79,7 @@ public abstract class RegionFileCache implements AutoCloseable { + } - @Nullable - public static synchronized void write(File file, int i, int j, NBTTagCompound nbttagcompound) throws IOException { + protected void write(ChunkCoordIntPair chunkcoordintpair, NBTTagCompound nbttagcompound) throws IOException { + int attempts = 0; Exception laste = null; while (attempts++ < 5) { try { // Paper - RegionFile regionfile = a(file, i, j); + RegionFile regionfile = this.a(chunkcoordintpair, false); // CraftBukkit + DataOutputStream dataoutputstream = regionfile.c(chunkcoordintpair); + Throwable throwable = null; +@@ -103,6 +104,15 @@ public abstract class RegionFileCache implements AutoCloseable { - DataOutputStream dataoutputstream = regionfile.c(i & 31, j & 31); - NBTCompressedStreamTools.a(nbttagcompound, (java.io.DataOutput) dataoutputstream); - dataoutputstream.close(); -+ // Paper start -+ laste = null; break; // Paper -+ } catch (Exception exception) { -+ //ChunkRegionLoader.a.error("Failed to save chunk", exception); // Paper -+ laste = exception; // Paper -+ } -+ try { -+ Thread.sleep(10); -+ } catch (InterruptedException e) { -+ e.printStackTrace(); -+ } + } + ++ } catch (Exception ex) { ++ laste = ex; + } ++ } ++ + if (laste != null) { + com.destroystokyo.paper.exception.ServerInternalException.reportInternalException(laste); + MinecraftServer.LOGGER.error("Failed to save chunk", laste); + } -+ // Paper end } - public static synchronized boolean chunkExists(File file, int i, int j) { + public void close() throws IOException { -- 2.21.0 diff --git a/Spigot-Server-Patches/0063-Default-loading-permissions.yml-before-plugins.patch b/Spigot-Server-Patches/0059-Default-loading-permissions.yml-before-plugins.patch similarity index 80% rename from Spigot-Server-Patches/0063-Default-loading-permissions.yml-before-plugins.patch rename to Spigot-Server-Patches/0059-Default-loading-permissions.yml-before-plugins.patch index 75a6f9d9ce..e496ec934a 100644 --- a/Spigot-Server-Patches/0063-Default-loading-permissions.yml-before-plugins.patch +++ b/Spigot-Server-Patches/0059-Default-loading-permissions.yml-before-plugins.patch @@ -1,4 +1,4 @@ -From 7272a07d2a6c2b85366e6b9d769a3ae244a5f1d4 Mon Sep 17 00:00:00 2001 +From fe3c0cae53d542ce74b4ef691996f63f62e36a90 Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 18 Mar 2016 13:17:38 -0400 Subject: [PATCH] Default loading permissions.yml before plugins @@ -16,12 +16,12 @@ modify that. Under the previous logic, plugins were unable (cleanly) override pe A config option has been added for those who depend on the previous behavior, but I don't expect that. diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index 4e932ea235..e4ba7146d1 100644 +index 7691409f6c..809b3a1a4a 100644 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java -@@ -223,4 +223,9 @@ public class PaperConfig { - enableFileIOThreadSleep = getBoolean("settings.sleep-between-chunk-saves", false); - if (enableFileIOThreadSleep) Bukkit.getLogger().info("Enabled sleeping between chunk saves, beware of memory issues"); +@@ -210,4 +210,9 @@ public class PaperConfig { + " - Interval: " + timeSummary(Timings.getHistoryInterval() / 20) + + " - Length: " + timeSummary(Timings.getHistoryLength() / 20)); } + + public static boolean loadPermsBeforePlugins = true; @@ -30,10 +30,10 @@ index 4e932ea235..e4ba7146d1 100644 + } } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 54864fe761..6f2d74cf1c 100644 +index 01d5a49cf7..b2861fd0ba 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -342,6 +342,7 @@ public final class CraftServer implements Server { +@@ -364,6 +364,7 @@ public final class CraftServer implements Server { if (type == PluginLoadOrder.STARTUP) { helpMap.clear(); helpMap.initializeGeneralTopics(); @@ -41,7 +41,7 @@ index 54864fe761..6f2d74cf1c 100644 } Plugin[] plugins = pluginManager.getPlugins(); -@@ -361,7 +362,7 @@ public final class CraftServer implements Server { +@@ -383,7 +384,7 @@ public final class CraftServer implements Server { commandMap.registerServerAliases(); DefaultPermissions.registerCorePermissions(); CraftDefaultPermissions.registerCorePermissions(); diff --git a/Spigot-Server-Patches/0064-Allow-Reloading-of-Custom-Permissions.patch b/Spigot-Server-Patches/0060-Allow-Reloading-of-Custom-Permissions.patch similarity index 89% rename from Spigot-Server-Patches/0064-Allow-Reloading-of-Custom-Permissions.patch rename to Spigot-Server-Patches/0060-Allow-Reloading-of-Custom-Permissions.patch index 1100b7fdb8..168e2c4e80 100644 --- a/Spigot-Server-Patches/0064-Allow-Reloading-of-Custom-Permissions.patch +++ b/Spigot-Server-Patches/0060-Allow-Reloading-of-Custom-Permissions.patch @@ -1,4 +1,4 @@ -From d4818b38c5161ad66b8d3ffc6c3e38a8a22d40e4 Mon Sep 17 00:00:00 2001 +From eee12efdff4e2f32f84f028a95839c0da8018e70 Mon Sep 17 00:00:00 2001 From: William Date: Fri, 18 Mar 2016 03:30:17 -0400 Subject: [PATCH] Allow Reloading of Custom Permissions @@ -6,10 +6,10 @@ Subject: [PATCH] Allow Reloading of Custom Permissions https://github.com/PaperMC/Paper/issues/49 diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 6f2d74cf1c..c291bceedd 100644 +index b2861fd0ba..591d3702b5 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2093,5 +2093,23 @@ public final class CraftServer implements Server { +@@ -2029,5 +2029,23 @@ public final class CraftServer implements Server { return false; } } diff --git a/Spigot-Server-Patches/0065-Remove-Metadata-on-reload.patch b/Spigot-Server-Patches/0061-Remove-Metadata-on-reload.patch similarity index 87% rename from Spigot-Server-Patches/0065-Remove-Metadata-on-reload.patch rename to Spigot-Server-Patches/0061-Remove-Metadata-on-reload.patch index 34b1f0a851..b1d3b692c8 100644 --- a/Spigot-Server-Patches/0065-Remove-Metadata-on-reload.patch +++ b/Spigot-Server-Patches/0061-Remove-Metadata-on-reload.patch @@ -1,4 +1,4 @@ -From 2fab64d6e4e209edbcfc14e8c325890bfa935caf Mon Sep 17 00:00:00 2001 +From 616a1b27492ade45ede12846a3777483571eade3 Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 18 Mar 2016 13:50:14 -0400 Subject: [PATCH] Remove Metadata on reload @@ -7,10 +7,10 @@ Metadata is not meant to persist reload as things break badly with non primitive This will remove metadata on reload so it does not crash everything if a plugin uses it. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index c291bceedd..5e821b84d6 100644 +index 591d3702b5..cf9594ea2b 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -799,8 +799,18 @@ public final class CraftServer implements Server { +@@ -795,8 +795,18 @@ public final class CraftServer implements Server { world.paperConfig.init(); // Paper } diff --git a/Spigot-Server-Patches/0066-Undead-horse-leashing.patch b/Spigot-Server-Patches/0062-Undead-horse-leashing.patch similarity index 83% rename from Spigot-Server-Patches/0066-Undead-horse-leashing.patch rename to Spigot-Server-Patches/0062-Undead-horse-leashing.patch index 4aebda00b4..63bf4e6baa 100644 --- a/Spigot-Server-Patches/0066-Undead-horse-leashing.patch +++ b/Spigot-Server-Patches/0062-Undead-horse-leashing.patch @@ -1,4 +1,4 @@ -From 5c09f39b2cf1a6c4c976c3902ac4ed220e99b893 Mon Sep 17 00:00:00 2001 +From 989e29da01a1fe8a5673b645ea326833b94d7391 Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 18 Mar 2016 14:19:19 -0400 Subject: [PATCH] Undead horse leashing @@ -6,10 +6,10 @@ Subject: [PATCH] Undead horse leashing default false to match vanilla, but option to allow undead horse types to be leashed. diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 06417c8250..66243835a5 100644 +index 30f0dcfd51..89556dc94a 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -@@ -209,4 +209,9 @@ public class PaperWorldConfig { +@@ -201,4 +201,9 @@ public class PaperWorldConfig { private void nonPlayerEntitiesOnScoreboards() { nonPlayerEntitiesOnScoreboards = getBoolean("allow-non-player-entities-on-scoreboards", false); } @@ -20,18 +20,18 @@ index 06417c8250..66243835a5 100644 + } } diff --git a/src/main/java/net/minecraft/server/EntityHorseAbstract.java b/src/main/java/net/minecraft/server/EntityHorseAbstract.java -index fc89cc89a4..953277631a 100644 +index e9f34c9307..8ce2fca806 100644 --- a/src/main/java/net/minecraft/server/EntityHorseAbstract.java +++ b/src/main/java/net/minecraft/server/EntityHorseAbstract.java -@@ -113,7 +113,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven - } +@@ -107,7 +107,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven + @Override public boolean a(EntityHuman entityhuman) { - return super.a(entityhuman) && this.getMonsterType() != EnumMonsterType.UNDEAD; + return world.paperConfig.allowLeashingUndeadHorse ? super.a(entityhuman) : super.a(entityhuman) && this.getMonsterType() != EnumMonsterType.UNDEAD; // Paper } - protected void u(float f) { + @Override -- 2.21.0 diff --git a/Spigot-Server-Patches/0067-Handle-Item-Meta-Inconsistencies.patch b/Spigot-Server-Patches/0063-Handle-Item-Meta-Inconsistencies.patch similarity index 84% rename from Spigot-Server-Patches/0067-Handle-Item-Meta-Inconsistencies.patch rename to Spigot-Server-Patches/0063-Handle-Item-Meta-Inconsistencies.patch index 72eabf7816..c43a988771 100644 --- a/Spigot-Server-Patches/0067-Handle-Item-Meta-Inconsistencies.patch +++ b/Spigot-Server-Patches/0063-Handle-Item-Meta-Inconsistencies.patch @@ -1,4 +1,4 @@ -From 08653afb00866b63ce45e73d12eac4be100fe9f9 Mon Sep 17 00:00:00 2001 +From 254ea00cb305b0db306aafaf25b383c0e3b83fb4 Mon Sep 17 00:00:00 2001 From: Aikar Date: Thu, 28 May 2015 23:00:19 -0400 Subject: [PATCH] Handle Item Meta Inconsistencies @@ -18,7 +18,7 @@ For consistency, the old API methods now forward to use the ItemMeta API equivalents, and should deprecate the old API's. diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index a7fc148591..37d37f1f64 100644 +index aa6a58dd88..b643a41235 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -7,6 +7,8 @@ import com.mojang.brigadier.StringReader; @@ -30,7 +30,7 @@ index a7fc148591..37d37f1f64 100644 import java.util.Locale; import java.util.Objects; import java.util.Random; -@@ -65,6 +67,22 @@ public final class ItemStack { +@@ -66,6 +68,22 @@ public final class ItemStack { decimalformat.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.ROOT)); return decimalformat; } @@ -53,7 +53,7 @@ index a7fc148591..37d37f1f64 100644 public ItemStack(IMaterial imaterial) { this(imaterial, 1); -@@ -107,6 +125,7 @@ public final class ItemStack { +@@ -100,6 +118,7 @@ public final class ItemStack { if (nbttagcompound.hasKeyOfType("tag", 10)) { // CraftBukkit start - make defensive copy as this data may be coming from the save thread this.tag = (NBTTagCompound) nbttagcompound.getCompound("tag").clone(); @@ -61,7 +61,7 @@ index a7fc148591..37d37f1f64 100644 this.getItem().a(this.tag); // CraftBukkit end } -@@ -612,6 +631,7 @@ public final class ItemStack { +@@ -613,6 +632,7 @@ public final class ItemStack { // Paper end public void setTag(@Nullable NBTTagCompound nbttagcompound) { this.tag = nbttagcompound; @@ -69,27 +69,19 @@ index a7fc148591..37d37f1f64 100644 } public IChatBaseComponent getName() { -@@ -688,6 +708,7 @@ public final class ItemStack { +@@ -689,6 +709,7 @@ public final class ItemStack { nbttagcompound.setString("id", String.valueOf(IRegistry.ENCHANTMENT.getKey(enchantment))); nbttagcompound.setShort("lvl", (short) ((byte) i)); - nbttaglist.add((NBTBase) nbttagcompound); + nbttaglist.add(nbttagcompound); + processEnchantOrder(nbttagcompound); // Paper } public boolean hasEnchantments() { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -index f907d4f3b7..eeb2c5689e 100644 +index 9ed7f8ede4..6c00ca7378 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java -@@ -4,6 +4,7 @@ import static org.bukkit.craftbukkit.inventory.CraftMetaItem.ENCHANTMENTS; - import static org.bukkit.craftbukkit.inventory.CraftMetaItem.ENCHANTMENTS_ID; - import static org.bukkit.craftbukkit.inventory.CraftMetaItem.ENCHANTMENTS_LVL; - -+import java.util.Iterator; - import java.util.Map; - - import net.minecraft.server.EnchantmentManager; -@@ -187,28 +188,11 @@ public final class CraftItemStack extends ItemStack { +@@ -178,28 +178,11 @@ public final class CraftItemStack extends ItemStack { public void addUnsafeEnchantment(Enchantment ench, int level) { Validate.notNull(ench, "Cannot add null enchantment"); @@ -123,7 +115,7 @@ index f907d4f3b7..eeb2c5689e 100644 } static boolean makeTag(net.minecraft.server.ItemStack item) { -@@ -225,66 +209,32 @@ public final class CraftItemStack extends ItemStack { +@@ -216,66 +199,32 @@ public final class CraftItemStack extends ItemStack { @Override public boolean containsEnchantment(Enchantment ench) { @@ -201,43 +193,43 @@ index f907d4f3b7..eeb2c5689e 100644 static Map getEnchantments(net.minecraft.server.ItemStack item) { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java -index ef6437f380..2508cfcfa2 100644 +index e3ca978f89..b3f8249b06 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java -@@ -8,6 +8,7 @@ import java.lang.reflect.Constructor; - import java.lang.reflect.InvocationTargetException; - import java.util.ArrayList; +@@ -24,6 +24,7 @@ import java.util.ArrayList; + import java.util.Arrays; import java.util.Collection; -+import java.util.Comparator; + import java.util.EnumSet; ++import java.util.Comparator; // Paper import java.util.HashMap; import java.util.Iterator; - import java.util.List; -@@ -24,6 +25,7 @@ import com.google.common.collect.SetMultimap; + import java.util.LinkedHashMap; +@@ -32,6 +33,7 @@ import java.util.Locale; + import java.util.Map; + import java.util.NoSuchElementException; + import java.util.Set; ++import java.util.TreeMap; // Paper + import java.util.logging.Level; + import java.util.logging.Logger; + import javax.annotation.Nonnull; +@@ -41,6 +43,7 @@ import net.minecraft.server.EnumChatFormat; import net.minecraft.server.EnumItemSlot; import net.minecraft.server.GenericAttributes; import net.minecraft.server.IChatBaseComponent; -+import com.google.common.collect.ImmutableSortedMap; ++import com.google.common.collect.ImmutableSortedMap; // Paper import net.minecraft.server.NBTBase; + import net.minecraft.server.NBTCompressedStreamTools; import net.minecraft.server.NBTTagCompound; - import net.minecraft.server.NBTTagList; -@@ -66,6 +68,7 @@ import java.util.Arrays; - import java.util.EnumSet; - import java.util.LinkedHashMap; - import java.util.Set; -+import java.util.TreeMap; - import java.util.logging.Level; - import java.util.logging.Logger; - import net.minecraft.server.EnumChatFormat; -@@ -257,7 +260,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable { - private IChatBaseComponent displayName; - private IChatBaseComponent locName; - private List lore; +@@ -263,7 +266,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { + private List lore; + private Integer customModelData; + private String blockData; - private Map enchantments; + private EnchantmentMap enchantments; // Paper private Multimap attributeModifiers; private int repairCost; private int hideFlag; -@@ -268,7 +271,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable { +@@ -274,7 +277,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { private static final CraftCustomTagTypeRegistry TAG_TYPE_REGISTRY = new CraftCustomTagTypeRegistry(); private NBTTagCompound internalTag; @@ -245,9 +237,9 @@ index ef6437f380..2508cfcfa2 100644 + private final Map unhandledTags = new TreeMap<>(); // Paper private final CraftCustomItemTagContainer publicItemTagContainer = new CraftCustomItemTagContainer(TAG_TYPE_REGISTRY); - CraftMetaItem(CraftMetaItem meta) { -@@ -284,7 +287,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable { - } + private int version = CraftMagicNumbers.INSTANCE.getDataVersion(); // Internal use only +@@ -295,7 +298,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { + this.blockData = meta.blockData; if (meta.enchantments != null) { // Spigot - this.enchantments = new LinkedHashMap(meta.enchantments); @@ -255,7 +247,7 @@ index ef6437f380..2508cfcfa2 100644 } if (meta.hasAttributeModifiers()) { -@@ -367,13 +370,13 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable { +@@ -391,13 +394,13 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { } } @@ -271,7 +263,7 @@ index ef6437f380..2508cfcfa2 100644 for (int i = 0; i < ench.size(); i++) { String id = ((NBTTagCompound) ench.get(i)).getString(ENCHANTMENTS_ID.NBT); -@@ -515,13 +518,13 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable { +@@ -549,13 +552,13 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { } } @@ -287,7 +279,7 @@ index ef6437f380..2508cfcfa2 100644 for (Map.Entry entry : ench.entrySet()) { // Doctor older enchants String enchantKey = entry.getKey().toString(); -@@ -756,13 +759,13 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable { +@@ -798,13 +801,13 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { } public Map getEnchants() { @@ -303,16 +295,16 @@ index ef6437f380..2508cfcfa2 100644 } if (ignoreRestrictions || level >= ench.getStartLevel() && level <= ench.getMaxLevel()) { -@@ -1089,7 +1092,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable { - clone.lore = new ArrayList(this.lore); - } +@@ -1170,7 +1173,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { + clone.customModelData = this.customModelData; + clone.blockData = this.blockData; if (this.enchantments != null) { - clone.enchantments = new LinkedHashMap(this.enchantments); + clone.enchantments = new EnchantmentMap(this.enchantments); // Paper } if (this.hasAttributeModifiers()) { clone.attributeModifiers = HashMultimap.create(this.attributeModifiers); -@@ -1295,6 +1298,23 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable { +@@ -1395,6 +1398,23 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { } } diff --git a/Spigot-Server-Patches/0068-Configurable-Non-Player-Arrow-Despawn-Rate.patch b/Spigot-Server-Patches/0064-Configurable-Non-Player-Arrow-Despawn-Rate.patch similarity index 88% rename from Spigot-Server-Patches/0068-Configurable-Non-Player-Arrow-Despawn-Rate.patch rename to Spigot-Server-Patches/0064-Configurable-Non-Player-Arrow-Despawn-Rate.patch index dd0f1129d1..8bbf89e1ff 100644 --- a/Spigot-Server-Patches/0068-Configurable-Non-Player-Arrow-Despawn-Rate.patch +++ b/Spigot-Server-Patches/0064-Configurable-Non-Player-Arrow-Despawn-Rate.patch @@ -1,4 +1,4 @@ -From 95f17033a7ed30132e1486f3b5b456dfe42e24cb Mon Sep 17 00:00:00 2001 +From cf9d4765f9a0d62dc30e80f49f03bdc67c590c8c Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 18 Mar 2016 15:12:22 -0400 Subject: [PATCH] Configurable Non Player Arrow Despawn Rate @@ -6,10 +6,10 @@ Subject: [PATCH] Configurable Non Player Arrow Despawn Rate Can set a much shorter despawn rate for arrows that players can not pick up. diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 66243835a5..803e680894 100644 +index 89556dc94a..98049567f4 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -@@ -214,4 +214,19 @@ public class PaperWorldConfig { +@@ -206,4 +206,19 @@ public class PaperWorldConfig { private void allowLeashingUndeadHorse() { allowLeashingUndeadHorse = getBoolean("allow-leashing-undead-horse", false); } @@ -30,12 +30,12 @@ index 66243835a5..803e680894 100644 + } } diff --git a/src/main/java/net/minecraft/server/EntityArrow.java b/src/main/java/net/minecraft/server/EntityArrow.java -index e8ce99eb96..feafb82dd3 100644 +index bc391812d3..b5b569ef95 100644 --- a/src/main/java/net/minecraft/server/EntityArrow.java +++ b/src/main/java/net/minecraft/server/EntityArrow.java -@@ -261,7 +261,7 @@ public abstract class EntityArrow extends Entity implements IProjectile { +@@ -263,7 +263,7 @@ public abstract class EntityArrow extends Entity implements IProjectile { - protected void f() { + protected void i() { ++this.despawnCounter; - if (this.despawnCounter >= world.spigotConfig.arrowDespawnRate) { // Spigot + if (this.despawnCounter >= (fromPlayer == PickupStatus.CREATIVE_ONLY ? world.paperConfig.creativeArrowDespawnRate : (fromPlayer == PickupStatus.DISALLOWED ? world.paperConfig.nonPlayerArrowDespawnRate : world.spigotConfig.arrowDespawnRate))) { // Spigot // Paper diff --git a/Spigot-Server-Patches/0069-Add-World-Util-Methods.patch b/Spigot-Server-Patches/0065-Add-World-Util-Methods.patch similarity index 80% rename from Spigot-Server-Patches/0069-Add-World-Util-Methods.patch rename to Spigot-Server-Patches/0065-Add-World-Util-Methods.patch index 1d375dadaf..16d0610b05 100644 --- a/Spigot-Server-Patches/0069-Add-World-Util-Methods.patch +++ b/Spigot-Server-Patches/0065-Add-World-Util-Methods.patch @@ -1,4 +1,4 @@ -From b1d5dfc632f2a84e5332754114d2a2ba0a866578 Mon Sep 17 00:00:00 2001 +From 87bc4fe3532a93119223040e6cc70d3fc4f93303 Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 18 Mar 2016 20:16:03 -0400 Subject: [PATCH] Add World Util Methods @@ -6,22 +6,22 @@ Subject: [PATCH] Add World Util Methods Methods that can be used for other patches to help improve logic. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 67cd4af4f5..3f9de7e55a 100644 +index c4103680d4..9433d04f43 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -637,6 +637,7 @@ public class Chunk implements IChunkAccess { - } +@@ -388,6 +388,7 @@ public class Chunk implements IChunkAccess { + return this.world.getChunkProvider().getLightEngine(); } + public final int getLightSubtracted(BlockPosition blockposition, int i) { return this.a(blockposition, i); } // Paper - OBFHELPER public int a(BlockPosition blockposition, int i) { - return this.a(blockposition, i, this.world.o().g()); + return this.a(blockposition, i, this.world.getWorldProvider().g()); } diff --git a/src/main/java/net/minecraft/server/IWorldReader.java b/src/main/java/net/minecraft/server/IWorldReader.java -index 646c5a91b8..554825ec1f 100644 +index bac6c9d65b..0930552b1f 100644 --- a/src/main/java/net/minecraft/server/IWorldReader.java +++ b/src/main/java/net/minecraft/server/IWorldReader.java -@@ -38,6 +38,22 @@ public interface IWorldReader extends IBlockAccess { +@@ -36,6 +36,22 @@ public interface IWorldReader extends IIBlockAccess { } int getLightLevel(BlockPosition blockposition, int i); @@ -42,23 +42,23 @@ index 646c5a91b8..554825ec1f 100644 + } + // Paper end - boolean isChunkLoaded(int i, int j, boolean flag); - + @Nullable + IChunkAccess getChunkAt(int i, int j, ChunkStatus chunkstatus, boolean flag); diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 6e7c0c9da4..fd45090685 100644 +index 55e8c7c7d4..e8831e2a40 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -79,7 +79,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc - public final List k = Lists.newArrayList(); - protected final IntHashMap entitiesById = new IntHashMap<>(); - private final long F = 16777215L; -- private int G; -+ private int G; public int getSkylightSubtracted() { return this.G; } public void setSkylightSubtracted(int value) { this.G = value;} // Paper - OBFHELPER - protected int m = (new Random()).nextInt(); - protected final int n = 1013904223; - protected float o; -@@ -268,6 +268,83 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc - return this.getType(blockposition).isAir(); +@@ -49,7 +49,7 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose + protected final java.util.Set tileEntityListUnload = com.google.common.collect.Sets.newHashSet(); // Paper + private final long b = 16777215L; + private final Thread c; +- private int d; ++ private int d; public int getSkylightSubtracted() { return this.d; } public void setSkylightSubtracted(int value) { this.d = value;} // Paper - OBFHELPER + protected int j = (new Random()).nextInt(); + protected final int k = 1013904223; + protected float l; +@@ -211,6 +211,83 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose + return i < 0 || i >= 256; } + // Paper start diff --git a/Spigot-Server-Patches/0072-Custom-replacement-for-eaten-items.patch b/Spigot-Server-Patches/0066-Custom-replacement-for-eaten-items.patch similarity index 86% rename from Spigot-Server-Patches/0072-Custom-replacement-for-eaten-items.patch rename to Spigot-Server-Patches/0066-Custom-replacement-for-eaten-items.patch index 563d899a60..0ba7268f09 100644 --- a/Spigot-Server-Patches/0072-Custom-replacement-for-eaten-items.patch +++ b/Spigot-Server-Patches/0066-Custom-replacement-for-eaten-items.patch @@ -1,14 +1,14 @@ -From c48af2c45b56bb77f6f7d8ff7286e3edb2100c71 Mon Sep 17 00:00:00 2001 +From 0ef7232e104adf85bbf7fd538240d57576a5f9ec Mon Sep 17 00:00:00 2001 From: Jedediah Smith Date: Sun, 21 Jun 2015 15:07:20 -0400 Subject: [PATCH] Custom replacement for eaten items diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 0ba15fce63..a12cc1e92f 100644 +index e3613a8e67..44570edcae 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2600,12 +2600,13 @@ public abstract class EntityLiving extends Entity { +@@ -2811,12 +2811,13 @@ public abstract class EntityLiving extends Entity { protected void q() { if (!this.activeItem.isEmpty() && this.isHandRaised()) { @@ -23,7 +23,7 @@ index 0ba15fce63..a12cc1e92f 100644 world.getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { -@@ -2620,9 +2621,20 @@ public abstract class EntityLiving extends Entity { +@@ -2831,9 +2832,20 @@ public abstract class EntityLiving extends Entity { itemstack = this.activeItem.a(this.world, this); } @@ -33,9 +33,9 @@ index 0ba15fce63..a12cc1e92f 100644 + itemstack = CraftItemStack.asNMSCopy(event.getReplacement()); + } + // Paper end - this.a(this.cU(), itemstack); + this.a(this.getRaisedHand(), itemstack); // CraftBukkit end - this.da(); + this.dp(); + // Paper start - if the replacement is anything but the default, update the client inventory + if (this instanceof EntityPlayer && !com.google.common.base.Objects.equal(defaultReplacement, itemstack)) { + ((EntityPlayer) this).getBukkitEntity().updateInventory(); diff --git a/Spigot-Server-Patches/0073-handle-NaN-health-absorb-values-and-repair-bad-data.patch b/Spigot-Server-Patches/0067-handle-NaN-health-absorb-values-and-repair-bad-data.patch similarity index 84% rename from Spigot-Server-Patches/0073-handle-NaN-health-absorb-values-and-repair-bad-data.patch rename to Spigot-Server-Patches/0067-handle-NaN-health-absorb-values-and-repair-bad-data.patch index b5d0a9a017..81b6a17b2c 100644 --- a/Spigot-Server-Patches/0073-handle-NaN-health-absorb-values-and-repair-bad-data.patch +++ b/Spigot-Server-Patches/0067-handle-NaN-health-absorb-values-and-repair-bad-data.patch @@ -1,16 +1,16 @@ -From 36bbdf4c9c7c6b8cb7e51c4bb264c0d041c0ca62 Mon Sep 17 00:00:00 2001 +From 464d72e32ae10b3fe24c1191eb13cabde58a3872 Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 27 Sep 2015 01:18:02 -0400 Subject: [PATCH] handle NaN health/absorb values and repair bad data diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index a12cc1e92f..2454083b2d 100644 +index 44570edcae..5ae7014887 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -499,7 +499,13 @@ public abstract class EntityLiving extends Entity { - } +@@ -539,7 +539,13 @@ public abstract class EntityLiving extends Entity { + @Override public void a(NBTTagCompound nbttagcompound) { - this.setAbsorptionHearts(nbttagcompound.getFloat("AbsorptionAmount")); + // Paper start - jvm keeps optimizing the setter @@ -23,7 +23,7 @@ index a12cc1e92f..2454083b2d 100644 if (nbttagcompound.hasKeyOfType("Attributes", 9) && this.world != null && !this.world.isClientSide) { GenericAttributes.a(this.getAttributeMap(), nbttagcompound.getList("Attributes", 10)); } -@@ -891,6 +897,10 @@ public abstract class EntityLiving extends Entity { +@@ -984,6 +990,10 @@ public abstract class EntityLiving extends Entity { } public void setHealth(float f) { @@ -34,7 +34,7 @@ index a12cc1e92f..2454083b2d 100644 // CraftBukkit start - Handle scaled health if (this instanceof EntityPlayer) { org.bukkit.craftbukkit.entity.CraftPlayer player = ((EntityPlayer) this).getBukkitEntity(); -@@ -2465,7 +2475,7 @@ public abstract class EntityLiving extends Entity { +@@ -2669,7 +2679,7 @@ public abstract class EntityLiving extends Entity { } public void setAbsorptionHearts(float f) { @@ -44,10 +44,10 @@ index a12cc1e92f..2454083b2d 100644 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 5b9f2dd4a6..d0f8ad0b69 100644 +index 326200fd58..e866480f04 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1537,6 +1537,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1563,6 +1563,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } public void setRealHealth(double health) { diff --git a/Spigot-Server-Patches/0075-Waving-banner-workaround.patch b/Spigot-Server-Patches/0068-Waving-banner-workaround.patch similarity index 86% rename from Spigot-Server-Patches/0075-Waving-banner-workaround.patch rename to Spigot-Server-Patches/0068-Waving-banner-workaround.patch index 42b4f82282..3b489e1760 100644 --- a/Spigot-Server-Patches/0075-Waving-banner-workaround.patch +++ b/Spigot-Server-Patches/0068-Waving-banner-workaround.patch @@ -1,4 +1,4 @@ -From 86123fbf9b9faa759b1e7434b45c4989462fbe53 Mon Sep 17 00:00:00 2001 +From 39bc4d6e5b8c9f20b00e7b94737aa73615d0c13a Mon Sep 17 00:00:00 2001 From: Gabscap Date: Sat, 19 Mar 2016 22:25:11 +0100 Subject: [PATCH] Waving banner workaround @@ -6,7 +6,7 @@ Subject: [PATCH] Waving banner workaround This patch is a workaround for MC-63720 diff --git a/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java b/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java -index c5c3f40ce0..6413f76e78 100644 +index 88c3d7efaf..15af5927f3 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java @@ -4,7 +4,13 @@ import java.io.IOException; @@ -32,7 +32,7 @@ index c5c3f40ce0..6413f76e78 100644 + // Paper end } - public void a(PacketDataSerializer packetdataserializer) throws IOException { + @Override -- 2.21.0 diff --git a/Spigot-Server-Patches/0076-Use-a-Shared-Random-for-Entities.patch b/Spigot-Server-Patches/0069-Use-a-Shared-Random-for-Entities.patch similarity index 86% rename from Spigot-Server-Patches/0076-Use-a-Shared-Random-for-Entities.patch rename to Spigot-Server-Patches/0069-Use-a-Shared-Random-for-Entities.patch index bbaa1d4c28..0ab6a12438 100644 --- a/Spigot-Server-Patches/0076-Use-a-Shared-Random-for-Entities.patch +++ b/Spigot-Server-Patches/0069-Use-a-Shared-Random-for-Entities.patch @@ -1,4 +1,4 @@ -From be2cfdf1b97735d405aa7f13d4507e4c9f4fbd29 Mon Sep 17 00:00:00 2001 +From da7e2198ebbb80405295fbe12e64addb0c7de6bc Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 22 Mar 2016 00:33:47 -0400 Subject: [PATCH] Use a Shared Random for Entities @@ -6,10 +6,10 @@ Subject: [PATCH] Use a Shared Random for Entities Reduces memory usage and provides ensures more randomness, Especially since a lot of garbage entity objects get created. diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index c7f83d4343..cbbb243d1c 100644 +index 9ad8893943..5744760acc 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -49,6 +49,20 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -51,6 +51,20 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke // CraftBukkit start private static final int CURRENT_LEVEL = 2; @@ -31,9 +31,9 @@ index c7f83d4343..cbbb243d1c 100644 return tag.hasKey("Bukkit.updateLevel") && tag.getInt("Bukkit.updateLevel") >= level; } @@ -182,7 +196,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke - this.length = 1.8F; - this.aA = 1.0F; - this.aB = 1.0F; + this.B = Vec3D.a; + this.av = 1.0F; + this.aw = 1.0F; - this.random = new Random(); + this.random = SHARED_RANDOM; // Paper this.fireTicks = -this.getMaxFireTicks(); diff --git a/Spigot-Server-Patches/0079-Configurable-spawn-chances-for-skeleton-horses.patch b/Spigot-Server-Patches/0070-Configurable-spawn-chances-for-skeleton-horses.patch similarity index 51% rename from Spigot-Server-Patches/0079-Configurable-spawn-chances-for-skeleton-horses.patch rename to Spigot-Server-Patches/0070-Configurable-spawn-chances-for-skeleton-horses.patch index 4f923b7930..1138261c1e 100644 --- a/Spigot-Server-Patches/0079-Configurable-spawn-chances-for-skeleton-horses.patch +++ b/Spigot-Server-Patches/0070-Configurable-spawn-chances-for-skeleton-horses.patch @@ -1,14 +1,14 @@ -From e1625b6c8dfcb3cb82f0e3a14397ce35eb32d94d Mon Sep 17 00:00:00 2001 +From 5b49cb442c080f47eacf6e695ab324164edda124 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Tue, 22 Mar 2016 12:04:28 -0500 Subject: [PATCH] Configurable spawn chances for skeleton horses diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 803e680894..be380ac75e 100644 +index 98049567f4..2a71381dae 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -@@ -229,4 +229,12 @@ public class PaperWorldConfig { +@@ -221,4 +221,12 @@ public class PaperWorldConfig { log("Non Player Arrow Despawn Rate: " + nonPlayerArrowDespawnRate); log("Creative Arrow Despawn Rate: " + creativeArrowDespawnRate); } @@ -22,18 +22,18 @@ index 803e680894..be380ac75e 100644 + } } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index ed6f3afcfe..aaeb888a8c 100644 +index e176c63fed..9a4a558467 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -480,7 +480,7 @@ public class WorldServer extends World implements IAsyncTaskHandler { - blockposition = this.a(new BlockPosition(j + (l & 15), 0, k + (l >> 8 & 15))); - if (this.isRainingAt(blockposition)) { - DifficultyDamageScaler difficultydamagescaler = this.getDamageScaler(blockposition); -- boolean flag2 = this.getGameRules().getBoolean("doMobSpawning") && this.random.nextDouble() < (double) difficultydamagescaler.b() * 0.01D; -+ boolean flag2 = this.getGameRules().getBoolean("doMobSpawning") && this.random.nextDouble() < (double) difficultydamagescaler.b() * paperConfig.skeleHorseSpawnChance; // Paper +@@ -397,7 +397,7 @@ public class WorldServer extends World { + blockposition = this.a(this.a(j, 0, k, 15)); + if (this.isRainingAt(blockposition)) { + DifficultyDamageScaler difficultydamagescaler = this.getDamageScaler(blockposition); +- boolean flag1 = this.getGameRules().getBoolean("doMobSpawning") && this.random.nextDouble() < (double) difficultydamagescaler.b() * 0.01D; ++ boolean flag1 = this.getGameRules().getBoolean("doMobSpawning") && this.random.nextDouble() < (double) difficultydamagescaler.b() * paperConfig.skeleHorseSpawnChance; // Paper; - if (flag2) { - EntityHorseSkeleton entityhorseskeleton = new EntityHorseSkeleton(this); + if (flag1) { + EntityHorseSkeleton entityhorseskeleton = (EntityHorseSkeleton) EntityTypes.SKELETON_HORSE.a((World) this); -- 2.21.0 diff --git a/Spigot-Server-Patches/0047-Avoid-hopper-searches-if-there-are-no-items.patch b/removed/1.14/0047-Avoid-hopper-searches-if-there-are-no-items.patch similarity index 100% rename from Spigot-Server-Patches/0047-Avoid-hopper-searches-if-there-are-no-items.patch rename to removed/1.14/0047-Avoid-hopper-searches-if-there-are-no-items.patch diff --git a/Spigot-Server-Patches/0052-Change-implementation-of-tile-entity-removal-list.patch b/removed/1.14/0052-Change-implementation-of-tile-entity-removal-list.patch similarity index 100% rename from Spigot-Server-Patches/0052-Change-implementation-of-tile-entity-removal-list.patch rename to removed/1.14/0052-Change-implementation-of-tile-entity-removal-list.patch diff --git a/Spigot-Server-Patches/0061-Chunk-save-queue-improvements.patch b/removed/1.14/0061-Chunk-save-queue-improvements.patch similarity index 100% rename from Spigot-Server-Patches/0061-Chunk-save-queue-improvements.patch rename to removed/1.14/0061-Chunk-save-queue-improvements.patch diff --git a/Spigot-Server-Patches/0070-Optimized-Light-Level-Comparisons.patch b/removed/1.14/0070-Optimized-Light-Level-Comparisons.patch similarity index 100% rename from Spigot-Server-Patches/0070-Optimized-Light-Level-Comparisons.patch rename to removed/1.14/0070-Optimized-Light-Level-Comparisons.patch diff --git a/Spigot-Server-Patches/0071-Pass-world-to-Village-creation.patch b/removed/1.14/0071-Pass-world-to-Village-creation.patch similarity index 100% rename from Spigot-Server-Patches/0071-Pass-world-to-Village-creation.patch rename to removed/1.14/0071-Pass-world-to-Village-creation.patch diff --git a/Spigot-Server-Patches/0074-Catch-Async-PlayerChunkMap-operations.patch b/removed/1.14/0074-Catch-Async-PlayerChunkMap-operations.patch similarity index 100% rename from Spigot-Server-Patches/0074-Catch-Async-PlayerChunkMap-operations.patch rename to removed/1.14/0074-Catch-Async-PlayerChunkMap-operations.patch diff --git a/Spigot-Server-Patches/0077-Don-t-teleport-dead-entities.patch b/removed/1.14/0077-Don-t-teleport-dead-entities.patch similarity index 100% rename from Spigot-Server-Patches/0077-Don-t-teleport-dead-entities.patch rename to removed/1.14/0077-Don-t-teleport-dead-entities.patch diff --git a/Spigot-Server-Patches/0078-Optimize-Chunk-Access.patch b/removed/1.14/0078-Optimize-Chunk-Access.patch similarity index 100% rename from Spigot-Server-Patches/0078-Optimize-Chunk-Access.patch rename to removed/1.14/0078-Optimize-Chunk-Access.patch