diff options
| author | Wasinthorn Suksri <wasinthorn.suksri@gmail.com> | 2025-07-25 03:39:31 +0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-24 16:39:31 -0400 |
| commit | e6a7562e39b2b940b2fecc572c9de88c52a0f09b (patch) | |
| tree | b0d6beb5602d9e40ad46dcc9735d6342f445006a /src/main/java | |
| parent | ab85baafd92ea6f46a879005adb5a40629bbd64d (diff) | |
| download | Skyblocker-e6a7562e39b2b940b2fecc572c9de88c52a0f09b.tar.gz Skyblocker-e6a7562e39b2b940b2fecc572c9de88c52a0f09b.tar.bz2 Skyblocker-e6a7562e39b2b940b2fecc572c9de88c52a0f09b.zip | |
Added Visitor Wiki Lookup (#1512)
* feat: initial wiki lookup for visitors
* fix: add slot id condition check
* chore: style minor fix
* fix: encode '?' for url
Diffstat (limited to 'src/main/java')
4 files changed, 50 insertions, 8 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java index 935ebec6..b3812afc 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java @@ -9,6 +9,7 @@ import de.hysky.skyblocker.skyblock.PetCache; import de.hysky.skyblocker.skyblock.experiment.ExperimentSolver; import de.hysky.skyblocker.skyblock.experiment.SuperpairsSolver; import de.hysky.skyblocker.skyblock.experiment.UltrasequencerSolver; +import de.hysky.skyblocker.skyblock.garden.VisitorWikiLookup; import de.hysky.skyblocker.skyblock.garden.visitor.VisitorHelper; import de.hysky.skyblocker.skyblock.item.*; import de.hysky.skyblocker.skyblock.item.background.ItemBackgroundManager; @@ -118,10 +119,19 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen SkyblockerConfig config = SkyblockerConfigManager.get(); //wiki lookup if (config.general.wikiLookup.enableWikiLookup) { + var title = this.getTitle().getString(); if (WikiLookup.officialWikiLookup.matchesKey(keyCode, scanCode)) { - WikiLookup.openWiki(this.focusedSlot, client.player, true); + if (VisitorWikiLookup.canSearch(title, this.focusedSlot)) { + WikiLookup.openWikiItemName(this.focusedSlot.getStack().getName().getString(), this.client.player, true); + } else { + WikiLookup.openWiki(this.focusedSlot, this.client.player, true); + } } else if (WikiLookup.fandomWikiLookup.matchesKey(keyCode, scanCode)) { - WikiLookup.openWiki(this.focusedSlot, client.player, false); + if (VisitorWikiLookup.canSearch(title, this.focusedSlot)) { + WikiLookup.openWikiItemName(this.focusedSlot.getStack().getName().getString(), this.client.player, false); + } else { + WikiLookup.openWiki(this.focusedSlot, this.client.player, false); + } } } //item protection diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorWikiLookup.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorWikiLookup.java new file mode 100644 index 00000000..8e21e26c --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorWikiLookup.java @@ -0,0 +1,13 @@ +package de.hysky.skyblocker.skyblock.garden; + +import net.minecraft.item.Items; +import net.minecraft.screen.slot.Slot; +import org.jetbrains.annotations.NotNull; + +public class VisitorWikiLookup { + public static boolean canSearch(String title, @NotNull Slot slot) { + if (slot.id <= 9 || slot.id >= 44) return false; + if (slot.getStack().isOf(Items.BLACK_STAINED_GLASS_PANE)) return false; + return title.matches("^Visitor's Logbook$"); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/WikiLookup.java b/src/main/java/de/hysky/skyblocker/skyblock/item/WikiLookup.java index 3d77c735..1648686a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/WikiLookup.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/WikiLookup.java @@ -17,6 +17,8 @@ import org.lwjgl.glfw.GLFW; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.concurrent.CompletableFuture; public class WikiLookup { @@ -48,10 +50,23 @@ public class WikiLookup { public static void openWiki(ItemStack stack, PlayerEntity player, boolean useOfficial) { ItemUtils.getItemIdOptional(stack) .map(neuId -> ItemRepository.getWikiLink(neuId, useOfficial)) - .ifPresentOrElse(wikiLink -> CompletableFuture.runAsync(() -> Util.getOperatingSystem().open(wikiLink)).exceptionally(e -> { - LOGGER.error("[Skyblocker] Error while retrieving wiki article...", e); - player.sendMessage(Constants.PREFIX.get().append("Error while retrieving wiki article, see logs..."), false); - return null; - }), () -> player.sendMessage(Constants.PREFIX.get().append(useOfficial ? Text.translatable("skyblocker.wikiLookup.noArticleFound.official") : Text.translatable("skyblocker.wikiLookup.noArticleFound.fandom")), false)); + .ifPresentOrElse(wikiLink -> openWikiLink(wikiLink, player), + () -> player.sendMessage(Constants.PREFIX.get().append(useOfficial ? Text.translatable("skyblocker.wikiLookup.noArticleFound.official") : Text.translatable("skyblocker.wikiLookup.noArticleFound.fandom")), false)); + } + + public static void openWikiItemName(String itemName, PlayerEntity player, boolean useOfficial) { + itemName = itemName.replace(" ", "_"); + // Special case for only a visitor that has '?' + itemName = itemName.replace("?", URLEncoder.encode("?", StandardCharsets.UTF_8)); + String wikiLink = ItemRepository.getWikiLink(useOfficial) + "/" + itemName; + openWikiLink(wikiLink, player); + } + + private static void openWikiLink(String wikiLink, PlayerEntity player) { + CompletableFuture.runAsync(() -> Util.getOperatingSystem().open(wikiLink)).exceptionally(e -> { + LOGGER.error("[Skyblocker] Error while retrieving wiki article...", e); + player.sendMessage(Constants.PREFIX.get().append("Error while retrieving wiki article, see logs..."), false); + return null; + }); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRepository.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRepository.java index 9ea7f06b..f3a80bd0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRepository.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRepository.java @@ -121,7 +121,7 @@ public class ItemRepository { List<String> info = item.getInfo(); String wikiLink0 = info.getFirst(); String wikiLink1 = info.size() > 1 ? info.get(1) : ""; - String wikiDomain = useOfficial ? "https://wiki.hypixel.net" : "https://hypixel-skyblock.fandom.com"; + String wikiDomain = getWikiLink(useOfficial); if (wikiLink0.startsWith(wikiDomain)) { return wikiLink0; } else if (wikiLink1.startsWith(wikiDomain)) { @@ -130,6 +130,10 @@ public class ItemRepository { return null; } + public static String getWikiLink(boolean useOfficial) { + return useOfficial ? "https://wiki.hypixel.net" : "https://hypixel-skyblock.fandom.com"; + } + public static List<SkyblockRecipe> getRecipesAndUsages(ItemStack stack) { return Stream.concat(getRecipes(stack), getUsages(stack)).toList(); } |
