Merge pull request #7927 from Abextm/wiki-improvements

WikiPlugin: Allow lookup of Objects
This commit is contained in:
Abex
2019-02-26 20:43:57 -07:00
committed by GitHub
2 changed files with 56 additions and 15 deletions

View File

@@ -25,7 +25,6 @@
package net.runelite.client.plugins.wiki; package net.runelite.client.plugins.wiki;
import com.google.common.primitives.Ints; import com.google.common.primitives.Ints;
import java.net.URLEncoder;
import java.util.Arrays; import java.util.Arrays;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -37,6 +36,8 @@ import net.runelite.api.MenuAction;
import net.runelite.api.MenuEntry; import net.runelite.api.MenuEntry;
import net.runelite.api.NPC; import net.runelite.api.NPC;
import net.runelite.api.NPCComposition; import net.runelite.api.NPCComposition;
import net.runelite.api.ObjectComposition;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.MenuOptionClicked;
import net.runelite.api.events.WidgetLoaded; import net.runelite.api.events.WidgetLoaded;
@@ -72,12 +73,10 @@ public class WikiPlugin extends Plugin
WidgetInfo.QUESTLIST_MINIQUEST_CONTAINER.getId(), WidgetInfo.QUESTLIST_MINIQUEST_CONTAINER.getId(),
}; };
static final String WIKI_BASE = "https://oldschool.runescape.wiki"; static final HttpUrl WIKI_BASE = HttpUrl.parse("https://oldschool.runescape.wiki");
static final HttpUrl WIKI_RSLOOKUP = HttpUrl.parse(WIKI_BASE + "/w/Special:Lookup"); static final HttpUrl WIKI_API = WIKI_BASE.newBuilder().addPathSegments("api.php").build();
static final HttpUrl WIKI_API = HttpUrl.parse(WIKI_BASE + "/api.php");
static final String UTM_SORUCE_KEY = "utm_source"; static final String UTM_SORUCE_KEY = "utm_source";
static final String UTM_SORUCE_VALUE = "runelite"; static final String UTM_SORUCE_VALUE = "runelite";
static final String UTM_PARAMS = UTM_SORUCE_KEY + "=" + UTM_SORUCE_VALUE;
private static final String MENUOP_GUIDE = "Guide"; private static final String MENUOP_GUIDE = "Guide";
private static final String MENUOP_QUICKGUIDE = "Quick Guide"; private static final String MENUOP_QUICKGUIDE = "Quick Guide";
@@ -161,7 +160,7 @@ public class WikiPlugin extends Plugin
icon.setOriginalHeight(16); icon.setOriginalHeight(16);
icon.setTargetVerb("Lookup"); icon.setTargetVerb("Lookup");
icon.setName("Wiki"); icon.setName("Wiki");
icon.setClickMask(WidgetConfig.USE_GROUND_ITEM | WidgetConfig.USE_ITEM | WidgetConfig.USE_NPC); icon.setClickMask(WidgetConfig.USE_GROUND_ITEM | WidgetConfig.USE_ITEM | WidgetConfig.USE_NPC | WidgetConfig.USE_OBJECT);
icon.setNoClickThrough(true); icon.setNoClickThrough(true);
icon.setOnTargetEnterListener((JavaScriptCallback) ev -> icon.setOnTargetEnterListener((JavaScriptCallback) ev ->
{ {
@@ -201,6 +200,8 @@ public class WikiPlugin extends Plugin
String type; String type;
int id; int id;
String name; String name;
WorldPoint location;
switch (ev.getMenuAction()) switch (ev.getMenuAction())
{ {
case CANCEL: case CANCEL:
@@ -211,6 +212,7 @@ public class WikiPlugin extends Plugin
type = "item"; type = "item";
id = itemManager.canonicalize(ev.getId()); id = itemManager.canonicalize(ev.getId());
name = itemManager.getItemComposition(id).getName(); name = itemManager.getItemComposition(id).getName();
location = null;
break; break;
} }
case SPELL_CAST_ON_NPC: case SPELL_CAST_ON_NPC:
@@ -220,6 +222,20 @@ public class WikiPlugin extends Plugin
NPCComposition nc = npc.getTransformedComposition(); NPCComposition nc = npc.getTransformedComposition();
id = nc.getId(); id = nc.getId();
name = nc.getName(); name = nc.getName();
location = npc.getWorldLocation();
break;
}
case SPELL_CAST_ON_GAME_OBJECT:
{
type = "object";
ObjectComposition lc = client.getObjectDefinition(ev.getId());
if (lc.getImpostorIds() != null)
{
lc = lc.getImpostor();
}
id = lc.getId();
name = lc.getName();
location = WorldPoint.fromScene(client, ev.getActionParam(), ev.getWidgetId(), client.getPlane());
break; break;
} }
default: default:
@@ -227,12 +243,22 @@ public class WikiPlugin extends Plugin
return; return;
} }
HttpUrl url = WIKI_RSLOOKUP.newBuilder() name = Text.removeTags(name);
HttpUrl.Builder urlBuilder = WIKI_BASE.newBuilder();
urlBuilder.addPathSegments("w/Special:Lookup")
.addQueryParameter("type", type) .addQueryParameter("type", type)
.addQueryParameter("id", "" + id) .addQueryParameter("id", "" + id)
.addQueryParameter("name", name) .addQueryParameter("name", name)
.addQueryParameter(UTM_SORUCE_KEY, UTM_SORUCE_VALUE) .addQueryParameter(UTM_SORUCE_KEY, UTM_SORUCE_VALUE);
.build();
if (location != null)
{
urlBuilder.addQueryParameter("x", "" + location.getX())
.addQueryParameter("y", "" + location.getY())
.addQueryParameter("plane", "" + location.getPlane());
}
HttpUrl url = urlBuilder.build();
LinkBrowser.browse(url.toString()); LinkBrowser.browse(url.toString());
return; return;
@@ -240,23 +266,35 @@ public class WikiPlugin extends Plugin
if (ev.getMenuAction() == MenuAction.RUNELITE) if (ev.getMenuAction() == MenuAction.RUNELITE)
{ {
String quickguide = ""; boolean quickguide = false;
switch (ev.getMenuOption()) switch (ev.getMenuOption())
{ {
case MENUOP_QUICKGUIDE: case MENUOP_QUICKGUIDE:
quickguide = "/Quick_guide"; quickguide = true;
//fallthrough; //fallthrough;
case MENUOP_GUIDE: case MENUOP_GUIDE:
ev.consume(); ev.consume();
String quest = Text.removeTags(ev.getMenuTarget()); String quest = Text.removeTags(ev.getMenuTarget());
LinkBrowser.browse(WIKI_BASE + "/w/" + URLEncoder.encode(quest.replace(' ', '_')) + quickguide + "?" + UTM_PARAMS); HttpUrl.Builder ub = WIKI_BASE.newBuilder()
.addPathSegment("w")
.addPathSegment(quest)
.addQueryParameter(UTM_SORUCE_KEY, UTM_SORUCE_VALUE);
if (quickguide)
{
ub.addPathSegment("Quick_guide");
}
LinkBrowser.browse(ub.build().toString());
break; break;
case MENUOP_WIKI_SKILL: case MENUOP_WIKI_SKILL:
Matcher skillRegex = WikiPlugin.SKILL_REGEX.matcher(Text.removeTags(ev.getMenuTarget())); Matcher skillRegex = WikiPlugin.SKILL_REGEX.matcher(Text.removeTags(ev.getMenuTarget()));
if (skillRegex.find()) if (skillRegex.find())
{ {
LinkBrowser.browse(WIKI_BASE + "/w/" + URLEncoder.encode(skillRegex.group(1)) + "?" + UTM_PARAMS); LinkBrowser.browse(WIKI_BASE.newBuilder()
.addPathSegment("w")
.addPathSegment(skillRegex.group(1))
.addQueryParameter(UTM_SORUCE_KEY, UTM_SORUCE_VALUE)
.build().toString());
} }
} }
} }

View File

@@ -33,7 +33,6 @@ import com.google.gson.JsonParser;
import com.google.inject.Inject; import com.google.inject.Inject;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder;
import java.util.List; import java.util.List;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
@@ -297,7 +296,11 @@ public class WikiSearchChatboxTextInput extends ChatboxTextInput
private void search(String search) private void search(String search)
{ {
LinkBrowser.browse(WikiPlugin.WIKI_BASE + "?search=" + URLEncoder.encode(search) + "&" + WikiPlugin.UTM_PARAMS); LinkBrowser.browse(WikiPlugin.WIKI_BASE.newBuilder()
.addQueryParameter("search", search)
.addQueryParameter(WikiPlugin.UTM_SORUCE_KEY, WikiPlugin.UTM_SORUCE_VALUE)
.build()
.toString());
chatboxPanelManager.close(); chatboxPanelManager.close();
} }
} }