Commits

Thinkofname authored e4ca2af9c46
Strip events from book pages on signing
No tags

src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java

Modified
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;

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut