From 4f580c8a37620479a3569966288409d7cacada36 Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Sat, 5 Aug 2023 21:02:22 -0400 Subject: [PATCH 01/17] feat(wiki): Allow addons to add wiki pages --- .../slimefun4/api/SlimefunAddon.java | 10 +++ .../slimefun4/api/items/SlimefunItem.java | 19 ++++- .../slimefun4/implementation/Slimefun.java | 7 +- .../guide/SurvivalSlimefunGuide.java | 7 +- .../items/magical/talismans/Talisman.java | 2 +- .../implementation/setup/PostSetup.java | 22 +----- .../slimefun4/utils/WikiUtils.java | 76 +++++++++++++++++++ src/main/resources/languages/en/messages.yml | 1 + .../items/TestSlimefunItem.java | 4 +- 9 files changed, 121 insertions(+), 27 deletions(-) create mode 100644 src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java index 8d8609c8be..503751aef7 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java @@ -97,4 +97,14 @@ default boolean hasDependency(@Nonnull String dependency) { return description.getDepend().contains(dependency) || description.getSoftDepend().contains(dependency); } + /** + * Thid method returns the wiki URL for all the items this {@link SlimefunAddon}. + * The "%item%" placeholder will be replaced with the SlimefunItem's ID. + * + * @return The wiki URL for this {@link SlimefunAddon}. + */ + default @Nonnull String getWikiURL() { + return ""; + } + } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java index 0d4b1f12fa..32efd33483 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java @@ -874,17 +874,32 @@ public void postRegister() { * * @param page * The associated wiki page + * + * @deprecated Use {@link #addWikiPage(String)} instead. */ + @Deprecated public final void addOfficialWikipage(@Nonnull String page) { + addWikiPage(page); + } + + /** + * This method assign the given wiki page to this Item. + * The page name will replace %item% placeholder in the URL. + * + * @param page + * The associated wiki page name. + */ + public final void addWikiPage(@Nonnull String page) { Validate.notNull(page, "Wiki page cannot be null."); - wikiURL = Optional.of("https://github.com/Slimefun/Slimefun4/wiki/" + page); + Validate.isTrue(getState() != ItemState.UNREGISTERED, "Wiki page can only be added after item has been registered."); + wikiURL = Optional.of(getAddon().getWikiURL().replace("%item%", page)); } /** * This method returns the wiki page that has been assigned to this item. * It will return null, if no wiki page was found. * - * @see SlimefunItem#addOfficialWikipage(String) + * @see SlimefunItem#addWikiPage(String) * * @return This item's wiki page */ diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java index bd4618ac13..fefc37f8cb 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java @@ -380,7 +380,7 @@ private void onPluginStart() { } @Override - public JavaPlugin getJavaPlugin() { + public @Nonnull JavaPlugin getJavaPlugin() { return this; } @@ -389,6 +389,11 @@ public String getBugTrackerURL() { return "https://github.com/Slimefun/Slimefun4/issues"; } + @Override + public @Nonnull String getWikiURL() { + return "https://github.com/Slimefun/Slimefun4/wiki/%item%"; + } + /** * This method gets called when the {@link Plugin} gets disabled. * Most often it is called when the {@link Server} is shutting down or reloading. diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java index 21cee1d006..46dabee669 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java @@ -514,7 +514,12 @@ public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToH Optional wiki = item.getWikipage(); if (wiki.isPresent()) { - menu.addItem(8, new CustomItemStack(Material.KNOWLEDGE_BOOK, ChatColor.WHITE + Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki"), "", ChatColor.GRAY + "\u21E8 " + ChatColor.GREEN + Slimefun.getLocalization().getMessage(p, "guide.tooltips.open-itemgroup"))); + String message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki-third-party") + .replace("%addon%", item.getAddon().getName()); + if (item.getAddon() instanceof Slimefun) { + message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki"); + } + menu.addItem(8, new CustomItemStack(Material.KNOWLEDGE_BOOK, ChatColor.WHITE + message, "", ChatColor.GRAY + "\u21E8 " + ChatColor.GREEN + Slimefun.getLocalization().getMessage(p, "guide.tooltips.open-itemgroup"))); menu.addMenuClickHandler(8, (pl, slot, itemstack, action) -> { pl.closeInventory(); ChatUtils.sendURL(pl, wiki.get()); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java index 7ecc6f6fab..fa7e1a9a0b 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java @@ -73,7 +73,6 @@ protected Talisman(ItemGroup itemGroup, SlimefunItemStack item, ItemStack[] reci this.suffix = messageSuffix; this.effects = effects; this.chance = chance; - addOfficialWikipage(WIKI_PAGE); if (!(this instanceof EnderTalisman)) { String name = "&5Ender " + ChatColor.stripColor(getItem().getItemMeta().getDisplayName()); @@ -126,6 +125,7 @@ private SlimefunItemStack getEnderVariant() { @Override public void postRegister() { + addWikiPage(WIKI_PAGE); EnderTalisman talisman = new EnderTalisman(this, getEnderVariant()); talisman.register(getAddon()); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/PostSetup.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/PostSetup.java index 13e7e7ef5b..874771b4c1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/PostSetup.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/PostSetup.java @@ -9,9 +9,7 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.logging.Level; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nonnull; @@ -21,9 +19,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.inventory.ItemStack; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem; import io.github.thebusybiscuit.slimefun4.implementation.Slimefun; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; @@ -31,7 +26,7 @@ import io.github.thebusybiscuit.slimefun4.implementation.items.multiblocks.MakeshiftSmeltery; import io.github.thebusybiscuit.slimefun4.implementation.items.multiblocks.OreCrusher; import io.github.thebusybiscuit.slimefun4.implementation.items.multiblocks.Smeltery; -import io.github.thebusybiscuit.slimefun4.utils.JsonUtils; +import io.github.thebusybiscuit.slimefun4.utils.WikiUtils; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; @@ -43,20 +38,7 @@ private PostSetup() {} public static void setupWiki() { Slimefun.logger().log(Level.INFO, "Loading Wiki pages..."); - try (BufferedReader reader = new BufferedReader(new InputStreamReader(Slimefun.class.getResourceAsStream("/wiki.json"), StandardCharsets.UTF_8))) { - JsonElement element = JsonUtils.parseString(reader.lines().collect(Collectors.joining(""))); - JsonObject json = element.getAsJsonObject(); - - for (Map.Entry entry : json.entrySet()) { - SlimefunItem item = SlimefunItem.getById(entry.getKey()); - - if (item != null) { - item.addOfficialWikipage(entry.getValue().getAsString()); - } - } - } catch (IOException e) { - Slimefun.logger().log(Level.SEVERE, "Failed to load wiki.json file", e); - } + WikiUtils.setupWiki(Slimefun.instance()); } public static void loadItems() { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java new file mode 100644 index 0000000000..574ec7d870 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java @@ -0,0 +1,76 @@ +package io.github.thebusybiscuit.slimefun4.utils; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.text.MessageFormat; +import java.util.Map; +import java.util.function.UnaryOperator; +import java.util.logging.Level; +import java.util.stream.Collectors; + +import javax.annotation.Nonnull; + +import org.apache.commons.lang.Validate; +import org.bukkit.plugin.Plugin; + +import io.github.thebusybiscuit.slimefun4.api.SlimefunAddon; +import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +/** + * This utility class provides methods to setup the wiki pages for Slimefun addons. + * + * @author ybw0014 + */ +public class WikiUtils { + private WikiUtils() {} + + /** + * This method loads the wiki pages from the wiki.json file in the plugin's resources. + * + * @param plugin + * The plugin to load the wiki pages for. + */ + public static void setupWiki(@Nonnull Plugin plugin) { + setupWiki(plugin, page -> page); + } + + /** + * This method loads the wiki pages from the wiki.json file in the plugin's resources. + * The formatter will make changes to the wiki page name before it is added to the item. + * + * @param plugin + * The plugin to load the wiki pages for. + * @param formatter + * The formatter to apply to the wiki page name. + */ + public static void setupWiki(@Nonnull Plugin plugin, @Nonnull UnaryOperator formatter) { + Validate.notNull(plugin, "The plugin cannot be null"); + Validate.isTrue(plugin instanceof SlimefunAddon, "The plugin must be a SlimefunAddon"); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream("/wiki.json"), StandardCharsets.UTF_8))) { + JsonElement element = JsonUtils.parseString(reader.lines().collect(Collectors.joining(""))); + JsonObject json = element.getAsJsonObject(); + + int count = 0; + + for (Map.Entry entry : json.entrySet()) { + SlimefunItem item = SlimefunItem.getById(entry.getKey()); + + if (item != null) { + String page = entry.getValue().getAsString(); + page = formatter.apply(page); + item.addWikiPage(page); + count++; + } + } + + plugin.getLogger().log(Level.INFO, MessageFormat.format("Loaded {0} Wiki pages from {1}", count, plugin.getName())); + } catch (Exception e) { + plugin.getLogger().log(Level.SEVERE, MessageFormat.format("Failed to load wiki.json from {0}", plugin.getName()), e); + } + } +} diff --git a/src/main/resources/languages/en/messages.yml b/src/main/resources/languages/en/messages.yml index c678a28c2e..d831eb6beb 100644 --- a/src/main/resources/languages/en/messages.yml +++ b/src/main/resources/languages/en/messages.yml @@ -61,6 +61,7 @@ guide: open-itemgroup: 'Click to open' versions-notice: 'These are very important when reporting bugs!' wiki: 'View this Item on the official Slimefun Wiki' + wiki-third-party: 'View this Item on the %addon% Wiki (not Slimefun official)' recipes: machine: 'Recipes made in this Machine' diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/items/TestSlimefunItem.java b/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/items/TestSlimefunItem.java index 8ccbfbe7d6..7e5d05ffd1 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/items/TestSlimefunItem.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/items/TestSlimefunItem.java @@ -47,9 +47,9 @@ void testWikiPages() { Assertions.assertFalse(item.getWikipage().isPresent()); // null should not be a valid argument - Assertions.assertThrows(IllegalArgumentException.class, () -> item.addOfficialWikipage(null)); + Assertions.assertThrows(IllegalArgumentException.class, () -> item.addWikiPage(null)); - item.addOfficialWikipage("Test"); + item.addWikiPage("Test"); Optional wiki = item.getWikipage(); Assertions.assertTrue(wiki.isPresent()); From f86d54fc86369382aa50d132e0af32321a619efd Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Sun, 6 Aug 2023 08:50:46 -0400 Subject: [PATCH 02/17] chore: Fix type --- .../io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java index 503751aef7..e3221fe900 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java @@ -98,7 +98,7 @@ default boolean hasDependency(@Nonnull String dependency) { } /** - * Thid method returns the wiki URL for all the items this {@link SlimefunAddon}. + * This method returns the wiki URL for all the items this {@link SlimefunAddon}. * The "%item%" placeholder will be replaced with the SlimefunItem's ID. * * @return The wiki URL for this {@link SlimefunAddon}. From 881ea3f51f79acefb580e15276cf91112b85150b Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Sun, 6 Aug 2023 08:53:57 -0400 Subject: [PATCH 03/17] feat(api): add custom wiki page --- .../slimefun4/api/items/SlimefunItem.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java index 32efd33483..13d31ce45f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java @@ -895,6 +895,18 @@ public final void addWikiPage(@Nonnull String page) { wikiURL = Optional.of(getAddon().getWikiURL().replace("%item%", page)); } + /** + * This method assign the given wiki URL to this Item. + * + * @param url + * The associated wiki page URL. + */ + public final void addCustomWikiPage(@Nonnull String url) { + Validate.notNull(url, "Wiki URL cannot be null."); + Validate.isTrue(getState() != ItemState.UNREGISTERED, "Wiki page can only be added after item has been registered."); + wikiURL = Optional.of(url); + } + /** * This method returns the wiki page that has been assigned to this item. * It will return null, if no wiki page was found. From 622b3e1216d74d5541e575140b77098dd29a367a Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Sun, 6 Aug 2023 12:39:34 -0400 Subject: [PATCH 04/17] chore: use Preconditions --- .../slimefun4/api/items/SlimefunItem.java | 10 +++++----- .../thebusybiscuit/slimefun4/utils/WikiUtils.java | 7 ++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java index 13d31ce45f..9366893c5d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java @@ -50,6 +50,8 @@ import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import io.github.thebusybiscuit.slimefun4.utils.itemstack.ItemStackWrapper; +import com.google.common.base.Preconditions; + import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; /** @@ -890,9 +892,7 @@ public final void addOfficialWikipage(@Nonnull String page) { * The associated wiki page name. */ public final void addWikiPage(@Nonnull String page) { - Validate.notNull(page, "Wiki page cannot be null."); - Validate.isTrue(getState() != ItemState.UNREGISTERED, "Wiki page can only be added after item has been registered."); - wikiURL = Optional.of(getAddon().getWikiURL().replace("%item%", page)); + addCustomWikiPage(getAddon().getWikiURL().replace("%item%", page)); } /** @@ -902,8 +902,8 @@ public final void addWikiPage(@Nonnull String page) { * The associated wiki page URL. */ public final void addCustomWikiPage(@Nonnull String url) { - Validate.notNull(url, "Wiki URL cannot be null."); - Validate.isTrue(getState() != ItemState.UNREGISTERED, "Wiki page can only be added after item has been registered."); + Preconditions.checkArgument(url != null, "Wiki page cannot be null."); + Preconditions.checkState(getState() != ItemState.UNREGISTERED, "Wiki page can only be added after item has been registered."); wikiURL = Optional.of(url); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java index 574ec7d870..ad89d715e5 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java @@ -11,12 +11,12 @@ import javax.annotation.Nonnull; -import org.apache.commons.lang.Validate; import org.bukkit.plugin.Plugin; import io.github.thebusybiscuit.slimefun4.api.SlimefunAddon; import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem; +import com.google.common.base.Preconditions; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -48,8 +48,9 @@ public static void setupWiki(@Nonnull Plugin plugin) { * The formatter to apply to the wiki page name. */ public static void setupWiki(@Nonnull Plugin plugin, @Nonnull UnaryOperator formatter) { - Validate.notNull(plugin, "The plugin cannot be null"); - Validate.isTrue(plugin instanceof SlimefunAddon, "The plugin must be a SlimefunAddon"); + Preconditions.checkArgument(plugin != null, "The plugin cannot be null"); + Preconditions.checkArgument(formatter != null, "The formatter cannot be null"); + Preconditions.checkArgument(plugin instanceof SlimefunAddon, "The plugin must be a SlimefunAddon"); try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream("/wiki.json"), StandardCharsets.UTF_8))) { JsonElement element = JsonUtils.parseString(reader.lines().collect(Collectors.joining(""))); From ede8d29ef65c569974859530a737346e73ffe6cc Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Sun, 6 Aug 2023 12:41:40 -0400 Subject: [PATCH 05/17] fix: check argument --- .../thebusybiscuit/slimefun4/api/items/SlimefunItem.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java index 9366893c5d..b4dbe1d21c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java @@ -892,6 +892,8 @@ public final void addOfficialWikipage(@Nonnull String page) { * The associated wiki page name. */ public final void addWikiPage(@Nonnull String page) { + Preconditions.checkArgument(page != null, "Wiki page cannot be null."); + Preconditions.checkState(getState() != ItemState.UNREGISTERED, "Wiki page can only be added after item has been registered."); addCustomWikiPage(getAddon().getWikiURL().replace("%item%", page)); } @@ -903,7 +905,6 @@ public final void addWikiPage(@Nonnull String page) { */ public final void addCustomWikiPage(@Nonnull String url) { Preconditions.checkArgument(url != null, "Wiki page cannot be null."); - Preconditions.checkState(getState() != ItemState.UNREGISTERED, "Wiki page can only be added after item has been registered."); wikiURL = Optional.of(url); } From 5ad0a3634624e9024b53f2625d689653d6bce6e2 Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Mon, 7 Aug 2023 09:37:24 -0400 Subject: [PATCH 06/17] feat(wiki): add warning message for non-Slimefun items --- .../slimefun4/implementation/guide/SurvivalSlimefunGuide.java | 3 +++ src/main/resources/languages/en/messages.yml | 1 + 2 files changed, 4 insertions(+) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java index 46dabee669..b0f1060b21 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java @@ -522,6 +522,9 @@ public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToH menu.addItem(8, new CustomItemStack(Material.KNOWLEDGE_BOOK, ChatColor.WHITE + message, "", ChatColor.GRAY + "\u21E8 " + ChatColor.GREEN + Slimefun.getLocalization().getMessage(p, "guide.tooltips.open-itemgroup"))); menu.addMenuClickHandler(8, (pl, slot, itemstack, action) -> { pl.closeInventory(); + if (!(item.getAddon() instanceof Slimefun)) { + Slimefun.getLocalization().sendMessage(pl, "messages.wiki-third-party"); + } ChatUtils.sendURL(pl, wiki.get()); return false; }); diff --git a/src/main/resources/languages/en/messages.yml b/src/main/resources/languages/en/messages.yml index d831eb6beb..c2e6a4b130 100644 --- a/src/main/resources/languages/en/messages.yml +++ b/src/main/resources/languages/en/messages.yml @@ -170,6 +170,7 @@ messages: bee-suit-slow-fall: '&eYour Bee Wings will help you to get back to the ground safe and slow' deprecated-item: '&4This item has been deprecated and will be removed from Slimefun soon.' researching-is-disabled: '&cResearching has been disabled on this server. Everything is unlocked by default!' + wiki-third-party: '&cThe following wiki link is provided by %addon%. Slimefun is not responsible for the content on the page.' multi-tool: mode-change: '&b%device% mode changed to: &9%mode%' From 20d95d4d640cb3363e2458ffca0f58e534ff08aa Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Mon, 7 Aug 2023 12:19:52 -0400 Subject: [PATCH 07/17] fix(wiki): replace the placeholder in message --- .../slimefun4/implementation/guide/SurvivalSlimefunGuide.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java index b0f1060b21..6f7e67a6ea 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java @@ -523,7 +523,8 @@ public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToH menu.addMenuClickHandler(8, (pl, slot, itemstack, action) -> { pl.closeInventory(); if (!(item.getAddon() instanceof Slimefun)) { - Slimefun.getLocalization().sendMessage(pl, "messages.wiki-third-party"); + Slimefun.getLocalization().sendMessage(pl, "messages.wiki-third-party", + msg -> msg.replace("%addon%", item.getAddon().getName())); } ChatUtils.sendURL(pl, wiki.get()); return false; From 03065e8f4a639d26db2bd7ff99211332d7e43b11 Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Mon, 7 Aug 2023 12:37:42 -0400 Subject: [PATCH 08/17] feat(wiki): limit to github only --- .../slimefun4/api/items/SlimefunItem.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java index b4dbe1d21c..3991bc4a2a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java @@ -1,5 +1,7 @@ package io.github.thebusybiscuit.slimefun4.api.items; +import java.net.MalformedURLException; +import java.net.URL; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; @@ -72,6 +74,11 @@ */ public class SlimefunItem implements Placeable { + private static final Set WIKI_DOMAIN = Set.of( + "github.com", + "github.io" + ); + /** * This is our item id. */ @@ -905,7 +912,18 @@ public final void addWikiPage(@Nonnull String page) { */ public final void addCustomWikiPage(@Nonnull String url) { Preconditions.checkArgument(url != null, "Wiki page cannot be null."); - wikiURL = Optional.of(url); + try { + URL wikiUrl = new URL(url); + for (String domain : WIKI_DOMAIN) { + if (wikiUrl.getHost().endsWith(domain)) { + wikiURL = Optional.of(url); + return; + } + } + throw new IllegalArgumentException("The wiki domain is not allowed: " + url); + } catch (MalformedURLException e) { + throw new IllegalArgumentException("Invalid wiki URL: " + url, e); + } } /** From 68a86e83a4abdb0698d1a1b5b2c7880ea6011c1e Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Mon, 7 Aug 2023 12:38:53 -0400 Subject: [PATCH 09/17] docs(wiki): add javadocs --- .../thebusybiscuit/slimefun4/api/items/SlimefunItem.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java index 3991bc4a2a..e4bbd087a0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java @@ -74,7 +74,10 @@ */ public class SlimefunItem implements Placeable { - private static final Set WIKI_DOMAIN = Set.of( + /** + * This is the set of allowed wiki domains. + */ + private static final Set ALLOWED_WIKI_DOMAIN = Set.of( "github.com", "github.io" ); @@ -914,7 +917,7 @@ public final void addCustomWikiPage(@Nonnull String url) { Preconditions.checkArgument(url != null, "Wiki page cannot be null."); try { URL wikiUrl = new URL(url); - for (String domain : WIKI_DOMAIN) { + for (String domain : ALLOWED_WIKI_DOMAIN) { if (wikiUrl.getHost().endsWith(domain)) { wikiURL = Optional.of(url); return; From c71c50a0d3bbb0fd447c92f93f9bd2380f3133d3 Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Mon, 7 Aug 2023 15:21:09 -0400 Subject: [PATCH 10/17] revert: 68a86e83a4abdb0698d1a1b5b2c7880ea6011c1e. --- .../thebusybiscuit/slimefun4/api/items/SlimefunItem.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java index e4bbd087a0..3991bc4a2a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java @@ -74,10 +74,7 @@ */ public class SlimefunItem implements Placeable { - /** - * This is the set of allowed wiki domains. - */ - private static final Set ALLOWED_WIKI_DOMAIN = Set.of( + private static final Set WIKI_DOMAIN = Set.of( "github.com", "github.io" ); @@ -917,7 +914,7 @@ public final void addCustomWikiPage(@Nonnull String url) { Preconditions.checkArgument(url != null, "Wiki page cannot be null."); try { URL wikiUrl = new URL(url); - for (String domain : ALLOWED_WIKI_DOMAIN) { + for (String domain : WIKI_DOMAIN) { if (wikiUrl.getHost().endsWith(domain)) { wikiURL = Optional.of(url); return; From 06dd2f27a43e6a10ec8c76663cf84d8a7b240e76 Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Mon, 7 Aug 2023 15:21:27 -0400 Subject: [PATCH 11/17] revert: 03065e8f4a639d26db2bd7ff99211332d7e43b11. --- .../slimefun4/api/items/SlimefunItem.java | 20 +------------------ 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java index 3991bc4a2a..b4dbe1d21c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java @@ -1,7 +1,5 @@ package io.github.thebusybiscuit.slimefun4.api.items; -import java.net.MalformedURLException; -import java.net.URL; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; @@ -74,11 +72,6 @@ */ public class SlimefunItem implements Placeable { - private static final Set WIKI_DOMAIN = Set.of( - "github.com", - "github.io" - ); - /** * This is our item id. */ @@ -912,18 +905,7 @@ public final void addWikiPage(@Nonnull String page) { */ public final void addCustomWikiPage(@Nonnull String url) { Preconditions.checkArgument(url != null, "Wiki page cannot be null."); - try { - URL wikiUrl = new URL(url); - for (String domain : WIKI_DOMAIN) { - if (wikiUrl.getHost().endsWith(domain)) { - wikiURL = Optional.of(url); - return; - } - } - throw new IllegalArgumentException("The wiki domain is not allowed: " + url); - } catch (MalformedURLException e) { - throw new IllegalArgumentException("Invalid wiki URL: " + url, e); - } + wikiURL = Optional.of(url); } /** From 057877ed6d104ebb3d1652e0b065f8efacfd4706 Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Sun, 7 Jan 2024 12:19:36 -0500 Subject: [PATCH 12/17] chore: add Nonnull annotation Co-authored-by: J3fftw <44972470+J3fftw1@users.noreply.github.com> --- .../thebusybiscuit/slimefun4/implementation/Slimefun.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java index 2496868219..bc1839e0f6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java @@ -404,7 +404,7 @@ private void onPluginStart() { } @Override - public @Nonnull JavaPlugin getJavaPlugin() { + public JavaPlugin getJavaPlugin() { return this; } From 38967df9d64f3f780654f09bf117e4a34e522280 Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Sun, 7 Jan 2024 13:17:21 -0500 Subject: [PATCH 13/17] refactor: update the button, make the name shorter --- .../implementation/guide/SurvivalSlimefunGuide.java | 13 ++++++++++--- src/main/resources/languages/en/messages.yml | 7 +++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java index d43bfb8440..339960f38a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java @@ -514,12 +514,19 @@ public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToH Optional wiki = item.getWikipage(); if (wiki.isPresent()) { - String message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki-third-party") + String message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.third-party") .replace("%addon%", item.getAddon().getName()); if (item.getAddon() instanceof Slimefun) { - message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki"); + message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.slimefun"); } - menu.addItem(8, new CustomItemStack(Material.KNOWLEDGE_BOOK, ChatColor.WHITE + message, "", ChatColor.GRAY + "\u21E8 " + ChatColor.GREEN + Slimefun.getLocalization().getMessage(p, "guide.tooltips.open-itemgroup"))); + menu.addItem(8, new CustomItemStack( + Material.KNOWLEDGE_BOOK, + ChatColor.WHITE + Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.button"), + "", + ChatColor.WHITE + message, + "", + ChatColor.GRAY + "\u21E8 " + ChatColor.GREEN + Slimefun.getLocalization().getMessage(p, "guide.tooltips.open-itemgroup") + )); menu.addMenuClickHandler(8, (pl, slot, itemstack, action) -> { pl.closeInventory(); if (!(item.getAddon() instanceof Slimefun)) { diff --git a/src/main/resources/languages/en/messages.yml b/src/main/resources/languages/en/messages.yml index e4c6dd8eaf..9eaa8b9d93 100644 --- a/src/main/resources/languages/en/messages.yml +++ b/src/main/resources/languages/en/messages.yml @@ -60,8 +60,11 @@ guide: tooltips: open-itemgroup: 'Click to open' versions-notice: 'These are very important when reporting bugs!' - wiki: 'View this Item on the official Slimefun Wiki' - wiki-third-party: 'View this Item on the %addon% Wiki (not Slimefun official)' + wiki: + button: 'View this item on the %addon% Wiki' + slimefun: 'Official Slimefun Wiki' + third-party: 'Third-Party Wiki' + recipes: machine: 'Recipes made in this Machine' From 7aac23a983bccba30b4d43ebb392b0f10c240215 Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Sun, 7 Jan 2024 13:24:15 -0500 Subject: [PATCH 14/17] fix(wiki): fix addon name replacement --- .../implementation/guide/SurvivalSlimefunGuide.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java index 339960f38a..851528a0df 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java @@ -514,14 +514,13 @@ public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToH Optional wiki = item.getWikipage(); if (wiki.isPresent()) { - String message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.third-party") - .replace("%addon%", item.getAddon().getName()); + String message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.third-party"); if (item.getAddon() instanceof Slimefun) { message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.slimefun"); } menu.addItem(8, new CustomItemStack( Material.KNOWLEDGE_BOOK, - ChatColor.WHITE + Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.button"), + ChatColor.WHITE + Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.button").replace("%addon%", item.getAddon().getName()), "", ChatColor.WHITE + message, "", From e11f430ed763f1035b0fe3cb9f19c3b95a810dad Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Wed, 16 Oct 2024 13:52:11 -0700 Subject: [PATCH 15/17] feat: disallow changing wiki URL after it has been set --- .../thebusybiscuit/slimefun4/api/SlimefunAddon.java | 8 ++++---- .../thebusybiscuit/slimefun4/api/items/SlimefunItem.java | 3 ++- .../thebusybiscuit/slimefun4/implementation/Slimefun.java | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java index e3221fe900..c27d74b69c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/SlimefunAddon.java @@ -98,12 +98,12 @@ default boolean hasDependency(@Nonnull String dependency) { } /** - * This method returns the wiki URL for all the items this {@link SlimefunAddon}. - * The "%item%" placeholder will be replaced with the SlimefunItem's ID. + * This method returns the wiki URL template for all the items this {@link SlimefunAddon}. + * The "%item%" placeholder will be replaced with the SlimefunItem's ID by default. * - * @return The wiki URL for this {@link SlimefunAddon}. + * @return The wiki URL template for this {@link SlimefunAddon}. */ - default @Nonnull String getWikiURL() { + default @Nonnull String getWikiUrlTemplate() { return ""; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java index 65592d4358..a116204888 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java @@ -907,7 +907,7 @@ public final void addOfficialWikipage(@Nonnull String page) { public final void addWikiPage(@Nonnull String page) { Preconditions.checkArgument(page != null, "Wiki page cannot be null."); Preconditions.checkState(getState() != ItemState.UNREGISTERED, "Wiki page can only be added after item has been registered."); - addCustomWikiPage(getAddon().getWikiURL().replace("%item%", page)); + addCustomWikiPage(getAddon().getWikiUrlTemplate().replace("%item%", page)); } /** @@ -918,6 +918,7 @@ public final void addWikiPage(@Nonnull String page) { */ public final void addCustomWikiPage(@Nonnull String url) { Preconditions.checkArgument(url != null, "Wiki page cannot be null."); + Preconditions.checkState(wikiURL.isEmpty(), "Wiki page cannot be modified after it has been set."); wikiURL = Optional.of(url); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java index fe6615fb91..da960e8df6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/Slimefun.java @@ -403,7 +403,7 @@ public String getBugTrackerURL() { } @Override - public @Nonnull String getWikiURL() { + public @Nonnull String getWikiUrlTemplate() { return "https://github.com/Slimefun/Slimefun4/wiki/%item%"; } From 92645fc65a5673e3fffb8ddcba7cf274c5443992 Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Wed, 16 Oct 2024 14:24:04 -0700 Subject: [PATCH 16/17] feat: match the url pattern to detect official Slimefun wiki --- .../implementation/guide/SurvivalSlimefunGuide.java | 5 ++++- .../slimefun4/implementation/items/TestSlimefunItem.java | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java index 998207b5f5..7dd4f2c3b5 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java @@ -7,6 +7,7 @@ import java.util.Locale; import java.util.Optional; import java.util.logging.Level; +import java.util.regex.Pattern; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; @@ -68,6 +69,7 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation { private static final int MAX_ITEM_GROUPS = 36; + private static final Pattern SLIMEFUN_WIKI_PATTERN = Pattern.compile("^" + Pattern.quote(Slimefun.instance().getWikiUrlTemplate()).replace("%item%", "(.+)") + "$"); private final int[] recipeSlots = { 3, 4, 5, 12, 13, 14, 21, 22, 23 }; private final ItemStack item; @@ -516,9 +518,10 @@ public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToH if (wiki.isPresent()) { String message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.third-party"); - if (item.getAddon() instanceof Slimefun) { + if (SLIMEFUN_WIKI_PATTERN.matcher(wiki.get()).matches()) { message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.slimefun"); } + menu.addItem(8, new CustomItemStack( Material.KNOWLEDGE_BOOK, ChatColor.WHITE + Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.button").replace("%addon%", item.getAddon().getName()), diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/items/TestSlimefunItem.java b/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/items/TestSlimefunItem.java index bb2c0ccadf..1703b72dd3 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/items/TestSlimefunItem.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/implementation/items/TestSlimefunItem.java @@ -54,6 +54,9 @@ void testWikiPages() { Optional wiki = item.getWikipage(); Assertions.assertTrue(wiki.isPresent()); Assertions.assertEquals("https://github.com/Slimefun/Slimefun4/wiki/Test", wiki.get()); + + // wiki page shouldn't be changed if it already exists + Assertions.assertThrows(IllegalStateException.class, () -> item.addWikiPage("Test2")); } @Test From d0345708328907697e62d222869be56c83aa041f Mon Sep 17 00:00:00 2001 From: ybw0014 Date: Wed, 16 Oct 2024 15:03:55 -0700 Subject: [PATCH 17/17] chore: move pattern to util --- .../guide/SurvivalSlimefunGuide.java | 7 ++-- .../slimefun4/utils/WikiUtils.java | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java index 7dd4f2c3b5..db4d4b5ae0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/SurvivalSlimefunGuide.java @@ -7,7 +7,6 @@ import java.util.Locale; import java.util.Optional; import java.util.logging.Level; -import java.util.regex.Pattern; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; @@ -49,6 +48,7 @@ import io.github.thebusybiscuit.slimefun4.implementation.tasks.AsyncRecipeChoiceTask; import io.github.thebusybiscuit.slimefun4.utils.ChatUtils; import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; +import io.github.thebusybiscuit.slimefun4.utils.WikiUtils; import io.github.thebusybiscuit.slimefun4.utils.compatibility.VersionedItemFlag; import io.github.thebusybiscuit.slimefun4.utils.itemstack.SlimefunGuideItem; @@ -69,7 +69,6 @@ public class SurvivalSlimefunGuide implements SlimefunGuideImplementation { private static final int MAX_ITEM_GROUPS = 36; - private static final Pattern SLIMEFUN_WIKI_PATTERN = Pattern.compile("^" + Pattern.quote(Slimefun.instance().getWikiUrlTemplate()).replace("%item%", "(.+)") + "$"); private final int[] recipeSlots = { 3, 4, 5, 12, 13, 14, 21, 22, 23 }; private final ItemStack item; @@ -518,7 +517,7 @@ public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToH if (wiki.isPresent()) { String message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.third-party"); - if (SLIMEFUN_WIKI_PATTERN.matcher(wiki.get()).matches()) { + if (WikiUtils.isSlimefunOfficialWiki(wiki.get())) { message = Slimefun.getLocalization().getMessage(p, "guide.tooltips.wiki.slimefun"); } @@ -532,7 +531,7 @@ public void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToH )); menu.addMenuClickHandler(8, (pl, slot, itemstack, action) -> { pl.closeInventory(); - if (!(item.getAddon() instanceof Slimefun)) { + if (!WikiUtils.isSlimefunOfficialWiki(wiki.get())) { Slimefun.getLocalization().sendMessage(pl, "messages.wiki-third-party", msg -> msg.replace("%addon%", item.getAddon().getName())); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java index ad89d715e5..c91bef94bf 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/WikiUtils.java @@ -7,6 +7,7 @@ import java.util.Map; import java.util.function.UnaryOperator; import java.util.logging.Level; +import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.annotation.Nonnull; @@ -15,6 +16,7 @@ import io.github.thebusybiscuit.slimefun4.api.SlimefunAddon; import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem; +import io.github.thebusybiscuit.slimefun4.implementation.Slimefun; import com.google.common.base.Preconditions; import com.google.gson.JsonElement; @@ -26,6 +28,9 @@ * @author ybw0014 */ public class WikiUtils { + + private static final Pattern SLIMEFUN_WIKI_PATTERN = buildPattern(Slimefun.instance().getWikiUrlTemplate()); + private WikiUtils() {} /** @@ -74,4 +79,32 @@ public static void setupWiki(@Nonnull Plugin plugin, @Nonnull UnaryOperator