From ced183982a82486c5ab638fd2138ef6bc45c3ea5 Mon Sep 17 00:00:00 2001 From: Byteflux Date: Fri, 25 Mar 2016 02:02:35 -0700 Subject: [PATCH] Add Entity Origin API This replaces the TNT and Falling Block Source Location API with a more general purpose API that works with all entities. --- ...API.patch => 0006-Entity-Origin-API.patch} | 36 ++- .../0025-Entity-Origin-API.patch | 152 ++++++++++ ...ck-and-TNTPrimed-source-location-API.patch | 267 ------------------ ...event-tile-entity-and-entity-crashes.patch | 8 +- ...nfigurable-top-of-nether-void-damage.patch | 8 +- .../0031-Lighting-Queue.patch | 8 +- .../0045-Configurable-TNT-cannon-fix.patch | 34 +-- .../0051-Disable-spigot-tick-limiters.patch | 8 +- ...Made-EntityDismountEvent-Cancellable.patch | 8 +- ...opper-searches-if-there-are-no-items.patch | 4 +- ...entation-of-tile-entity-removal-list.patch | 8 +- .../0075-Add-exception-reporting-event.patch | 10 +- ...oreboards-for-non-players-by-default.patch | 10 +- .../0100-Optimize-Chunk-Unload-Queue.patch | 10 +- ...103-Use-a-Shared-Random-for-Entities.patch | 8 +- .../0104-Don-t-teleport-dead-entities.patch | 8 +- ...ptimize-isValidLocation-for-inlining.patch | 10 +- 17 files changed, 253 insertions(+), 344 deletions(-) rename Spigot-API-Patches/{0006-FallingBlock-and-TNTPrimed-source-location-API.patch => 0006-Entity-Origin-API.patch} (51%) create mode 100644 Spigot-Server-Patches/0025-Entity-Origin-API.patch delete mode 100644 Spigot-Server-Patches/0025-FallingBlock-and-TNTPrimed-source-location-API.patch diff --git a/Spigot-API-Patches/0006-FallingBlock-and-TNTPrimed-source-location-API.patch b/Spigot-API-Patches/0006-Entity-Origin-API.patch similarity index 51% rename from Spigot-API-Patches/0006-FallingBlock-and-TNTPrimed-source-location-API.patch rename to Spigot-API-Patches/0006-Entity-Origin-API.patch index d58923892c..c1eaa2e854 100644 --- a/Spigot-API-Patches/0006-FallingBlock-and-TNTPrimed-source-location-API.patch +++ b/Spigot-API-Patches/0006-Entity-Origin-API.patch @@ -1,14 +1,34 @@ -From 77c518b68d30af9a16dee08c8352fdeb2c9ad371 Mon Sep 17 00:00:00 2001 +From b63b68858570e7fa3b29c47c4124fcc69bd87098 Mon Sep 17 00:00:00 2001 From: Byteflux Date: Mon, 29 Feb 2016 17:50:31 -0600 -Subject: [PATCH] FallingBlock and TNTPrimed source location API +Subject: [PATCH] Entity Origin API +diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java +index 9f4d48b..b82d112 100644 +--- a/src/main/java/org/bukkit/entity/Entity.java ++++ b/src/main/java/org/bukkit/entity/Entity.java +@@ -374,4 +374,15 @@ public interface Entity extends Metadatable, CommandSender { + + Spigot spigot(); + // Spigot End ++ ++ // Paper start ++ /** ++ * Gets the location where this entity originates from. ++ *

++ * This value can be null if the entity hasn't yet been added to the world. ++ * ++ * @return Location where entity originates or null if not yet added ++ */ ++ Location getOrigin(); ++ // Paper end + } diff --git a/src/main/java/org/bukkit/entity/FallingBlock.java b/src/main/java/org/bukkit/entity/FallingBlock.java -index bc56fa2..ae9033c 100644 +index bc56fa2..360e149 100644 --- a/src/main/java/org/bukkit/entity/FallingBlock.java +++ b/src/main/java/org/bukkit/entity/FallingBlock.java -@@ -59,4 +59,11 @@ public interface FallingBlock extends Entity { +@@ -59,4 +59,13 @@ public interface FallingBlock extends Entity { * @param hurtEntities whether entities will be damaged by this block. */ void setHurtEntities(boolean hurtEntities); @@ -17,14 +37,16 @@ index bc56fa2..ae9033c 100644 + * Gets the source block location of the FallingBlock + * + * @return the source block location the FallingBlock was spawned from ++ * @deprecated replaced by {@link Entity#getOrigin()} + */ ++ @Deprecated + public org.bukkit.Location getSourceLoc(); } diff --git a/src/main/java/org/bukkit/entity/TNTPrimed.java b/src/main/java/org/bukkit/entity/TNTPrimed.java -index 3ce322d..74b82f9 100644 +index 3ce322d..69df487 100644 --- a/src/main/java/org/bukkit/entity/TNTPrimed.java +++ b/src/main/java/org/bukkit/entity/TNTPrimed.java -@@ -35,4 +35,11 @@ public interface TNTPrimed extends Explosive { +@@ -35,4 +35,13 @@ public interface TNTPrimed extends Explosive { * @return the source of this primed TNT */ public Entity getSource(); @@ -33,7 +55,9 @@ index 3ce322d..74b82f9 100644 + * Gets the source block location of the TNTPrimed + * + * @return the source block location the TNTPrimed was spawned from ++ * @deprecated replaced by {@link Entity#getOrigin()} + */ ++ @Deprecated + public org.bukkit.Location getSourceLoc(); } -- diff --git a/Spigot-Server-Patches/0025-Entity-Origin-API.patch b/Spigot-Server-Patches/0025-Entity-Origin-API.patch new file mode 100644 index 0000000000..70f8eb0398 --- /dev/null +++ b/Spigot-Server-Patches/0025-Entity-Origin-API.patch @@ -0,0 +1,152 @@ +From bfa2721aa0e6c9406977d18b648f2eae3d082109 Mon Sep 17 00:00:00 2001 +From: Byteflux +Date: Tue, 1 Mar 2016 23:45:08 -0600 +Subject: [PATCH] Entity Origin API + + +diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java +index f4b9481..eaaca75 100644 +--- a/src/main/java/net/minecraft/server/Entity.java ++++ b/src/main/java/net/minecraft/server/Entity.java +@@ -142,6 +142,7 @@ public abstract class Entity implements ICommandListener { + public org.bukkit.projectiles.ProjectileSource projectileSource; // CraftBukkit - For projectiles only + public boolean forceExplosionKnockback; // CraftBukkit - SPIGOT-949 + public Timing tickTimer = SpigotTimings.getEntityTimings(this); // Paper ++ public Location origin; // Paper + // Spigot start + public final byte activationType = org.spigotmc.ActivationRange.initializeEntityActivationType(this); + public final boolean defaultActivationState; +@@ -1347,6 +1348,11 @@ public abstract class Entity implements ICommandListener { + } + } + ++ // Paper start - Save the entity's origin location ++ if (origin != null) { ++ nbttagcompound.set("Paper.Origin", this.a(origin.getX(), origin.getY(), origin.getZ())); ++ } ++ // Paper end + } catch (Throwable throwable) { + CrashReport crashreport = CrashReport.a(throwable, "Saving entity NBT"); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Entity being saved"); +@@ -1480,6 +1486,15 @@ public abstract class Entity implements ICommandListener { + } + // CraftBukkit end + ++ // Paper start - Restore the entity's origin location ++ if (origin == null) { ++ NBTTagList originTag = nbttagcompound.getList("Paper.Origin", 6); ++ if (!originTag.isEmpty()) { ++ origin = new Location(world.getWorld(), originTag.e(0), originTag.e(1), originTag.e(2)); ++ } ++ } ++ // Paper end ++ + } catch (Throwable throwable) { + CrashReport crashreport = CrashReport.a(throwable, "Loading entity NBT"); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Entity being loaded"); +diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java +index 6246c05..8f2b253 100644 +--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java ++++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java +@@ -242,6 +242,14 @@ public class EntityFallingBlock extends Entity { + this.block = Blocks.SAND.getBlockData(); + } + ++ // Paper start - Try and load origin location from the old NBT tags for backwards compatibility ++ if (nbttagcompound.hasKey("SourceLoc_x")) { ++ int srcX = nbttagcompound.getInt("SourceLoc_x"); ++ int srcY = nbttagcompound.getInt("SourceLoc_y"); ++ int srcZ = nbttagcompound.getInt("SourceLoc_z"); ++ origin = new org.bukkit.Location(world.getWorld(), srcX, srcY, srcZ); ++ } ++ // Paper end + } + + public void a(boolean flag) { +diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java +index 564ea37..1113b1c 100644 +--- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java ++++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java +@@ -104,6 +104,14 @@ public class EntityTNTPrimed extends Entity { + + protected void a(NBTTagCompound nbttagcompound) { + this.setFuseTicks(nbttagcompound.getShort("Fuse")); ++ // Paper start - Try and load origin location from the old NBT tags for backwards compatibility ++ if (nbttagcompound.hasKey("SourceLoc_x")) { ++ int srcX = nbttagcompound.getInt("SourceLoc_x"); ++ int srcY = nbttagcompound.getInt("SourceLoc_y"); ++ int srcZ = nbttagcompound.getInt("SourceLoc_z"); ++ origin = new org.bukkit.Location(world.getWorld(), srcX, srcY, srcZ); ++ } ++ // Paper end + } + + public EntityLiving getSource() { +diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java +index 9124558..18d0bd8 100644 +--- a/src/main/java/net/minecraft/server/World.java ++++ b/src/main/java/net/minecraft/server/World.java +@@ -948,6 +948,12 @@ public abstract class World implements IBlockAccess { + int j = MathHelper.floor(entity.locZ / 16.0D); + boolean flag = entity.attachedToPlayer; + ++ // Paper start - Set origin location when the entity is being added to the world ++ if (entity.origin == null) { ++ entity.origin = entity.getBukkitEntity().getLocation(); ++ } ++ // Paper end ++ + if (entity instanceof EntityHuman) { + flag = true; + } +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +index 3b29578..ae2dc49 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +@@ -593,4 +593,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { + return spigot; + } + // Spigot end ++ ++ // Paper start ++ @Override ++ public Location getOrigin() { ++ return getHandle().origin; ++ } ++ // Paper end + } +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java +index 75eed48..65e1408 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java +@@ -57,4 +57,11 @@ public class CraftFallingSand extends CraftEntity implements FallingSand { + public void setHurtEntities(boolean hurtEntities) { + getHandle().hurtEntities = hurtEntities; + } ++ ++ // Paper start ++ @Override ++ public org.bukkit.Location getSourceLoc() { ++ return getOrigin(); ++ } ++ // Paper end + } +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java +index c493c9c..93843aa 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java +@@ -65,4 +65,11 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed { + + return null; + } ++ ++ // Paper start ++ @Override ++ public org.bukkit.Location getSourceLoc() { ++ return getOrigin(); ++ } ++ // Paper end + } +-- +2.7.1.windows.2 + diff --git a/Spigot-Server-Patches/0025-FallingBlock-and-TNTPrimed-source-location-API.patch b/Spigot-Server-Patches/0025-FallingBlock-and-TNTPrimed-source-location-API.patch deleted file mode 100644 index 9074271adf..0000000000 --- a/Spigot-Server-Patches/0025-FallingBlock-and-TNTPrimed-source-location-API.patch +++ /dev/null @@ -1,267 +0,0 @@ -From e34f99c1db1594796d68b10e563925c324b255f2 Mon Sep 17 00:00:00 2001 -From: Byteflux -Date: Tue, 1 Mar 2016 23:45:08 -0600 -Subject: [PATCH] FallingBlock and TNTPrimed source location API - - -diff --git a/src/main/java/net/minecraft/server/BlockDragonEgg.java b/src/main/java/net/minecraft/server/BlockDragonEgg.java -index f6095af..5c12227 100644 ---- a/src/main/java/net/minecraft/server/BlockDragonEgg.java -+++ b/src/main/java/net/minecraft/server/BlockDragonEgg.java -@@ -33,7 +33,10 @@ public class BlockDragonEgg extends Block { - byte b0 = 32; - - if (!BlockFalling.instaFall && world.areChunksLoadedBetween(blockposition.a(-b0, -b0, -b0), blockposition.a(b0, b0, b0))) { -- world.addEntity(new EntityFallingBlock(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), this.getBlockData())); -+ // Paper start - Add FallingBlock source location API -+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F)); -+ world.addEntity(new EntityFallingBlock(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), this.getBlockData())); -+ // Paper end - } else { - world.setAir(blockposition); - -diff --git a/src/main/java/net/minecraft/server/BlockFalling.java b/src/main/java/net/minecraft/server/BlockFalling.java -index 6654240..936a754 100644 ---- a/src/main/java/net/minecraft/server/BlockFalling.java -+++ b/src/main/java/net/minecraft/server/BlockFalling.java -@@ -36,7 +36,10 @@ public class BlockFalling extends Block { - - if (!BlockFalling.instaFall && world.areChunksLoadedBetween(blockposition.a(-b0, -b0, -b0), blockposition.a(b0, b0, b0))) { - if (!world.isClientSide) { -- EntityFallingBlock entityfallingblock = new EntityFallingBlock(world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D, world.getType(blockposition)); -+ // Paper start - Add FallingBlock source location -+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F)); -+ EntityFallingBlock entityfallingblock = new EntityFallingBlock(loc, world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D, world.getType(blockposition)); -+ // Paper end - - this.a(entityfallingblock); - world.addEntity(entityfallingblock); -diff --git a/src/main/java/net/minecraft/server/BlockTNT.java b/src/main/java/net/minecraft/server/BlockTNT.java -index f794167..09d5f7b 100644 ---- a/src/main/java/net/minecraft/server/BlockTNT.java -+++ b/src/main/java/net/minecraft/server/BlockTNT.java -@@ -29,7 +29,8 @@ public class BlockTNT extends Block { - - public void wasExploded(World world, BlockPosition blockposition, Explosion explosion) { - if (!world.isClientSide) { -- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); -+ org.bukkit.Location loc = explosion.source instanceof EntityTNTPrimed ? ((EntityTNTPrimed) explosion.source).sourceLoc : new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // Paper -+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); // Paper - Add loc - - entitytntprimed.setFuseTicks((short) (world.random.nextInt(entitytntprimed.getFuseTicks() / 4) + entitytntprimed.getFuseTicks() / 8)); - world.addEntity(entitytntprimed); -@@ -43,7 +44,8 @@ public class BlockTNT extends Block { - public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving) { - if (!world.isClientSide) { - if (((Boolean) iblockdata.get(BlockTNT.EXPLODE)).booleanValue()) { -- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), entityliving); -+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // Paper -+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), entityliving); // Paper - Add loc - - world.addEntity(entitytntprimed); - world.a((EntityHuman) null, entitytntprimed.locX, entitytntprimed.locY, entitytntprimed.locZ, SoundEffects.gj, SoundCategory.BLOCKS, 1.0F, 1.0F); -diff --git a/src/main/java/net/minecraft/server/DispenserRegistry.java b/src/main/java/net/minecraft/server/DispenserRegistry.java -index d7bea3d..c1c0c7c 100644 ---- a/src/main/java/net/minecraft/server/DispenserRegistry.java -+++ b/src/main/java/net/minecraft/server/DispenserRegistry.java -@@ -519,7 +519,7 @@ public class DispenserRegistry { - } - } - -- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ(), (EntityLiving) null); -+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(block.getLocation(), world, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ(), (EntityLiving) null); // Paper - Add source loc - // CraftBukkit end - - world.addEntity(entitytntprimed); -diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java -index 6246c05..5e8523d 100644 ---- a/src/main/java/net/minecraft/server/EntityFallingBlock.java -+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java -@@ -17,13 +17,25 @@ public class EntityFallingBlock extends Entity { - private float fallHurtAmount = 2.0F; - public NBTTagCompound tileEntityData; - protected static final DataWatcherObject d = DataWatcher.a(EntityFallingBlock.class, DataWatcherRegistry.j); -+ public org.bukkit.Location sourceLoc; // Paper - -+ // Paper start - FallingBlock source location API - public EntityFallingBlock(World world) { -+ this(null, world); -+ } -+ -+ public EntityFallingBlock(org.bukkit.Location loc, World world) { - super(world); - } - - public EntityFallingBlock(World world, double d0, double d1, double d2, IBlockData iblockdata) { -+ this(null, world, d0, d1, d2, iblockdata); -+ } -+ -+ public EntityFallingBlock(org.bukkit.Location loc, World world, double d0, double d1, double d2, IBlockData iblockdata) { - super(world); -+ sourceLoc = loc; -+ // Paper end - this.block = iblockdata; - this.i = true; - this.setSize(0.98F, 0.98F); -@@ -206,6 +218,13 @@ public class EntityFallingBlock extends Entity { - nbttagcompound.set("TileEntityData", this.tileEntityData); - } - -+ // Paper start - Add FallingBlock source location API -+ if (sourceLoc != null) { -+ nbttagcompound.setInt("SourceLoc_x", sourceLoc.getBlockX()); -+ nbttagcompound.setInt("SourceLoc_y", sourceLoc.getBlockY()); -+ nbttagcompound.setInt("SourceLoc_z", sourceLoc.getBlockZ()); -+ } -+ // Paper end - } - - protected void a(NBTTagCompound nbttagcompound) { -@@ -242,6 +261,14 @@ public class EntityFallingBlock extends Entity { - this.block = Blocks.SAND.getBlockData(); - } - -+ // Paper start - Add FallingBlock source location API -+ if (nbttagcompound.hasKey("SourceLoc_x")) { -+ int srcX = nbttagcompound.getInt("SourceLoc_x"); -+ int srcY = nbttagcompound.getInt("SourceLoc_y"); -+ int srcZ = nbttagcompound.getInt("SourceLoc_z"); -+ sourceLoc = new org.bukkit.Location(world.getWorld(), srcX, srcY, srcZ); -+ } -+ // Paper end - } - - public void a(boolean flag) { -diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java -index 564ea37..1820c7b 100644 ---- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java -+++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java -@@ -9,16 +9,28 @@ public class EntityTNTPrimed extends Entity { - private int c; - public float yield = 4; // CraftBukkit - add field - public boolean isIncendiary = false; // CraftBukkit - add field -+ public org.bukkit.Location sourceLoc; // Paper - TNT soure location API - -+ // Paper start - TNT source location API - public EntityTNTPrimed(World world) { -+ this(null, world); -+ } -+ -+ public EntityTNTPrimed(org.bukkit.Location loc, World world) { - super(world); -+ sourceLoc = loc; -+ // Paper end - this.c = 80; - this.i = true; - this.setSize(0.98F, 0.98F); - } - - public EntityTNTPrimed(World world, double d0, double d1, double d2, EntityLiving entityliving) { -- this(world); -+ this(null, world, d0, d1, d2, entityliving); -+ } -+ -+ public EntityTNTPrimed(org.bukkit.Location loc, World world, double d0, double d1, double d2, EntityLiving entityliving) { -+ this(loc, world); - this.setPosition(d0, d1, d2); - float f = (float) (Math.random() * 6.2831854820251465D); - -@@ -100,10 +112,25 @@ public class EntityTNTPrimed extends Entity { - - protected void b(NBTTagCompound nbttagcompound) { - nbttagcompound.setShort("Fuse", (short) this.getFuseTicks()); -+ // Paper start - TNT source location API -+ if (sourceLoc != null) { -+ nbttagcompound.setInt("SourceLoc_x", sourceLoc.getBlockX()); -+ nbttagcompound.setInt("SourceLoc_y", sourceLoc.getBlockY()); -+ nbttagcompound.setInt("SourceLoc_z", sourceLoc.getBlockZ()); -+ } -+ // Paper end - } - - protected void a(NBTTagCompound nbttagcompound) { - this.setFuseTicks(nbttagcompound.getShort("Fuse")); -+ // Paper start - TNT source location API -+ if (nbttagcompound.hasKey("SourceLoc_x")) { -+ int srcX = nbttagcompound.getInt("SourceLoc_x"); -+ int srcY = nbttagcompound.getInt("SourceLoc_y"); -+ int srcZ = nbttagcompound.getInt("SourceLoc_z"); -+ sourceLoc = new org.bukkit.Location(world.getWorld(), srcX, srcY, srcZ); -+ } -+ // Paper end - } - - public EntityLiving getSource() { -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 83e3003..25edfb8 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -921,7 +921,10 @@ public class CraftWorld implements World { - double y = location.getBlockY() + 0.5; - double z = location.getBlockZ() + 0.5; - -- EntityFallingBlock entity = new EntityFallingBlock(world, x, y, z, net.minecraft.server.Block.getById(material.getId()).fromLegacyData(data)); -+ // Paper start - Add FallingBlock source location API -+ location = location.clone(); -+ EntityFallingBlock entity = new EntityFallingBlock(location, world, x, y, z, net.minecraft.server.Block.getById(material.getId()).fromLegacyData(data)); -+ // Paper end - entity.ticksLived = 1; - - world.addEntity(entity, SpawnReason.CUSTOM); -@@ -957,7 +960,10 @@ public class CraftWorld implements World { - int type = CraftMagicNumbers.getId(blockData.getBlock()); - int data = blockData.getBlock().toLegacyData(blockData); - -- entity = new EntityFallingBlock(world, x + 0.5, y + 0.5, z + 0.5, net.minecraft.server.Block.getById(type).fromLegacyData(data)); -+ // Paper start - Add FallingBlock source location API -+ location = location.clone(); -+ entity = new EntityFallingBlock(location, world, x + 0.5, y + 0.5, z + 0.5, net.minecraft.server.Block.getById(type).fromLegacyData(data)); -+ // Paper end - } else if (Projectile.class.isAssignableFrom(clazz)) { - if (Snowball.class.isAssignableFrom(clazz)) { - entity = new EntitySnowball(world, x, y, z); -@@ -1162,7 +1168,8 @@ public class CraftWorld implements World { - throw new IllegalArgumentException("Cannot spawn hanging entity for " + clazz.getName() + " at " + location); - } - } else if (TNTPrimed.class.isAssignableFrom(clazz)) { -- entity = new EntityTNTPrimed(world, x, y, z, null); -+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), x, y, z); // Paper -+ entity = new EntityTNTPrimed(loc, world, x, y, z, null); - } else if (ExperienceOrb.class.isAssignableFrom(clazz)) { - entity = new EntityExperienceOrb(world, x, y, z, 0); - } else if (Weather.class.isAssignableFrom(clazz)) { -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java -index 75eed48..9e6ed0c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java -@@ -57,4 +57,11 @@ public class CraftFallingSand extends CraftEntity implements FallingSand { - public void setHurtEntities(boolean hurtEntities) { - getHandle().hurtEntities = hurtEntities; - } -+ -+ // Paper start - Add FallingBlock source location API -+ @Override -+ public org.bukkit.Location getSourceLoc() { -+ return getHandle().sourceLoc; -+ } -+ // Paper end - } -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java -index c493c9c..eea3238 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java -@@ -65,4 +65,11 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed { - - return null; - } -+ -+ // Paper start -+ @Override -+ public org.bukkit.Location getSourceLoc() { -+ return getHandle().sourceLoc; -+ } -+ // Paper end - } --- -2.7.1.windows.2 - diff --git a/Spigot-Server-Patches/0026-Prevent-tile-entity-and-entity-crashes.patch b/Spigot-Server-Patches/0026-Prevent-tile-entity-and-entity-crashes.patch index d2bec102cc..e97e261940 100644 --- a/Spigot-Server-Patches/0026-Prevent-tile-entity-and-entity-crashes.patch +++ b/Spigot-Server-Patches/0026-Prevent-tile-entity-and-entity-crashes.patch @@ -1,4 +1,4 @@ -From 55424879c75d40adf92d11dac79bc28e8e092b11 Mon Sep 17 00:00:00 2001 +From 4ec4d6943f6c93abbc66d389945bf4d9e96de6bc Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 1 Mar 2016 23:52:34 -0600 Subject: [PATCH] Prevent tile entity and entity crashes @@ -23,10 +23,10 @@ index 4193f20..f579d28 100644 public String a() throws Exception { int i = Block.getId(TileEntity.this.world.getType(TileEntity.this.position).getBlock()); diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 3b7c16e..c5ce0c3 100644 +index 18d0bd8..f564b1a 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -1428,10 +1428,12 @@ public abstract class World implements IBlockAccess { +@@ -1434,10 +1434,12 @@ public abstract class World implements IBlockAccess { entity.tickTimer.stopTiming(); // Paper } catch (Throwable throwable1) { entity.tickTimer.stopTiming(); @@ -43,7 +43,7 @@ index 3b7c16e..c5ce0c3 100644 } } -@@ -1493,10 +1495,13 @@ public abstract class World implements IBlockAccess { +@@ -1499,10 +1501,13 @@ public abstract class World implements IBlockAccess { ((ITickable) tileentity).c(); this.methodProfiler.b(); } catch (Throwable throwable2) { diff --git a/Spigot-Server-Patches/0027-Configurable-top-of-nether-void-damage.patch b/Spigot-Server-Patches/0027-Configurable-top-of-nether-void-damage.patch index f6f0c22a65..b80cbbc22c 100644 --- a/Spigot-Server-Patches/0027-Configurable-top-of-nether-void-damage.patch +++ b/Spigot-Server-Patches/0027-Configurable-top-of-nether-void-damage.patch @@ -1,4 +1,4 @@ -From 85c162228c3c70674ab7bfc8d498138fb3620b4e Mon Sep 17 00:00:00 2001 +From 10b350b444bd8faa19ee78120ee98a263604e561 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Tue, 1 Mar 2016 23:58:50 -0600 Subject: [PATCH] Configurable top of nether void damage @@ -20,10 +20,10 @@ index f81ece3..7c0e61f 100644 + } } diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index f4b9481..018da0f 100644 +index eaaca75..00ea730 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -300,6 +300,13 @@ public abstract class Entity implements ICommandListener { +@@ -301,6 +301,13 @@ public abstract class Entity implements ICommandListener { this.U(); } @@ -37,7 +37,7 @@ index f4b9481..018da0f 100644 public void U() { this.world.methodProfiler.a("entityBaseTick"); if (this.isPassenger() && this.by().dead) { -@@ -380,7 +387,7 @@ public abstract class Entity implements ICommandListener { +@@ -381,7 +388,7 @@ public abstract class Entity implements ICommandListener { this.fallDistance *= 0.5F; } diff --git a/Spigot-Server-Patches/0031-Lighting-Queue.patch b/Spigot-Server-Patches/0031-Lighting-Queue.patch index 1256429055..b7e706a507 100644 --- a/Spigot-Server-Patches/0031-Lighting-Queue.patch +++ b/Spigot-Server-Patches/0031-Lighting-Queue.patch @@ -1,4 +1,4 @@ -From 73b3ea1a73387e5a5a24366959c1c35caf7387e9 Mon Sep 17 00:00:00 2001 +From d438c0dfa1b5b31fbb7c65e5b8675824847f541b Mon Sep 17 00:00:00 2001 From: Byteflux Date: Wed, 2 Mar 2016 00:52:31 -0600 Subject: [PATCH] Lighting Queue @@ -31,7 +31,7 @@ index facb98c..e0e9a65 100644 + } } diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index cde4124..9020b1b 100644 +index cde4124..3b5e8c2 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -44,6 +44,7 @@ public class Chunk { @@ -146,7 +146,7 @@ index 83857a6..4dd672a 100644 ChunkUnloadEvent event = new ChunkUnloadEvent(chunk.bukkitChunk); server.getPluginManager().callEvent(event); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6ae06a5..aa337cc 100644 +index e9bb02f..d0fd638 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -47,6 +47,11 @@ import org.bukkit.craftbukkit.CraftServer; @@ -206,7 +206,7 @@ index 6ae06a5..aa337cc 100644 co.aikar.timings.TimingsManager.FULL_SERVER_TICK.stopTiming(); // Paper } diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index c5ce0c3..a1d8bc5 100644 +index f564b1a..cdb722d 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -378,7 +378,17 @@ public abstract class World implements IBlockAccess { diff --git a/Spigot-Server-Patches/0045-Configurable-TNT-cannon-fix.patch b/Spigot-Server-Patches/0045-Configurable-TNT-cannon-fix.patch index aac19d9f3a..592e1c5963 100644 --- a/Spigot-Server-Patches/0045-Configurable-TNT-cannon-fix.patch +++ b/Spigot-Server-Patches/0045-Configurable-TNT-cannon-fix.patch @@ -1,11 +1,11 @@ -From 60c2444bb8842bbeeec2b7c92dbe2df43eeabba5 Mon Sep 17 00:00:00 2001 +From af956966919135aa17834ffb544bbb26b999edaf Mon Sep 17 00:00:00 2001 From: Iceee Date: Wed, 2 Mar 2016 23:00:53 -0600 Subject: [PATCH] Configurable TNT cannon fix diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 5efba80..2cfeb9c 100644 +index 1236128..8d97890 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -241,4 +241,10 @@ public class PaperWorldConfig { @@ -140,37 +140,37 @@ index 1a133d9..f4f9be6 100644 int i = aenumdirection.length; diff --git a/src/main/java/net/minecraft/server/BlockTNT.java b/src/main/java/net/minecraft/server/BlockTNT.java -index 09d5f7b..a3c0315 100644 +index f794167..021a3be 100644 --- a/src/main/java/net/minecraft/server/BlockTNT.java +++ b/src/main/java/net/minecraft/server/BlockTNT.java -@@ -30,7 +30,11 @@ public class BlockTNT extends Block { +@@ -29,7 +29,11 @@ public class BlockTNT extends Block { + public void wasExploded(World world, BlockPosition blockposition, Explosion explosion) { if (!world.isClientSide) { - org.bukkit.Location loc = explosion.source instanceof EntityTNTPrimed ? ((EntityTNTPrimed) explosion.source).sourceLoc : new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // Paper -- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); // Paper - Add loc +- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); + // Paper start - Fix cannons + double y = blockposition.getY(); + if (!world.paperConfig.fixCannons) y += 0.5; -+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); // Paper - Add loc ++ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); + // Paper end entitytntprimed.setFuseTicks((short) (world.random.nextInt(entitytntprimed.getFuseTicks() / 4) + entitytntprimed.getFuseTicks() / 8)); world.addEntity(entitytntprimed); -@@ -45,7 +49,11 @@ public class BlockTNT extends Block { +@@ -43,7 +47,11 @@ public class BlockTNT extends Block { + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving) { if (!world.isClientSide) { if (((Boolean) iblockdata.get(BlockTNT.EXPLODE)).booleanValue()) { - org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // Paper -- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), entityliving); // Paper - Add loc +- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), entityliving); + // Paper start - Fix cannons + double y = blockposition.getY(); + if (!world.paperConfig.fixCannons) y += 0.5; -+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), entityliving); // Paper - Add loc ++ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), entityliving); + // Paper end world.addEntity(entitytntprimed); world.a((EntityHuman) null, entitytntprimed.locX, entitytntprimed.locY, entitytntprimed.locZ, SoundEffects.gj, SoundCategory.BLOCKS, 1.0F, 1.0F); diff --git a/src/main/java/net/minecraft/server/DispenserRegistry.java b/src/main/java/net/minecraft/server/DispenserRegistry.java -index c1c0c7c..e2eb620 100644 +index d7bea3d..61ac795 100644 --- a/src/main/java/net/minecraft/server/DispenserRegistry.java +++ b/src/main/java/net/minecraft/server/DispenserRegistry.java @@ -498,7 +498,11 @@ public class DispenserRegistry { @@ -187,10 +187,10 @@ index c1c0c7c..e2eb620 100644 world.getServer().getPluginManager().callEvent(event); } diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java -index 5e8523d..4345a3c 100644 +index 8f2b253..23fb154 100644 --- a/src/main/java/net/minecraft/server/EntityFallingBlock.java +++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java -@@ -293,4 +293,22 @@ public class EntityFallingBlock extends Entity { +@@ -274,4 +274,22 @@ public class EntityFallingBlock extends Entity { public boolean br() { return true; } @@ -214,10 +214,10 @@ index 5e8523d..4345a3c 100644 + // Paper end } diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java -index 1820c7b..ca3bfd5 100644 +index 1113b1c..12feacf 100644 --- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java +++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java -@@ -42,6 +42,7 @@ public class EntityTNTPrimed extends Entity { +@@ -30,6 +30,7 @@ public class EntityTNTPrimed extends Entity { this.lastY = d1; this.lastZ = d2; this.source = entityliving; @@ -225,7 +225,7 @@ index 1820c7b..ca3bfd5 100644 } protected void i() { -@@ -137,9 +138,66 @@ public class EntityTNTPrimed extends Entity { +@@ -118,9 +119,66 @@ public class EntityTNTPrimed extends Entity { return this.source; } diff --git a/Spigot-Server-Patches/0051-Disable-spigot-tick-limiters.patch b/Spigot-Server-Patches/0051-Disable-spigot-tick-limiters.patch index 9fa7914d78..6fd9eb8968 100644 --- a/Spigot-Server-Patches/0051-Disable-spigot-tick-limiters.patch +++ b/Spigot-Server-Patches/0051-Disable-spigot-tick-limiters.patch @@ -1,14 +1,14 @@ -From cf6fcfa594a8512abf3b7821edcebe478fc13df0 Mon Sep 17 00:00:00 2001 +From eb7ba9fcaad158852e146e383bf65e7410e63059 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Wed, 2 Mar 2016 23:45:17 -0600 Subject: [PATCH] Disable spigot tick limiters diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 3fe987f..c93af22 100644 +index a4b4d1e..18e49b5 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -1415,10 +1415,10 @@ public abstract class World implements IBlockAccess { +@@ -1421,10 +1421,10 @@ public abstract class World implements IBlockAccess { // CraftBukkit start - Use field for loop variable co.aikar.timings.TimingHistory.entityTicks += this.entityList.size(); // Paper int entitiesThisCycle = 0; @@ -23,7 +23,7 @@ index 3fe987f..c93af22 100644 tickPosition = (tickPosition < entityList.size()) ? tickPosition : 0; entity = (Entity) this.entityList.get(this.tickPosition); // CraftBukkit end -@@ -1483,9 +1483,7 @@ public abstract class World implements IBlockAccess { +@@ -1489,9 +1489,7 @@ public abstract class World implements IBlockAccess { // Spigot start // Iterator iterator = this.tileEntityListTick.iterator(); int tilesThisCycle = 0; diff --git a/Spigot-Server-Patches/0062-Made-EntityDismountEvent-Cancellable.patch b/Spigot-Server-Patches/0062-Made-EntityDismountEvent-Cancellable.patch index 11d4eba04b..d5ab2bf4ad 100644 --- a/Spigot-Server-Patches/0062-Made-EntityDismountEvent-Cancellable.patch +++ b/Spigot-Server-Patches/0062-Made-EntityDismountEvent-Cancellable.patch @@ -1,11 +1,11 @@ -From 4e1268b8724257d5e429efa488898d14e9204881 Mon Sep 17 00:00:00 2001 +From 5287c52a14a27be99d61b5744b4738fd0c443c69 Mon Sep 17 00:00:00 2001 From: Nik Gil Date: Thu, 3 Mar 2016 04:04:19 -0600 Subject: [PATCH] Made EntityDismountEvent Cancellable diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 38bc9c0..ab718ce 100644 +index 446c0aa..8d4e4f5 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -38,6 +38,7 @@ import org.bukkit.craftbukkit.event.CraftEventFactory; @@ -16,7 +16,7 @@ index 38bc9c0..ab718ce 100644 // CraftBukkit end public abstract class Entity implements ICommandListener { -@@ -1737,6 +1738,11 @@ public abstract class Entity implements ICommandListener { +@@ -1752,6 +1753,11 @@ public abstract class Entity implements ICommandListener { } // CraftBukkit end Bukkit.getPluginManager().callEvent( new org.spigotmc.event.entity.EntityDismountEvent(entity.getBukkitEntity(), this.getBukkitEntity())); // Spigot @@ -29,5 +29,5 @@ index 38bc9c0..ab718ce 100644 entity.j = 60; } -- -2.7.2 +2.7.1.windows.2 diff --git a/Spigot-Server-Patches/0065-Avoid-hopper-searches-if-there-are-no-items.patch b/Spigot-Server-Patches/0065-Avoid-hopper-searches-if-there-are-no-items.patch index 693ed846e0..6f3b9931b2 100644 --- a/Spigot-Server-Patches/0065-Avoid-hopper-searches-if-there-are-no-items.patch +++ b/Spigot-Server-Patches/0065-Avoid-hopper-searches-if-there-are-no-items.patch @@ -1,4 +1,4 @@ -From 2a296ac64bd3bd678edd258287d058ed28e9c186 Mon Sep 17 00:00:00 2001 +From 88409e2d479cf1860508674d0329802571bc1ac1 Mon Sep 17 00:00:00 2001 From: CullanP Date: Thu, 3 Mar 2016 02:13:38 -0600 Subject: [PATCH] Avoid hopper searches if there are no items @@ -14,7 +14,7 @@ And since minecart hoppers are used _very_ rarely near we can avoid alot of sear Combined, this adds up a lot. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index f233c13..d8c0347 100644 +index 42fedb7..806e499 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -46,6 +46,13 @@ public class Chunk { diff --git a/Spigot-Server-Patches/0071-Change-implementation-of-tile-entity-removal-list.patch b/Spigot-Server-Patches/0071-Change-implementation-of-tile-entity-removal-list.patch index c50282fc7d..40eef4c514 100644 --- a/Spigot-Server-Patches/0071-Change-implementation-of-tile-entity-removal-list.patch +++ b/Spigot-Server-Patches/0071-Change-implementation-of-tile-entity-removal-list.patch @@ -1,11 +1,11 @@ -From 5f62245e7a6eaa0c63251b6ae75698fd0e6765c5 Mon Sep 17 00:00:00 2001 +From e8e6bdea274b31e55511c5f353c9e3e88c0493a9 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 diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 4f1c1b5..ccef853 100644 +index 18e49b5..cf5f4f5 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -30,6 +30,11 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; @@ -34,7 +34,7 @@ index 4f1c1b5..ccef853 100644 public final List players = Lists.newArrayList(); public final List j = Lists.newArrayList(); protected final IntHashMap entitiesById = new IntHashMap(); -@@ -1387,19 +1392,20 @@ public abstract class World implements IBlockAccess { +@@ -1393,19 +1398,20 @@ public abstract class World implements IBlockAccess { int j; @@ -64,5 +64,5 @@ index 4f1c1b5..ccef853 100644 this.f.clear(); this.l(); -- -2.7.4 +2.7.1.windows.2 diff --git a/Spigot-Server-Patches/0075-Add-exception-reporting-event.patch b/Spigot-Server-Patches/0075-Add-exception-reporting-event.patch index 1e24f5eaf0..c60b319602 100644 --- a/Spigot-Server-Patches/0075-Add-exception-reporting-event.patch +++ b/Spigot-Server-Patches/0075-Add-exception-reporting-event.patch @@ -1,4 +1,4 @@ -From fabc3a2adbde966e8248772fadf3f9930b2b1101 Mon Sep 17 00:00:00 2001 +From 6e2fcdb3c97946c75a14eb3d1ce5fbba80959837 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 @@ -50,7 +50,7 @@ index 0000000..9339718 +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index d8c0347..d42a8d2 100644 +index 806e499..8b11266 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -1,5 +1,6 @@ @@ -292,7 +292,7 @@ index 320e52e..d40257f 100644 } diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 6cfd38c..614cabe 100644 +index cf5f4f5..d3621ec 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -1,5 +1,7 @@ @@ -303,7 +303,7 @@ index 6cfd38c..614cabe 100644 import com.google.common.base.Function; import com.google.common.base.Objects; import com.google.common.base.Predicate; -@@ -1447,8 +1449,10 @@ public abstract class World implements IBlockAccess { +@@ -1453,8 +1455,10 @@ public abstract class World implements IBlockAccess { } catch (Throwable throwable1) { entity.tickTimer.stopTiming(); // Paper start - Prevent tile entity and entity crashes @@ -315,7 +315,7 @@ index 6cfd38c..614cabe 100644 entity.dead = true; continue; // Paper end -@@ -1512,8 +1516,10 @@ public abstract class World implements IBlockAccess { +@@ -1518,8 +1522,10 @@ public abstract class World implements IBlockAccess { this.methodProfiler.b(); } catch (Throwable throwable2) { // Paper start - Prevent tile entity and entity crashes diff --git a/Spigot-Server-Patches/0078-Disable-Scoreboards-for-non-players-by-default.patch b/Spigot-Server-Patches/0078-Disable-Scoreboards-for-non-players-by-default.patch index 4bb5ccfaa7..de2319294b 100644 --- a/Spigot-Server-Patches/0078-Disable-Scoreboards-for-non-players-by-default.patch +++ b/Spigot-Server-Patches/0078-Disable-Scoreboards-for-non-players-by-default.patch @@ -1,4 +1,4 @@ -From 821a19198ac0334421250b89174b7b353543e9c2 Mon Sep 17 00:00:00 2001 +From dd87711174327d19cb459835683ab0d47efbd768 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,7 +11,7 @@ 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 7b5b2d3..7cd36da 100644 +index 75b22fa..f967ec0 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -277,4 +277,9 @@ public class PaperWorldConfig { @@ -37,10 +37,10 @@ index 871535c..25950bd 100644 if (scoreboard.addPlayerToTeam(s2, s)) { diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index ab718ce..c28cf58 100644 +index 8d4e4f5..55fe96b 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1846,6 +1846,7 @@ public abstract class Entity implements ICommandListener { +@@ -1861,6 +1861,7 @@ public abstract class Entity implements ICommandListener { } public ScoreboardTeamBase aO() { @@ -49,5 +49,5 @@ index ab718ce..c28cf58 100644 } -- -2.7.3 +2.7.1.windows.2 diff --git a/Spigot-Server-Patches/0100-Optimize-Chunk-Unload-Queue.patch b/Spigot-Server-Patches/0100-Optimize-Chunk-Unload-Queue.patch index b77c465ece..f77a20fe4b 100644 --- a/Spigot-Server-Patches/0100-Optimize-Chunk-Unload-Queue.patch +++ b/Spigot-Server-Patches/0100-Optimize-Chunk-Unload-Queue.patch @@ -1,4 +1,4 @@ -From f3a9dd01aab3b666d2b5e76346c58afef11ed3b1 Mon Sep 17 00:00:00 2001 +From 31bd0087461e17206c64771c0ec8fdf787955a5f Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 18 Mar 2016 17:57:25 -0400 Subject: [PATCH] Optimize Chunk Unload Queue @@ -23,7 +23,7 @@ it will skip it and move to next. Also optimize EAR to use these methods. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index d42a8d2..05417a7 100644 +index f4ec2e4..ad69025 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -53,6 +53,8 @@ public class Chunk { @@ -240,7 +240,7 @@ index 63e118d..721bcae 100644 i += server.getChunkAt( x, z ).entityCount.get( oClass ); } diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 2283536..406bdaa 100644 +index 1e14a62..4cc729e 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -159,9 +159,15 @@ public abstract class World implements IBlockAccess { @@ -261,7 +261,7 @@ index 2283536..406bdaa 100644 this.spigotConfig = new org.spigotmc.SpigotWorldConfig( worlddata.getName() ); // Spigot this.paperConfig = new com.destroystokyo.paper.PaperWorldConfig(worlddata.getName(), this.spigotConfig); // Paper diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index c51c74b..caa5e62 100644 +index 3f2d83a..c81dfee 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -206,7 +206,7 @@ public class CraftWorld implements World { @@ -299,7 +299,7 @@ index c51c74b..caa5e62 100644 if (neighbor != null) { neighbor.setNeighborLoaded(-x, -z); chunk.setNeighborLoaded(x, z); -@@ -1543,7 +1544,7 @@ public class CraftWorld implements World { +@@ -1536,7 +1537,7 @@ public class CraftWorld implements World { } // Already unloading? diff --git a/Spigot-Server-Patches/0103-Use-a-Shared-Random-for-Entities.patch b/Spigot-Server-Patches/0103-Use-a-Shared-Random-for-Entities.patch index 96832bfa0b..7052a33ed8 100644 --- a/Spigot-Server-Patches/0103-Use-a-Shared-Random-for-Entities.patch +++ b/Spigot-Server-Patches/0103-Use-a-Shared-Random-for-Entities.patch @@ -1,4 +1,4 @@ -From 8f9680573688c86f293c0d15568d7b04a0fac502 Mon Sep 17 00:00:00 2001 +From c91433a2a23ef4fc223164c76f978065bd421bfb 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,7 +6,7 @@ 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 c28cf58..0f66b39 100644 +index 55fe96b..bf8e194 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -45,6 +45,7 @@ public abstract class Entity implements ICommandListener { @@ -17,7 +17,7 @@ index c28cf58..0f66b39 100644 static boolean isLevelAtLeast(NBTTagCompound tag, int level) { return tag.hasKey("Bukkit.updateLevel") && tag.getInt("Bukkit.updateLevel") >= level; } -@@ -167,7 +168,7 @@ public abstract class Entity implements ICommandListener { +@@ -168,7 +169,7 @@ public abstract class Entity implements ICommandListener { this.width = 0.6F; this.length = 1.8F; this.av = 1; @@ -27,5 +27,5 @@ index c28cf58..0f66b39 100644 this.justCreated = true; this.uniqueID = MathHelper.a(this.random); -- -2.7.4.windows.1 +2.7.1.windows.2 diff --git a/Spigot-Server-Patches/0104-Don-t-teleport-dead-entities.patch b/Spigot-Server-Patches/0104-Don-t-teleport-dead-entities.patch index 4083ea9037..edf6f5814d 100644 --- a/Spigot-Server-Patches/0104-Don-t-teleport-dead-entities.patch +++ b/Spigot-Server-Patches/0104-Don-t-teleport-dead-entities.patch @@ -1,4 +1,4 @@ -From e94649fa55d3b711ec126ba5ead2bce8e51cd403 Mon Sep 17 00:00:00 2001 +From 2d7c10790e8d85fa5a372613eca4f0fd633190cb Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 22 Mar 2016 00:55:23 -0400 Subject: [PATCH] Don't teleport dead entities @@ -7,10 +7,10 @@ Had some issue with this in past, and this is the vanilla logic. Potentially an old CB change that's no longer needed. diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 0f66b39..e57195c 100644 +index bf8e194..5a6ad50 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -2096,7 +2096,7 @@ public abstract class Entity implements ICommandListener { +@@ -2111,7 +2111,7 @@ public abstract class Entity implements ICommandListener { } public Entity teleportTo(Location exit, boolean portal) { @@ -20,5 +20,5 @@ index 0f66b39..e57195c 100644 WorldServer worldserver1 = ((CraftWorld) exit.getWorld()).getHandle(); int i = worldserver1.dimension; -- -2.7.4.windows.1 +2.7.1.windows.2 diff --git a/Spigot-Server-Patches/0107-Optimize-isValidLocation-for-inlining.patch b/Spigot-Server-Patches/0107-Optimize-isValidLocation-for-inlining.patch index d5bba2b165..190734df59 100644 --- a/Spigot-Server-Patches/0107-Optimize-isValidLocation-for-inlining.patch +++ b/Spigot-Server-Patches/0107-Optimize-isValidLocation-for-inlining.patch @@ -1,4 +1,4 @@ -From a17ff1e8481c51527b7dab89a11a1d4c991e9817 Mon Sep 17 00:00:00 2001 +From d99823c93acbfbff23f1e9057d12ef1ea40fd783 Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 22 Mar 2016 23:41:34 -0400 Subject: [PATCH] Optimize isValidLocation for inlining @@ -22,7 +22,7 @@ index f0908a2..d1688e1 100644 public BaseBlockPosition(int i, int j, int k) { diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 2033982..9ad2501 100644 +index a78b029..e5ea99c 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -284,8 +284,8 @@ public abstract class World implements IBlockAccess { @@ -99,7 +99,7 @@ index 2033982..9ad2501 100644 return Blocks.AIR.getBlockData(); } else { Chunk chunk = this.getChunkAtWorldCoords(blockposition); -@@ -2056,7 +2056,7 @@ public abstract class World implements IBlockAccess { +@@ -2062,7 +2062,7 @@ public abstract class World implements IBlockAccess { public Map capturedTileEntities = Maps.newHashMap(); public TileEntity getTileEntity(BlockPosition blockposition) { @@ -108,7 +108,7 @@ index 2033982..9ad2501 100644 return null; } else { // CraftBukkit start -@@ -2159,7 +2159,7 @@ public abstract class World implements IBlockAccess { +@@ -2165,7 +2165,7 @@ public abstract class World implements IBlockAccess { } public boolean d(BlockPosition blockposition, boolean flag) { @@ -118,5 +118,5 @@ index 2033982..9ad2501 100644 } else { Chunk chunk = this.chunkProvider.getLoadedChunkAt(blockposition.getX() >> 4, blockposition.getZ() >> 4); -- -2.7.4 +2.7.1.windows.2