Update all overlays to support new PanelComponent

- Move all PanelComponents declarations to be persisted
- Use new LineComponent and ImageComponent classes and add them to
PanelComponent

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2018-05-06 19:58:31 +02:00
parent fa9e05f0a6
commit 7e45dfd7f2
28 changed files with 690 additions and 251 deletions

View File

@@ -32,6 +32,7 @@ import javax.inject.Inject;
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.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
public class LapCounterOverlay extends Overlay
@@ -73,19 +74,18 @@ public class LapCounterOverlay extends Overlay
return null;
}
panelComponent.getLines().clear();
panelComponent.getLines().add(new PanelComponent.Line(
"Total Laps",
Integer.toString(session.getTotalLaps())
));
panelComponent.getChildren().clear();
panelComponent.getChildren().add(LineComponent.builder()
.left("Total Laps")
.right(Integer.toString(session.getTotalLaps()))
.build());
if (session.getLapsTillLevel() > 0)
{
panelComponent.getLines().add(new PanelComponent.Line(
"Laps till level",
Integer.toString(session.getLapsTillLevel())
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Laps till level")
.right(Integer.toString(session.getLapsTillLevel()))
.build());
}
return panelComponent.render(graphics);

View File

@@ -34,8 +34,6 @@ import net.runelite.client.ui.overlay.components.PanelComponent;
public class AttackStylesOverlay extends Overlay
{
private static final int COMPONENT_WIDTH = 80;
private final AttackStylesPlugin plugin;
private final AttackStylesConfig config;
private final PanelComponent panelComponent = new PanelComponent();
@@ -56,10 +54,11 @@ public class AttackStylesOverlay extends Overlay
if (warnedSkillSelected || config.alwaysShowStyle())
{
final String attackStyleString = plugin.getAttackStyle().getName();
panelComponent.setTitleColor(warnedSkillSelected ? Color.RED : Color.WHITE);
panelComponent.setTitle(attackStyleString);
panelComponent.setWidth(COMPONENT_WIDTH);
panelComponent.setPreferredSize(new Dimension(
graphics.getFontMetrics().stringWidth(attackStyleString) + 10,
0));
return panelComponent.render(graphics);
}

View File

@@ -34,6 +34,7 @@ import net.runelite.api.widgets.WidgetInfo;
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.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
public class BarrowsBrotherSlainOverlay extends Overlay
@@ -66,17 +67,16 @@ public class BarrowsBrotherSlainOverlay extends Overlay
barrowsBrothers.setHidden(true);
}
panelComponent.getLines().clear();
panelComponent.getChildren().clear();
for (BarrowsBrothers brother : BarrowsBrothers.values())
{
String slain = client.getVar(brother.getKilledVarbit()) > 0 ? "" : "";
panelComponent.getLines().add(new PanelComponent.Line(
brother.getName(),
Color.WHITE,
slain,
slain.isEmpty() ? Color.WHITE : Color.GREEN
));
panelComponent.getChildren().add(LineComponent.builder()
.left(brother.getName())
.right(slain)
.rightColor(slain.isEmpty() ? Color.WHITE : Color.GREEN)
.build());
}
return panelComponent.render(graphics);

View File

@@ -33,6 +33,7 @@ import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
import net.runelite.client.util.StackFormatter;
@@ -60,17 +61,18 @@ class BlastFurnaceCofferOverlay extends Overlay
Widget sack = client.getWidget(WidgetInfo.BLAST_FURNACE_COFFER);
panelComponent.getLines().clear();
panelComponent.getChildren().clear();
if (sack != null)
{
sack.setHidden(true);
panelComponent.getLines().add(new PanelComponent.Line(
"Coffer:",
StackFormatter.quantityToStackSize(client.getVar(BLAST_FURNACE_COFFER)) + " gp"
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Coffer:")
.right(StackFormatter.quantityToStackSize(client.getVar(BLAST_FURNACE_COFFER)) + " gp")
.build());
}
return panelComponent.render(graphics);
}
}

View File

@@ -32,13 +32,14 @@ import net.runelite.api.Client;
import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.ImagePanelComponent;
import net.runelite.client.ui.overlay.components.ImageComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
class BlastFurnaceOverlay extends Overlay
{
private final Client client;
private final BlastFurnacePlugin plugin;
private final ImagePanelComponent imagePanelComponent = new ImagePanelComponent();
private final PanelComponent imagePanelComponent = new PanelComponent();
@Inject
private ItemManager itemManager;
@@ -49,6 +50,7 @@ class BlastFurnaceOverlay extends Overlay
setPosition(OverlayPosition.TOP_LEFT);
this.plugin = plugin;
this.client = client;
imagePanelComponent.setOrientation(PanelComponent.Orientation.HORIZONTAL);
}
@Override
@@ -59,7 +61,7 @@ class BlastFurnaceOverlay extends Overlay
return null;
}
imagePanelComponent.getImages().clear();
imagePanelComponent.getChildren().clear();
for (BarsOres varbit : BarsOres.values())
{
@@ -70,7 +72,7 @@ class BlastFurnaceOverlay extends Overlay
continue;
}
imagePanelComponent.getImages().add(getImage(varbit.getItemID(), amount));
imagePanelComponent.getChildren().add(new ImageComponent(getImage(varbit.getItemID(), amount)));
}
return imagePanelComponent.render(graphics);

View File

@@ -36,6 +36,7 @@ import net.runelite.client.game.SkillIconManager;
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.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
@@ -47,6 +48,7 @@ class BoostsOverlay extends Overlay
private final Client client;
private final BoostsConfig config;
private final InfoBoxManager infoBoxManager;
private final PanelComponent panelComponent = new PanelComponent();
@Inject
private BoostsPlugin plugin;
@@ -54,8 +56,6 @@ class BoostsOverlay extends Overlay
@Inject
private SkillIconManager iconManager;
private PanelComponent panelComponent;
private boolean overlayActive;
@Inject
@@ -71,9 +71,9 @@ class BoostsOverlay extends Overlay
@Override
public Dimension render(Graphics2D graphics)
{
panelComponent = new PanelComponent();
Instant lastChange = plugin.getLastChange();
panelComponent.getChildren().clear();
if (!config.displayIndicators()
&& config.displayNextChange()
&& lastChange != null
@@ -82,12 +82,10 @@ class BoostsOverlay extends Overlay
int nextChange = plugin.getChangeTime();
if (nextChange > 0)
{
panelComponent.getLines().add(new PanelComponent.Line(
"Next change in",
Color.WHITE,
String.valueOf(nextChange),
Color.WHITE
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Next change in")
.right(String.valueOf(nextChange))
.build());
}
}
@@ -148,16 +146,15 @@ class BoostsOverlay extends Overlay
}
}
panelComponent.getLines().add(new PanelComponent.Line(
skill.getName(),
Color.WHITE,
str,
strColor
));
panelComponent.getChildren().add(LineComponent.builder()
.left(skill.getName())
.right(str)
.rightColor(strColor)
.build());
}
}
return panelComponent.getLines().isEmpty() ? null : panelComponent.render(graphics);
return panelComponent.render(graphics);
}
private Color getTextColor(int boost)

View File

@@ -32,7 +32,8 @@ import lombok.extern.slf4j.Slf4j;
import net.runelite.client.game.SkillIconManager;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.ImagePanelComponent;
import net.runelite.client.ui.overlay.components.ImageComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
@Slf4j
@Singleton
@@ -40,6 +41,7 @@ public class CerberusOverlay extends Overlay
{
private final CerberusPlugin plugin;
private final SkillIconManager iconManager;
private final PanelComponent panelComponent = new PanelComponent();
@Inject
CerberusOverlay(final CerberusPlugin plugin, final SkillIconManager iconManager)
@@ -57,8 +59,9 @@ public class CerberusOverlay extends Overlay
return null;
}
final ImagePanelComponent imagePanelComponent = new ImagePanelComponent();
imagePanelComponent.setTitle("Ghost order");
panelComponent.getChildren().clear();
panelComponent.setOrientation(PanelComponent.Orientation.HORIZONTAL);
panelComponent.setTitle("Ghost order");
// Ghosts are already sorted
plugin.getGhosts().stream()
@@ -66,11 +69,11 @@ public class CerberusOverlay extends Overlay
.limit(CerberusGhost.values().length)
.forEach(npc -> CerberusGhost
.fromNPC(npc)
.ifPresent(ghost -> imagePanelComponent
.getImages()
.add(iconManager.getSkillImage(ghost.getType()))));
.ifPresent(ghost -> panelComponent
.getChildren()
.add(new ImageComponent(iconManager.getSkillImage(ghost.getType())))));
return imagePanelComponent.render(graphics);
return panelComponent.render(graphics);
}
}

View File

@@ -59,7 +59,7 @@ public class ClueScrollOverlay extends Overlay
return null;
}
panelComponent.getLines().clear();
panelComponent.getChildren().clear();
clue.makeOverlayHint(panelComponent, plugin);

View File

@@ -36,6 +36,7 @@ import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
import static net.runelite.client.plugins.cluescrolls.ClueScrollPlugin.CLUE_SCROLL_IMAGE;
import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET;
import net.runelite.client.ui.overlay.OverlayUtil;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
@Getter
@@ -167,18 +168,25 @@ public class AnagramClue extends ClueScroll implements TextClueScroll, NpcClueSc
public void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin)
{
panelComponent.setTitle("Anagram Clue");
panelComponent.setWidth(150);
panelComponent.getChildren().add(LineComponent.builder().left("NPC:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(getNpc())
.leftColor(TITLED_CONTENT_COLOR)
.build());
panelComponent.getLines().add(new PanelComponent.Line("NPC:"));
panelComponent.getLines().add(new PanelComponent.Line(getNpc(), TITLED_CONTENT_COLOR));
panelComponent.getLines().add(new PanelComponent.Line("Area:"));
panelComponent.getLines().add(new PanelComponent.Line(true, getArea(), TITLED_CONTENT_COLOR));
panelComponent.getChildren().add(LineComponent.builder().left("Area:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(getArea())
.leftColor(TITLED_CONTENT_COLOR)
.build());
if (getAnswer() != null)
{
panelComponent.getLines().add(new PanelComponent.Line("Answer:"));
panelComponent.getLines().add(new PanelComponent.Line(true, getAnswer(), TITLED_CONTENT_COLOR));
panelComponent.getChildren().add(LineComponent.builder().left("Answer:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(getAnswer())
.leftColor(TITLED_CONTENT_COLOR)
.build());
}
}

View File

@@ -36,6 +36,7 @@ import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
import static net.runelite.client.plugins.cluescrolls.ClueScrollPlugin.CLUE_SCROLL_IMAGE;
import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET;
import net.runelite.client.ui.overlay.OverlayUtil;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
@Getter
@@ -76,18 +77,25 @@ public class CipherClue extends ClueScroll implements TextClueScroll, NpcClueScr
public void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin)
{
panelComponent.setTitle("Cipher Clue");
panelComponent.setWidth(150);
panelComponent.getChildren().add(LineComponent.builder().left("NPC:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(getNpc())
.leftColor(TITLED_CONTENT_COLOR)
.build());
panelComponent.getLines().add(new PanelComponent.Line("NPC:"));
panelComponent.getLines().add(new PanelComponent.Line(getNpc(), TITLED_CONTENT_COLOR));
panelComponent.getLines().add(new PanelComponent.Line("Area:"));
panelComponent.getLines().add(new PanelComponent.Line(true, getArea(), TITLED_CONTENT_COLOR));
panelComponent.getChildren().add(LineComponent.builder().left("Area:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(getArea())
.leftColor(TITLED_CONTENT_COLOR)
.build());
if (getAnswer() != null)
{
panelComponent.getLines().add(new PanelComponent.Line("Answer:"));
panelComponent.getLines().add(new PanelComponent.Line(true, getAnswer(), TITLED_CONTENT_COLOR));
panelComponent.getChildren().add(LineComponent.builder().left("Answer:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(getAnswer())
.leftColor(TITLED_CONTENT_COLOR)
.build());
}
}

View File

@@ -33,6 +33,7 @@ import net.runelite.api.coords.WorldPoint;
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
import static net.runelite.client.plugins.cluescrolls.ClueScrollPlugin.SPADE_IMAGE;
import net.runelite.client.ui.overlay.OverlayUtil;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
@Getter
@@ -46,12 +47,9 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati
public void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin)
{
panelComponent.setTitle("Coordinate Clue");
panelComponent.setWidth(135);
panelComponent.getLines().add(new PanelComponent.Line("Travel to the marked"));
panelComponent.getLines().add(new PanelComponent.Line("out destination to see"));
panelComponent.getLines().add(new PanelComponent.Line("a marker for where"));
panelComponent.getLines().add(new PanelComponent.Line("you should dig."));
panelComponent.getChildren().add(LineComponent.builder()
.left("Travel to the marked out destination to see a marker for where you should dig.")
.build());
}
@Override

View File

@@ -44,6 +44,7 @@ import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.CLI
import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.CLICKBOX_HOVER_BORDER_COLOR;
import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET;
import net.runelite.client.ui.overlay.OverlayUtil;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
@Getter
@@ -338,15 +339,19 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
public void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin)
{
panelComponent.setTitle("Cryptic Clue");
panelComponent.setWidth(150);
panelComponent.getLines().add(new PanelComponent.Line("Clue:"));
panelComponent.getLines().add(new PanelComponent.Line(true, getText(), TITLED_CONTENT_COLOR));
panelComponent.getChildren().add(LineComponent.builder().left("Clue:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(getText())
.leftColor(TITLED_CONTENT_COLOR)
.build());
if (getNpc() != null)
{
panelComponent.getLines().add(new PanelComponent.Line("NPC:"));
panelComponent.getLines().add(new PanelComponent.Line(getNpc(), TITLED_CONTENT_COLOR));
panelComponent.getChildren().add(LineComponent.builder().left("NPC:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(getNpc())
.leftColor(TITLED_CONTENT_COLOR)
.build());
}
if (objectId != -1)
@@ -355,13 +360,19 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
if (object != null)
{
panelComponent.getLines().add(new PanelComponent.Line("Object:"));
panelComponent.getLines().add(new PanelComponent.Line(object.getName(), TITLED_CONTENT_COLOR));
panelComponent.getChildren().add(LineComponent.builder().left("Object:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(object.getName())
.leftColor(TITLED_CONTENT_COLOR)
.build());
}
}
panelComponent.getLines().add(new PanelComponent.Line("Solution:"));
panelComponent.getLines().add(new PanelComponent.Line(true, getSolution(), TITLED_CONTENT_COLOR));
panelComponent.getChildren().add(LineComponent.builder().left("Solution:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(getSolution())
.leftColor(TITLED_CONTENT_COLOR)
.build());
}
@Override

View File

@@ -41,7 +41,336 @@ import static net.runelite.api.EquipmentInventorySlot.RING;
import static net.runelite.api.EquipmentInventorySlot.SHIELD;
import static net.runelite.api.EquipmentInventorySlot.WEAPON;
import net.runelite.api.Item;
import static net.runelite.api.ItemID.*;
import static net.runelite.api.ItemID.ABYSSAL_WHIP;
import static net.runelite.api.ItemID.ADAMANT_2H_SWORD;
import static net.runelite.api.ItemID.ADAMANT_BOOTS;
import static net.runelite.api.ItemID.ADAMANT_DAGGER;
import static net.runelite.api.ItemID.ADAMANT_FULL_HELM;
import static net.runelite.api.ItemID.ADAMANT_HALBERD;
import static net.runelite.api.ItemID.ADAMANT_MED_HELM;
import static net.runelite.api.ItemID.ADAMANT_PLATEBODY;
import static net.runelite.api.ItemID.ADAMANT_PLATELEGS;
import static net.runelite.api.ItemID.ADAMANT_PLATESKIRT;
import static net.runelite.api.ItemID.ADAMANT_SQ_SHIELD;
import static net.runelite.api.ItemID.ADAMANT_SWORD;
import static net.runelite.api.ItemID.AHRIMS_HOOD_0;
import static net.runelite.api.ItemID.AHRIMS_HOOD_100;
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_0;
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_100;
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_0;
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_100;
import static net.runelite.api.ItemID.AHRIMS_STAFF_0;
import static net.runelite.api.ItemID.AHRIMS_STAFF_100;
import static net.runelite.api.ItemID.AIR_TIARA;
import static net.runelite.api.ItemID.AMULET_OF_GLORY;
import static net.runelite.api.ItemID.AMULET_OF_GLORY1;
import static net.runelite.api.ItemID.AMULET_OF_GLORY2;
import static net.runelite.api.ItemID.AMULET_OF_GLORY3;
import static net.runelite.api.ItemID.AMULET_OF_GLORY4;
import static net.runelite.api.ItemID.AMULET_OF_GLORY5;
import static net.runelite.api.ItemID.AMULET_OF_GLORY6;
import static net.runelite.api.ItemID.AMULET_OF_POWER;
import static net.runelite.api.ItemID.AMULET_OF_STRENGTH;
import static net.runelite.api.ItemID.AMULET_OF_THE_DAMNED;
import static net.runelite.api.ItemID.ANCIENT_CROZIER;
import static net.runelite.api.ItemID.ANCIENT_MITRE;
import static net.runelite.api.ItemID.ANCIENT_STOLE;
import static net.runelite.api.ItemID.ARCLIGHT;
import static net.runelite.api.ItemID.ARMADYL_CROZIER;
import static net.runelite.api.ItemID.ARMADYL_MITRE;
import static net.runelite.api.ItemID.ARMADYL_STOLE;
import static net.runelite.api.ItemID.BANDOS_BOOTS;
import static net.runelite.api.ItemID.BANDOS_CLOAK;
import static net.runelite.api.ItemID.BANDOS_CROZIER;
import static net.runelite.api.ItemID.BANDOS_GODSWORD;
import static net.runelite.api.ItemID.BANDOS_MITRE;
import static net.runelite.api.ItemID.BANDOS_PLATEBODY;
import static net.runelite.api.ItemID.BANDOS_STOLE;
import static net.runelite.api.ItemID.BARROWS_GLOVES;
import static net.runelite.api.ItemID.BLACK_AXE;
import static net.runelite.api.ItemID.BLACK_BOATER;
import static net.runelite.api.ItemID.BLACK_CAPE;
import static net.runelite.api.ItemID.BLACK_DHIDE_BODY;
import static net.runelite.api.ItemID.BLACK_DHIDE_CHAPS;
import static net.runelite.api.ItemID.BLACK_DHIDE_VAMB;
import static net.runelite.api.ItemID.BLACK_DRAGON_MASK;
import static net.runelite.api.ItemID.BLACK_PLATEBODY;
import static net.runelite.api.ItemID.BLACK_SALAMANDER;
import static net.runelite.api.ItemID.BLACK_SLAYER_HELMET;
import static net.runelite.api.ItemID.BLACK_SLAYER_HELMET_I;
import static net.runelite.api.ItemID.BLUE_BOATER;
import static net.runelite.api.ItemID.BLUE_BOOTS;
import static net.runelite.api.ItemID.BLUE_DHIDE_BODY;
import static net.runelite.api.ItemID.BLUE_DHIDE_CHAPS;
import static net.runelite.api.ItemID.BLUE_DHIDE_VAMB;
import static net.runelite.api.ItemID.BLUE_ROBE_TOP;
import static net.runelite.api.ItemID.BLUE_WIZARD_HAT;
import static net.runelite.api.ItemID.BOBS_PURPLE_SHIRT;
import static net.runelite.api.ItemID.BOBS_RED_SHIRT;
import static net.runelite.api.ItemID.BODY_TIARA;
import static net.runelite.api.ItemID.BONE_DAGGER;
import static net.runelite.api.ItemID.BONE_SPEAR;
import static net.runelite.api.ItemID.BOOK_OF_BALANCE;
import static net.runelite.api.ItemID.BOOK_OF_DARKNESS;
import static net.runelite.api.ItemID.BOOK_OF_LAW;
import static net.runelite.api.ItemID.BOOK_OF_WAR;
import static net.runelite.api.ItemID.BRINE_SABRE;
import static net.runelite.api.ItemID.BRONZE_2H_SWORD;
import static net.runelite.api.ItemID.BRONZE_AXE;
import static net.runelite.api.ItemID.BRONZE_CHAINBODY;
import static net.runelite.api.ItemID.BRONZE_DAGGER;
import static net.runelite.api.ItemID.BRONZE_FULL_HELM;
import static net.runelite.api.ItemID.BRONZE_PLATELEGS;
import static net.runelite.api.ItemID.BRONZE_SPEAR;
import static net.runelite.api.ItemID.BRONZE_SQ_SHIELD;
import static net.runelite.api.ItemID.BROWN_APRON;
import static net.runelite.api.ItemID.BROWN_HEADBAND;
import static net.runelite.api.ItemID.BRUISE_BLUE_SNELM_3343;
import static net.runelite.api.ItemID.CAPE_OF_LEGENDS;
import static net.runelite.api.ItemID.CASTLE_WARS_BRACELET3;
import static net.runelite.api.ItemID.CLIMBING_BOOTS;
import static net.runelite.api.ItemID.COIF;
import static net.runelite.api.ItemID.COMBAT_BRACELET;
import static net.runelite.api.ItemID.CREAM_ROBE_TOP;
import static net.runelite.api.ItemID.DEATH_TIARA;
import static net.runelite.api.ItemID.DESERT_SHIRT;
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_0;
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_100;
import static net.runelite.api.ItemID.DHAROKS_HELM_0;
import static net.runelite.api.ItemID.DHAROKS_HELM_100;
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_0;
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_100;
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_0;
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_100;
import static net.runelite.api.ItemID.DIAMOND_BRACELET;
import static net.runelite.api.ItemID.DIAMOND_RING;
import static net.runelite.api.ItemID.DRAGONSTONE_AMULET;
import static net.runelite.api.ItemID.DRAGONSTONE_RING;
import static net.runelite.api.ItemID.DRAGON_2H_SWORD;
import static net.runelite.api.ItemID.DRAGON_AXE;
import static net.runelite.api.ItemID.DRAGON_BATTLEAXE;
import static net.runelite.api.ItemID.DRAGON_BOOTS;
import static net.runelite.api.ItemID.DRAGON_CHAINBODY_3140;
import static net.runelite.api.ItemID.DRAGON_DEFENDER;
import static net.runelite.api.ItemID.DRAGON_MED_HELM;
import static net.runelite.api.ItemID.DRAGON_NECKLACE;
import static net.runelite.api.ItemID.DRAGON_PICKAXE;
import static net.runelite.api.ItemID.DRAGON_PLATESKIRT;
import static net.runelite.api.ItemID.DRAGON_SPEAR;
import static net.runelite.api.ItemID.DRAGON_SQ_SHIELD;
import static net.runelite.api.ItemID.EARTH_RUNE;
import static net.runelite.api.ItemID.ELEMENTAL_SHIELD;
import static net.runelite.api.ItemID.EMERALD_AMULET;
import static net.runelite.api.ItemID.EMERALD_RING;
import static net.runelite.api.ItemID.FIRE_BATTLESTAFF;
import static net.runelite.api.ItemID.FIRE_CAPE;
import static net.runelite.api.ItemID.FLARED_TROUSERS;
import static net.runelite.api.ItemID.GOLD_NECKLACE;
import static net.runelite.api.ItemID.GOLD_RING;
import static net.runelite.api.ItemID.GRANITE_SHIELD;
import static net.runelite.api.ItemID.GREEN_BOATER;
import static net.runelite.api.ItemID.GREEN_BOOTS;
import static net.runelite.api.ItemID.GREEN_DHIDE_BODY;
import static net.runelite.api.ItemID.GREEN_DHIDE_CHAPS;
import static net.runelite.api.ItemID.GREEN_HAT;
import static net.runelite.api.ItemID.GREEN_HEADBAND;
import static net.runelite.api.ItemID.GREEN_ROBE_BOTTOMS;
import static net.runelite.api.ItemID.GREEN_ROBE_TOP;
import static net.runelite.api.ItemID.GREEN_SLAYER_HELMET;
import static net.runelite.api.ItemID.GREEN_SLAYER_HELMET_I;
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_0;
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_100;
import static net.runelite.api.ItemID.GUTHANS_HELM_0;
import static net.runelite.api.ItemID.GUTHANS_HELM_100;
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_0;
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_100;
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_0;
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_100;
import static net.runelite.api.ItemID.GUTHIX_MITRE;
import static net.runelite.api.ItemID.GUTHIX_STOLE;
import static net.runelite.api.ItemID.HAM_BOOTS;
import static net.runelite.api.ItemID.HAM_ROBE;
import static net.runelite.api.ItemID.HARDLEATHER_BODY;
import static net.runelite.api.ItemID.HELM_OF_NEITIZNOT;
import static net.runelite.api.ItemID.HOLY_BOOK;
import static net.runelite.api.ItemID.IBANS_STAFF;
import static net.runelite.api.ItemID.IBANS_STAFF_U;
import static net.runelite.api.ItemID.IRON_2H_SWORD;
import static net.runelite.api.ItemID.IRON_CHAINBODY;
import static net.runelite.api.ItemID.IRON_FULL_HELM;
import static net.runelite.api.ItemID.IRON_KITESHIELD;
import static net.runelite.api.ItemID.IRON_MED_HELM;
import static net.runelite.api.ItemID.IRON_PICKAXE;
import static net.runelite.api.ItemID.IRON_PLATEBODY;
import static net.runelite.api.ItemID.IRON_PLATELEGS;
import static net.runelite.api.ItemID.IRON_PLATESKIRT;
import static net.runelite.api.ItemID.IRON_SCIMITAR;
import static net.runelite.api.ItemID.IRON_WARHAMMER;
import static net.runelite.api.ItemID.KARILS_COIF_0;
import static net.runelite.api.ItemID.KARILS_COIF_100;
import static net.runelite.api.ItemID.KARILS_CROSSBOW_0;
import static net.runelite.api.ItemID.KARILS_CROSSBOW_100;
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_0;
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_100;
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_0;
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_100;
import static net.runelite.api.ItemID.LAVA_BATTLESTAFF;
import static net.runelite.api.ItemID.LEATHER_BOOTS;
import static net.runelite.api.ItemID.LEATHER_CHAPS;
import static net.runelite.api.ItemID.LEATHER_COWL;
import static net.runelite.api.ItemID.LEATHER_GLOVES;
import static net.runelite.api.ItemID.LONGBOW;
import static net.runelite.api.ItemID.MAGIC_LONGBOW;
import static net.runelite.api.ItemID.MAPLE_LONGBOW;
import static net.runelite.api.ItemID.MAPLE_SHORTBOW;
import static net.runelite.api.ItemID.MENAPHITE_PURPLE_HAT;
import static net.runelite.api.ItemID.MENAPHITE_PURPLE_ROBE;
import static net.runelite.api.ItemID.MENAPHITE_PURPLE_TOP;
import static net.runelite.api.ItemID.MIND_SHIELD;
import static net.runelite.api.ItemID.MITHRIL_CHAINBODY;
import static net.runelite.api.ItemID.MITHRIL_FULL_HELM;
import static net.runelite.api.ItemID.MITHRIL_MED_HELM;
import static net.runelite.api.ItemID.MITHRIL_PICKAXE;
import static net.runelite.api.ItemID.MITHRIL_PLATEBODY;
import static net.runelite.api.ItemID.MITHRIL_PLATELEGS;
import static net.runelite.api.ItemID.MITHRIL_PLATESKIRT;
import static net.runelite.api.ItemID.MITHRIL_SCIMITAR;
import static net.runelite.api.ItemID.MYSTIC_FIRE_STAFF;
import static net.runelite.api.ItemID.MYSTIC_GLOVES;
import static net.runelite.api.ItemID.MYSTIC_HAT;
import static net.runelite.api.ItemID.MYSTIC_ROBE_BOTTOM;
import static net.runelite.api.ItemID.MYSTIC_ROBE_BOTTOM_DARK;
import static net.runelite.api.ItemID.MYSTIC_ROBE_TOP;
import static net.runelite.api.ItemID.MYSTIC_ROBE_TOP_DARK;
import static net.runelite.api.ItemID.NEW_CRYSTAL_BOW_I;
import static net.runelite.api.ItemID.OAK_LONGBOW;
import static net.runelite.api.ItemID.OAK_SHORTBOW;
import static net.runelite.api.ItemID.OBSIDIAN_CAPE;
import static net.runelite.api.ItemID.ORANGE_BOATER;
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_3;
import static net.runelite.api.ItemID.PINK_BOATER;
import static net.runelite.api.ItemID.PINK_ROBE_TOP;
import static net.runelite.api.ItemID.PINK_SKIRT;
import static net.runelite.api.ItemID.PIRATE_BANDANA;
import static net.runelite.api.ItemID.PIRATE_BANDANA_7124;
import static net.runelite.api.ItemID.PIRATE_BANDANA_7130;
import static net.runelite.api.ItemID.PIRATE_BANDANA_7136;
import static net.runelite.api.ItemID.PROSELYTE_HAUBERK;
import static net.runelite.api.ItemID.PURPLE_BOATER;
import static net.runelite.api.ItemID.PURPLE_GLOVES;
import static net.runelite.api.ItemID.PURPLE_SLAYER_HELMET;
import static net.runelite.api.ItemID.PURPLE_SLAYER_HELMET_I;
import static net.runelite.api.ItemID.RED_BOATER;
import static net.runelite.api.ItemID.RED_DHIDE_CHAPS;
import static net.runelite.api.ItemID.RED_HEADBAND;
import static net.runelite.api.ItemID.RED_SLAYER_HELMET;
import static net.runelite.api.ItemID.RED_SLAYER_HELMET_I;
import static net.runelite.api.ItemID.RING_OF_DUELING1;
import static net.runelite.api.ItemID.RING_OF_DUELING2;
import static net.runelite.api.ItemID.RING_OF_DUELING3;
import static net.runelite.api.ItemID.RING_OF_DUELING4;
import static net.runelite.api.ItemID.RING_OF_DUELING5;
import static net.runelite.api.ItemID.RING_OF_DUELING6;
import static net.runelite.api.ItemID.RING_OF_DUELING7;
import static net.runelite.api.ItemID.RING_OF_DUELING8;
import static net.runelite.api.ItemID.RING_OF_FORGING;
import static net.runelite.api.ItemID.RING_OF_LIFE;
import static net.runelite.api.ItemID.RING_OF_WEALTH;
import static net.runelite.api.ItemID.RING_OF_WEALTH_1;
import static net.runelite.api.ItemID.RING_OF_WEALTH_2;
import static net.runelite.api.ItemID.RING_OF_WEALTH_3;
import static net.runelite.api.ItemID.RING_OF_WEALTH_4;
import static net.runelite.api.ItemID.RING_OF_WEALTH_5;
import static net.runelite.api.ItemID.ROLLING_PIN;
import static net.runelite.api.ItemID.RUBY_AMULET;
import static net.runelite.api.ItemID.RUBY_RING;
import static net.runelite.api.ItemID.RUNE_AXE;
import static net.runelite.api.ItemID.RUNE_BOOTS;
import static net.runelite.api.ItemID.RUNE_CROSSBOW;
import static net.runelite.api.ItemID.RUNE_FULL_HELM;
import static net.runelite.api.ItemID.RUNE_HALBERD;
import static net.runelite.api.ItemID.RUNE_HELM_H1;
import static net.runelite.api.ItemID.RUNE_HELM_H5;
import static net.runelite.api.ItemID.RUNE_KITESHIELD;
import static net.runelite.api.ItemID.RUNE_LONGSWORD;
import static net.runelite.api.ItemID.RUNE_PICKAXE;
import static net.runelite.api.ItemID.RUNE_PLATEBODY;
import static net.runelite.api.ItemID.RUNE_PLATELEGS;
import static net.runelite.api.ItemID.RUNE_PLATESKIRT;
import static net.runelite.api.ItemID.RUNE_SHIELD_H1;
import static net.runelite.api.ItemID.RUNE_SHIELD_H2;
import static net.runelite.api.ItemID.RUNE_SHIELD_H3;
import static net.runelite.api.ItemID.RUNE_SHIELD_H4;
import static net.runelite.api.ItemID.RUNE_SHIELD_H5;
import static net.runelite.api.ItemID.RUNE_SPEAR;
import static net.runelite.api.ItemID.RUNE_WARHAMMER;
import static net.runelite.api.ItemID.SAPPHIRE_AMULET;
import static net.runelite.api.ItemID.SAPPHIRE_NECKLACE;
import static net.runelite.api.ItemID.SAPPHIRE_RING;
import static net.runelite.api.ItemID.SARADOMIN_CROZIER;
import static net.runelite.api.ItemID.SARADOMIN_MITRE;
import static net.runelite.api.ItemID.SARADOMIN_STOLE;
import static net.runelite.api.ItemID.SEERCULL;
import static net.runelite.api.ItemID.SHADOW_SWORD;
import static net.runelite.api.ItemID.SILVER_SICKLE;
import static net.runelite.api.ItemID.SLAYER_HELMET;
import static net.runelite.api.ItemID.SLAYER_HELMET_I;
import static net.runelite.api.ItemID.SLED_4084;
import static net.runelite.api.ItemID.SNAKESKIN_BOOTS;
import static net.runelite.api.ItemID.SNAKESKIN_CHAPS;
import static net.runelite.api.ItemID.SPINED_CHAPS;
import static net.runelite.api.ItemID.SPLITBARK_BODY;
import static net.runelite.api.ItemID.SPLITBARK_LEGS;
import static net.runelite.api.ItemID.SPOTTED_CAPE;
import static net.runelite.api.ItemID.SPOTTED_CAPE_10073;
import static net.runelite.api.ItemID.STAFF;
import static net.runelite.api.ItemID.STAFF_OF_AIR;
import static net.runelite.api.ItemID.STAFF_OF_WATER;
import static net.runelite.api.ItemID.STEEL_AXE;
import static net.runelite.api.ItemID.STEEL_FULL_HELM;
import static net.runelite.api.ItemID.STEEL_KITESHIELD;
import static net.runelite.api.ItemID.STEEL_LONGSWORD;
import static net.runelite.api.ItemID.STEEL_MACE;
import static net.runelite.api.ItemID.STEEL_MED_HELM;
import static net.runelite.api.ItemID.STEEL_PICKAXE;
import static net.runelite.api.ItemID.STEEL_PLATEBODY;
import static net.runelite.api.ItemID.STEEL_PLATESKIRT;
import static net.runelite.api.ItemID.STEEL_SQ_SHIELD;
import static net.runelite.api.ItemID.STUDDED_BODY;
import static net.runelite.api.ItemID.STUDDED_CHAPS;
import static net.runelite.api.ItemID.TEAM1_CAPE;
import static net.runelite.api.ItemID.TEAM50_CAPE;
import static net.runelite.api.ItemID.TIARA;
import static net.runelite.api.ItemID.TOKTZKETXIL;
import static net.runelite.api.ItemID.TOKTZXILUL;
import static net.runelite.api.ItemID.TORAGS_HAMMERS_0;
import static net.runelite.api.ItemID.TORAGS_HAMMERS_100;
import static net.runelite.api.ItemID.TORAGS_HELM_0;
import static net.runelite.api.ItemID.TORAGS_HELM_100;
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_0;
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_100;
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_0;
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_100;
import static net.runelite.api.ItemID.TURQUOISE_ROBE_BOTTOMS;
import static net.runelite.api.ItemID.TURQUOISE_SLAYER_HELMET;
import static net.runelite.api.ItemID.TURQUOISE_SLAYER_HELMET_I;
import static net.runelite.api.ItemID.UNHOLY_BOOK;
import static net.runelite.api.ItemID.VERACS_BRASSARD_0;
import static net.runelite.api.ItemID.VERACS_BRASSARD_100;
import static net.runelite.api.ItemID.VERACS_FLAIL_0;
import static net.runelite.api.ItemID.VERACS_FLAIL_100;
import static net.runelite.api.ItemID.VERACS_HELM_0;
import static net.runelite.api.ItemID.VERACS_HELM_100;
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_0;
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_100;
import static net.runelite.api.ItemID.WHITE_APRON;
import static net.runelite.api.ItemID.WHITE_BOATER;
import static net.runelite.api.ItemID.WHITE_HEADBAND;
import static net.runelite.api.ItemID.ZAMORAK_CROZIER;
import static net.runelite.api.ItemID.ZAMORAK_FULL_HELM;
import static net.runelite.api.ItemID.ZAMORAK_GODSWORD;
import static net.runelite.api.ItemID.ZAMORAK_MITRE;
import static net.runelite.api.ItemID.ZAMORAK_STOLE;
import net.runelite.api.coords.LocalPoint;
import net.runelite.api.coords.WorldPoint;
import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR;
@@ -50,13 +379,40 @@ import static net.runelite.client.plugins.cluescrolls.ClueScrollPlugin.EMOTE_IMA
import net.runelite.client.plugins.cluescrolls.clues.emote.AllRequirementsCollection;
import net.runelite.client.plugins.cluescrolls.clues.emote.AnyRequirementCollection;
import net.runelite.client.plugins.cluescrolls.clues.emote.Emote;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.*;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.ANGRY;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.BECKON;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.BLOW_KISS;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.BOW;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.BULL_ROARER;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.CHEER;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.CLAP;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.CRY;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.DANCE;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.FLAP;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.GOBLIN_SALUTE;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.HEADBANG;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.JIG;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.JUMP_FOR_JOY;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.LAUGH;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.NO;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.PANIC;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.PUSH_UP;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.RASPBERRY;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.SALUTE;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.SHRUG;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.SLAP_HEAD;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.SPIN;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.STOMP;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.THINK;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.WAVE;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.YAWN;
import static net.runelite.client.plugins.cluescrolls.clues.emote.Emote.YES;
import net.runelite.client.plugins.cluescrolls.clues.emote.ItemRequirement;
import net.runelite.client.plugins.cluescrolls.clues.emote.RangeItemRequirement;
import net.runelite.client.plugins.cluescrolls.clues.emote.SingleItemRequirement;
import net.runelite.client.plugins.cluescrolls.clues.emote.SlotLimitationRequirement;
import net.runelite.client.ui.overlay.OverlayUtil;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
@Getter
@@ -227,22 +583,30 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
{
panelComponent.setTitle("Emote Clue");
panelComponent.getLines().add(new PanelComponent.Line("Emotes:"));
panelComponent.getLines().add(new PanelComponent.Line(getFirstEmote().getName(), TITLED_CONTENT_COLOR));
panelComponent.getChildren().add(LineComponent.builder().left("Emotes:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(getFirstEmote().getName())
.leftColor(TITLED_CONTENT_COLOR)
.build());
if (getSecondEmote() != null)
{
panelComponent.getLines().add(new PanelComponent.Line(getSecondEmote().getName(), TITLED_CONTENT_COLOR));
panelComponent.getChildren().add(LineComponent.builder()
.left(getSecondEmote().getName())
.leftColor(TITLED_CONTENT_COLOR)
.build());
}
if (getItemRequirements() == null)
{
panelComponent.setWidth(130);
panelComponent.getLines().add(new PanelComponent.Line("Items:", "None"));
panelComponent.getChildren().add(LineComponent.builder()
.left("Items:")
.right("None")
.build());
}
else
{
panelComponent.setWidth(160);
panelComponent.getLines().add(new PanelComponent.Line("Equip:"));
panelComponent.getChildren().add(LineComponent.builder().left("Equip:").build());
Item[] items = plugin.getEquippedItems();
@@ -255,10 +619,13 @@ public class EmoteClue extends ClueScroll implements TextClueScroll, LocationClu
for (ItemRequirement requirement : getItemRequirements())
{
boolean found = requirement.fulfilledBy(items);
panelComponent.getLines().add(new PanelComponent.Line(
requirement.getCollectiveName(plugin.getClient()), TITLED_CONTENT_COLOR,
found ? "X" : "-", found ? Color.GREEN : Color.RED)
);
panelComponent.getChildren().add(LineComponent.builder()
.left(requirement.getCollectiveName(plugin.getClient()))
.leftColor(TITLED_CONTENT_COLOR)
.right(found ? "X" : "-")
.rightColor(found ? Color.GREEN : Color.RED)
.build());
}
}
}

View File

@@ -35,6 +35,7 @@ import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_C
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
import static net.runelite.client.plugins.cluescrolls.ClueScrollPlugin.SPADE_IMAGE;
import net.runelite.client.ui.overlay.OverlayUtil;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
@Getter
@@ -66,13 +67,15 @@ public class FairyRingClue extends ClueScroll implements TextClueScroll, Locatio
public void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin)
{
panelComponent.setTitle("Fairy Ring Clue");
panelComponent.setWidth(140);
panelComponent.getChildren().add(LineComponent.builder().left("Code:").build());
panelComponent.getChildren().add(LineComponent.builder()
.left(getText().substring(0, 5))
.leftColor(TITLED_CONTENT_COLOR)
.build());
panelComponent.getLines().add(new PanelComponent.Line("Code:"));
panelComponent.getLines().add(new PanelComponent.Line(getText().substring(0, 5), TITLED_CONTENT_COLOR));
panelComponent.getLines().add(new PanelComponent.Line("Travel to the fairy ring"));
panelComponent.getLines().add(new PanelComponent.Line("to see where to dig."));
panelComponent.getChildren().add(LineComponent.builder()
.left("Travel to the fairy ring to see where to dig.")
.build());
}
@Override

View File

@@ -32,7 +32,10 @@ import lombok.Getter;
import net.runelite.api.GameObject;
import static net.runelite.api.ItemID.*;
import net.runelite.api.ObjectComposition;
import static net.runelite.api.ObjectID.*;
import static net.runelite.api.ObjectID.CRATE_18506;
import static net.runelite.api.ObjectID.CRATE_2620;
import static net.runelite.api.ObjectID.CRATE_354;
import static net.runelite.api.ObjectID.CRATE_357;
import net.runelite.api.coords.LocalPoint;
import net.runelite.api.coords.WorldPoint;
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
@@ -43,6 +46,7 @@ import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.CLI
import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.CLICKBOX_HOVER_BORDER_COLOR;
import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET;
import net.runelite.client.ui.overlay.OverlayUtil;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
@Getter
@@ -103,25 +107,24 @@ public class MapClue extends ClueScroll implements ObjectClueScroll
if (objectId != -1)
{
panelComponent.setWidth(150);
ObjectComposition objectToClick = plugin.getClient().getObjectDefinition(getObjectId());
String objectName = "N/A";
if (objectToClick != null)
{
objectName = objectToClick.getName();
}
panelComponent.getLines().add(new PanelComponent.Line("Travel to the destination"));
panelComponent.getLines().add(new PanelComponent.Line("and click the " + objectName + "."));
panelComponent.getChildren().add(LineComponent.builder()
.left("Travel to the destination and click the " + objectName + ".")
.build());
}
else
{
panelComponent.setWidth(160);
panelComponent.getLines().add(new PanelComponent.Line("Travel to the destination"));
panelComponent.getLines().add(new PanelComponent.Line("and dig on the marked tile."));
panelComponent.getChildren().add(LineComponent.builder()
.left("Travel to the destination and dig on the marked tile.")
.build());
}
}

View File

@@ -34,12 +34,14 @@ import net.runelite.api.coords.LocalPoint;
import net.runelite.api.coords.WorldPoint;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
public class LocationOverlay extends Overlay
{
private final Client client;
private final DevToolsPlugin plugin;
private final PanelComponent panelComponent = new PanelComponent();
@Inject
LocationOverlay(Client client, DevToolsPlugin plugin)
@@ -57,7 +59,7 @@ public class LocationOverlay extends Overlay
return null;
}
PanelComponent panelComponent = new PanelComponent();
panelComponent.setPreferredSize(new Dimension(150, 0));
WorldPoint localWorld = client.getLocalPlayer().getWorldLocation();
LocalPoint localPoint = client.getLocalPlayer().getLocalLocation();
@@ -66,8 +68,9 @@ public class LocationOverlay extends Overlay
if (client.isInInstancedRegion())
{
panelComponent.setWidth(150);
panelComponent.getLines().add(new PanelComponent.Line("Instance"));
panelComponent.getChildren().add(LineComponent.builder()
.left("Instance")
.build());
int[][][] instanceTemplateChunks = client.getInstanceTemplateChunks();
int z = client.getPlane();
@@ -77,25 +80,26 @@ public class LocationOverlay extends Overlay
int chunkY = (chunkData >> 3 & 0x7FF) * CHUNK_SIZE;
int chunkX = (chunkData >> 14 & 0x3FF) * CHUNK_SIZE;
panelComponent.getLines().add(new PanelComponent.Line(
"Chunk " + localPoint.getRegionX() / CHUNK_SIZE + "," + localPoint.getRegionY() / CHUNK_SIZE,
rotation + " " + chunkX + " " + chunkY
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Chunk " + localPoint.getRegionX() / CHUNK_SIZE + "," + localPoint.getRegionY() / CHUNK_SIZE)
.right(rotation + " " + chunkX + " " + chunkY)
.build());
}
panelComponent.getLines().add(new PanelComponent.Line(
"Tile",
localWorld.getX() + ", " + localWorld.getY() + ", " + client.getPlane()
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Tile")
.right(localWorld.getX() + ", " + localWorld.getY() + ", " + client.getPlane())
.build());
for (int i = 0; i < client.getMapRegions().length; i++)
{
int region = client.getMapRegions()[i];
panelComponent.getLines().add(new PanelComponent.Line(
(i == 0) ? "Map regions" : " ", new Color(255, 255, 255, 255),
String.valueOf(region), (region == regionID) ? new Color(0, 255, 0, 255) : new Color(255, 255, 255, 255)
));
panelComponent.getChildren().add(LineComponent.builder()
.left((i == 0) ? "Map regions" : " ")
.right(String.valueOf(region))
.rightColor((region == regionID) ? Color.GREEN : Color.WHITE)
.build());
}
return panelComponent.render(graphics);

View File

@@ -29,7 +29,6 @@ import net.runelite.api.Client;
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.components.ImagePanelComponent;
import javax.imageio.ImageIO;
import javax.inject.Inject;
@@ -38,6 +37,8 @@ import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import net.runelite.client.ui.overlay.components.ImageComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
@Slf4j
public class FightCaveOverlay extends Overlay
@@ -46,7 +47,7 @@ public class FightCaveOverlay extends Overlay
private final Client client;
private final FightCavePlugin plugin;
private final PanelComponent imagePanelComponent = new PanelComponent();
private BufferedImage protectFromMagicImg;
private BufferedImage protectFromMissilesImg;
@@ -68,13 +69,14 @@ public class FightCaveOverlay extends Overlay
return null;
}
BufferedImage prayerImage = getPrayerImage(attack);
ImagePanelComponent imagePanelComponent = new ImagePanelComponent();
imagePanelComponent.setTitle("TzTok-Jad");
imagePanelComponent.getImages().add(prayerImage);
imagePanelComponent.getChildren().add(new ImageComponent(prayerImage));
if (!client.isPrayerActive(attack.getPrayer()))
{
imagePanelComponent.setBackgroundColor(NOT_ACTIVATED_BACKGROUND_COLOR);
}
return imagePanelComponent.render(graphics);
}

View File

@@ -35,6 +35,7 @@ import net.runelite.api.Skill;
import net.runelite.client.plugins.xptracker.XpTrackerService;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
class FishingOverlay extends Overlay
@@ -81,7 +82,7 @@ class FishingOverlay extends Overlay
return null;
}
panelComponent.getLines().clear();
panelComponent.getChildren().clear();
if (client.getLocalPlayer().getInteracting() != null && client.getLocalPlayer().getInteracting().getName()
.contains(FISHING_SPOT))
{
@@ -97,17 +98,17 @@ class FishingOverlay extends Overlay
int actions = xpTrackerService.getActions(Skill.FISHING);
if (actions > 0)
{
panelComponent.getLines().add(new PanelComponent.Line(
"Caught fish:",
Integer.toString(actions)
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Caught fish:")
.right(Integer.toString(actions))
.build());
if (actions > 2)
{
panelComponent.getLines().add(new PanelComponent.Line(
"Fish/hr:",
Integer.toString(xpTrackerService.getActionsHr(Skill.FISHING))
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Fish/hr:")
.right(Integer.toString(xpTrackerService.getActionsHr(Skill.FISHING)))
.build());
}
}

View File

@@ -31,6 +31,7 @@ import java.time.Instant;
import javax.inject.Inject;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
public class MotherlodeGemOverlay extends Overlay
@@ -70,41 +71,42 @@ public class MotherlodeGemOverlay extends Overlay
int emeraldsFound = session.getEmeraldsFound();
int sapphiresFound = session.getSapphiresFound();
panelComponent.getLines().clear();
panelComponent.getChildren().clear();
panelComponent.setTitle("Gems found");
if (diamondsFound > 0)
{
panelComponent.getLines().add(new PanelComponent.Line(
"Diamonds:",
Integer.toString(diamondsFound)
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Diamonds:")
.right(Integer.toString(diamondsFound))
.build());
}
if (rubiesFound > 0)
{
panelComponent.getLines().add(new PanelComponent.Line(
"Rubies:",
Integer.toString(rubiesFound)
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Rubies:")
.right(Integer.toString(rubiesFound))
.build());
}
if (emeraldsFound > 0)
{
panelComponent.getLines().add(new PanelComponent.Line(
"Emeralds:",
Integer.toString(emeraldsFound)
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Emeralds:")
.right(Integer.toString(emeraldsFound))
.build());
}
if (sapphiresFound > 0)
{
panelComponent.getLines().add(new PanelComponent.Line(
"Sapphires:",
Integer.toString(sapphiresFound)
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Sapphires:")
.right(Integer.toString(sapphiresFound))
.build());
}
return panelComponent.render(graphics);
}
}

View File

@@ -45,6 +45,7 @@ import static net.runelite.api.AnimationID.MINING_MOTHERLODE_STEEL;
import net.runelite.api.Client;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
class MotherlodeOverlay extends Overlay
@@ -93,7 +94,7 @@ class MotherlodeOverlay extends Overlay
return null;
}
panelComponent.getLines().clear();
panelComponent.getChildren().clear();
if (config.showMiningState())
{
@@ -113,17 +114,15 @@ class MotherlodeOverlay extends Overlay
panelComponent.setTitle(null);
}
panelComponent.getLines().add(new PanelComponent.Line(
"Pay-dirt mined:",
Integer.toString(session.getTotalMined())
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Pay-dirt mined:")
.right(Integer.toString(session.getTotalMined()))
.build());
panelComponent.getLines().add(new PanelComponent.Line(
"Pay-dirt/hr:",
session.getRecentMined() > 2
? Integer.toString(session.getPerHour())
: ""
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Pay-dirt/hr:")
.right(session.getRecentMined() > 2 ? Integer.toString(session.getPerHour()) : "")
.build());
return panelComponent.render(graphics);
}

View File

@@ -37,6 +37,7 @@ import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.BackgroundComponent;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
class MotherlodeSackOverlay extends Overlay
@@ -67,7 +68,7 @@ class MotherlodeSackOverlay extends Overlay
Widget sack = client.getWidget(WidgetInfo.MOTHERLODE_MINE);
panelComponent.getLines().clear();
panelComponent.getChildren().clear();
panelComponent.setBackgroundColor(BackgroundComponent.DEFAULT_BACKGROUND_COLOR);
if (sack != null)
@@ -81,23 +82,16 @@ class MotherlodeSackOverlay extends Overlay
panelComponent.setBackgroundColor(DANGER);
}
panelComponent.getLines().add(new PanelComponent.Line(
"Pay-dirt in sack:",
Color.WHITE,
String.valueOf(client.getVar(Varbits.SACK_NUMBER)),
Color.WHITE
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Pay-dirt in sack:")
.right(String.valueOf(client.getVar(Varbits.SACK_NUMBER)))
.build());
}
if (config.showDepositsLeft())
{
final Integer depositsLeft = plugin.getDepositsLeft();
final PanelComponent.Line line = new PanelComponent.Line(
"Deposits left:",
Color.WHITE,
depositsLeft == null ? "N/A" : String.valueOf(depositsLeft),
Color.WHITE
);
Color color = Color.WHITE;
if (depositsLeft != null)
{
@@ -107,12 +101,16 @@ class MotherlodeSackOverlay extends Overlay
}
else if (depositsLeft == 1)
{
line.setLeftColor(Color.RED);
line.setRightColor(Color.RED);
color = Color.RED;
}
}
panelComponent.getLines().add(line);
panelComponent.getChildren().add(LineComponent.builder()
.left("Deposits left:")
.leftColor(color)
.right(depositsLeft == null ? "N/A" : String.valueOf(depositsLeft))
.rightColor(color)
.build());
}
}

View File

@@ -24,7 +24,6 @@
*/
package net.runelite.client.plugins.nightmarezone;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import javax.inject.Inject;
@@ -37,6 +36,7 @@ import net.runelite.client.game.ItemManager;
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.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.StackFormatter;
@@ -96,13 +96,11 @@ class NightmareZoneOverlay extends Overlay
renderAbsorptionCounter();
panelComponent.getLines().clear();
panelComponent.getLines().add(new PanelComponent.Line(
"Points: ",
Color.WHITE,
StackFormatter.formatNumber(client.getVar(Varbits.NMZ_POINTS)),
Color.WHITE
));
panelComponent.getChildren().clear();
panelComponent.getChildren().add(LineComponent.builder()
.left("Points: ")
.right(StackFormatter.formatNumber(client.getVar(Varbits.NMZ_POINTS)))
.build());
return panelComponent.render(graphics);
}

View File

@@ -33,6 +33,7 @@ import net.runelite.client.plugins.raids.solver.Room;
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.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
public class RaidsOverlay extends Overlay
@@ -61,7 +62,7 @@ public class RaidsOverlay extends Overlay
return null;
}
panelComponent.getLines().clear();
panelComponent.getChildren().clear();
if (plugin.getRaid() == null || plugin.getRaid().getLayout() == null)
{
@@ -81,9 +82,11 @@ public class RaidsOverlay extends Overlay
color = Color.RED;
}
panelComponent.getLines().add(new PanelComponent.Line(
"Layout", Color.WHITE, layout, color
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Layout")
.right(layout)
.rightColor(color)
.build());
int bossMatches = 0;
int bossCount = 0;
@@ -119,9 +122,12 @@ public class RaidsOverlay extends Overlay
color = Color.RED;
}
panelComponent.getLines().add(new PanelComponent.Line(
room.getType().getName(), Color.WHITE, room.getBoss().getName(), color
));
panelComponent.getChildren().add(LineComponent.builder()
.left(room.getType().getName())
.right(room.getBoss().getName())
.rightColor(color)
.build());
break;
case PUZZLE:
@@ -134,9 +140,11 @@ public class RaidsOverlay extends Overlay
color = Color.RED;
}
panelComponent.getLines().add(new PanelComponent.Line(
room.getType().getName(), Color.WHITE, room.getPuzzle().getName(), color
));
panelComponent.getChildren().add(LineComponent.builder()
.left(room.getType().getName())
.right(room.getPuzzle().getName())
.rightColor(color)
.build());
break;
}
}

View File

@@ -24,7 +24,6 @@
*/
package net.runelite.client.plugins.raids;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import javax.inject.Inject;
@@ -34,6 +33,7 @@ import static net.runelite.client.plugins.raids.RaidsPlugin.POINTS_FORMAT;
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.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
public class RaidsPointsOverlay extends Overlay
@@ -64,16 +64,21 @@ public class RaidsPointsOverlay extends Overlay
int totalPoints = client.getVar(Varbits.TOTAL_POINTS);
int personalPoints = client.getVar(Varbits.PERSONAL_POINTS);
panel.getLines().clear();
panel.getLines().add(new PanelComponent.Line(
"Total:", Color.WHITE, POINTS_FORMAT.format(totalPoints), Color.WHITE
));
panel.getLines().add(new PanelComponent.Line(
client.getLocalPlayer().getName() + ":", Color.WHITE, POINTS_FORMAT.format(personalPoints), Color.WHITE
));
panel.getLines().add(new PanelComponent.Line(
"Party size:", Color.WHITE, String.valueOf(client.getVar(Varbits.RAID_PARTY_SIZE)), Color.WHITE
));
panel.getChildren().clear();
panel.getChildren().add(LineComponent.builder()
.left("Total:")
.right(POINTS_FORMAT.format(totalPoints))
.build());
panel.getChildren().add(LineComponent.builder()
.left(client.getLocalPlayer().getName() + ":")
.right(POINTS_FORMAT.format(personalPoints))
.build());
panel.getChildren().add(LineComponent.builder()
.left("Party size:")
.right(String.valueOf(client.getVar(Varbits.RAID_PARTY_SIZE)))
.build());
return panel.render(graphics);
}

View File

@@ -24,7 +24,6 @@
*/
package net.runelite.client.plugins.teamcapes;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.util.Map;
@@ -32,6 +31,7 @@ import javax.inject.Inject;
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.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
public class TeamCapesOverlay extends Overlay
@@ -57,20 +57,20 @@ public class TeamCapesOverlay extends Overlay
{
return null;
}
panelComponent.getLines().clear();
panelComponent.getChildren().clear();
for (Map.Entry<Integer, Integer> team : teams.entrySet())
{
// Only display team capes that have a count greater than the configured minimum.
if (team.getValue() >= config.getMinimumCapeCount())
{
panelComponent.getLines().add(new PanelComponent.Line(
"Team-" + Integer.toString(team.getKey()),
Color.WHITE,
Integer.toString(team.getValue()),
Color.WHITE
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Team-" + Integer.toString(team.getKey()))
.right(Integer.toString(team.getValue()))
.build());
}
}
return panelComponent.render(graphics);
}
}

View File

@@ -33,6 +33,7 @@ import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
class TitheFarmSackOverlay extends Overlay
@@ -58,19 +59,20 @@ class TitheFarmSackOverlay extends Overlay
return null;
}
panelComponent.getLines().clear();
panelComponent.getChildren().clear();
sack.setHidden(true);
if (config.showSack())
{
panelComponent.getLines().add(new PanelComponent.Line(
"Fruits in sack:",
String.valueOf(client.getVar(Varbits.TITHE_FARM_SACK_AMOUNT))
));
panelComponent.getLines().add(new PanelComponent.Line(
"Points:",
String.valueOf(client.getVar(Varbits.TITHE_FARM_POINTS))
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Fruits in sack:")
.right(String.valueOf(client.getVar(Varbits.TITHE_FARM_SACK_AMOUNT)))
.build());
panelComponent.getChildren().add(LineComponent.builder()
.left("Points:")
.right(String.valueOf(client.getVar(Varbits.TITHE_FARM_POINTS)))
.build());
}
return panelComponent.render(graphics);

View File

@@ -45,6 +45,7 @@ import net.runelite.api.Skill;
import net.runelite.client.plugins.xptracker.XpTrackerService;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
class WoodcuttingOverlay extends Overlay
@@ -95,7 +96,7 @@ class WoodcuttingOverlay extends Overlay
return null;
}
panelComponent.getLines().clear();
panelComponent.getChildren().clear();
if (IntStream.of(animationIds).anyMatch(x -> x == client.getLocalPlayer().getAnimation()))
{
@@ -111,17 +112,17 @@ class WoodcuttingOverlay extends Overlay
int actions = xpTrackerService.getActions(Skill.WOODCUTTING);
if (actions > 0)
{
panelComponent.getLines().add(new PanelComponent.Line(
"Logs cut:",
Integer.toString(actions)
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Logs cut:")
.right(Integer.toString(actions))
.build());
if (actions > 2)
{
panelComponent.getLines().add(new PanelComponent.Line(
"Logs/hr:",
Integer.toString(xpTrackerService.getActionsHr(Skill.WOODCUTTING))
));
panelComponent.getChildren().add(LineComponent.builder()
.left("Logs/hr:")
.right(Integer.toString(xpTrackerService.getActionsHr(Skill.WOODCUTTING)))
.build());
}
}

View File

@@ -47,6 +47,7 @@ import net.runelite.client.plugins.xptracker.XpTrackerService;
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.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
import net.runelite.client.ui.overlay.components.ProgressBarComponent;
@@ -57,6 +58,7 @@ public class XpGlobesOverlay extends Overlay
private final XpGlobesPlugin plugin;
private final XpGlobesConfig config;
private final XpTrackerService xpTrackerService;
private final PanelComponent xpTooltip = new PanelComponent();
@Inject
private SkillIconManager iconManager;
@@ -228,22 +230,38 @@ public class XpGlobesOverlay extends Overlay
DecimalFormat decimalFormat = new DecimalFormat("###,###,###");
String skillCurrentXp = decimalFormat.format(mouseOverSkill.getCurrentXp());
PanelComponent xpTooltip = new PanelComponent();
xpTooltip.getChildren().clear();
xpTooltip.setPosition(new java.awt.Point(x, y));
xpTooltip.setWidth(TOOLTIP_RECT_SIZE_X);
xpTooltip.setPreferredSize(new Dimension(TOOLTIP_RECT_SIZE_X, 0));
xpTooltip.getChildren().add(LineComponent.builder()
.left(skillName)
.right(skillLevel)
.build());
xpTooltip.getChildren().add(LineComponent.builder()
.left("Current xp:")
.leftColor(Color.ORANGE)
.right(skillCurrentXp)
.build());
List<PanelComponent.Line> lines = xpTooltip.getLines();
lines.add(new PanelComponent.Line(skillName, Color.WHITE, skillLevel, Color.WHITE));
lines.add(new PanelComponent.Line("Current xp:", Color.ORANGE, skillCurrentXp, Color.WHITE));
if (mouseOverSkill.getGoalXp() != -1)
{
int actionsLeft = xpTrackerService.getActionsLeft(mouseOverSkill.getSkill());
String actionsLeftString = decimalFormat.format(actionsLeft);
lines.add(new PanelComponent.Line("Actions left:", Color.ORANGE, actionsLeftString, Color.WHITE));
xpTooltip.getChildren().add(LineComponent.builder()
.left("Actions left:")
.leftColor(Color.ORANGE)
.right(actionsLeftString)
.build());
int xpLeft = mouseOverSkill.getGoalXp() - mouseOverSkill.getCurrentXp();
String skillXpToLvl = decimalFormat.format(xpLeft);
lines.add(new PanelComponent.Line("Xp to level:", Color.ORANGE, skillXpToLvl, Color.WHITE));
xpTooltip.getChildren().add(LineComponent.builder()
.left("Xp to level:")
.leftColor(Color.ORANGE)
.right(skillXpToLvl)
.build());
//Create progress bar for skill.
ProgressBarComponent progressBar = new ProgressBarComponent();
@@ -251,7 +269,7 @@ public class XpGlobesOverlay extends Overlay
mouseOverSkill.getCurrentXp(), mouseOverSkill.getGoalXp());
progressBar.setProgress(progress);
xpTooltip.setProgressBar(progressBar);
xpTooltip.getChildren().add(progressBar);
}
xpTooltip.render(graphics);