| 
									
										
										
										
											2015-05-25 20:37:24 +10:00
										 |  |  | --- a/net/minecraft/server/PortalTravelAgent.java
 | 
					
						
							|  |  |  | +++ b/net/minecraft/server/PortalTravelAgent.java
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | @@ -1,6 +1,10 @@
 | 
					
						
							|  |  |  |  package net.minecraft.server; | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |   | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  |  import com.google.common.collect.Lists; | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  | +import org.bukkit.Location;
 | 
					
						
							|  |  |  | +import org.bukkit.event.entity.EntityPortalExitEvent;
 | 
					
						
							|  |  |  | +import org.bukkit.util.Vector;
 | 
					
						
							|  |  |  | +
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  |  import java.util.Iterator; | 
					
						
							|  |  |  |  import java.util.List; | 
					
						
							|  |  |  |  import java.util.Random; | 
					
						
							|  |  |  | @@ -27,6 +31,19 @@
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |              int i = MathHelper.floor(entity.locX); | 
					
						
							|  |  |  |              int j = MathHelper.floor(entity.locY) - 1; | 
					
						
							|  |  |  |              int k = MathHelper.floor(entity.locZ); | 
					
						
							|  |  |  | +            // CraftBukkit start - Modularize end portal creation
 | 
					
						
							|  |  |  | +            BlockPosition created = this.createEndPortal(entity.locX, entity.locY, entity.locZ);
 | 
					
						
							|  |  |  | +            entity.setPositionRotation((double) created.getX(), (double) created.getY(), (double) created.getZ(), entity.yaw, 0.0F);
 | 
					
						
							|  |  |  | +            entity.motX = entity.motY = entity.motZ = 0.0D;
 | 
					
						
							|  |  |  | +        }
 | 
					
						
							|  |  |  | +    }
 | 
					
						
							|  |  |  | +
 | 
					
						
							|  |  |  | +    // Split out from original a(Entity, double, double, double, float) method in order to enable being called from createPortal
 | 
					
						
							|  |  |  | +    private BlockPosition createEndPortal(double x, double y, double z) {
 | 
					
						
							|  |  |  | +            int i = MathHelper.floor(x);
 | 
					
						
							|  |  |  | +            int j = MathHelper.floor(y) - 1;
 | 
					
						
							|  |  |  | +            int k = MathHelper.floor(z);
 | 
					
						
							| 
									
										
										
										
											2015-02-26 22:41:06 +00:00
										 |  |  | +            // CraftBukkit end
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |              byte b0 = 1; | 
					
						
							|  |  |  |              byte b1 = 0; | 
					
						
							|  |  |  |   | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | @@ -43,16 +60,63 @@
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |                  } | 
					
						
							|  |  |  |              } | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  | -            entity.setPositionRotation((double) i, (double) j, (double) k, entity.yaw, 0.0F);
 | 
					
						
							|  |  |  | -            entity.motX = entity.motY = entity.motZ = 0.0D;
 | 
					
						
							|  |  |  | +        // CraftBukkit start
 | 
					
						
							|  |  |  | +        return new BlockPosition(i, k, k);
 | 
					
						
							|  |  |  | +    }
 | 
					
						
							|  |  |  | +
 | 
					
						
							|  |  |  | +    // use logic based on creation to verify end portal
 | 
					
						
							|  |  |  | +    private BlockPosition findEndPortal(BlockPosition portal) {
 | 
					
						
							|  |  |  | +        int i = portal.getX();
 | 
					
						
							|  |  |  | +        int j = portal.getY() - 1;
 | 
					
						
							|  |  |  | +        int k = portal.getZ();
 | 
					
						
							|  |  |  | +        byte b0 = 1;
 | 
					
						
							|  |  |  | +        byte b1 = 0;
 | 
					
						
							|  |  |  | +
 | 
					
						
							|  |  |  | +        for (int l = -2; l <= 2; ++l) {
 | 
					
						
							|  |  |  | +            for (int i1 = -2; i1 <= 2; ++i1) {
 | 
					
						
							|  |  |  | +                for (int j1 = -1; j1 < 3; ++j1) {
 | 
					
						
							|  |  |  | +                    int k1 = i + i1 * b0 + l * b1;
 | 
					
						
							|  |  |  | +                    int l1 = j + j1;
 | 
					
						
							|  |  |  | +                    int i2 = k + i1 * b1 - l * b0;
 | 
					
						
							|  |  |  | +                    boolean flag = j1 < 0;
 | 
					
						
							|  |  |  | +
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | +                    if (this.world.getType(new BlockPosition(k1, l1, i2)).getBlock() != (flag ? Blocks.OBSIDIAN : Blocks.AIR)) {
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  | +                        return null;
 | 
					
						
							|  |  |  | +                    }
 | 
					
						
							|  |  |  | +                }
 | 
					
						
							|  |  |  | +            }
 | 
					
						
							|  |  |  |          } | 
					
						
							|  |  |  | +        return new BlockPosition(i, j, k);
 | 
					
						
							|  |  |  |      } | 
					
						
							|  |  |  | +    // CraftBukkit end
 | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |      public boolean b(Entity entity, float f) { | 
					
						
							|  |  |  | -        boolean flag = true;
 | 
					
						
							|  |  |  | +        // CraftBukkit start - Modularize portal search process and entity teleportation
 | 
					
						
							|  |  |  | +        BlockPosition found = this.findPortal(entity.locX, entity.locY, entity.locZ, 128);
 | 
					
						
							|  |  |  | +        if (found == null) {
 | 
					
						
							|  |  |  | +            return false;
 | 
					
						
							|  |  |  | +        }
 | 
					
						
							|  |  |  | +
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | +        Location exit = new Location(this.world.getWorld(), found.getX(), found.getY(), found.getZ(), f, entity.pitch);
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  | +        Vector velocity = entity.getBukkitEntity().getVelocity();
 | 
					
						
							|  |  |  | +        this.adjustExit(entity, exit, velocity);
 | 
					
						
							|  |  |  | +        entity.setPositionRotation(exit.getX(), exit.getY(), exit.getZ(), exit.getYaw(), exit.getPitch());
 | 
					
						
							|  |  |  | +        if (entity.motX != velocity.getX() || entity.motY != velocity.getY() || entity.motZ != velocity.getZ()) {
 | 
					
						
							|  |  |  | +            entity.getBukkitEntity().setVelocity(velocity);
 | 
					
						
							|  |  |  | +        }
 | 
					
						
							|  |  |  | +        return true;
 | 
					
						
							|  |  |  | +    }
 | 
					
						
							|  |  |  | +
 | 
					
						
							| 
									
										
										
										
											2016-03-07 19:13:41 +11:00
										 |  |  | +    public BlockPosition findPortal(double x, double y, double z, int radius) {
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | +        if (this.world.getWorld().getEnvironment() == org.bukkit.World.Environment.THE_END) {
 | 
					
						
							|  |  |  | +            return this.findEndPortal(this.world.worldProvider.h());
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  | +        }
 | 
					
						
							|  |  |  | +        // CraftBukkit end
 | 
					
						
							|  |  |  |          double d0 = -1.0D; | 
					
						
							|  |  |  | -        int i = MathHelper.floor(entity.locX);
 | 
					
						
							|  |  |  | -        int j = MathHelper.floor(entity.locZ);
 | 
					
						
							|  |  |  | +        // CraftBukkit start
 | 
					
						
							|  |  |  | +        int i = MathHelper.floor(x);
 | 
					
						
							|  |  |  | +        int j = MathHelper.floor(z);
 | 
					
						
							|  |  |  | +        // CraftBukkit end
 | 
					
						
							|  |  |  |          boolean flag1 = true; | 
					
						
							|  |  |  |          Object object = BlockPosition.ZERO; | 
					
						
							|  |  |  |          long k = ChunkCoordIntPair.a(i, j); | 
					
						
							| 
									
										
										
										
											2016-03-07 19:13:41 +11:00
										 |  |  | @@ -65,12 +129,12 @@
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  |              portaltravelagent_chunkcoordinatesportal.c = this.world.getTime(); | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |              flag1 = false; | 
					
						
							|  |  |  |          } else { | 
					
						
							|  |  |  | -            BlockPosition blockposition = new BlockPosition(entity);
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | +            BlockPosition blockposition = new BlockPosition(x, y, z); // CraftBukkit
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |   | 
					
						
							| 
									
										
										
										
											2016-03-07 19:13:41 +11:00
										 |  |  | -            for (int l = -128; l <= 128; ++l) {
 | 
					
						
							|  |  |  | +            for (int l = -radius; l <= radius; ++l) {
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |                  BlockPosition blockposition1; | 
					
						
							| 
									
										
										
										
											2016-03-07 19:13:41 +11:00
										 |  |  |   | 
					
						
							|  |  |  | -                for (int i1 = -128; i1 <= 128; ++i1) {
 | 
					
						
							|  |  |  | +                for (int i1 = -radius; i1 <= radius; ++i1) {
 | 
					
						
							|  |  |  |                      for (BlockPosition blockposition2 = blockposition.a(l, this.world.Z() - 1 - blockposition.getY(), i1); blockposition2.getY() >= 0; blockposition2 = blockposition1) { | 
					
						
							|  |  |  |                          blockposition1 = blockposition2.down(); | 
					
						
							|  |  |  |                          if (this.world.getType(blockposition2).getBlock() == Blocks.PORTAL) { | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | @@ -95,6 +159,29 @@
 | 
					
						
							|  |  |  |                  this.c.put(k, new PortalTravelAgent.ChunkCoordinatesPortal((BlockPosition) object, this.world.getTime())); | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |                  this.d.add(Long.valueOf(k)); | 
					
						
							|  |  |  |              } | 
					
						
							|  |  |  | +            // CraftBukkit start - Move entity teleportation logic into exit
 | 
					
						
							|  |  |  | +            return (BlockPosition) object;
 | 
					
						
							|  |  |  | +        } else {
 | 
					
						
							|  |  |  | +            return null;
 | 
					
						
							|  |  |  | +        }
 | 
					
						
							|  |  |  | +    }
 | 
					
						
							| 
									
										
										
										
											2015-02-26 22:41:06 +00:00
										 |  |  | +
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  | +    // Entity repositioning logic split out from original b method and combined with repositioning logic for The End from original a method
 | 
					
						
							|  |  |  | +    public void adjustExit(Entity entity, Location position, Vector velocity) {
 | 
					
						
							|  |  |  | +        Location from = position.clone();
 | 
					
						
							|  |  |  | +        Vector before = velocity.clone();
 | 
					
						
							|  |  |  | +        BlockPosition object = new BlockPosition(position.getBlockX(), position.getBlockY(), position.getBlockZ());
 | 
					
						
							|  |  |  | +        float f = position.getYaw();
 | 
					
						
							|  |  |  | +
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | +        if (this.world.getWorld().getEnvironment() == org.bukkit.World.Environment.THE_END || entity.getBukkitEntity().getWorld().getEnvironment() == org.bukkit.World.Environment.THE_END || entity.getPortalOffset() == null) {
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  | +            // entity.setPositionRotation((double) i, (double) j, (double) k, entity.yaw, 0.0F);
 | 
					
						
							|  |  |  | +            // entity.motX = entity.motY = entity.motZ = 0.0D;
 | 
					
						
							|  |  |  | +            position.setPitch(0.0F);
 | 
					
						
							|  |  |  | +            velocity.setX(0);
 | 
					
						
							|  |  |  | +            velocity.setY(0);
 | 
					
						
							|  |  |  | +            velocity.setZ(0);
 | 
					
						
							|  |  |  | +        } else {
 | 
					
						
							|  |  |  | +            // CraftBukkit end
 | 
					
						
							| 
									
										
										
										
											2015-02-26 22:41:06 +00:00
										 |  |  |   | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |              double d2 = (double) ((BlockPosition) object).getX() + 0.5D; | 
					
						
							|  |  |  |              double d3 = (double) ((BlockPosition) object).getY() + 0.5D; | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | @@ -133,30 +220,59 @@
 | 
					
						
							| 
									
										
										
										
											2015-02-26 22:41:06 +00:00
										 |  |  |                  f4 = 1.0F; | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |              } | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  |   | 
					
						
							| 
									
										
										
										
											2015-02-26 22:41:06 +00:00
										 |  |  | -            double d6 = entity.motX;
 | 
					
						
							|  |  |  | -            double d7 = entity.motZ;
 | 
					
						
							|  |  |  | -
 | 
					
						
							|  |  |  | -            entity.motX = d6 * (double) f1 + d7 * (double) f4;
 | 
					
						
							|  |  |  | -            entity.motZ = d6 * (double) f3 + d7 * (double) f2;
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | -            entity.yaw = f - (float) (entity.getPortalDirection().opposite().get2DRotationValue() * 90) + (float) (shapedetector_shapedetectorcollection.getFacing().get2DRotationValue() * 90);
 | 
					
						
							|  |  |  | -            if (entity instanceof EntityPlayer) {
 | 
					
						
							|  |  |  | -                ((EntityPlayer) entity).playerConnection.a(d2, d3, d4, entity.yaw, entity.pitch);
 | 
					
						
							|  |  |  | -            } else {
 | 
					
						
							|  |  |  | -                entity.setPositionRotation(d2, d3, d4, entity.yaw, entity.pitch);
 | 
					
						
							|  |  |  | -            }
 | 
					
						
							|  |  |  | -
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  | -            return true;
 | 
					
						
							| 
									
										
										
										
											2015-02-26 22:41:06 +00:00
										 |  |  | +            // CraftBukkit start
 | 
					
						
							|  |  |  | +            double d6 = velocity.getX();
 | 
					
						
							|  |  |  | +            double d7 = velocity.getZ();
 | 
					
						
							|  |  |  | +            // CraftBukkit end
 | 
					
						
							|  |  |  | +
 | 
					
						
							|  |  |  | +            // CraftBukkit start - Adjust position and velocity instances instead of entity
 | 
					
						
							|  |  |  | +            velocity.setX(d6 * (double) f1 + d7 * (double) f4);
 | 
					
						
							|  |  |  | +            velocity.setZ(d6 * (double) f3 + d7 * (double) f2);
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | +            f = f - (float) (entity.getPortalDirection().opposite().get2DRotationValue() * 90) + (float) (shapedetector_shapedetectorcollection.getFacing().get2DRotationValue() * 90);
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  | +            // entity.setPositionRotation(d2, d3, d4, entity.yaw, entity.pitch);
 | 
					
						
							|  |  |  | +            position.setX(d2);
 | 
					
						
							|  |  |  | +            position.setY(d3);
 | 
					
						
							|  |  |  | +            position.setZ(d4);
 | 
					
						
							|  |  |  | +            position.setYaw(f);
 | 
					
						
							|  |  |  | +        }
 | 
					
						
							|  |  |  | +        EntityPortalExitEvent event = new EntityPortalExitEvent(entity.getBukkitEntity(), from, position, before, velocity);
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | +        this.world.getServer().getPluginManager().callEvent(event);
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  | +        Location to = event.getTo();
 | 
					
						
							|  |  |  | +        if (event.isCancelled() || to == null || !entity.isAlive()) {
 | 
					
						
							|  |  |  | +            position.setX(from.getX());
 | 
					
						
							|  |  |  | +            position.setY(from.getY());
 | 
					
						
							|  |  |  | +            position.setZ(from.getZ());
 | 
					
						
							|  |  |  | +            position.setYaw(from.getYaw());
 | 
					
						
							|  |  |  | +            position.setPitch(from.getPitch());
 | 
					
						
							|  |  |  | +            velocity.copy(before);
 | 
					
						
							|  |  |  |          } else { | 
					
						
							|  |  |  | -            return false;
 | 
					
						
							|  |  |  | +            position.setX(to.getX());
 | 
					
						
							|  |  |  | +            position.setY(to.getY());
 | 
					
						
							|  |  |  | +            position.setZ(to.getZ());
 | 
					
						
							|  |  |  | +            position.setYaw(to.getYaw());
 | 
					
						
							|  |  |  | +            position.setPitch(to.getPitch());
 | 
					
						
							|  |  |  | +            velocity.copy(event.getAfter()); // event.getAfter() will never be null, as setAfter() will cause an NPE if null is passed in
 | 
					
						
							|  |  |  |          } | 
					
						
							|  |  |  | +        // CraftBukkit end
 | 
					
						
							|  |  |  |      } | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |      public boolean a(Entity entity) { | 
					
						
							|  |  |  | -        byte b0 = 16;
 | 
					
						
							|  |  |  | +        // CraftBukkit start - Allow for portal creation to be based on coordinates instead of entity
 | 
					
						
							|  |  |  | +        return this.createPortal(entity.locX, entity.locY, entity.locZ, 16);
 | 
					
						
							|  |  |  | +    }
 | 
					
						
							|  |  |  | +
 | 
					
						
							|  |  |  | +    public boolean createPortal(double x, double y, double z, int b0) {
 | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | +        if (this.world.getWorld().getEnvironment() == org.bukkit.World.Environment.THE_END) {
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  | +            createEndPortal(x, y, z);
 | 
					
						
							|  |  |  | +            return true;
 | 
					
						
							|  |  |  | +        }
 | 
					
						
							|  |  |  | +        // CraftBukkit end
 | 
					
						
							|  |  |  |          double d0 = -1.0D; | 
					
						
							|  |  |  | -        int i = MathHelper.floor(entity.locX);
 | 
					
						
							|  |  |  | -        int j = MathHelper.floor(entity.locY);
 | 
					
						
							|  |  |  | -        int k = MathHelper.floor(entity.locZ);
 | 
					
						
							|  |  |  | +        // CraftBukkit start
 | 
					
						
							|  |  |  | +        int i = MathHelper.floor(x);
 | 
					
						
							|  |  |  | +        int j = MathHelper.floor(y);
 | 
					
						
							|  |  |  | +        int k = MathHelper.floor(z);
 | 
					
						
							|  |  |  | +        // CraftBukkit end
 | 
					
						
							|  |  |  |          int l = i; | 
					
						
							|  |  |  |          int i1 = j; | 
					
						
							|  |  |  |          int j1 = k; | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | @@ -181,10 +297,10 @@
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |          double d4; | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |          for (i2 = i - b0; i2 <= i + b0; ++i2) { | 
					
						
							|  |  |  | -            d1 = (double) i2 + 0.5D - entity.locX;
 | 
					
						
							|  |  |  | +            d1 = (double) i2 + 0.5D - x; // CraftBukkit
 | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |              for (j2 = k - b0; j2 <= k + b0; ++j2) { | 
					
						
							|  |  |  | -                d2 = (double) j2 + 0.5D - entity.locZ;
 | 
					
						
							|  |  |  | +                d2 = (double) j2 + 0.5D - z; // CraftBukkit
 | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |                  label271: | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  |                  for (k2 = this.world.Z() - 1; k2 >= 0; --k2) { | 
					
						
							|  |  |  | @@ -216,7 +332,7 @@
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |                                  } | 
					
						
							|  |  |  |                              } | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  | -                            d3 = (double) k2 + 0.5D - entity.locY;
 | 
					
						
							|  |  |  | +                            d3 = (double) k2 + 0.5D - y; // CraftBukkit
 | 
					
						
							|  |  |  |                              d4 = d1 * d1 + d3 * d3 + d2 * d2; | 
					
						
							|  |  |  |                              if (d0 < 0.0D || d4 < d0) { | 
					
						
							|  |  |  |                                  d0 = d4; | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | @@ -233,10 +349,10 @@
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |   | 
					
						
							|  |  |  |          if (d0 < 0.0D) { | 
					
						
							|  |  |  |              for (i2 = i - b0; i2 <= i + b0; ++i2) { | 
					
						
							|  |  |  | -                d1 = (double) i2 + 0.5D - entity.locX;
 | 
					
						
							|  |  |  | +                d1 = (double) i2 + 0.5D - x; // CraftBukkit
 | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |                  for (j2 = k - b0; j2 <= k + b0; ++j2) { | 
					
						
							|  |  |  | -                    d2 = (double) j2 + 0.5D - entity.locZ;
 | 
					
						
							|  |  |  | +                    d2 = (double) j2 + 0.5D - z; // CraftBukkit
 | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  |                      label219: | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  |                      for (k2 = this.world.Z() - 1; k2 >= 0; --k2) { | 
					
						
							|  |  |  | @@ -261,7 +377,7 @@
 | 
					
						
							| 
									
										
										
										
											2014-11-26 08:32:16 +11:00
										 |  |  |                                      } | 
					
						
							|  |  |  |                                  } | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  | -                                d3 = (double) k2 + 0.5D - entity.locY;
 | 
					
						
							|  |  |  | +                                d3 = (double) k2 + 0.5D - y; // CraftBukkit
 | 
					
						
							|  |  |  |                                  d4 = d1 * d1 + d3 * d3 + d2 * d2; | 
					
						
							|  |  |  |                                  if (d0 < 0.0D || d4 < d0) { | 
					
						
							|  |  |  |                                      d0 = d4; | 
					
						
							| 
									
										
										
										
											2016-03-01 08:32:46 +11:00
										 |  |  | @@ -362,5 +478,10 @@
 | 
					
						
							|  |  |  |              super(blockposition.getX(), blockposition.getY(), blockposition.getZ()); | 
					
						
							|  |  |  |              this.c = i; | 
					
						
							|  |  |  |          } | 
					
						
							|  |  |  | +
 | 
					
						
							|  |  |  | +        @Override
 | 
					
						
							|  |  |  | +        public int compareTo(BaseBlockPosition o) {
 | 
					
						
							|  |  |  | +            return this.i(o);
 | 
					
						
							|  |  |  | +        }
 | 
					
						
							|  |  |  |      } | 
					
						
							|  |  |  |  } |