BookCommand.java 文件源码

java
阅读 23 收藏 0 点赞 0 评论 0

项目:AdvancedAchievements 作者:
/**
 * Adds pages to the BookMeta. A Spigot commit in the late days of Minecraft 1.11.2 started enforcing extremely low
 * limits (why? If it's not broken, don't fix it.), with books limited in page size and total number of pages, as
 * well as title length. This function bypasses such limits and restores the original CraftBukkit behaviour. See
 * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/4acd0f49e07e0912096e79494472535baf0db2ab
 * for more information.
 *
 * @param bookPages
 * @param bookMeta
 */
@SuppressWarnings("unchecked")
private void setBookPages(List<String> bookPages, BookMeta bookMeta) {
    if (plugin.getServerVersion() >= 11) {
        try {
            // Code we're trying to execute: this.pages.add(CraftChatMessage.fromString(page, true)[0]); in
            // CraftMetaBook.java.
            Class<?> craftMetaBookClass = PackageType.CRAFTBUKKIT
                    .getClass(PACKAGE_INVENTORY + "." + CLASS_CRAFT_META_BOOK);
            List<Object> pages = (List<Object>) craftMetaBookClass.getField(FIELD_PAGES)
                    .get(craftMetaBookClass.cast(bookMeta));
            Method fromStringMethod = PackageType.CRAFTBUKKIT
                    .getClass(PACKAGE_UTIL + "." + CLASS_CRAFT_CHAT_MESSAGE)
                    .getMethod(METHOD_FROM_STRING, String.class, boolean.class);
            for (String bookPage : bookPages) {
                pages.add(((Object[]) fromStringMethod.invoke(null, bookPage, true))[0]);
            }
        } catch (Exception e) {
            plugin.getLogger().warning(
                    "Error while creating book pages. Your achievements book may be trimmed down to 50 pages.");
            bookMeta.setPages(bookPages);
        }
    } else {
        bookMeta.setPages(bookPages);
    }
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号