aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorWasinthorn Suksri <wasinthorn.suksri@gmail.com>2025-07-25 03:39:31 +0700
committerGitHub <noreply@github.com>2025-07-24 16:39:31 -0400
commite6a7562e39b2b940b2fecc572c9de88c52a0f09b (patch)
treeb0d6beb5602d9e40ad46dcc9735d6342f445006a /src/main/java
parentab85baafd92ea6f46a879005adb5a40629bbd64d (diff)
downloadSkyblocker-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')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorWikiLookup.java13
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/WikiLookup.java25
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRepository.java6
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();
}