diff --git a/patches/net/minecraft/network/NetHandlerPlayServer.java.patch b/patches/net/minecraft/network/NetHandlerPlayServer.java.patch index 8c696cd..d0def9f 100644 --- a/patches/net/minecraft/network/NetHandlerPlayServer.java.patch +++ b/patches/net/minecraft/network/NetHandlerPlayServer.java.patch @@ -24,7 +24,7 @@ import net.minecraft.network.play.server.S23PacketBlockChange; import net.minecraft.network.play.server.S2FPacketSetSlot; import net.minecraft.network.play.server.S32PacketConfirmTransaction; -@@ -81,19 +84,75 @@ +@@ -81,18 +84,74 @@ import net.minecraft.util.IChatComponent; import net.minecraft.util.IntHashMap; import net.minecraft.util.ReportedException; @@ -42,7 +42,7 @@ import net.minecraftforge.event.ServerChatEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action; - ++ +// CraftBukkit start +import java.io.UnsupportedEncodingException; +import java.util.concurrent.ExecutionException; @@ -98,10 +98,9 @@ +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.event.inventory.InventoryType; +// Cauldron end -+ + public class NetHandlerPlayServer implements INetHandlerPlayServer { - private static final Logger logger = LogManager.getLogger(); @@ -107,13 +166,12 @@ private long field_147379_i; private static Random field_147376_j = new Random(); @@ -126,8 +125,8 @@ p_i1530_3_.playerNetServerHandler = this; + // CraftBukkit start + this.server = p_i1530_1_ == null ? null : p_i1530_1_.server; - } - ++ } ++ + private final org.bukkit.craftbukkit.CraftServer server; + private int lastTick = MinecraftServer.currentTick; + private int lastDropTick = MinecraftServer.currentTick; @@ -153,8 +152,8 @@ + public CraftPlayer getPlayerB() + { + return (this.playerEntity == null) ? null : (CraftPlayer) this.playerEntity.getBukkitEntity(); -+ } -+ + } + + private final static HashSet invalidItems = new HashSet(java.util.Arrays.asList(8, 9, 10, 11, 26, 34, 36, 43, 51, 52, 55, 59, 60, 62, 63, + 64, 68, 71, 74, 75, 83, 90, 92, 93, 94, 104, 105, 115, 117, 118, 119, 125, 127, 132, 140, 141, 142, 144)); // TODO: Check after every update. + // CraftBukkit end @@ -231,7 +230,7 @@ WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); this.field_147366_g = true; -@@ -199,8 +323,70 @@ +@@ -199,8 +323,71 @@ } } @@ -243,7 +242,7 @@ + + // If the packet contains movement information then we update the To location with the correct XYZ. + if (p_147347_1_.field_149480_h && !(p_147347_1_.field_149480_h && p_147347_1_.field_149477_b == -999.0D && p_147347_1_.field_149475_d == -999.0D)) - { ++ { + to.setX(p_147347_1_.field_149479_a); + to.setY(p_147347_1_.field_149477_b); + to.setZ(p_147347_1_.field_149478_c); @@ -268,6 +267,7 @@ + this.lastYaw = to.getYaw(); + this.lastPitch = to.getPitch(); + ++ Location oldTo = to.clone(); + PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); + this.server.getPluginManager().callEvent(event); + @@ -282,7 +282,7 @@ + /* If a Plugin has changed the To destination then we teleport the Player + there to avoid any 'Moved wrongly' or 'Moved too quickly' errors. + We only do this if the Event was not cancelled. */ -+ if (!to.equals(event.getTo()) && !event.isCancelled()) ++ if (!oldTo.equals(event.getTo()) && !event.isCancelled()) + { + this.playerEntity.getBukkitEntity().teleport(event.getTo(), PlayerTeleportEvent.TeleportCause.UNKNOWN); + return; @@ -298,12 +298,12 @@ + } + + if (this.hasMoved && !this.playerEntity.isDead) -+ { + { + // CraftBukkit end double d1; double d2; double d3; -@@ -280,13 +466,6 @@ +@@ -280,13 +467,6 @@ d3 = p_147347_1_.func_149472_e(); d4 = p_147347_1_.func_149471_f() - p_147347_1_.func_149467_d(); @@ -317,7 +317,7 @@ if (Math.abs(p_147347_1_.func_149464_c()) > 3.2E7D || Math.abs(p_147347_1_.func_149472_e()) > 3.2E7D) { this.kickPlayerFromServer("Illegal position"); -@@ -318,7 +497,7 @@ +@@ -318,7 +498,7 @@ double d9 = Math.max(Math.abs(d6), Math.abs(this.playerEntity.motionZ)); double d10 = d7 * d7 + d8 * d8 + d9 * d9; @@ -326,7 +326,7 @@ { logger.warn(this.playerEntity.getCommandSenderName() + " moved too quickly! " + d4 + "," + d5 + "," + d6 + " (" + d7 + ", " + d8 + ", " + d9 + ")"); this.setPlayerLocation(this.lastPosX, this.lastPosY, this.lastPosZ, this.playerEntity.rotationYaw, this.playerEntity.rotationPitch); -@@ -413,21 +592,85 @@ +@@ -413,21 +593,85 @@ public void setPlayerLocation(double p_147364_1_, double p_147364_3_, double p_147364_5_, float p_147364_7_, float p_147364_8_) { @@ -417,7 +417,7 @@ this.playerEntity.dropOneItem(false); } else if (p_147345_1_.func_149506_g() == 3) -@@ -490,7 +733,17 @@ +@@ -490,7 +734,17 @@ } else { @@ -435,7 +435,7 @@ } } else if (p_147345_1_.func_149506_g() == 2) -@@ -517,6 +770,34 @@ +@@ -517,6 +771,34 @@ public void processPlayerBlockPlacement(C08PacketPlayerBlockPlacement p_147346_1_) { WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); @@ -470,7 +470,7 @@ ItemStack itemstack = this.playerEntity.inventory.getCurrentItem(); boolean flag = false; boolean placeResult = true; -@@ -533,11 +814,21 @@ +@@ -533,11 +815,21 @@ return; } @@ -494,7 +494,7 @@ } else if (p_147346_1_.func_149571_d() >= this.serverController.getBuildLimit() - 1 && (p_147346_1_.func_149568_f() == 1 || p_147346_1_.func_149571_d() >= this.serverController.getBuildLimit())) { -@@ -548,17 +839,24 @@ +@@ -548,17 +840,24 @@ } else { @@ -527,7 +527,7 @@ flag = true; } -@@ -615,7 +913,7 @@ +@@ -615,7 +914,7 @@ this.playerEntity.openContainer.detectAndSendChanges(); this.playerEntity.isChangingQuantityOnly = false; @@ -536,7 +536,7 @@ { this.sendPacket(new S2FPacketSetSlot(this.playerEntity.openContainer.windowId, slot.slotNumber, this.playerEntity.inventory.getCurrentItem())); } -@@ -624,14 +922,34 @@ +@@ -624,13 +923,33 @@ public void onDisconnect(IChatComponent p_147231_1_) { @@ -566,17 +566,16 @@ this.playerEntity.mountEntityAndWakeUp(); - this.serverController.getConfigurationManager().playerLoggedOut(this.playerEntity); + String quitMessage = this.serverController.getConfigurationManager().disconnect(this.playerEntity); - ++ + if ((quitMessage != null) && (quitMessage.length() > 0)) + { + this.serverController.getConfigurationManager().sendMessage(CraftChatMessage.fromString(quitMessage)); + } + // CraftBukkit end -+ + if (this.serverController.isSinglePlayer() && this.playerEntity.getCommandSenderName().equals(this.serverController.getServerOwner())) { - logger.info("Stopping singleplayer server as player logged out"); -@@ -657,6 +975,18 @@ +@@ -657,6 +976,18 @@ } } @@ -595,7 +594,7 @@ try { this.netManager.scheduleOutboundPacket(p_147359_1_, new GenericFutureListener[0]); -@@ -679,20 +1009,37 @@ +@@ -679,20 +1010,37 @@ public void processHeldItemChange(C09PacketHeldItemChange p_147355_1_) { @@ -634,7 +633,7 @@ { ChatComponentTranslation chatcomponenttranslation = new ChatComponentTranslation("chat.cannotSend", new Object[0]); chatcomponenttranslation.getChatStyle().setColor(EnumChatFormatting.RED); -@@ -708,51 +1055,385 @@ +@@ -708,123 +1056,520 @@ { if (!ChatAllowedCharacters.isAllowedCharacter(s.charAt(i))) { @@ -677,8 +676,7 @@ - if (s.startsWith("/")) + // CraftBukkit start + if (!p_147354_1_.hasPriority()) - { -- this.handleSlashCommand(s); ++ { + try + { + this.serverController.server.playerCommandState = true; @@ -688,22 +686,28 @@ + { + this.serverController.server.playerCommandState = false; + } ++ } ++ else if (s.isEmpty()) + { +- this.handleSlashCommand(s); ++ logger.warn(this.playerEntity.getCommandSenderName() + " tried to send an empty message"); } - else -+ else if (s.isEmpty()) ++ else if (getPlayerB().isConversing()) { - ChatComponentTranslation chatcomponenttranslation1 = new ChatComponentTranslation("chat.type.text", new Object[] {this.playerEntity.func_145748_c_(), ForgeHooks.newChatWithLinks(s)}); // Fixes chat links - chatcomponenttranslation1 = ForgeHooks.onServerChatEvent(this, s, chatcomponenttranslation1); - if (chatcomponenttranslation1 == null) return; - this.serverController.getConfigurationManager().sendChatMsgImpl(chatcomponenttranslation1, false); -+ logger.warn(this.playerEntity.getCommandSenderName() + " tried to send an empty message"); - } -+ else if (getPlayerB().isConversing()) -+ { + getPlayerB().acceptConversationInput(s); -+ } + } +- +- this.chatSpamThresholdCount += 20; +- +- if (this.chatSpamThresholdCount > 200 && !this.serverController.getConfigurationManager().func_152596_g(this.playerEntity.getGameProfile())) + else if (this.playerEntity.func_147096_v() == EntityPlayer.EnumChatVisibility.SYSTEM) // Re-add "Command Only" flag check -+ { + { +- this.kickPlayerFromServer("disconnect.spam"); + ChatComponentTranslation chatcomponenttranslation = new ChatComponentTranslation("chat.cannotSend", new Object[0]); + chatcomponenttranslation.getChatStyle().setColor(EnumChatFormatting.RED); + this.sendPacket(new S02PacketChat(chatcomponenttranslation)); @@ -712,9 +716,14 @@ + { + this.chat(s, true); + // CraftBukkit end - the below is for reference. :) -+ } + } +- } +- } -- this.chatSpamThresholdCount += 20; +- private void handleSlashCommand(String p_147361_1_) +- { +- this.serverController.getCommandManager().executeCommand(this.playerEntity, p_147361_1_); +- } + // CraftBukkit start - replaced with thread safe throttle + // this.chatSpamThresholdCount += 20; + if (chatSpamField.addAndGet(this, 20) > 200 && !this.serverController.getConfigurationManager().func_152596_g(this.playerEntity.getGameProfile())) @@ -731,7 +740,9 @@ + }; + this.serverController.processQueue.add(waitable); -- if (this.chatSpamThresholdCount > 200 && !this.serverController.getConfigurationManager().func_152596_g(this.playerEntity.getGameProfile())) +- public void processAnimation(C0APacketAnimation p_147350_1_) +- { +- this.playerEntity.func_143004_u(); + try + { + waitable.get(); @@ -749,30 +760,53 @@ + { + this.kickPlayerFromServer("disconnect.spam"); + } -+ + +- if (p_147350_1_.func_149421_d() == 1) +- { +- this.playerEntity.swingItem(); + // CraftBukkit end + } -+ } -+ } -+ + } + } + +- public void processEntityAction(C0BPacketEntityAction p_147357_1_) + // CraftBukkit start + public void chat(String s, boolean async) -+ { + { +- this.playerEntity.func_143004_u(); +- +- if (p_147357_1_.func_149513_d() == 1) +- { +- this.playerEntity.setSneaking(true); +- } +- else if (p_147357_1_.func_149513_d() == 2) +- { +- this.playerEntity.setSneaking(false); +- } +- else if (p_147357_1_.func_149513_d() == 4) + if (s.isEmpty() || this.playerEntity.func_147096_v() == EntityPlayer.EnumChatVisibility.HIDDEN) -+ { + { +- this.playerEntity.setSprinting(true); + return; -+ } + } +- else if (p_147357_1_.func_149513_d() == 5) + + if (!async && s.startsWith("/")) -+ { + { +- this.playerEntity.setSprinting(false); + this.handleSlashCommand(s); -+ } + } +- else if (p_147357_1_.func_149513_d() == 3) + else if (this.playerEntity.func_147096_v() == EntityPlayer.EnumChatVisibility.SYSTEM) -+ { + { +- this.playerEntity.wakeUpPlayer(false, true, true); +- this.hasMoved = false; + // Do nothing, this is coming from a plugin -+ } + } +- else if (p_147357_1_.func_149513_d() == 6) + else -+ { + { +- if (this.playerEntity.ridingEntity != null && this.playerEntity.ridingEntity instanceof EntityHorse) + // Cauldron start - handle Forge event + ChatComponentTranslation chatcomponenttranslation1 = new ChatComponentTranslation("chat.type.text", new Object[] { + this.playerEntity.func_145748_c_(), s }); @@ -781,10 +815,16 @@ + if (chatcomponenttranslation1 != null + && chatcomponenttranslation1.getFormatArgs()[chatcomponenttranslation1.getFormatArgs().length - 1] instanceof String) { -- this.kickPlayerFromServer("disconnect.spam"); +- ((EntityHorse)this.playerEntity.ridingEntity).setJumpPower(p_147357_1_.func_149512_e()); + // use event message from Forge + s = (String) chatcomponenttranslation1.getFormatArgs()[chatcomponenttranslation1.getFormatArgs().length - 1]; } +- } +- else if (p_147357_1_.func_149513_d() == 7 && this.playerEntity.ridingEntity != null && this.playerEntity.ridingEntity instanceof EntityHorse) +- { +- ((EntityHorse)this.playerEntity.ridingEntity).openGUI(this.playerEntity); +- } +- } + // Cauldron end + Player player = this.getPlayerB(); + AsyncPlayerChatEvent event = new AsyncPlayerChatEvent(async, player, s, new LazyPlayerSet()); // Cauldron - pass changed message if any from Forge @@ -800,12 +840,21 @@ + protected Object evaluate() + { + org.bukkit.Bukkit.getPluginManager().callEvent(queueEvent); -+ + +- public void processUseEntity(C02PacketUseEntity p_147340_1_) +- { +- WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); +- Entity entity = p_147340_1_.func_149564_a(worldserver); +- this.playerEntity.func_143004_u(); + if (queueEvent.isCancelled()) + { + return null; + } -+ + +- if (entity != null) +- { +- boolean flag = this.playerEntity.canEntityBeSeen(entity); +- double d0 = 36.0D; + String message = String.format(queueEvent.getFormat(), queueEvent.getPlayer().getDisplayName(), queueEvent.getMessage()); + NetHandlerPlayServer.this.serverController.console.sendMessage(message); + if (((LazyPlayerSet) queueEvent.getRecipients()).isLazy()) @@ -822,11 +871,16 @@ + player.sendMessage(message); + } + } -+ + +- if (!flag) +- { +- d0 = 9.0D; +- } + return null; + } + }; -+ + +- if (this.playerEntity.getDistanceSqToEntity(entity) < d0) + if (async) + { + serverController.processQueue.add(waitable); @@ -850,18 +904,25 @@ + } + } + else -+ { + { +- if (p_147340_1_.func_149565_c() == C02PacketUseEntity.Action.INTERACT) + if (event.isCancelled()) -+ { + { +- this.playerEntity.interactWith(entity); + return; -+ } + } +- else if (p_147340_1_.func_149565_c() == C02PacketUseEntity.Action.ATTACK) + + s = String.format(event.getFormat(), event.getPlayer().getDisplayName(), event.getMessage()); + serverController.console.sendMessage(s); + if (((LazyPlayerSet) event.getRecipients()).isLazy()) -+ { + { +- if (entity instanceof EntityItem || entity instanceof EntityXPOrb || entity instanceof EntityArrow || entity == this.playerEntity) + for (Object recipient : serverController.getConfigurationManager().playerEntityList) -+ { + { +- this.kickPlayerFromServer("Attempting to attack an invalid entity"); +- this.serverController.logWarning("Player " + this.playerEntity.getCommandSenderName() + " tried to attack an invalid entity"); +- return; + for (IChatComponent component : CraftChatMessage.fromString(s)) + { + ((EntityPlayerMP) recipient).sendMessage(CraftChatMessage.fromString(s)); @@ -873,16 +934,18 @@ + for (Player recipient : event.getRecipients()) + { + recipient.sendMessage(s); -+ } -+ } -+ } + } +- +- this.playerEntity.attackTargetEntityWithCurrentItem(entity); + } + } } } + // CraftBukkit end - private void handleSlashCommand(String p_147361_1_) - { -- this.serverController.getCommandManager().executeCommand(this.playerEntity, p_147361_1_); +- public void processClientStatus(C16PacketClientStatus p_147342_1_) ++ private void handleSlashCommand(String p_147361_1_) ++ { + org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.startTiming(); // Spigot + // CraftBukkit start + CraftPlayer player = this.getPlayerB(); @@ -931,19 +994,19 @@ + + // this.serverController.getCommandManager().executeCommand(this.playerEntity, p_147361_1_); + // CraftBukkit end - } - - public void processAnimation(C0APacketAnimation p_147350_1_) - { ++ } ++ ++ public void processAnimation(C0APacketAnimation p_147350_1_) ++ { + if (this.playerEntity.isDead) + { + return; // CraftBukkit + } + - this.playerEntity.func_143004_u(); - - if (p_147350_1_.func_149421_d() == 1) - { ++ this.playerEntity.func_143004_u(); ++ ++ if (p_147350_1_.func_149421_d() == 1) ++ { + // CraftBukkit start - Raytrace to look for 'rogue armswings' + float f = 1.0F; + float f1 = this.playerEntity.prevRotationPitch + (this.playerEntity.rotationPitch - this.playerEntity.prevRotationPitch) * f; @@ -992,20 +1055,20 @@ + return; + } + // CraftBukkit end - this.playerEntity.swingItem(); - } - } - - public void processEntityAction(C0BPacketEntityAction p_147357_1_) - { ++ this.playerEntity.swingItem(); ++ } ++ } ++ ++ public void processEntityAction(C0BPacketEntityAction p_147357_1_) ++ { + // CraftBukkit start + if (this.playerEntity.isDead) + { + return; + } + - this.playerEntity.func_143004_u(); - ++ this.playerEntity.func_143004_u(); ++ + if (p_147357_1_.func_149513_d() == 1 || p_147357_1_.func_149513_d() == 2) + { + PlayerToggleSneakEvent event = new PlayerToggleSneakEvent(this.getPlayerB(), p_147357_1_.func_149513_d() == 1); @@ -1029,29 +1092,48 @@ + } + // CraftBukkit end + - if (p_147357_1_.func_149513_d() == 1) - { - this.playerEntity.setSneaking(true); -@@ -772,7 +1453,7 @@ - else if (p_147357_1_.func_149513_d() == 3) - { - this.playerEntity.wakeUpPlayer(false, true, true); -- this.hasMoved = false; ++ if (p_147357_1_.func_149513_d() == 1) ++ { ++ this.playerEntity.setSneaking(true); ++ } ++ else if (p_147357_1_.func_149513_d() == 2) ++ { ++ this.playerEntity.setSneaking(false); ++ } ++ else if (p_147357_1_.func_149513_d() == 4) ++ { ++ this.playerEntity.setSprinting(true); ++ } ++ else if (p_147357_1_.func_149513_d() == 5) ++ { ++ this.playerEntity.setSprinting(false); ++ } ++ else if (p_147357_1_.func_149513_d() == 3) ++ { ++ this.playerEntity.wakeUpPlayer(false, true, true); + // this.hasMoved = false; // CraftBukkit - this is handled in teleport - } - else if (p_147357_1_.func_149513_d() == 6) - { -@@ -789,8 +1470,20 @@ - - public void processUseEntity(C02PacketUseEntity p_147340_1_) - { ++ } ++ else if (p_147357_1_.func_149513_d() == 6) ++ { ++ if (this.playerEntity.ridingEntity != null && this.playerEntity.ridingEntity instanceof EntityHorse) ++ { ++ ((EntityHorse)this.playerEntity.ridingEntity).setJumpPower(p_147357_1_.func_149512_e()); ++ } ++ } ++ else if (p_147357_1_.func_149513_d() == 7 && this.playerEntity.ridingEntity != null && this.playerEntity.ridingEntity instanceof EntityHorse) ++ { ++ ((EntityHorse)this.playerEntity.ridingEntity).openGUI(this.playerEntity); ++ } ++ } ++ ++ public void processUseEntity(C02PacketUseEntity p_147340_1_) ++ { + if (this.playerEntity.isDead) + { + return; // CraftBukkit + } + - WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); -- Entity entity = p_147340_1_.func_149564_a(worldserver); ++ WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); + Entity entity = p_147340_1_.func_149564_a((World) worldserver); + // Spigot Start + if (entity == playerEntity) @@ -1060,17 +1142,24 @@ + return; + } + // Spigot End - this.playerEntity.func_143004_u(); - - if (entity != null) -@@ -805,9 +1498,53 @@ - - if (this.playerEntity.getDistanceSqToEntity(entity) < d0) - { ++ this.playerEntity.func_143004_u(); ++ ++ if (entity != null) ++ { ++ boolean flag = this.playerEntity.canEntityBeSeen(entity); ++ double d0 = 36.0D; ++ ++ if (!flag) ++ { ++ d0 = 9.0D; ++ } ++ ++ if (this.playerEntity.getDistanceSqToEntity(entity) < d0) ++ { + ItemStack itemInHand = this.playerEntity.inventory.getCurrentItem(); // CraftBukkit + - if (p_147340_1_.func_149565_c() == C02PacketUseEntity.Action.INTERACT) - { ++ if (p_147340_1_.func_149565_c() == C02PacketUseEntity.Action.INTERACT) ++ { + // CraftBukkit start + boolean triggerTagUpdate = itemInHand != null && itemInHand.getItem() == Items.name_tag && entity instanceof EntityLiving; + boolean triggerChestUpdate = itemInHand != null && itemInHand.getItem() == Item.getItemFromBlock(Blocks.chest) @@ -1107,20 +1196,24 @@ + return; + } + // CraftBukkit end - this.playerEntity.interactWith(entity); ++ this.playerEntity.interactWith(entity); + // CraftBukkit start + if (itemInHand != null && itemInHand.stackSize <= -1) + { + this.playerEntity.sendContainerToPlayer(this.playerEntity.openContainer); + } + // CraftBukkit end - } - else if (p_147340_1_.func_149565_c() == C02PacketUseEntity.Action.ATTACK) - { -@@ -819,6 +1556,13 @@ - } - - this.playerEntity.attackTargetEntityWithCurrentItem(entity); ++ } ++ else if (p_147340_1_.func_149565_c() == C02PacketUseEntity.Action.ATTACK) ++ { ++ if (entity instanceof EntityItem || entity instanceof EntityXPOrb || entity instanceof EntityArrow || entity == this.playerEntity) ++ { ++ this.kickPlayerFromServer("Attempting to attack an invalid entity"); ++ this.serverController.logWarning("Player " + this.playerEntity.getCommandSenderName() + " tried to attack an invalid entity"); ++ return; ++ } ++ ++ this.playerEntity.attackTargetEntityWithCurrentItem(entity); + + // CraftBukkit start + if (itemInHand != null && itemInHand.stackSize <= -1) @@ -1128,10 +1221,16 @@ + this.playerEntity.sendContainerToPlayer(this.playerEntity.openContainer); + } + // CraftBukkit end - } - } - } -@@ -834,8 +1578,19 @@ ++ } ++ } ++ } ++ } ++ ++ public void processClientStatus(C16PacketClientStatus p_147342_1_) + { + this.playerEntity.func_143004_u(); + C16PacketClientStatus.EnumState enumstate = p_147342_1_.func_149435_c(); +@@ -834,7 +1579,18 @@ case 1: if (this.playerEntity.playerConqueredTheEnd) { @@ -1141,18 +1240,17 @@ + { + // We really should be calling transferPlayerToDimension since the player is coming in contact with a portal. + this.serverController.getConfigurationManager().respawnPlayer(this.playerEntity, 0, true); // set flag to indicate player is leaving end. - } ++ } + else + // not coming from end + { + this.playerEntity = this.serverController.getConfigurationManager().respawnPlayer(this.playerEntity, 0, false); + } + // Cauldron end -+ } + } else if (this.playerEntity.getServerForPlayer().getWorldInfo().isHardcoreModeEnabled()) { - if (this.serverController.isSinglePlayer() && this.playerEntity.getCommandSenderName().equals(this.serverController.getServerOwner())) -@@ -871,17 +1626,461 @@ +@@ -871,16 +1627,460 @@ public void processCloseWindow(C0DPacketCloseWindow p_147356_1_) { @@ -1194,7 +1292,7 @@ + { + return; + } - ++ + InventoryView inventory = this.playerEntity.openContainer.getBukkitView(); + SlotType type = CraftInventoryView.getSlotType(inventory, p_147351_1_.func_149544_d()); + InventoryClickEvent event = null; @@ -1611,11 +1709,10 @@ + } + } + // CraftBukkit end -+ + if (ItemStack.areItemStacksEqual(p_147351_1_.func_149546_g(), itemstack)) { - this.playerEntity.playerNetServerHandler.sendPacket(new S32PacketConfirmTransaction(p_147351_1_.func_149548_c(), p_147351_1_.func_149547_f(), true)); -@@ -903,6 +2102,12 @@ +@@ -903,6 +2103,12 @@ } this.playerEntity.sendContainerAndContentsToPlayer(this.playerEntity.openContainer, arraylist); @@ -1628,7 +1725,7 @@ } } } -@@ -925,9 +2130,61 @@ +@@ -925,8 +2131,60 @@ boolean flag = p_147344_1_.func_149627_c() < 0; ItemStack itemstack = p_147344_1_.func_149625_d(); boolean flag1 = p_147344_1_.func_149627_c() >= 1 && p_147344_1_.func_149627_c() < 36 + InventoryPlayer.getHotbarSize(); @@ -1645,7 +1742,7 @@ + InventoryView inventory = new CraftInventoryView(player, player.getInventory(), this.playerEntity.inventoryContainer); + org.bukkit.inventory.ItemStack item = CraftItemStack.asBukkitCopy(p_147344_1_.func_149625_d()); // Should be packet107setcreativeslot.newitem + SlotType type = SlotType.QUICKBAR; - ++ + if (flag) + { + type = SlotType.OUTSIDE; @@ -1687,11 +1784,10 @@ + } + } + // CraftBukkit end -+ + if (flag1 && flag2 && flag3) { - if (itemstack == null) -@@ -956,6 +2213,11 @@ +@@ -956,6 +2214,11 @@ public void processConfirmTransaction(C0FPacketConfirmTransaction p_147339_1_) { @@ -1703,7 +1799,7 @@ Short oshort = (Short)this.field_147372_n.lookup(this.playerEntity.openContainer.windowId); if (oshort != null && p_147339_1_.func_149533_d() == oshort.shortValue() && this.playerEntity.openContainer.windowId == p_147339_1_.func_149532_c() && !this.playerEntity.openContainer.isPlayerNotUsingContainer(this.playerEntity)) -@@ -966,6 +2228,11 @@ +@@ -966,6 +2229,11 @@ public void processUpdateSign(C12PacketUpdateSign p_147343_1_) { @@ -1715,7 +1811,7 @@ this.playerEntity.func_143004_u(); WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); -@@ -980,6 +2247,7 @@ +@@ -980,6 +2248,7 @@ if (!tileentitysign.func_145914_a() || tileentitysign.func_145911_b() != this.playerEntity) { this.serverController.logWarning("Player " + this.playerEntity.getCommandSenderName() + " just tried to change non-editable sign"); @@ -1723,7 +1819,7 @@ return; } } -@@ -990,6 +2258,7 @@ +@@ -990,6 +2259,7 @@ for (j = 0; j < 4; ++j) { boolean flag = true; @@ -1731,7 +1827,7 @@ if (p_147343_1_.func_149589_f()[j].length() > 15) { -@@ -1018,7 +2287,29 @@ +@@ -1018,7 +2288,29 @@ int k = p_147343_1_.func_149586_d(); i = p_147343_1_.func_149585_e(); TileEntitySign tileentitysign1 = (TileEntitySign)tileentity; @@ -1762,7 +1858,7 @@ tileentitysign1.markDirty(); worldserver.markBlockForUpdate(j, k, i); } -@@ -1041,7 +2332,22 @@ +@@ -1041,7 +2333,22 @@ public void processPlayerAbilities(C13PacketPlayerAbilities p_147348_1_) { @@ -1786,7 +1882,7 @@ } public void processTabComplete(C14PacketTabComplete p_147341_1_) -@@ -1068,7 +2374,6 @@ +@@ -1068,7 +2375,6 @@ PacketBuffer packetbuffer; ItemStack itemstack; ItemStack itemstack1; @@ -1794,7 +1890,7 @@ if ("MC|BEdit".equals(p_147349_1_.func_149559_c())) { packetbuffer = new PacketBuffer(Unpooled.wrappedBuffer(p_147349_1_.func_149558_e())); -@@ -1093,16 +2398,18 @@ +@@ -1093,16 +2399,18 @@ { if (itemstack.getItem() == Items.writable_book && itemstack.getItem() == itemstack1.getItem()) { @@ -1817,7 +1913,7 @@ } finally { -@@ -1135,19 +2442,18 @@ +@@ -1135,19 +2443,18 @@ if (itemstack.getItem() == Items.written_book && itemstack1.getItem() == Items.writable_book) { @@ -1843,7 +1939,7 @@ } finally { -@@ -1174,9 +2480,12 @@ +@@ -1174,9 +2481,12 @@ ((ContainerMerchant)container).setCurrentRecipeIndex(i); } } @@ -1857,7 +1953,7 @@ } } else if ("MC|AdvCdm".equals(p_147349_1_.func_149559_c())) -@@ -1222,9 +2531,12 @@ +@@ -1222,9 +2532,12 @@ this.playerEntity.addChatMessage(new ChatComponentTranslation("advMode.setCommand.success", new Object[] {s1})); } } @@ -1872,7 +1968,7 @@ } finally { -@@ -1257,9 +2569,12 @@ +@@ -1257,9 +2570,12 @@ tileentitybeacon.markDirty(); } } @@ -1887,7 +1983,7 @@ } } } -@@ -1281,6 +2596,13 @@ +@@ -1281,6 +2597,13 @@ containerrepair.updateItemName(""); } } @@ -1901,7 +1997,7 @@ } } -@@ -1292,6 +2614,21 @@ +@@ -1292,6 +2615,21 @@ } } @@ -1923,3 +2019,9 @@ static final class SwitchEnumState { static final int[] field_151290_a = new int[C16PacketClientStatus.EnumState.values().length]; +@@ -1327,4 +2665,4 @@ + } + } + } +-} ++}