diff options
6 files changed, 179 insertions, 42 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index e98aea83f..7002ff0f5 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -71,7 +71,7 @@ import at.hannibal2.skyhanni.features.commands.PartyCommands import at.hannibal2.skyhanni.features.commands.SendCoordinatedCommand import at.hannibal2.skyhanni.features.commands.ViewRecipeCommand import at.hannibal2.skyhanni.features.commands.WarpIsCommand -import at.hannibal2.skyhanni.features.commands.WikiCommand +import at.hannibal2.skyhanni.features.commands.WikiManager import at.hannibal2.skyhanni.features.commands.tabcomplete.GetFromSacksTabComplete import at.hannibal2.skyhanni.features.commands.tabcomplete.PlayerTabComplete import at.hannibal2.skyhanni.features.commands.tabcomplete.WarpTabComplete @@ -190,6 +190,7 @@ import at.hannibal2.skyhanni.features.misc.CollectionTracker import at.hannibal2.skyhanni.features.misc.CurrentPetDisplay import at.hannibal2.skyhanni.features.misc.CustomTextBox import at.hannibal2.skyhanni.features.misc.ExpOrbsOnGroundHider +import at.hannibal2.skyhanni.features.misc.FandomWikiFromMenus import at.hannibal2.skyhanni.features.misc.FixNEUHeavyPearls import at.hannibal2.skyhanni.features.misc.HideArmor import at.hannibal2.skyhanni.features.misc.InGameDateDisplay @@ -391,6 +392,7 @@ class SkyHanniMod { loadModule(ItemDisplayOverlayFeatures()) loadModule(CurrentPetDisplay()) loadModule(ExpOrbsOnGroundHider()) + loadModule(FandomWikiFromMenus()) loadModule(DamageIndicatorManager()) loadModule(ItemAbilityCooldown()) loadModule(DungeonHighlightClickedBlocks()) @@ -418,7 +420,7 @@ class SkyHanniMod { loadModule(MinionFeatures()) loadModule(TimeFeatures()) loadModule(RngMeterInventory()) - loadModule(WikiCommand()) + loadModule(WikiManager()) loadModule(SendCoordinatedCommand()) loadModule(WarpIsCommand()) loadModule(ViewRecipeCommand) diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt index abd448ccd..69a77d6df 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt @@ -9,7 +9,7 @@ import com.google.gson.JsonPrimitive object ConfigUpdaterMigrator { val logger = LorenzLogger("ConfigMigration") - val configVersion = 5 + val configVersion = 6 fun JsonElement.at(chain: List<String>, init: Boolean): JsonElement? { if (chain.isEmpty()) return this if (this !is JsonObject) return null @@ -94,4 +94,4 @@ object ConfigUpdaterMigrator { logger.log("Final config: $it") } } -}
\ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/CommandsConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/CommandsConfig.java index 12b7610ae..ed90268d5 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/CommandsConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/CommandsConfig.java @@ -4,7 +4,9 @@ import at.hannibal2.skyhanni.config.FeatureToggle; import com.google.gson.annotations.Expose; import io.github.moulberry.moulconfig.annotations.Accordion; import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; +import io.github.moulberry.moulconfig.annotations.ConfigEditorKeybind; import io.github.moulberry.moulconfig.annotations.ConfigOption; +import org.lwjgl.input.Keyboard; public class CommandsConfig { @@ -68,11 +70,30 @@ public class CommandsConfig { public boolean viewrecipeItems = true; } + @ConfigOption(name = "Fandom Wiki for §e/wiki", desc = "") + @Accordion @Expose - @ConfigOption(name = "Fandom Wiki", desc = "Use Fandom wiki (§ehypixel-skyblock.fandom.com§7) instead of the Hypixel wiki (§ewiki.hypixel.net§7).") - @ConfigEditorBoolean - @FeatureToggle - public boolean useFandomWiki = false; + public FandomWikiCommmandConfig fandomWiki = new FandomWikiCommmandConfig(); + + public static class FandomWikiCommmandConfig { + + @Expose + @ConfigOption(name = "Replace Chat", desc = "Use Fandom Wiki (§ehypixel-skyblock.fandom.com§7) instead of the Hypixel wiki (§ewiki.hypixel.net§7) in most wiki-related chat messages.") + @ConfigEditorBoolean + @FeatureToggle + public boolean useFandomWiki = false; + + @Expose + @ConfigOption(name = "Skip Chat", desc = "Directly opens the Fandom Wiki instead of sending the §e\"Click to search for this thing on the Fandom Wiki\"§7 message beforehand.") + @ConfigEditorBoolean + @FeatureToggle + public boolean skipWikiChat = false; + + @Expose + @ConfigOption(name = "Fandom Wiki Key", desc = "Search for an item on Fandom Wiki with this keybind.\n§4For optimal experiences, do §lNOT§r §4bind this to a mouse button.") + @ConfigEditorKeybind(defaultKey = Keyboard.KEY_NONE) + public int fandomWikiKeybind = Keyboard.KEY_NONE; + } @ConfigOption(name = "Party Commands", desc = "Shortens party commands and allows tab-completing for them. " + "\n§eCommands: /pt /pp /pko /pk §7SkyBlock command §e/pt §7to check the play time still works.") diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/WikiCommand.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/WikiCommand.kt deleted file mode 100644 index 4976c4d9f..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/commands/WikiCommand.kt +++ /dev/null @@ -1,34 +0,0 @@ -package at.hannibal2.skyhanni.features.commands - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.events.PacketEvent -import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.OSUtils -import net.minecraft.network.play.client.C01PacketChatMessage -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent - -class WikiCommand { - - @SubscribeEvent - fun onSendPacket(event: PacketEvent.SendEvent) { - val packet = event.packet - - if (!SkyHanniMod.feature.commands.useFandomWiki) return - - if (packet is C01PacketChatMessage) { - val message = packet.message.lowercase() - if (message == "/wiki") { - event.isCanceled = true - OSUtils.openBrowser("https://hypixel-skyblock.fandom.com/wiki/Hypixel_SkyBlock_Wiki") - LorenzUtils.chat("§e[SkyHanni] Opening the Fandom Wiki..") - } else if (message.startsWith("/wiki ")) { - event.isCanceled = true - val search = packet.message.substring(6) - LorenzUtils.chat("§e[SkyHanni] Searching the Fandom Wiki for §c$search") - - val url = "https://www.google.com/search?q=inurl%3Ahypixel-skyblock.fandom.com $search&hl=en" - OSUtils.openBrowser(url.replace(' ', '+')) - } - } - } -}
\ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt new file mode 100644 index 000000000..119e01d66 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt @@ -0,0 +1,82 @@ +package at.hannibal2.skyhanni.features.commands + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator +import at.hannibal2.skyhanni.events.LorenzToolTipEvent +import at.hannibal2.skyhanni.events.PacketEvent +import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName +import at.hannibal2.skyhanni.utils.ItemUtils.nameWithEnchantment +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.NEUItems +import at.hannibal2.skyhanni.utils.OSUtils +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import net.minecraft.network.play.client.C01PacketChatMessage +import net.minecraft.client.Minecraft +import net.minecraft.item.ItemStack +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import org.lwjgl.input.Keyboard + +class WikiManager { + + private val config get() = SkyHanniMod.feature.commands.fandomWiki + private val urlPrefix = "https://hypixel-skyblock.fandom.com/wiki/" + private val urlSearchPrefix = "${urlPrefix}Special:Search?query=" + + @SubscribeEvent + fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { + event.move(6, "commands.useFandomWiki", "commands.fandomWiki.useFandomWiki") + } + + @SubscribeEvent + fun onSendPacket(event: PacketEvent.SendEvent) { + if (!LorenzUtils.inSkyBlock) return + if (!isEnabled()) return + + val packet = event.packet + + if (packet is C01PacketChatMessage) { + val message = packet.message.lowercase() + if (!(message.startsWith("/wiki"))) return + event.isCanceled = true + if (message == "/wiki") { + LorenzUtils.chat("§e[SkyHanni] Opening the Fandom Wiki..") + OSUtils.openBrowser("${urlPrefix}/Hypixel_SkyBlock_Wiki") + } else if (message.startsWith("/wiki ") || message == ("/wikithis")) { //conditional to see if we need Special:Search page + if (message == ("/wikithis")) { + val itemInHand = InventoryUtils.getItemInHand() ?: return + wikiTheItem(itemInHand) + } else { + val search = packet.message.split("/wiki ").last() + LorenzUtils.chat("§e[SkyHanni] Searching the Fandom Wiki for §a$search") + val wikiUrlCustom = "$urlSearchPrefix$search&scope=internal" + OSUtils.openBrowser(wikiUrlCustom.replace(' ', '+')) + } + } + } + } + + @SubscribeEvent + fun onKeyClickWithTooltipActive(event: LorenzToolTipEvent) { + if (!LorenzUtils.inSkyBlock) return + if (Minecraft.getMinecraft().currentScreen == null) return + if (NEUItems.neuHasFocus()) return //because good heavens if this worked on neuitems... + + if (Keyboard.isKeyDown(config.fandomWikiKeybind)) { + val itemUnderCursor = event.itemStack ?: return + wikiTheItem(itemUnderCursor) + } + } + + private fun wikiTheItem(item: ItemStack) { + var wikiUrlSearch = "" + val itemDisplayName = (item.nameWithEnchantment ?: return).replace("§a✔ ", "").replace("§c✖ ", "") + val internalName = item.getInternalName().asString() ?: return + LorenzUtils.chat("§e[SkyHanni] Searching the Fandom Wiki for §a$itemDisplayName") + if (internalName != "NONE") wikiUrlSearch = "$urlSearchPrefix$internalName&scope=internal" + else wikiUrlSearch = "$urlSearchPrefix${itemDisplayName.removeColor()}&scope=internal" + OSUtils.openBrowser(wikiUrlSearch.replace(' ', '+')) + } + + private fun isEnabled() = config.useFandomWiki +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/FandomWikiFromMenus.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/FandomWikiFromMenus.kt new file mode 100644 index 000000000..d2c1ab4f3 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/FandomWikiFromMenus.kt @@ -0,0 +1,66 @@ +package at.hannibal2.skyhanni.features.misc + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator +import at.hannibal2.skyhanni.events.* +import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName +import at.hannibal2.skyhanni.utils.ItemUtils.getLore +import at.hannibal2.skyhanni.utils.ItemUtils.nameWithEnchantment +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.anyContains +import at.hannibal2.skyhanni.utils.OSUtils +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import io.github.moulberry.notenoughupdates.events.SlotClickEvent +import net.minecraftforge.fml.common.eventhandler.EventPriority +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class FandomWikiFromMenus { + + private val config get() = SkyHanniMod.feature.commands.fandomWiki + private val urlPrefix = "https://hypixel-skyblock.fandom.com/wiki/" + private val urlSearchPrefix = "${urlPrefix}Special:Search?query=" + + @SubscribeEvent + fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { + event.move(6, "fandomWiki", "commands.fandomWiki") + } + + @SubscribeEvent(priority = EventPriority.HIGH) + fun onSlotClick(event: SlotClickEvent) { + if (!LorenzUtils.inSkyBlock) return + if (!isEnabled()) return + val chestName = InventoryUtils.openInventoryName() + + if (chestName.isEmpty()) return + + val itemClickedStack = event.slot.stack + val itemClickedName = itemClickedStack.displayName + val itemInHand = InventoryUtils.getItemInHand() ?: return + val itemInHandName = itemInHand.nameWithEnchantment ?: return + val internalName = itemInHand.getInternalName().asString() ?: return + + var wikiDisplayName = "" + var wikiInternalName = "" + + if ((itemInHandName == "") || (event.slotId == 11 && itemClickedName.contains("Wiki Command") && chestName.contains("Wiki"))) { + LorenzUtils.clickableChat("§e[SkyHanni] Click here to visit the Hypixel Skyblock Fandom Wiki!", "wiki") + return + } else if (event.slotId == 15 && itemClickedName.contains("Wikithis Command") && chestName.contains("Wiki")) { + wikiDisplayName = itemInHandName + wikiInternalName = internalName + } else if ((itemClickedStack.getLore().anyContains("Wiki") || itemClickedStack.getLore().anyContains("wiki")) && !(itemClickedStack.getLore().anyContains("wikipedia"))) { //.lowercase() to match "Wiki!" and ".*wiki.*" lore lines in one fell swoop + wikiDisplayName = itemClickedName.removeColor().replace("✔ ", "").replace("✖ ", "") + wikiInternalName = itemClickedName.removeColor().replace("✔ ", "").replace("✖ ", "") + } else return + if (!config.skipWikiChat) { + LorenzUtils.clickableChat("§e[SkyHanni] Click here to search for $wikiDisplayName §eon the Hypixel Skyblock Fandom Wiki!", "wiki $wikiInternalName") + } else { + LorenzUtils.chat("§e[SkyHanni] Searching the Fandom Wiki for §a$wikiDisplayName") + val wikiUrlCustom = "$urlSearchPrefix$wikiInternalName&scope=internal" + OSUtils.openBrowser(wikiUrlCustom.replace(' ', '+')) + } + event.isCanceled = true + } + private fun isEnabled() = config.useFandomWiki +} |