Solved Hover and Click events not working on books

Discussion in 'Spigot Plugin Development' started by PlayerNerd, Apr 1, 2019.

  1. So, I code a Book helper to create custom books, but when I use it directly in game the events not work. The event is inside, but simply not work, just when I do everything by code.

    This class is for the text creation
    https://pastebin.com/ZGFcbFy2

    This for the book:
    https://pastebin.com/kXJQtTkL

    This is the code of editing books in game:
    Code (Java):
    public void onEditBook(PlayerEditBookEvent e)
        {
            if(!Misc.checkPlayer(e.getPlayer(), "kyuu.core.book"))
            {
                return;
            }

            Player p = e.getPlayer();
            BookMeta meta = e.getNewBookMeta();

            BookCreator book = new BookCreator(meta.getTitle(), meta.getAuthor());

            ChatColor color = ChatColor.BLACK;
            boolean bold = false;
            boolean italic = false;
            boolean underlined = false;
            boolean obfuscated = false;
            boolean strikethrough = false;

            for(int i = 0; i < meta.getPages().size(); i++)
            {
                PageCreator pageC = new PageCreator();

                String page = meta.getPages().get(i);

                for(String word : page.split(" "))
                {
                    System.out.println(word);

                    if(word.startsWith("&0"))
                    {
                        word = word.replaceFirst("&0", "");
                        color = ChatColor.BLACK;
                    }

                    if(word.startsWith("&1"))
                    {
                        word = word.replaceFirst("&1", "");
                        color = ChatColor.DARK_BLUE;
                    }

                    if(word.startsWith("&2"))
                    {
                        word = word.replaceFirst("&2", "");
                        color = ChatColor.DARK_GREEN;
                    }

                    if(word.startsWith("&3"))
                    {
                        word = word.replaceFirst("&3", "");
                        color = ChatColor.DARK_AQUA;
                    }

                    if(word.startsWith("&4"))
                    {
                        word = word.replaceFirst("&4", "");
                        color = ChatColor.DARK_RED;
                    }

                    if(word.startsWith("&5"))
                    {
                        word = word.replaceFirst("&5", "");
                        color = ChatColor.DARK_PURPLE;
                    }

                    if(word.startsWith("&6"))
                    {
                        word = word.replaceFirst("&6", "");
                        color = ChatColor.GOLD;
                    }

                    if(word.startsWith("&7"))
                    {
                        word = word.replaceFirst("&7", "");
                        color = ChatColor.GRAY;
                    }

                    if(word.startsWith("&8"))
                    {
                        word = word.replaceFirst("&8", "");
                        color = ChatColor.DARK_GRAY;
                    }

                    if(word.startsWith("&9"))
                    {
                        word = word.replaceFirst("&9", "");
                        color = ChatColor.BLUE;
                    }

                    if(word.startsWith("&a"))
                    {
                        word = word.replaceFirst("&a", "");
                        color = ChatColor.GREEN;
                    }

                    if(word.startsWith("&b"))
                    {
                        word = word.replaceFirst("&b", "");
                        color = ChatColor.AQUA;
                    }

                    if(word.startsWith("&c"))
                    {
                        word = word.replaceFirst("&c", "");
                        color = ChatColor.RED;
                    }

                    if(word.startsWith("&d"))
                    {
                        word = word.replaceFirst("&d", "");
                        color = ChatColor.LIGHT_PURPLE;
                    }

                    if(word.startsWith("&e"))
                    {
                        word = word.replaceFirst("&e", "");
                        color = ChatColor.YELLOW;
                    }

                    if(word.startsWith("&f"))
                    {
                        word = word.replaceFirst("&f", "");
                        color = ChatColor.WHITE;
                    }

                    if(word.startsWith("&k"))
                    {
                        word = word.replaceFirst("&k", "");
                        obfuscated = !obfuscated;
                    }

                    if(word.startsWith("&l"))
                    {
                        word = word.replaceFirst("&l", "");
                        bold = !bold;
                    }

                    if(word.startsWith("&m"))
                    {
                        word = word.replaceFirst("&m", "");
                        strikethrough = !strikethrough;
                    }

                    if(word.startsWith("&n"))
                    {
                        word = word.replaceFirst("&n", "");
                        underlined = !underlined;
                    }

                    if(word.startsWith("&o"))
                    {
                        word = word.replaceFirst("&o", "");
                        italic = !italic;
                    }

                    if(word.startsWith("&r"))
                    {
                        word = word.replaceFirst("&r", "");
                        bold = false;
                        italic = false;
                        underlined = false;
                        obfuscated = false;
                        strikethrough = false;
                    }

                    if(word.startsWith("click:\"") && word.endsWith("\""))
                    {
                        word = word.replaceFirst("click:\"", "");
                        word = new StringBuilder(word).replace(word.lastIndexOf("\""), word.lastIndexOf("\"") + 1, "").toString();

                        String[] args = word.split("--");

                        ClickEvent.Action ac = ClickEvent.Action.SUGGEST_COMMAND;

                        if(args[0].contains("URL"))
                        {
                            ac = ClickEvent.Action.OPEN_URL;
                        } else if(args[0].contains("RUN")) {
                            ac = ClickEvent.Action.RUN_COMMAND;
                        }

                        TextCreator txt = new TextCreator(args[2]);
                        txt.setBold(bold);
                        txt.setColor(color);
                        txt.setItalic(italic);
                        txt.setObfuscated(obfuscated);
                        txt.setStrikethrough(strikethrough);
                        txt.setUnderlined(underlined);

                        txt.setClickEvent(ac, args[1]);
                        pageC.add(txt.getText());
                        pageC.add(" ");

                    } else if(word.startsWith("hover:\"") && word.endsWith("\"")) {
                        word = word.replaceFirst("hover:\"", "");
                        word = new StringBuilder(word).replace(word.lastIndexOf("\""), word.lastIndexOf("\"") + 1, "").toString();

                        String[] args = word.split("--");

                        HoverEvent.Action ac = HoverEvent.Action.SHOW_TEXT;

                        if(args[0].equalsIgnoreCase("TEXT"))
                        {
                            ac = HoverEvent.Action.SHOW_TEXT;
                        } else if(args[0].equalsIgnoreCase("ITEM")) {
                            ac = HoverEvent.Action.SHOW_ITEM;
                        }

                        TextCreator txt = new TextCreator(args[2]);
                        txt.setBold(bold);
                        txt.setColor(color);
                        txt.setItalic(italic);
                        txt.setObfuscated(obfuscated);
                        txt.setStrikethrough(strikethrough);
                        txt.setUnderlined(underlined);

                        String show = args[1];

                        if(ac == HoverEvent.Action.SHOW_TEXT)
                        {
                            if(show.startsWith("&0"))
                            {
                                show = show.replaceFirst("&0", "");
                                color = ChatColor.BLACK;
                            }

                            if(show.startsWith("&1"))
                            {
                                show = show.replaceFirst("&1", "");
                                color = ChatColor.DARK_BLUE;
                            }

                            if(show.startsWith("&2"))
                            {
                                show = show.replaceFirst("&2", "");
                                color = ChatColor.DARK_GREEN;
                            }

                            if(show.startsWith("&3"))
                            {
                                show = show.replaceFirst("&3", "");
                                color = ChatColor.DARK_AQUA;
                            }

                            if(show.startsWith("&4"))
                            {
                                show = show.replaceFirst("&4", "");
                                color = ChatColor.DARK_RED;
                            }

                            if(show.startsWith("&5"))
                            {
                                show = show.replaceFirst("&5", "");
                                color = ChatColor.DARK_PURPLE;
                            }

                            if(show.startsWith("&6"))
                            {
                                show = show.replaceFirst("&6", "");
                                color = ChatColor.GOLD;
                            }

                            if(show.startsWith("&7"))
                            {
                                show = show.replaceFirst("&7", "");
                                color = ChatColor.GRAY;
                            }

                            if(show.startsWith("&8"))
                            {
                                show = show.replaceFirst("&8", "");
                                color = ChatColor.DARK_GRAY;
                            }

                            if(show.startsWith("&9"))
                            {
                                show = show.replaceFirst("&9", "");
                                color = ChatColor.BLUE;
                            }

                            if(show.startsWith("&a"))
                            {
                                show = show.replaceFirst("&a", "");
                                color = ChatColor.GREEN;
                            }

                            if(show.startsWith("&b"))
                            {
                                show = show.replaceFirst("&b", "");
                                color = ChatColor.AQUA;
                            }

                            if(show.startsWith("&c"))
                            {
                                show = show.replaceFirst("&c", "");
                                color = ChatColor.RED;
                            }

                            if(show.startsWith("&d"))
                            {
                                show = show.replaceFirst("&d", "");
                                color = ChatColor.LIGHT_PURPLE;
                            }

                            if(show.startsWith("&e"))
                            {
                                show = show.replaceFirst("&e", "");
                                color = ChatColor.YELLOW;
                            }

                            if(show.startsWith("&f"))
                            {
                                show = show.replaceFirst("&f", "");
                                color = ChatColor.WHITE;
                            }

                            if(show.startsWith("&k"))
                            {
                                show = show.replaceFirst("&k", "");
                                obfuscated = !obfuscated;
                            }

                            if(show.startsWith("&l"))
                            {
                                show = show.replaceFirst("&l", "");
                                bold = !bold;
                            }

                            if(show.startsWith("&m"))
                            {
                                show = show.replaceFirst("&m", "");
                                strikethrough = !strikethrough;
                            }

                            if(show.startsWith("&n"))
                            {
                                show = show.replaceFirst("&n", "");
                                underlined = !underlined;
                            }

                            if(show.startsWith("&o"))
                            {
                                show = show.replaceFirst("&o", "");
                                italic = !italic;
                            }

                            if(show.startsWith("&r"))
                            {
                                show = show.replaceFirst("&r", "");
                                bold = false;
                                italic = false;
                                underlined = false;
                                obfuscated = false;
                                strikethrough = false;
                            }

                            TextCreator s = new TextCreator(show);
                            s.setBold(bold);
                            s.setColor(color);
                            s.setItalic(italic);
                            s.setObfuscated(obfuscated);
                            s.setStrikethrough(strikethrough);
                            s.setUnderlined(underlined);

                            txt.setHoverEvent(ac, s.getText());

                        } else {

                            if(Misc.getInstance().tryParseInt(args[1]))
                            {
                                int k = Integer.parseInt(args[1]);

                                if(k >= 1 && k <= 9)
                                {
                                    if(LabelCommand.getLabels(p).get(k) != null)
                                    {
                                        txt.setHoverEvent(ac, new TextComponent(LabelCommand.getLabels(p).get(k)));
                                    }
                                }
                            }
                        }

                        pageC.add(txt.getText());
                        pageC.add(" ");

                    } else {
                        TextCreator txt = new TextCreator(word);
                        txt.setBold(bold);
                        txt.setColor(color);
                        txt.setItalic(italic);
                        txt.setObfuscated(obfuscated);
                        txt.setStrikethrough(strikethrough);
                        txt.setUnderlined(underlined);
                        pageC.add(txt.getText());
                        pageC.add(" ");
                    }

                }
                book.addPage(pageC);
            }

            e.setNewBookMeta((BookMeta) book.create().getItemMeta());

        }
    When I write click:"text--link--txt" it replaces by txt, but does not open the link, it happens with hover too.
     
  2. Not possible with the API. Spigot strips the events. You'll have to give the player the book outside of an edit event.
     
    • Agree Agree x 1
  3. works, thank you.
     

Share This Page