Merge branch 'master' into master
This commit is contained in:
@@ -16,7 +16,7 @@ import net.runelite.client.plugins.PluginDescriptor;
|
|||||||
name = "fKeyRemapping",
|
name = "fKeyRemapping",
|
||||||
description = "Used for interface hotkeys",
|
description = "Used for interface hotkeys",
|
||||||
tags = {"hotkey", "remapping"},
|
tags = {"hotkey", "remapping"},
|
||||||
type = "utility",
|
type = "utility",
|
||||||
enabledByDefault = true
|
enabledByDefault = true
|
||||||
)
|
)
|
||||||
public class fKeyRemappingPlugin extends Plugin
|
public class fKeyRemappingPlugin extends Plugin
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
package net.runelite.client.plugins.pkvision;
|
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import net.runelite.client.config.Config;
|
|
||||||
import net.runelite.client.config.ConfigGroup;
|
|
||||||
import net.runelite.client.config.ConfigItem;
|
|
||||||
|
|
||||||
@ConfigGroup("pkvision")
|
|
||||||
public interface PKVisionConfig extends Config
|
|
||||||
{
|
|
||||||
@ConfigItem(position = 0, keyName = "drawOwnName", name = "Highlight own player", description = "Configures whether or not your own player should be highlighted")
|
|
||||||
default boolean highlightOwnPlayer()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(position = 1, keyName = "ownNameColor", name = "Own player color", description = "Color of your own player")
|
|
||||||
default Color getOwnPlayerColor()
|
|
||||||
{
|
|
||||||
return new Color(0, 184, 212);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(position = 2, keyName = "drawFriendNames", name = "Highlight friends", description = "Configures whether or not friends should be highlighted")
|
|
||||||
default boolean highlightFriends()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(position = 3, keyName = "friendNameColor", name = "Friend color", description = "Color of friend names" )
|
|
||||||
default Color getFriendColor()
|
|
||||||
{
|
|
||||||
return new Color(0, 200, 80);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(position = 4, keyName = "drawPlayerTiles", name = "Draw tiles under players", description = "Configures whether or not tiles under highlighted players should be drawn")
|
|
||||||
default boolean drawTiles()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ConfigItem(position = 5, keyName = "drawPlayerNames", name = "Draw names above players", description = "Configures whether or not player names should be drawn above players")
|
|
||||||
default boolean drawPlayerNames() { return true; }
|
|
||||||
|
|
||||||
@ConfigItem(position = 6, keyName = "drawPlayerLevels", name = "Draw levels above players", description = "Configures whether or not player levels should be drawn above players")
|
|
||||||
default boolean drawPlayerLevels()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//@ConfigItem(position = 7, keyName = "drawPlayerHealth", name = "Draw health above players", description = "Configures whether or not player levels should be drawn above players")
|
|
||||||
//default boolean drawPlayerHealth()
|
|
||||||
//{
|
|
||||||
// return true;
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
package net.runelite.client.plugins.pkvision;
|
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
import net.runelite.api.Player;
|
|
||||||
import net.runelite.client.ui.overlay.Overlay;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayLayer;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayPriority;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
|
||||||
|
|
||||||
@Singleton
|
|
||||||
public class PKVisionMinimapOverlay extends Overlay
|
|
||||||
{
|
|
||||||
private final PKVisionService pkVisionService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private PKVisionMinimapOverlay(PKVisionService pkVisionService)
|
|
||||||
{
|
|
||||||
this.pkVisionService = pkVisionService;
|
|
||||||
setLayer(OverlayLayer.ABOVE_WIDGETS);
|
|
||||||
setPosition(OverlayPosition.DYNAMIC);
|
|
||||||
setPriority(OverlayPriority.HIGH);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Dimension render(Graphics2D graphics)
|
|
||||||
{
|
|
||||||
pkVisionService.forEachPlayer((player, color) -> renderPlayerOverlay(graphics, player, color));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void renderPlayerOverlay(Graphics2D graphics, Player actor, Color color)
|
|
||||||
{
|
|
||||||
final net.runelite.api.Point minimapLocation = actor.getMinimapLocation();
|
|
||||||
|
|
||||||
if (minimapLocation != null)
|
|
||||||
OverlayUtil.renderTextLocation(graphics, minimapLocation, Integer.toString(actor.getCombatLevel()), color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
package net.runelite.client.plugins.pkvision;
|
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
|
|
||||||
import net.runelite.api.Player;
|
|
||||||
import net.runelite.api.Point;
|
|
||||||
import net.runelite.client.ui.overlay.Overlay;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayPriority;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
|
||||||
|
|
||||||
@Singleton
|
|
||||||
public class PKVisionOverlay extends Overlay
|
|
||||||
{
|
|
||||||
private final PKVisionService pkVisionService;
|
|
||||||
private final PKVisionConfig config;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private PKVisionOverlay(PKVisionConfig config, PKVisionService pkVisionService, PKVisionPlugin pkVisionPlugin)
|
|
||||||
{
|
|
||||||
this.config = config;
|
|
||||||
this.pkVisionService = pkVisionService;
|
|
||||||
setPosition(OverlayPosition.DYNAMIC);
|
|
||||||
setPriority(OverlayPriority.MED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Dimension render(Graphics2D graphics)
|
|
||||||
{
|
|
||||||
pkVisionService.forEachPlayer((player, color) -> renderPlayerOverlay(graphics, player, color));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void renderPlayerOverlay(Graphics2D graphics, Player actor, Color color)
|
|
||||||
{
|
|
||||||
if (!config.drawPlayerNames() && !config.drawPlayerLevels())
|
|
||||||
return;
|
|
||||||
|
|
||||||
String text = "";
|
|
||||||
if (config.drawPlayerLevels())
|
|
||||||
text += "(" + actor.getCombatLevel() + ") ";
|
|
||||||
|
|
||||||
if (config.drawPlayerNames())
|
|
||||||
text += actor.getName().replace('\u00A0', ' ');
|
|
||||||
|
|
||||||
Point textLocation = actor.getCanvasTextLocation(graphics, text, actor.getLogicalHeight() + 40);
|
|
||||||
|
|
||||||
if (textLocation != null)
|
|
||||||
OverlayUtil.renderTextLocation(graphics, textLocation, text, color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,136 +0,0 @@
|
|||||||
package net.runelite.client.plugins.pkvision;
|
|
||||||
|
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
|
||||||
import com.google.inject.Provides;
|
|
||||||
import java.awt.Color;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import net.runelite.api.Client;
|
|
||||||
import static net.runelite.api.MenuAction.*;
|
|
||||||
import net.runelite.api.MenuEntry;
|
|
||||||
import net.runelite.api.Player;
|
|
||||||
import net.runelite.api.events.MenuEntryAdded;
|
|
||||||
import net.runelite.client.config.ConfigManager;
|
|
||||||
import net.runelite.client.plugins.Plugin;
|
|
||||||
import net.runelite.client.plugins.PluginDescriptor;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayManager;
|
|
||||||
import net.runelite.client.util.ColorUtil;
|
|
||||||
import net.runelite.client.util.MiscUtils;
|
|
||||||
import net.runelite.client.util.Text;
|
|
||||||
|
|
||||||
@PluginDescriptor(
|
|
||||||
name = "PK Vision",
|
|
||||||
description = "Highlight players on-screen and/or on the minimap",
|
|
||||||
tags = {"highlight", "minimap", "overlay", "players", "pk", "helper", "vision", "bogla"},
|
|
||||||
enabledByDefault = false,
|
|
||||||
type = "PVP"
|
|
||||||
)
|
|
||||||
public class PKVisionPlugin extends Plugin
|
|
||||||
{
|
|
||||||
@Inject
|
|
||||||
private OverlayManager overlayManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private PKVisionConfig config;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private PKVisionOverlay pkVisionOverlay;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private PKVisionTileOverlay pkVisionTileOverlay;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private PKVisionMinimapOverlay pkVisionMinimapOverlay;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Client client;
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
PKVisionConfig provideConfig(ConfigManager configManager)
|
|
||||||
{
|
|
||||||
return configManager.getConfig(PKVisionConfig.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void startUp() throws Exception
|
|
||||||
{
|
|
||||||
overlayManager.add(pkVisionOverlay);
|
|
||||||
overlayManager.add(pkVisionTileOverlay);
|
|
||||||
overlayManager.add(pkVisionMinimapOverlay);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void shutDown() throws Exception
|
|
||||||
{
|
|
||||||
overlayManager.remove(pkVisionOverlay);
|
|
||||||
overlayManager.remove(pkVisionTileOverlay);
|
|
||||||
overlayManager.remove(pkVisionMinimapOverlay);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onMenuEntryAdded(MenuEntryAdded menuEntryAdded)
|
|
||||||
{
|
|
||||||
int type = menuEntryAdded.getType();
|
|
||||||
String option = Text.removeTags(menuEntryAdded.getOption()).toLowerCase();
|
|
||||||
|
|
||||||
if (type >= 2000)
|
|
||||||
type -= 2000;
|
|
||||||
|
|
||||||
int identifier = menuEntryAdded.getIdentifier();
|
|
||||||
if (type == FOLLOW.getId() || type == TRADE.getId()
|
|
||||||
|| type == ITEM_USE_ON_PLAYER.getId() || type == PLAYER_FIRST_OPTION.getId()
|
|
||||||
|| type == PLAYER_SECOND_OPTION.getId() || type == PLAYER_THIRD_OPTION.getId()
|
|
||||||
|| type == PLAYER_FOURTH_OPTION.getId() || type == PLAYER_FIFTH_OPTION.getId()
|
|
||||||
|| type == PLAYER_SIXTH_OPTION.getId() || type == PLAYER_SEVENTH_OPTION.getId()
|
|
||||||
|| type == PLAYER_EIGTH_OPTION.getId() || type == SPELL_CAST_ON_PLAYER.getId()
|
|
||||||
|| type == RUNELITE.getId())
|
|
||||||
{
|
|
||||||
final Player localPlayer = client.getLocalPlayer();
|
|
||||||
Player[] players = client.getCachedPlayers();
|
|
||||||
Player player = null;
|
|
||||||
|
|
||||||
if (identifier >= 0 && identifier < players.length)
|
|
||||||
player = players[identifier];
|
|
||||||
|
|
||||||
if (player == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Color color = null;
|
|
||||||
|
|
||||||
if (config.highlightFriends() && (player.isFriend() || player.isClanMember()))
|
|
||||||
{
|
|
||||||
color = config.getFriendColor();
|
|
||||||
}
|
|
||||||
else if (!player.isFriend() && !player.isClanMember())
|
|
||||||
{
|
|
||||||
int lvlDelta = player.getCombatLevel() - localPlayer.getCombatLevel();
|
|
||||||
int wildyLvl = MiscUtils.getWildernessLevelFrom(client, player.getWorldLocation());
|
|
||||||
|
|
||||||
if (wildyLvl <= 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
int R = MiscUtils.clamp((int)(((float)(lvlDelta + wildyLvl) / (float)(wildyLvl * 2)) * 255.f), 0, 255);
|
|
||||||
int G = MiscUtils.clamp(255 - R, 0, 255);
|
|
||||||
|
|
||||||
if (Math.abs(lvlDelta) <= wildyLvl)
|
|
||||||
color = Color.getHSBColor(Color.RGBtoHSB(R, G, 0, null)[0], 1.f, 1.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (color != null)
|
|
||||||
{
|
|
||||||
MenuEntry[] menuEntries = client.getMenuEntries();
|
|
||||||
MenuEntry lastEntry = menuEntries[menuEntries.length - 1];
|
|
||||||
|
|
||||||
// strip out existing <col...
|
|
||||||
String target = lastEntry.getTarget();
|
|
||||||
int idx = target.indexOf('>');
|
|
||||||
if (idx != -1)
|
|
||||||
target = target.substring(idx + 1);
|
|
||||||
|
|
||||||
lastEntry.setTarget(ColorUtil.prependColorTag(target, color));
|
|
||||||
|
|
||||||
|
|
||||||
client.setMenuEntries(menuEntries);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
package net.runelite.client.plugins.pkvision;
|
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.util.function.BiConsumer;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import javax.inject.Singleton;
|
|
||||||
import net.runelite.api.Client;
|
|
||||||
import net.runelite.api.Player;
|
|
||||||
import net.runelite.client.util.MiscUtils;
|
|
||||||
|
|
||||||
@Singleton
|
|
||||||
public class PKVisionService
|
|
||||||
{
|
|
||||||
private final Client client;
|
|
||||||
private final PKVisionConfig config;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private PKVisionService(Client client, PKVisionConfig config)
|
|
||||||
{
|
|
||||||
this.config = config;
|
|
||||||
this.client = client;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void forEachPlayer(final BiConsumer<Player, Color> consumer)
|
|
||||||
{
|
|
||||||
final Player localPlayer = client.getLocalPlayer();
|
|
||||||
|
|
||||||
for (Player player : client.getPlayers())
|
|
||||||
{
|
|
||||||
if (player == null || player.getName() == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (player == localPlayer)
|
|
||||||
{
|
|
||||||
if (config.highlightOwnPlayer())
|
|
||||||
consumer.accept(player, config.getOwnPlayerColor());
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.highlightFriends() && (player.isFriend() || player.isClanMember()))
|
|
||||||
{
|
|
||||||
consumer.accept(player, config.getFriendColor());
|
|
||||||
}
|
|
||||||
else if (player != localPlayer && !player.isFriend() && !player.isClanMember())
|
|
||||||
{
|
|
||||||
int lvlDelta = player.getCombatLevel() - localPlayer.getCombatLevel();
|
|
||||||
int wildyLvl = MiscUtils.getWildernessLevelFrom(client, player.getWorldLocation());
|
|
||||||
|
|
||||||
if (wildyLvl <= 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (Math.abs(lvlDelta) > wildyLvl)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
int R = MiscUtils.clamp((int)(((float)(lvlDelta + wildyLvl) / (float)(wildyLvl * 2)) * 255.f), 0, 255);
|
|
||||||
int G = MiscUtils.clamp(255 - R, 0, 255);
|
|
||||||
|
|
||||||
consumer.accept(player, Color.getHSBColor(Color.RGBtoHSB(R, G, 0, null)[0], 1.f, 1.f));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
package net.runelite.client.plugins.pkvision;
|
|
||||||
|
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import java.awt.Polygon;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import net.runelite.client.ui.overlay.Overlay;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayLayer;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayPriority;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
|
||||||
|
|
||||||
public class PKVisionTileOverlay extends Overlay
|
|
||||||
{
|
|
||||||
private final PKVisionService pkVisionService;
|
|
||||||
private final PKVisionConfig config;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private PKVisionTileOverlay(PKVisionConfig config, PKVisionService pkVisionService)
|
|
||||||
{
|
|
||||||
this.config = config;
|
|
||||||
this.pkVisionService = pkVisionService;
|
|
||||||
setLayer(OverlayLayer.ABOVE_SCENE);
|
|
||||||
setPosition(OverlayPosition.DYNAMIC);
|
|
||||||
setPriority(OverlayPriority.MED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Dimension render(Graphics2D graphics)
|
|
||||||
{
|
|
||||||
if (!config.drawTiles())
|
|
||||||
return null;
|
|
||||||
|
|
||||||
pkVisionService.forEachPlayer((player, color) ->
|
|
||||||
{
|
|
||||||
final Polygon poly = player.getCanvasTilePoly();
|
|
||||||
|
|
||||||
if (poly != null)
|
|
||||||
OverlayUtil.renderPolygon(graphics, poly, color);
|
|
||||||
});
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user