Commits
21 21 | import org.bukkit.craftbukkit.CraftServer; |
22 22 | import org.bukkit.craftbukkit.CraftStatistic; |
23 23 | import org.bukkit.craftbukkit.CraftWorld; |
24 24 | import org.bukkit.craftbukkit.block.CraftBlock; |
25 25 | import org.bukkit.craftbukkit.block.CraftBlockState; |
26 26 | import org.bukkit.craftbukkit.entity.CraftEntity; |
27 27 | import org.bukkit.craftbukkit.entity.CraftLivingEntity; |
28 28 | import org.bukkit.craftbukkit.entity.CraftPlayer; |
29 29 | import org.bukkit.craftbukkit.inventory.CraftInventoryCrafting; |
30 30 | import org.bukkit.craftbukkit.inventory.CraftItemStack; |
31 + | import org.bukkit.craftbukkit.inventory.CraftMetaBook; |
31 32 | import org.bukkit.craftbukkit.util.CraftDamageSource; |
32 33 | import org.bukkit.craftbukkit.util.CraftMagicNumbers; |
33 34 | import org.bukkit.entity.Arrow; |
34 35 | import org.bukkit.entity.Creeper; |
35 36 | import org.bukkit.entity.EntityType; |
36 37 | import org.bukkit.entity.Horse; |
37 38 | import org.bukkit.entity.LightningStrike; |
38 39 | import org.bukkit.entity.LivingEntity; |
39 40 | import org.bukkit.entity.Pig; |
40 41 | import org.bukkit.entity.PigZombie; |
827 828 | PlayerEditBookEvent editBookEvent = new PlayerEditBookEvent(player.getBukkitEntity(), player.inventory.itemInHandIndex, (BookMeta) CraftItemStack.getItemMeta(player.inventory.getItemInHand()), (BookMeta) CraftItemStack.getItemMeta(newBookItem), newBookItem.getItem() == Items.WRITTEN_BOOK); |
828 829 | player.world.getServer().getPluginManager().callEvent(editBookEvent); |
829 830 | ItemStack itemInHand = player.inventory.getItem(itemInHandIndex); |
830 831 | |
831 832 | // If they've got the same item in their hand, it'll need to be updated. |
832 833 | if (itemInHand != null && itemInHand.getItem() == Items.WRITABLE_BOOK) { |
833 834 | if (!editBookEvent.isCancelled()) { |
834 835 | if (editBookEvent.isSigning()) { |
835 836 | itemInHand.setItem(Items.WRITTEN_BOOK); |
836 837 | } |
837 - | CraftItemStack.setItemMeta(itemInHand, editBookEvent.getNewBookMeta()); |
838 + | CraftMetaBook meta = (CraftMetaBook) editBookEvent.getNewBookMeta(); |
839 + | List<IChatBaseComponent> pages = meta.pages; |
840 + | for (int i = 0; i < pages.size(); i++) { |
841 + | pages.set(i, stripEvents(pages.get(i))); |
842 + | } |
843 + | CraftItemStack.setItemMeta(itemInHand, meta); |
838 844 | } |
839 845 | |
840 846 | // Client will have updated its idea of the book item; we need to overwrite that |
841 847 | Slot slot = player.activeContainer.getSlot(player.inventory, itemInHandIndex); |
842 848 | player.playerConnection.sendPacket(new PacketPlayOutSetSlot(player.activeContainer.windowId, slot.rawSlotIndex, itemInHand)); |
843 849 | } |
844 850 | } |
845 851 | |
852 + | private static IChatBaseComponent stripEvents(IChatBaseComponent c) { |
853 + | ChatModifier modi = c.getChatModifier(); |
854 + | if (modi != null) { |
855 + | modi.setChatClickable(null); |
856 + | modi.setChatHoverable(null); |
857 + | } |
858 + | c.setChatModifier(modi); |
859 + | if (c instanceof ChatMessage) { |
860 + | ChatMessage cm = (ChatMessage) c; |
861 + | Object[] oo = cm.j(); |
862 + | for (int i = 0; i < oo.length; i++) { |
863 + | Object o = oo[i]; |
864 + | if (o instanceof IChatBaseComponent) { |
865 + | oo[i] = stripEvents((IChatBaseComponent) o); |
866 + | } |
867 + | } |
868 + | } |
869 + | List<IChatBaseComponent> ls = c.a(); |
870 + | if (ls != null) { |
871 + | for (int i = 0; i < ls.size(); i++) { |
872 + | ls.set(i, stripEvents(ls.get(i))); |
873 + | } |
874 + | } |
875 + | return c; |
876 + | } |
877 + | |
846 878 | public static PlayerUnleashEntityEvent callPlayerUnleashEntityEvent(EntityInsentient entity, EntityHuman player) { |
847 879 | PlayerUnleashEntityEvent event = new PlayerUnleashEntityEvent(entity.getBukkitEntity(), (Player) player.getBukkitEntity()); |
848 880 | entity.world.getServer().getPluginManager().callEvent(event); |
849 881 | return event; |
850 882 | } |
851 883 | |
852 884 | public static PlayerLeashEntityEvent callPlayerLeashEntityEvent(EntityInsentient entity, Entity leashHolder, EntityHuman player) { |
853 885 | PlayerLeashEntityEvent event = new PlayerLeashEntityEvent(entity.getBukkitEntity(), leashHolder.getBukkitEntity(), (Player) player.getBukkitEntity()); |
854 886 | entity.world.getServer().getPluginManager().callEvent(event); |
855 887 | return event; |