diff --git a/patches/net/minecraft/network/NetHandlerPlayServer.java.patch b/patches/net/minecraft/network/NetHandlerPlayServer.java.patch index 6f0095c1..20b78e5c 100644 --- a/patches/net/minecraft/network/NetHandlerPlayServer.java.patch +++ b/patches/net/minecraft/network/NetHandlerPlayServer.java.patch @@ -470,7 +470,7 @@ ItemStack itemstack = this.playerEntity.inventory.getCurrentItem(); boolean flag = false; boolean placeResult = true; -@@ -533,11 +815,21 @@ +@@ -533,11 +815,23 @@ return; } @@ -480,7 +480,9 @@ + worldserver); // Cauldron - rename event + // CraftBukkit start + int itemstackAmount = itemstack.stackSize; -+ org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.playerEntity, Action.RIGHT_CLICK_AIR, itemstack); ++ //CraftEventFactory.callPlayerInteractEvent(this.playerEntity, Action.RIGHT_CLICK_AIR, itemstack); ++ org.bukkit.event.player.PlayerInteractEvent event = forgeEvent.cb; ++ + + if (forgeEvent.useItem != cpw.mods.fml.common.eventhandler.Event.Result.DENY && event.useItemInHand() != Event.Result.DENY) { @@ -494,7 +496,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 +840,24 @@ +@@ -548,17 +842,24 @@ } else { @@ -527,7 +529,7 @@ flag = true; } -@@ -615,7 +914,7 @@ +@@ -615,7 +916,7 @@ this.playerEntity.openContainer.detectAndSendChanges(); this.playerEntity.isChangingQuantityOnly = false; @@ -536,7 +538,7 @@ { this.sendPacket(new S2FPacketSetSlot(this.playerEntity.openContainer.windowId, slot.slotNumber, this.playerEntity.inventory.getCurrentItem())); } -@@ -624,13 +923,33 @@ +@@ -624,13 +925,33 @@ public void onDisconnect(IChatComponent p_147231_1_) { @@ -575,7 +577,7 @@ if (this.serverController.isSinglePlayer() && this.playerEntity.getCommandSenderName().equals(this.serverController.getServerOwner())) { -@@ -657,6 +976,18 @@ +@@ -657,6 +978,18 @@ } } @@ -594,7 +596,7 @@ try { this.netManager.scheduleOutboundPacket(p_147359_1_, new GenericFutureListener[0]); -@@ -679,20 +1010,37 @@ +@@ -679,20 +1012,37 @@ public void processHeldItemChange(C09PacketHeldItemChange p_147355_1_) { @@ -633,7 +635,7 @@ { ChatComponentTranslation chatcomponenttranslation = new ChatComponentTranslation("chat.cannotSend", new Object[0]); chatcomponenttranslation.getChatStyle().setColor(EnumChatFormatting.RED); -@@ -708,51 +1056,385 @@ +@@ -708,51 +1058,385 @@ { if (!ChatAllowedCharacters.isAllowedCharacter(s.charAt(i))) { @@ -690,7 +692,11 @@ } - else + else if (s.isEmpty()) -+ { + { +- 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()) @@ -704,20 +710,19 @@ + this.sendPacket(new S02PacketChat(chatcomponenttranslation)); + } + else if (true) - { -- 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); ++ { + this.chat(s, true); + // CraftBukkit end - the below is for reference. :) } - this.chatSpamThresholdCount += 20; +- +- if (this.chatSpamThresholdCount > 200 && !this.serverController.getConfigurationManager().func_152596_g(this.playerEntity.getGameProfile())) + // 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())) -+ { + { +- this.kickPlayerFromServer("disconnect.spam"); + if (p_147354_1_.hasPriority()) + { + Waitable waitable = new Waitable() { @@ -747,13 +752,12 @@ + { + this.kickPlayerFromServer("disconnect.spam"); + } - -- if (this.chatSpamThresholdCount > 200 && !this.serverController.getConfigurationManager().func_152596_g(this.playerEntity.getGameProfile())) -+ // CraftBukkit end -+ } -+ } -+ } + ++ // CraftBukkit end + } + } + } + + // CraftBukkit start + public void chat(String s, boolean async) + { @@ -779,8 +783,7 @@ + + if (chatcomponenttranslation1 != null + && chatcomponenttranslation1.getFormatArgs()[chatcomponenttranslation1.getFormatArgs().length - 1] instanceof String) - { -- this.kickPlayerFromServer("disconnect.spam"); ++ { + // use event message from Forge + s = (String) chatcomponenttranslation1.getFormatArgs()[chatcomponenttranslation1.getFormatArgs().length - 1]; + } @@ -874,11 +877,11 @@ + recipient.sendMessage(s); + } + } - } - } - } ++ } ++ } ++ } + // CraftBukkit end - ++ private void handleSlashCommand(String p_147361_1_) { - this.serverController.getCommandManager().executeCommand(this.playerEntity, p_147361_1_); @@ -1031,7 +1034,7 @@ if (p_147357_1_.func_149513_d() == 1) { this.playerEntity.setSneaking(true); -@@ -772,7 +1454,7 @@ +@@ -772,7 +1456,7 @@ else if (p_147357_1_.func_149513_d() == 3) { this.playerEntity.wakeUpPlayer(false, true, true); @@ -1040,7 +1043,7 @@ } else if (p_147357_1_.func_149513_d() == 6) { -@@ -789,8 +1471,20 @@ +@@ -789,8 +1473,20 @@ public void processUseEntity(C02PacketUseEntity p_147340_1_) { @@ -1062,7 +1065,7 @@ this.playerEntity.func_143004_u(); if (entity != null) -@@ -805,9 +1499,53 @@ +@@ -805,9 +1501,53 @@ if (this.playerEntity.getDistanceSqToEntity(entity) < d0) { @@ -1116,7 +1119,7 @@ } else if (p_147340_1_.func_149565_c() == C02PacketUseEntity.Action.ATTACK) { -@@ -819,6 +1557,13 @@ +@@ -819,6 +1559,13 @@ } this.playerEntity.attackTargetEntityWithCurrentItem(entity); @@ -1130,7 +1133,7 @@ } } } -@@ -834,7 +1579,18 @@ +@@ -834,7 +1581,18 @@ case 1: if (this.playerEntity.playerConqueredTheEnd) { @@ -1150,7 +1153,7 @@ } else if (this.playerEntity.getServerForPlayer().getWorldInfo().isHardcoreModeEnabled()) { -@@ -871,16 +1627,460 @@ +@@ -871,16 +1629,460 @@ public void processCloseWindow(C0DPacketCloseWindow p_147356_1_) { @@ -1612,7 +1615,7 @@ if (ItemStack.areItemStacksEqual(p_147351_1_.func_149546_g(), itemstack)) { -@@ -903,6 +2103,12 @@ +@@ -903,6 +2105,12 @@ } this.playerEntity.sendContainerAndContentsToPlayer(this.playerEntity.openContainer, arraylist); @@ -1625,7 +1628,7 @@ } } } -@@ -925,8 +2131,60 @@ +@@ -925,8 +2133,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(); @@ -1687,7 +1690,7 @@ if (flag1 && flag2 && flag3) { -@@ -956,6 +2214,11 @@ +@@ -956,6 +2216,11 @@ public void processConfirmTransaction(C0FPacketConfirmTransaction p_147339_1_) { @@ -1699,7 +1702,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 +2229,11 @@ +@@ -966,6 +2231,11 @@ public void processUpdateSign(C12PacketUpdateSign p_147343_1_) { @@ -1711,7 +1714,7 @@ this.playerEntity.func_143004_u(); WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); -@@ -980,6 +2248,7 @@ +@@ -980,6 +2250,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"); @@ -1719,7 +1722,7 @@ return; } } -@@ -990,6 +2259,7 @@ +@@ -990,6 +2261,7 @@ for (j = 0; j < 4; ++j) { boolean flag = true; @@ -1727,7 +1730,7 @@ if (p_147343_1_.func_149589_f()[j].length() > 15) { -@@ -1018,7 +2288,29 @@ +@@ -1018,7 +2290,29 @@ int k = p_147343_1_.func_149586_d(); i = p_147343_1_.func_149585_e(); TileEntitySign tileentitysign1 = (TileEntitySign)tileentity; @@ -1758,7 +1761,7 @@ tileentitysign1.markDirty(); worldserver.markBlockForUpdate(j, k, i); } -@@ -1041,7 +2333,22 @@ +@@ -1041,7 +2335,22 @@ public void processPlayerAbilities(C13PacketPlayerAbilities p_147348_1_) { @@ -1782,15 +1785,7 @@ } public void processTabComplete(C14PacketTabComplete p_147341_1_) -@@ -1068,7 +2375,6 @@ - PacketBuffer packetbuffer; - ItemStack itemstack; - ItemStack itemstack1; -- - if ("MC|BEdit".equals(p_147349_1_.func_149559_c())) - { - packetbuffer = new PacketBuffer(Unpooled.wrappedBuffer(p_147349_1_.func_149558_e())); -@@ -1093,16 +2399,18 @@ +@@ -1093,16 +2401,18 @@ { if (itemstack.getItem() == Items.writable_book && itemstack.getItem() == itemstack1.getItem()) { @@ -1813,7 +1808,7 @@ } finally { -@@ -1135,19 +2443,18 @@ +@@ -1135,19 +2445,18 @@ if (itemstack.getItem() == Items.written_book && itemstack1.getItem() == Items.writable_book) { @@ -1839,7 +1834,7 @@ } finally { -@@ -1174,9 +2481,12 @@ +@@ -1174,9 +2483,12 @@ ((ContainerMerchant)container).setCurrentRecipeIndex(i); } } @@ -1853,7 +1848,7 @@ } } else if ("MC|AdvCdm".equals(p_147349_1_.func_149559_c())) -@@ -1222,9 +2532,12 @@ +@@ -1222,9 +2534,12 @@ this.playerEntity.addChatMessage(new ChatComponentTranslation("advMode.setCommand.success", new Object[] {s1})); } } @@ -1868,7 +1863,7 @@ } finally { -@@ -1257,9 +2570,12 @@ +@@ -1257,9 +2572,12 @@ tileentitybeacon.markDirty(); } } @@ -1883,7 +1878,7 @@ } } } -@@ -1281,6 +2597,13 @@ +@@ -1281,6 +2599,13 @@ containerrepair.updateItemName(""); } } @@ -1897,7 +1892,7 @@ } } -@@ -1292,6 +2615,21 @@ +@@ -1292,6 +2617,21 @@ } } @@ -1919,9 +1914,3 @@ static final class SwitchEnumState { static final int[] field_151290_a = new int[C16PacketClientStatus.EnumState.values().length]; -@@ -1327,4 +2665,4 @@ - } - } - } --} -+} diff --git a/patches/net/minecraft/server/management/ItemInWorldManager.java.patch b/patches/net/minecraft/server/management/ItemInWorldManager.java.patch index 4ab84816..13b3effb 100644 --- a/patches/net/minecraft/server/management/ItemInWorldManager.java.patch +++ b/patches/net/minecraft/server/management/ItemInWorldManager.java.patch @@ -49,14 +49,14 @@ public void onBlockClicked(int p_73074_1_, int p_73074_2_, int p_73074_3_, int p_73074_4_) { + // CraftBukkit start -+ org.bukkit.event.player.PlayerInteractEvent cbEvent = CraftEventFactory.callPlayerInteractEvent(this.thisPlayerMP, Action.LEFT_CLICK_BLOCK, p_73074_1_, p_73074_2_, p_73074_3_, p_73074_4_, this.thisPlayerMP.inventory.getCurrentItem()); ++ //org.bukkit.event.player.PlayerInteractEvent cbEvent = CraftEventFactory.callPlayerInteractEvent(this.thisPlayerMP, Action.LEFT_CLICK_BLOCK, p_73074_1_, p_73074_2_, p_73074_3_, p_73074_4_, this.thisPlayerMP.inventory.getCurrentItem()); + if (!this.gameType.isAdventure() || this.thisPlayerMP.isCurrentToolAdventureModeExempt(p_73074_1_, p_73074_2_, p_73074_3_)) { - PlayerInteractEvent event = ForgeEventFactory.onPlayerInteract(thisPlayerMP, Action.LEFT_CLICK_BLOCK, p_73074_1_, p_73074_2_, p_73074_3_, p_73074_4_, theWorld); - if (event.isCanceled()) + net.minecraftforge.event.entity.player.PlayerInteractEvent event = ForgeEventFactory.onPlayerInteract(this.thisPlayerMP, net.minecraftforge.event.entity.player.PlayerInteractEvent.Action.LEFT_CLICK_BLOCK, p_73074_1_, p_73074_2_, p_73074_3_, p_73074_4_, theWorld); // Forge -+ ++ org.bukkit.event.player.PlayerInteractEvent cbEvent = event.cb; + if (event.isCanceled()) { - thisPlayerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(p_73074_1_, p_73074_2_, p_73074_3_, theWorld)); @@ -167,7 +167,7 @@ int j = p_73085_3_.getItemDamage(); ItemStack itemstack1 = p_73085_3_.useItemRightClick(p_73085_2_, p_73085_1_); -@@ -350,57 +417,105 @@ +@@ -350,57 +417,106 @@ public boolean activateBlockOrUseItem(EntityPlayer p_73078_1_, World p_73078_2_, ItemStack p_73078_3_, int p_73078_4_, int p_73078_5_, int p_73078_6_, int p_73078_7_, float p_73078_8_, float p_73078_9_, float p_73078_10_) { @@ -197,25 +197,37 @@ + if (!isAir) { - if (event.useBlock != Event.Result.DENY) -+ org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(p_73078_1_, org.bukkit.event.block.Action.RIGHT_CLICK_BLOCK, p_73078_4_, p_73078_5_, p_73078_6_, p_73078_7_, p_73078_3_); +- { +- result = block.onBlockActivated(p_73078_2_, p_73078_4_, p_73078_5_, p_73078_6_, p_73078_1_, p_73078_7_, p_73078_8_, p_73078_9_, p_73078_10_); +- } +- else ++ //org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(p_73078_1_, org.bukkit.event.block.Action.RIGHT_CLICK_BLOCK, p_73078_4_, p_73078_5_, p_73078_6_, p_73078_7_, p_73078_3_); + net.minecraftforge.event.entity.player.PlayerInteractEvent forgeEvent = ForgeEventFactory.onPlayerInteract(p_73078_1_, net.minecraftforge.event.entity.player.PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK, p_73078_4_, p_73078_5_, p_73078_6_, p_73078_7_, p_73078_2_); ++ org.bukkit.event.player.PlayerInteractEvent event = forgeEvent.cb; + // Cauldron start + // if forge event is explicitly cancelled, return + if (forgeEvent.isCanceled()) { -- result = block.onBlockActivated(p_73078_2_, p_73078_4_, p_73078_5_, p_73078_6_, p_73078_1_, p_73078_7_, p_73078_8_, p_73078_9_, p_73078_10_); -+ thisPlayerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(p_73078_4_, p_73078_5_, p_73078_6_, theWorld)); + thisPlayerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(p_73078_4_, p_73078_5_, p_73078_6_, theWorld)); +- result = event.useItem != Event.Result.ALLOW; + return false; } -- else +- } +- +- if (p_73078_3_ != null && !result && event.useItem != Event.Result.DENY) +- { +- int meta = p_73078_3_.getItemDamage(); +- int size = p_73078_3_.stackSize; +- result = p_73078_3_.tryPlaceItemIntoWorld(p_73078_1_, p_73078_2_, p_73078_4_, p_73078_5_, p_73078_6_, p_73078_7_, p_73078_8_, p_73078_9_, p_73078_10_); +- if (isCreative()) + denyItem = event.useItemInHand() == org.bukkit.event.Event.Result.DENY || forgeEvent.useItem == cpw.mods.fml.common.eventhandler.Event.Result.DENY; + denyBlock = event.useInteractedBlock() == org.bukkit.event.Event.Result.DENY || forgeEvent.useBlock == cpw.mods.fml.common.eventhandler.Event.Result.DENY; + denyResult = denyItem || denyBlock; + // if we have no explicit deny, check if item can be used + if (!denyItem) { -- thisPlayerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(p_73078_4_, p_73078_5_, p_73078_6_, theWorld)); -- result = event.useItem != Event.Result.ALLOW; +- p_73078_3_.setItemDamage(meta); +- p_73078_3_.stackSize = size; + Item item = (p_73078_3_ != null ? p_73078_3_.getItem() : null); + // try to use an item in hand before activating a block. Used for items such as IC2's wrench. + if (item != null && item.onItemUseFirst(p_73078_3_, p_73078_1_, p_73078_2_, p_73078_4_, p_73078_5_, p_73078_6_, p_73078_7_, p_73078_8_, p_73078_9_, p_73078_10_)) @@ -263,15 +275,8 @@ + } + } + // Cauldron end - } -- } - -- if (p_73078_3_ != null && !result && event.useItem != Event.Result.DENY) -- { -- int meta = p_73078_3_.getItemDamage(); -- int size = p_73078_3_.stackSize; -- result = p_73078_3_.tryPlaceItemIntoWorld(p_73078_1_, p_73078_2_, p_73078_4_, p_73078_5_, p_73078_6_, p_73078_7_, p_73078_8_, p_73078_9_, p_73078_10_); -- if (isCreative()) ++ } ++ + if (p_73078_3_ != null && !denyResult && p_73078_3_.stackSize > 0) + { + int meta = p_73078_3_.getItemDamage(); @@ -293,9 +298,7 @@ + + // If we have 'true' and no explicit deny *or* an explicit allow -- run the item part of the hook + if (p_73078_3_ != null && ((!denyResult && event.useItemInHand() != org.bukkit.event.Event.Result.DENY) || event.useItemInHand() == org.bukkit.event.Event.Result.ALLOW)) - { -- p_73078_3_.setItemDamage(meta); -- p_73078_3_.stackSize = size; ++ { + this.tryUseItem(p_73078_1_, p_73078_2_, p_73078_3_); } - if (p_73078_3_.stackSize <= 0) ForgeEventFactory.onPlayerDestroyItem(thisPlayerMP, p_73078_3_); @@ -312,9 +315,3 @@ } public void setWorld(WorldServer p_73080_1_) -@@ -416,4 +531,4 @@ - { - blockReachDistance = distance; - } --} -+}