From 193bf0136737b4379091a65ad1f5bfaae9e8ec63 Mon Sep 17 00:00:00 2001 From: Dinnerbone Date: Wed, 29 Dec 2010 01:25:32 +0000 Subject: [PATCH] Moved the PLAYER_MOVE and PLAYER_TELEPORT hooks to be packet-based, fixed player.getLocation() to return pitch/yaw --- src/net/minecraft/server/EntityPlayerMP.java | 317 ------------------ .../minecraft/server/NetServerHandler.java | 38 +++ src/org/bukkit/craftbukkit/CraftPlayer.java | 2 +- 3 files changed, 39 insertions(+), 318 deletions(-) delete mode 100644 src/net/minecraft/server/EntityPlayerMP.java diff --git a/src/net/minecraft/server/EntityPlayerMP.java b/src/net/minecraft/server/EntityPlayerMP.java deleted file mode 100644 index 86dd1eafd1..0000000000 --- a/src/net/minecraft/server/EntityPlayerMP.java +++ /dev/null @@ -1,317 +0,0 @@ -package net.minecraft.server; - - -import java.util.*; - -import org.bukkit.Location; -import org.bukkit.craftbukkit.CraftServer; -import org.bukkit.event.Event; -import org.bukkit.event.player.PlayerMoveEvent; - - -public class EntityPlayerMP extends EntityPlayer - implements ICrafting { - - public NetServerHandler a; - public MinecraftServer b; - public ItemInWorldManager c; - public double d; - public double e; - public List f; - public Set aj; - public double ak; - public boolean al; - private int bE; - private int bF; - private int bG[] = { - -1, -1, -1, -1, -1 - }; - private int bH; - public boolean am; - private CraftServer server; // Craftbukkit - private Location oldLocation = null; // Craftbukkit - - public EntityPlayerMP(MinecraftServer minecraftserver, World world, String s1, ItemInWorldManager iteminworldmanager) { - super(world); - f = new LinkedList(); - aj = new HashSet(); - al = false; - bE = 0xfa0a1f01; - bF = 60; - bH = 0; - int i = world.m; - int j = world.o; - int l = world.n; - - - if (!world.q.e) { - i += W.nextInt(20) - 10; - l = world.e(i, j); - j += W.nextInt(20) - 10; - } - c((double) i + 0.5D, l, (double) j + 0.5D, 0.0F, 0.0F); - b = minecraftserver; - S = 0.0F; - iteminworldmanager.a = this; - aw = s1; - c = iteminworldmanager; - H = 0.0F; - - server = minecraftserver.server; // Craftbukkit - oldLocation = new Location(server.getWorld(b.e), 0,0,-1); // Craftbukkit - } - - /** - * Craftbukkit: Overloaded version of b(double,double,double,float, float) - * - * Enables monitoring of PLAYER_MOVE events. - */ - public void b(double x, double y, double z, float rotation, float pitch) { - Location newLocation = new Location(server.getWorld(b.e),x,y,z); - - // Only send an event if player position has changed. - if (x != oldLocation.getX() || y != oldLocation.getY() || z != oldLocation.getZ()) { - PlayerMoveEvent pm = new PlayerMoveEvent(Event.Type.PLAYER_MOVE, server.getPlayer(this), - oldLocation, newLocation); - - server.getPluginManager().callEvent(pm); - if (pm.isCancelled()) - newLocation = pm.getFrom(); - } - oldLocation = newLocation; - super.b(newLocation.getX(),newLocation.getY(),newLocation.getZ(),rotation, pitch); - } - - public void k() { - ap.a((ICrafting)this); - } - - public int[] E() { - return bG; - } - - public void b_() { - bF--; - ap.a(); - for (int i = 0; i < 5; i++) { - int j = a(i); - - if (j != bG[i]) { - b.k.a(this, new Packet5PlayerInventory(g, i, j)); - bG[i] = j; - } - } - - } - - public int a(int i) { - if (i == 0) { - return c(an.e()); - } else { - return c(an.b[i - 1]); - } - } - - private int c(ItemStack itemstack) { - if (itemstack == null) { - return -1; - } else { - return itemstack.c; - } - } - - public void f(Entity entity) { - an.h(); - } - - public boolean a(Entity entity, int i) { - if (bF > 0) { - return false; - } - if (!b.n) { - if (entity instanceof EntityPlayer) { - return false; - } - if (entity instanceof EntityArrow) { - EntityArrow entityarrow = (EntityArrow) entity; - - if (entityarrow.b instanceof EntityPlayer) { - return false; - } - } - } - return super.a(entity, i); - } - - public void c(int i) { - super.c(i); - } - - public void F() { - super.b_(); - ChunkCoordIntPair chunkcoordintpair = null; - double d1 = 0.0D; - - for (int i = 0; i < f.size(); i++) { - ChunkCoordIntPair chunkcoordintpair1 = (ChunkCoordIntPair) f.get(i); - double d2 = chunkcoordintpair1.a(this); - - if (i == 0 || d2 < d1) { - chunkcoordintpair = chunkcoordintpair1; - d1 = chunkcoordintpair1.a(this); - } - } - - if (chunkcoordintpair != null) { - boolean flag = false; - - if (d1 < 1024D) { - flag = true; - } - if (a.b() < 2) { - flag = true; - } - if (flag) { - f.remove(chunkcoordintpair); - a.b(new Packet51MapChunk(chunkcoordintpair.a * 16, 0, chunkcoordintpair.b * 16, 16, 128, 16, b.e)); - List list = b.e.d(chunkcoordintpair.a * 16, 0, chunkcoordintpair.b * 16, chunkcoordintpair.a * 16 + 16, 128, chunkcoordintpair.b * 16 + 16); - - for (int j = 0; j < list.size(); j++) { - a((TileEntity) list.get(j)); - } - - } - } - if (ba != bE) { - a.b(new Packet8(ba)); - bE = ba; - } - } - - private void a(TileEntity tileentity) { - if (tileentity != null) { - Packet packet = tileentity.f(); - - if (packet != null) { - a.b(packet); - } - } - } - - public void G() { - s = t = u = 0.0D; - bB = false; - super.G(); - } - - public void c(Entity entity, int i) { - if (!entity.G) { - if (entity instanceof EntityItem) { - b.k.a(entity, new Packet22Collect(entity.g, g)); - } - if (entity instanceof EntityArrow) { - b.k.a(entity, new Packet22Collect(entity.g, g)); - } - } - super.c(entity, i); - ap.a(); - } - - public void H() { - if (!au) { - av = -1; - au = true; - b.k.a(this, new Packet18ArmAnimation(this, 1)); - } - } - - public float s() { - return 1.62F; - } - - public void e(Entity entity) { - super.e(entity); - a.b(new Packet39(this, k)); - a.a(p, q, r, v, w); - } - - protected void a(double d1, boolean flag) {} - - public void b(double d1, boolean flag) { - super.a(d1, flag); - } - - public boolean p() { - return al; - } - - private void R() { - bH = bH % 100 + 1; - } - - public void a(int i, int j, int l) { - R(); - a.b(new Packet100(bH, 1, "Crafting", 9)); - ap = new CraftingInventoryWorkbenchCB(an, this.l, i, j, l); - ap.f = bH; - ap.a((ICrafting)this); - } - - public void a(IInventory iinventory) { - R(); - a.b(new Packet100(bH, 0, iinventory.b(), iinventory.a())); - ap = new CraftingInventoryChestCB(an, iinventory); - ap.f = bH; - ap.a((ICrafting)this); - } - - public void a(TileEntityFurnace tileentityfurnace) { - R(); - a.b(new Packet100(bH, 2, tileentityfurnace.b(), tileentityfurnace.a())); - ap = new CraftingInventoryFurnaceCB(an, tileentityfurnace); - ap.f = bH; - ap.a((ICrafting)this); - } - - public void a(CraftingInventoryCB craftinginventorycb, int i, ItemStack itemstack) { - if (craftinginventorycb.a(i) instanceof SlotCrafting) { - return; - } - if (am) { - return; - } else { - a.b(new Packet103(craftinginventorycb.f, i, itemstack)); - return; - } - } - - public void a(CraftingInventoryCB craftinginventorycb, List list) { - a.b(new Packet104(craftinginventorycb.f, list)); - a.b(new Packet103(-1, -1, an.i())); - } - - public void a(CraftingInventoryCB craftinginventorycb, int i, int j) { - a.b(new Packet105(craftinginventorycb.f, i, j)); - } - - public void a(ItemStack itemstack) {} - - public void I() { - a.b(new Packet101(ap.f)); - K(); - } - - public void J() { - if (am) { - return; - } else { - a.b(new Packet103(-1, -1, an.i())); - return; - } - } - - public void K() { - ap.a((ICrafting)this); - ap = ao; - } -} diff --git a/src/net/minecraft/server/NetServerHandler.java b/src/net/minecraft/server/NetServerHandler.java index a194d4c3b4..1fb2ac9246 100644 --- a/src/net/minecraft/server/NetServerHandler.java +++ b/src/net/minecraft/server/NetServerHandler.java @@ -4,11 +4,13 @@ package net.minecraft.server; import java.io.PrintStream; import java.util.*; import java.util.logging.Logger; +import org.bukkit.Location; import org.bukkit.Player; import org.bukkit.craftbukkit.CraftPlayer; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.event.Event.Type; import org.bukkit.event.player.PlayerChatEvent; +import org.bukkit.event.player.PlayerMoveEvent; public class NetServerHandler extends NetHandler @@ -63,6 +65,24 @@ public class NetServerHandler extends NetHandler j = true; } } + + // CraftBukkit start + Player player = server.getPlayer(e); + Location from = new Location(player.getWorld(), g, h, i, e.v, e.w); + Location to = player.getLocation(); + PlayerMoveEvent event = new PlayerMoveEvent(Type.PLAYER_MOVE, player, from, to); + server.getPluginManager().callEvent(event); + + from = event.getFrom(); + to = event.isCancelled() ? from : event.getTo(); + + e.p = to.getX(); + e.q = to.getY(); + e.r = to.getZ(); + e.v = to.getYaw(); + e.w = to.getPitch(); + // CraftBukkit end + if (j) { if (e.k != null) { float f1 = e.v; @@ -172,6 +192,24 @@ public class NetServerHandler extends NetHandler public void a(double d1, double d2, double d3, float f1, float f2) { + + // CraftBukkit start + Player player = server.getPlayer(e); + Location from = player.getLocation(); + Location to = new Location(player.getWorld(), d1, d2, d3, f1, f2); + PlayerMoveEvent event = new PlayerMoveEvent(Type.PLAYER_TELEPORT, player, from, to); + server.getPluginManager().callEvent(event); + + from = event.getFrom(); + to = event.isCancelled() ? from : event.getTo(); + + d1 = to.getX(); + d2 = to.getY(); + d3 = to.getZ(); + f1 = to.getYaw(); + f2 = to.getPitch(); + // CraftBukkit end + j = false; g = d1; h = d2; diff --git a/src/org/bukkit/craftbukkit/CraftPlayer.java b/src/org/bukkit/craftbukkit/CraftPlayer.java index b347c11d96..f42bd63728 100644 --- a/src/org/bukkit/craftbukkit/CraftPlayer.java +++ b/src/org/bukkit/craftbukkit/CraftPlayer.java @@ -26,7 +26,7 @@ public class CraftPlayer implements Player { } public Location getLocation() { - return new Location(getWorld(), player.p, player.q, player.r); + return new Location(getWorld(), player.p, player.q, player.r, player.v, player.w); } public World getWorld() {