diff --git a/src/main/java/net/minecraft/server/NetServerHandler.java b/src/main/java/net/minecraft/server/NetServerHandler.java index f0815a0345..af94bad001 100644 --- a/src/main/java/net/minecraft/server/NetServerHandler.java +++ b/src/main/java/net/minecraft/server/NetServerHandler.java @@ -22,6 +22,7 @@ import org.bukkit.event.player.PlayerAnimationEvent; import org.bukkit.event.player.PlayerChatEvent; import org.bukkit.event.player.PlayerItemEvent; import org.bukkit.event.player.PlayerItemHeldEvent; +import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.plugin.Plugin; // CraftBukkit end @@ -66,7 +67,6 @@ public class NetServerHandler extends NetHandler implements ICommandListener { } // CraftBukkit end - public void a() { this.b.a(); if (this.f++ % 20 == 0) { @@ -75,10 +75,21 @@ public class NetServerHandler extends NetHandler implements ICommandListener { } public void a(String s) { - this.b.a((Packet) (new Packet255KickDisconnect(s))); - this.b.c(); - this.d.f.a((Packet) (new Packet3Chat("§e" + this.e.name + " left the game."))); + // CraftBukkit start + String leaveMessage = "§e" + this.e.name + " left the game."; + PlayerKickEvent kickEvent = new PlayerKickEvent(org.bukkit.event.Event.Type.PLAYER_KICK, server.getPlayer(this.e), s, leaveMessage); + server.getPluginManager().callEvent(kickEvent); + if (kickEvent.isCancelled()) { + // Do not kick the player + return; + } + // Send the possibly modified leave message + this.d.f.a((Packet) (new Packet3Chat( kickEvent.getLeaveMessage() ))); this.d.f.c(this.e); + this.b.a((Packet) (new Packet255KickDisconnect( kickEvent.getReason() ))); + // CraftBukkit end + + this.b.c(); this.c = true; } diff --git a/src/main/java/net/minecraft/server/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/ServerConfigurationManager.java index 7fce5e7259..a8ef81a2b0 100644 --- a/src/main/java/net/minecraft/server/ServerConfigurationManager.java +++ b/src/main/java/net/minecraft/server/ServerConfigurationManager.java @@ -13,12 +13,14 @@ import java.util.Set; import java.util.logging.Logger; // CraftBukkit start -import org.bukkit.craftbukkit.entity.CraftPlayer; +import org.bukkit.Location; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.entity.Player; +import org.bukkit.event.Event; import org.bukkit.event.Event.Type; import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.player.PlayerRespawnEvent; // CraftBukkit end public class ServerConfigurationManager { @@ -36,12 +38,18 @@ public class ServerConfigurationManager { private File k; private PlayerNBTManager l; - private CraftServer server; // CraftBukkit + // CraftBukkit start + private CraftServer server; + + public int getMaxPlayers() { + return this.e; + } public ServerConfigurationManager(MinecraftServer minecraftserver) { - // CraftBukkit 2 lines! minecraftserver.server = new CraftServer(minecraftserver, this); server = minecraftserver.server; + // CraftBukkit end + this.c = minecraftserver; this.i = minecraftserver.a("banned-players.txt"); this.j = minecraftserver.a("banned-ips.txt"); @@ -56,12 +64,6 @@ public class ServerConfigurationManager { this.j(); } - // CraftBukkit start - public int getMaxPlayers() { - return this.e; - } - // CraftBukkit end - public void a(WorldServer worldserver) { this.l = new PlayerNBTManager(new File(worldserver.t, "players")); } @@ -101,13 +103,12 @@ public class ServerConfigurationManager { // CraftBukkit end } - public EntityPlayer a(NetLoginHandler netloginhandler, String s, String s1) { // CraftBukkit start - note: this entire method needs to be changed // Instead of kicking then returning, we need to store the kick reason // in the event, check with plugins to see if it's ok, and THEN kick // depending on the outcome. - EntityPlayer entity = new EntityPlayer(c, ((World) (c.e)), s, new ItemInWorldManager(((World) (c.e)))); + EntityPlayer entity = new EntityPlayer(c, (World) c.e, s, new ItemInWorldManager((World) c.e)); Player player = (entity == null) ? null : (Player) entity.getBukkitEntity(); PlayerLoginEvent event = new PlayerLoginEvent(Type.PLAYER_LOGIN, player); @@ -158,6 +159,18 @@ public class ServerConfigurationManager { entityplayer1.a(entityplayer1.locX, entityplayer1.locY + 1.0D, entityplayer1.locZ); } + // CraftBukkit start + Player respawnPlayer = server.getPlayer(entityplayer); + Location respawnLocation = new Location(respawnPlayer.getWorld(), entityplayer1.locX, entityplayer1.locY, entityplayer1.locZ, entityplayer1.yaw, entityplayer1.pitch); + PlayerRespawnEvent respawnEvent = new PlayerRespawnEvent(Event.Type.PLAYER_RESPAWN, respawnPlayer, respawnLocation ); + server.getPluginManager().callEvent(respawnEvent); + entityplayer1.locX = respawnEvent.getRespawnLocation().getX(); + entityplayer1.locY = respawnEvent.getRespawnLocation().getY(); + entityplayer1.locZ = respawnEvent.getRespawnLocation().getZ(); + entityplayer1.yaw = respawnEvent.getRespawnLocation().getYaw(); + entityplayer1.pitch = respawnEvent.getRespawnLocation().getPitch(); + // CraftBukkit end + entityplayer1.a.b((Packet) (new Packet9Respawn())); entityplayer1.a.a(entityplayer1.locX, entityplayer1.locY, entityplayer1.locZ, entityplayer1.yaw, entityplayer1.pitch); this.d.a(entityplayer1);