Merge pull request #104 from runelite-extended/revert-103-update

Revert "Update"
This commit is contained in:
Ganom
2019-04-24 20:18:37 -04:00
committed by GitHub
20 changed files with 297 additions and 767 deletions

View File

@@ -30,7 +30,7 @@ public enum WorldType
PVP, PVP,
BOUNTY, BOUNTY,
SKILL_TOTAL, SKILL_TOTAL,
HIGH_RISK, PVP_HIGH_RISK,
LAST_MAN_STANDING, LAST_MAN_STANDING,
TOURNAMENT, TOURNAMENT,
DEADMAN, DEADMAN,

View File

@@ -32,7 +32,7 @@ enum ServiceWorldType
PVP(WorldType.PVP, 1 << 2), PVP(WorldType.PVP, 1 << 2),
BOUNTY(WorldType.BOUNTY, 1 << 5), BOUNTY(WorldType.BOUNTY, 1 << 5),
SKILL_TOTAL(WorldType.SKILL_TOTAL, 1 << 7), SKILL_TOTAL(WorldType.SKILL_TOTAL, 1 << 7),
HIGH_RISK(WorldType.HIGH_RISK, 1 << 10), PVP_HIGH_RISK(WorldType.PVP_HIGH_RISK, 1 << 10),
LAST_MAN_STANDING(WorldType.LAST_MAN_STANDING, 1 << 14), LAST_MAN_STANDING(WorldType.LAST_MAN_STANDING, 1 << 14),
TOURNAMENT(WorldType.TOURNAMENT, 1 << 25), TOURNAMENT(WorldType.TOURNAMENT, 1 << 25),
DEADMAN_TOURNAMENT(WorldType.DEADMAN_TOURNAMENT, 1 << 26), DEADMAN_TOURNAMENT(WorldType.DEADMAN_TOURNAMENT, 1 << 26),

View File

@@ -49,9 +49,9 @@ public enum WorldType
*/ */
SKILL_TOTAL(1 << 7), SKILL_TOTAL(1 << 7),
/** /**
* High risk world type. * Pvp high risk world type.
*/ */
HIGH_RISK(1 << 10), PVP_HIGH_RISK(1 << 10),
/** /**
* Last man standing world type. * Last man standing world type.
*/ */
@@ -84,6 +84,7 @@ public enum WorldType
DEADMAN, DEADMAN,
DEADMAN_TOURNAMENT, DEADMAN_TOURNAMENT,
PVP, PVP,
PVP_HIGH_RISK,
SEASONAL_DEADMAN SEASONAL_DEADMAN
); );

View File

@@ -121,7 +121,6 @@ public class WidgetID
public static final int MINIGAME_TAB_ID = 76; public static final int MINIGAME_TAB_ID = 76;
public static final int SPELLBOOK_GROUP_ID = 218; public static final int SPELLBOOK_GROUP_ID = 218;
public static final int PVP_GROUP_ID = 90; public static final int PVP_GROUP_ID = 90;
public static final int FISHING_TRAWLER_GROUP_ID = 366;
public static final int ZEAH_MESS_HALL_GROUP_ID = 235; public static final int ZEAH_MESS_HALL_GROUP_ID = 235;
public static final int KOUREND_FAVOUR_GROUP_ID = 246; public static final int KOUREND_FAVOUR_GROUP_ID = 246;
public static final int LOOTING_BAG_GROUP_ID = 81; public static final int LOOTING_BAG_GROUP_ID = 81;

View File

@@ -420,8 +420,6 @@ public enum WidgetInfo
EXPERIENCE_TRACKER_WIDGET(WidgetID.EXPERIENCE_TRACKER_GROUP_ID, WidgetID.ExperienceTracker.WIDGET), EXPERIENCE_TRACKER_WIDGET(WidgetID.EXPERIENCE_TRACKER_GROUP_ID, WidgetID.ExperienceTracker.WIDGET),
EXPERIENCE_TRACKER_BOTTOM_BAR(WidgetID.EXPERIENCE_TRACKER_GROUP_ID, WidgetID.ExperienceTracker.BOTTOM_BAR), EXPERIENCE_TRACKER_BOTTOM_BAR(WidgetID.EXPERIENCE_TRACKER_GROUP_ID, WidgetID.ExperienceTracker.BOTTOM_BAR),
FISHING_TRAWLER_TIMER(WidgetID.FISHING_TRAWLER_GROUP_ID, 37),
TITHE_FARM(WidgetID.TITHE_FARM_GROUP_ID, 1), TITHE_FARM(WidgetID.TITHE_FARM_GROUP_ID, 1),
BARROWS_INFO(WidgetID.BARROWS_GROUP_ID, 0), BARROWS_INFO(WidgetID.BARROWS_GROUP_ID, 0),

View File

@@ -81,14 +81,14 @@ class LapCounterOverlay extends Overlay
panelComponent.getChildren().clear(); panelComponent.getChildren().clear();
panelComponent.getChildren().add(LineComponent.builder() panelComponent.getChildren().add(LineComponent.builder()
.left("Total Laps:") .left("Total Laps")
.right(Integer.toString(session.getTotalLaps())) .right(Integer.toString(session.getTotalLaps()))
.build()); .build());
if (session.getLapsTillLevel() > 0) if (session.getLapsTillLevel() > 0)
{ {
panelComponent.getChildren().add(LineComponent.builder() panelComponent.getChildren().add(LineComponent.builder()
.left("Laps until level:") .left("Laps till level")
.right(Integer.toString(session.getLapsTillLevel())) .right(Integer.toString(session.getLapsTillLevel()))
.build()); .build());
} }

View File

@@ -1,89 +1,30 @@
/*
* Copyright (c) 2017, Devin French <https://github.com/devinfrench>
* Copyright (c) 2019, Adam <Adam@sigterm.info>
* Copyright (c) 2018, trimbe <github.com/trimbe>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.clanchat; package net.runelite.client.plugins.clanchat;
import com.google.common.base.Strings; import net.runelite.client.plugins.*;
import com.google.common.collect.Lists; import net.runelite.client.game.*;
import com.google.inject.Provides; import net.runelite.client.callback.*;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import net.runelite.api.ChatLineBuffer;
import net.runelite.api.ChatMessageType;
import net.runelite.api.ClanMember;
import net.runelite.api.ClanMemberRank;
import net.runelite.api.Client;
import net.runelite.api.GameState;
import net.runelite.api.MessageNode;
import net.runelite.api.Player;
import net.runelite.api.ScriptID;
import net.runelite.api.SpriteID;
import net.runelite.api.VarClientStr;
import net.runelite.api.Varbits;
import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.ClanChanged;
import net.runelite.api.events.ClanMemberJoined;
import net.runelite.api.events.ClanMemberLeft;
import net.runelite.api.events.ConfigChanged;
import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.GameTick;
import net.runelite.api.events.PlayerDespawned;
import net.runelite.api.events.PlayerSpawned;
import net.runelite.api.events.VarClientStrChanged;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.api.widgets.WidgetType;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.chat.ChatMessageBuilder;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.ClanManager;
import net.runelite.client.game.SpriteManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import static net.runelite.client.ui.JagexColors.CHAT_CLAN_NAME_OPAQUE_BACKGROUND;
import static net.runelite.client.ui.JagexColors.CHAT_CLAN_NAME_TRANSPARENT_BACKGROUND;
import static net.runelite.client.ui.JagexColors.CHAT_CLAN_TEXT_OPAQUE_BACKGROUND;
import static net.runelite.client.ui.JagexColors.CHAT_CLAN_TEXT_TRANSPARENT_BACKGROUND;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.Text;
@PluginDescriptor( import java.util.List;
name = "Clan Chat", import java.util.Objects;
description = "Add rank icons to users talking in clan chat", import java.util.concurrent.*;
tags = {"icons", "rank", "recent"} import net.runelite.client.config.*;
) import com.google.inject.*;
import net.runelite.client.util.*;
import net.runelite.client.eventbus.*;
import com.google.common.base.*;
import net.runelite.api.widgets.*;
import net.runelite.client.ui.*;
import net.runelite.client.chat.*;
import java.awt.*;
import net.runelite.api.*;
import net.runelite.api.events.*;
import com.google.common.collect.*;
import java.util.*;
import java.util.function.*;
import net.runelite.client.ui.overlay.infobox.*;
import java.awt.image.*;
@PluginDescriptor(name = "Clan Chat", description = "Add rank icons to users talking in clan chat", tags = { "icons", "rank", "recent" })
public class ClanChatPlugin extends Plugin public class ClanChatPlugin extends Plugin
{ {
private static final int MAX_CHATS = 10; private static final int MAX_CHATS = 10;
@@ -91,512 +32,376 @@ public class ClanChatPlugin extends Plugin
private static final String RECENT_TITLE = "Recent Clan Chats"; private static final String RECENT_TITLE = "Recent Clan Chats";
private static final int JOIN_LEAVE_DURATION = 20; private static final int JOIN_LEAVE_DURATION = 20;
private static final int MESSAGE_DELAY = 10; private static final int MESSAGE_DELAY = 10;
@Inject @Inject
private Client client; private Client client;
@Inject @Inject
private ClanManager clanManager; private ClanManager clanManager;
@Inject @Inject
private ClanChatConfig config; private ClanChatConfig config;
@Inject @Inject
private InfoBoxManager infoBoxManager; private InfoBoxManager infoBoxManager;
@Inject @Inject
private SpriteManager spriteManager; private SpriteManager spriteManager;
@Inject @Inject
private ClientThread clientThread; private ClientThread clientThread;
private List<String> chats;
private List<String> chats = new ArrayList<>(); private static CopyOnWriteArrayList<Player> clanMembers;
private List<Player> clanMembers = new ArrayList<>();
private ClanChatIndicator clanMemberCounter; private ClanChatIndicator clanMemberCounter;
/** private final Deque<ClanJoinMessage> clanJoinMessages;
* queue of temporary messages added to the client private Map<String, ClanMemberActivity> activityBuffer;
*/
private final Deque<ClanJoinMessage> clanJoinMessages = new ArrayDeque<>();
private Map<String, ClanMemberActivity> activityBuffer = new HashMap<>();
private int clanJoinedTick; private int clanJoinedTick;
public ClanChatPlugin() {
this.chats = new ArrayList<String>();
this.clanJoinMessages = new ArrayDeque<ClanJoinMessage>();
this.activityBuffer = new HashMap<String, ClanMemberActivity>();
}
public static CopyOnWriteArrayList<Player> getClanMembers() {
return (CopyOnWriteArrayList<Player>)ClanChatPlugin.clanMembers.clone();
}
@Provides @Provides
ClanChatConfig getConfig(ConfigManager configManager) ClanChatConfig getConfig(final ConfigManager configManager) {
{
return configManager.getConfig(ClanChatConfig.class); return configManager.getConfig(ClanChatConfig.class);
} }
@Override public void startUp() {
public void startUp() this.chats = new ArrayList<String>(Text.fromCSV(this.config.chatsData()));
{
chats = new ArrayList<>(Text.fromCSV(config.chatsData()));
} }
@Override public void shutDown() {
public void shutDown() ClanChatPlugin.clanMembers.clear();
{ this.removeClanCounter();
clanMembers.clear(); this.resetClanChats();
removeClanCounter();
resetClanChats();
} }
@Subscribe @Subscribe
public void onConfigChanged(ConfigChanged configChanged) public void onConfigChanged(final ConfigChanged configChanged) {
{ if (configChanged.getGroup().equals("clanchat")) {
if (configChanged.getGroup().equals("clanchat")) if (!this.config.recentChats()) {
{ this.resetClanChats();
if (!config.recentChats())
{
resetClanChats();
} }
if (this.config.showClanCounter()) {
if (config.showClanCounter()) this.clientThread.invoke(this::addClanCounter);
{
clientThread.invoke(this::addClanCounter);
} }
else else {
{ this.removeClanCounter();
removeClanCounter();
} }
} }
} }
@Subscribe @Subscribe
public void onClanMemberJoined(ClanMemberJoined event) public void onClanMemberJoined(final ClanMemberJoined event) {
{
final ClanMember member = event.getMember(); final ClanMember member = event.getMember();
if (member.getWorld() == this.client.getWorld()) {
if (member.getWorld() == client.getWorld())
{
final Player local = client.getLocalPlayer();
final String memberName = Text.toJagexName(member.getUsername()); final String memberName = Text.toJagexName(member.getUsername());
for (final Player player : this.client.getPlayers()) {
for (final Player player : client.getPlayers()) if (player != null && memberName.equals(Text.toJagexName(player.getName()))) {
{ ClanChatPlugin.clanMembers.add(player);
if (player != null && player != local && memberName.equals(Text.toJagexName(player.getName()))) this.addClanCounter();
{
clanMembers.add(player);
addClanCounter();
break; break;
} }
} }
} }
if (this.clanJoinedTick == this.client.getTickCount()) {
// clan members getting initialized isn't relevant
if (clanJoinedTick == client.getTickCount())
{
return; return;
} }
if (!this.config.showJoinLeave() || member.getRank().getValue() < this.config.joinLeaveRank().getValue()) {
if (!config.showJoinLeave() ||
member.getRank().getValue() < config.joinLeaveRank().getValue())
{
return; return;
} }
if (!this.activityBuffer.containsKey(member.getUsername())) {
// attempt to filter out world hopping joins final ClanMemberActivity joinActivity = new ClanMemberActivity(ClanActivityType.JOINED, member, this.client.getTickCount());
if (!activityBuffer.containsKey(member.getUsername())) this.activityBuffer.put(member.getUsername(), joinActivity);
{
ClanMemberActivity joinActivity = new ClanMemberActivity(ClanActivityType.JOINED,
member, client.getTickCount());
activityBuffer.put(member.getUsername(), joinActivity);
} }
else else {
{ this.activityBuffer.remove(member.getUsername());
activityBuffer.remove(member.getUsername());
} }
} }
@Subscribe @Subscribe
public void onClanMemberLeft(ClanMemberLeft event) public void onClanMemberLeft(final ClanMemberLeft event) {
{
final ClanMember member = event.getMember(); final ClanMember member = event.getMember();
if (member.getWorld() == this.client.getWorld()) {
if (member.getWorld() == client.getWorld())
{
final String memberName = Text.toJagexName(member.getUsername()); final String memberName = Text.toJagexName(member.getUsername());
final Iterator<Player> each = clanMembers.iterator(); final Iterator<Player> each = ClanChatPlugin.clanMembers.iterator();
while (each.hasNext()) {
while (each.hasNext()) if (memberName.equals(Text.toJagexName(each.next().getName()))) {
{
if (memberName.equals(Text.toJagexName(each.next().getName())))
{
each.remove(); each.remove();
if (ClanChatPlugin.clanMembers.isEmpty()) {
if (clanMembers.isEmpty()) this.removeClanCounter();
{ break;
removeClanCounter();
} }
break; break;
} }
} }
} }
if (!this.config.showJoinLeave() || member.getRank().getValue() < this.config.joinLeaveRank().getValue()) {
if (!config.showJoinLeave() ||
member.getRank().getValue() < config.joinLeaveRank().getValue())
{
return; return;
} }
if (!this.activityBuffer.containsKey(member.getUsername())) {
if (!activityBuffer.containsKey(member.getUsername())) final ClanMemberActivity leaveActivity = new ClanMemberActivity(ClanActivityType.LEFT, member, this.client.getTickCount());
{ this.activityBuffer.put(member.getUsername(), leaveActivity);
ClanMemberActivity leaveActivity = new ClanMemberActivity(ClanActivityType.LEFT,
member, client.getTickCount());
activityBuffer.put(member.getUsername(), leaveActivity);
} }
else else {
{ this.activityBuffer.remove(member.getUsername());
activityBuffer.remove(member.getUsername());
} }
} }
@Subscribe @Subscribe
public void onGameTick(GameTick gameTick) public void onGameTick(final GameTick gameTick) {
{ if (this.client.getGameState() != GameState.LOGGED_IN) {
if (client.getGameState() != GameState.LOGGED_IN)
{
return; return;
} }
final Widget clanChatTitleWidget = this.client.getWidget(WidgetInfo.CLAN_CHAT_TITLE);
Widget clanChatTitleWidget = client.getWidget(WidgetInfo.CLAN_CHAT_TITLE); if (clanChatTitleWidget != null) {
if (clanChatTitleWidget != null) final Widget clanChatList = this.client.getWidget(WidgetInfo.CLAN_CHAT_LIST);
{ final Widget owner = this.client.getWidget(WidgetInfo.CLAN_CHAT_OWNER);
Widget clanChatList = client.getWidget(WidgetInfo.CLAN_CHAT_LIST); if (this.client.getClanChatCount() > 0) {
Widget owner = client.getWidget(WidgetInfo.CLAN_CHAT_OWNER); clanChatTitleWidget.setText("Clan Chat (" + this.client.getClanChatCount() + "/100)");
if (client.getClanChatCount() > 0)
{
clanChatTitleWidget.setText(CLAN_CHAT_TITLE + " (" + client.getClanChatCount() + "/100)");
} }
else if (config.recentChats() && clanChatList.getChildren() == null && !Strings.isNullOrEmpty(owner.getText())) else if (this.config.recentChats() && clanChatList.getChildren() == null && !Strings.isNullOrEmpty(owner.getText())) {
{ clanChatTitleWidget.setText("Recent Clan Chats");
clanChatTitleWidget.setText(RECENT_TITLE); this.loadClanChats();
loadClanChats();
} }
} }
if (!this.config.showJoinLeave()) {
if (!config.showJoinLeave())
{
return; return;
} }
this.timeoutClanMessages();
timeoutClanMessages(); this.addClanActivityMessages();
addClanActivityMessages();
} }
private void timeoutClanMessages() private void timeoutClanMessages() {
{ if (this.clanJoinMessages.isEmpty()) {
if (clanJoinMessages.isEmpty())
{
return; return;
} }
boolean removed = false; boolean removed = false;
final Iterator<ClanJoinMessage> it = this.clanJoinMessages.iterator();
for (Iterator<ClanJoinMessage> it = clanJoinMessages.iterator(); it.hasNext(); ) while (it.hasNext()) {
{ final ClanJoinMessage clanJoinMessage = it.next();
ClanJoinMessage clanJoinMessage = it.next(); final MessageNode messageNode = clanJoinMessage.getMessageNode();
MessageNode messageNode = clanJoinMessage.getMessageNode();
final int createdTick = clanJoinMessage.getTick(); final int createdTick = clanJoinMessage.getTick();
if (this.client.getTickCount() <= createdTick + 20) {
if (client.getTickCount() > createdTick + JOIN_LEAVE_DURATION)
{
it.remove();
// If this message has been reused since, it will get a different id
if (clanJoinMessage.getGetMessageId() == messageNode.getId())
{
ChatLineBuffer ccInfoBuffer = client.getChatLineMap().get(ChatMessageType.FRIENDSCHATNOTIFICATION.getType());
if (ccInfoBuffer != null)
{
ccInfoBuffer.removeMessageNode(messageNode);
removed = true;
}
}
}
else
{
// Everything else in the deque is newer
break; break;
} }
it.remove();
if (clanJoinMessage.getGetMessageId() != messageNode.getId()) {
continue;
}
final ChatLineBuffer ccInfoBuffer = this.client.getChatLineMap().get(ChatMessageType.FRIENDSCHATNOTIFICATION.getType());
if (ccInfoBuffer == null) {
continue;
}
ccInfoBuffer.removeMessageNode(messageNode);
removed = true;
} }
if (removed) {
if (removed) this.clientThread.invoke(() -> this.client.runScript(216, new Object[0]));
{
clientThread.invoke(() -> client.runScript(ScriptID.BUILD_CHATBOX));
} }
} }
private void addClanActivityMessages() private void addClanActivityMessages() {
{ final Iterator<ClanMemberActivity> activityIt = this.activityBuffer.values().iterator();
Iterator<ClanMemberActivity> activityIt = activityBuffer.values().iterator(); while (activityIt.hasNext()) {
final ClanMemberActivity activity = activityIt.next();
while (activityIt.hasNext()) if (activity.getTick() < this.client.getTickCount() - 10) {
{
ClanMemberActivity activity = activityIt.next();
if (activity.getTick() < client.getTickCount() - MESSAGE_DELAY)
{
activityIt.remove(); activityIt.remove();
addActivityMessage(activity.getMember(), activity.getActivityType()); this.addActivityMessage(activity.getMember(), activity.getActivityType());
} }
} }
} }
private void addActivityMessage(ClanMember member, ClanActivityType activityType) private void addActivityMessage(final ClanMember member, final ClanActivityType activityType) {
{ final String activityMessage = (activityType == ClanActivityType.JOINED) ? " has joined." : " has left.";
final String activityMessage = activityType == ClanActivityType.JOINED ? " has joined." : " has left.";
final ClanMemberRank rank = member.getRank(); final ClanMemberRank rank = member.getRank();
Color textColor = CHAT_CLAN_TEXT_OPAQUE_BACKGROUND; Color textColor = JagexColors.CHAT_CLAN_TEXT_OPAQUE_BACKGROUND;
Color channelColor = CHAT_CLAN_NAME_OPAQUE_BACKGROUND; Color channelColor = JagexColors.CHAT_CLAN_NAME_OPAQUE_BACKGROUND;
int rankIcon = -1; int rankIcon = -1;
if (this.client.isResized() && this.client.getVar(Varbits.TRANSPARENT_CHATBOX) == 1) {
if (client.isResized() && client.getVar(Varbits.TRANSPARENT_CHATBOX) == 1) textColor = JagexColors.CHAT_CLAN_TEXT_TRANSPARENT_BACKGROUND;
{ channelColor = JagexColors.CHAT_CLAN_NAME_TRANSPARENT_BACKGROUND;
textColor = CHAT_CLAN_TEXT_TRANSPARENT_BACKGROUND;
channelColor = CHAT_CLAN_NAME_TRANSPARENT_BACKGROUND;
} }
if (this.config.clanChatIcons() && rank != null && rank != ClanMemberRank.UNRANKED) {
if (config.clanChatIcons() && rank != null && rank != ClanMemberRank.UNRANKED) rankIcon = this.clanManager.getIconNumber(rank);
{
rankIcon = clanManager.getIconNumber(rank);
} }
final ChatMessageBuilder message = new ChatMessageBuilder().append("[").append(channelColor, this.client.getClanChatName());
ChatMessageBuilder message = new ChatMessageBuilder() if (rankIcon > -1) {
.append("[") message.append(" ").img(rankIcon);
.append(channelColor, client.getClanChatName());
if (rankIcon > -1)
{
message
.append(" ")
.img(rankIcon);
} }
message message.append("] ").append(textColor, member.getUsername() + activityMessage);
.append("] ")
.append(textColor, member.getUsername() + activityMessage);
final String messageString = message.build(); final String messageString = message.build();
client.addChatMessage(ChatMessageType.FRIENDSCHATNOTIFICATION, "", messageString, ""); this.client.addChatMessage(ChatMessageType.FRIENDSCHATNOTIFICATION, "", messageString, "");
final ChatLineBuffer chatLineBuffer = this.client.getChatLineMap().get(ChatMessageType.FRIENDSCHATNOTIFICATION.getType());
final ChatLineBuffer chatLineBuffer = client.getChatLineMap().get(ChatMessageType.FRIENDSCHATNOTIFICATION.getType());
final MessageNode[] lines = chatLineBuffer.getLines(); final MessageNode[] lines = chatLineBuffer.getLines();
final MessageNode line = lines[0]; final MessageNode line = lines[0];
final ClanJoinMessage clanJoinMessage = new ClanJoinMessage(line, line.getId(), this.client.getTickCount());
ClanJoinMessage clanJoinMessage = new ClanJoinMessage(line, line.getId(), client.getTickCount()); this.clanJoinMessages.addLast(clanJoinMessage);
clanJoinMessages.addLast(clanJoinMessage);
} }
@Subscribe @Subscribe
public void onVarClientStrChanged(VarClientStrChanged strChanged) public void onVarClientStrChanged(final VarClientStrChanged strChanged) {
{ if (strChanged.getIndex() == VarClientStr.RECENT_CLAN_CHAT.getIndex() && this.config.recentChats()) {
if (strChanged.getIndex() == VarClientStr.RECENT_CLAN_CHAT.getIndex() && config.recentChats()) this.updateRecentChat(this.client.getVar(VarClientStr.RECENT_CLAN_CHAT));
{
updateRecentChat(client.getVar(VarClientStr.RECENT_CLAN_CHAT));
} }
} }
@Subscribe @Subscribe
public void onChatMessage(ChatMessage chatMessage) public void onChatMessage(final ChatMessage chatMessage) {
{ if (this.client.getGameState() != GameState.LOADING && this.client.getGameState() != GameState.LOGGED_IN) {
if (client.getGameState() != GameState.LOADING && client.getGameState() != GameState.LOGGED_IN)
{
return; return;
} }
if (this.client.getClanChatCount() <= 0) {
if (client.getClanChatCount() <= 0)
{
return; return;
} }
switch (chatMessage.getType()) {
switch (chatMessage.getType())
{
case PRIVATECHAT: case PRIVATECHAT:
case MODPRIVATECHAT: case MODPRIVATECHAT: {
if (!config.privateMessageIcons()) if (!this.config.privateMessageIcons()) {
{
return; return;
} }
break; break;
}
case PUBLICCHAT: case PUBLICCHAT:
case MODCHAT: case MODCHAT: {
if (!config.publicChatIcons()) if (!this.config.publicChatIcons()) {
{
return; return;
} }
break; break;
case FRIENDSCHAT: }
if (!config.clanChatIcons()) case FRIENDSCHAT: {
{ if (!this.config.clanChatIcons()) {
return; return;
} }
break; break;
default: }
default: {
return; return;
}
} }
this.insertClanRankIcon(chatMessage);
insertClanRankIcon(chatMessage);
} }
@Subscribe @Subscribe
public void onGameStateChanged(GameStateChanged state) public void onGameStateChanged(final GameStateChanged state) {
{ final GameState gameState = state.getGameState();
GameState gameState = state.getGameState(); if (gameState == GameState.LOGIN_SCREEN || gameState == GameState.CONNECTION_LOST || gameState == GameState.HOPPING) {
ClanChatPlugin.clanMembers.clear();
if (gameState == GameState.LOGIN_SCREEN || gameState == GameState.CONNECTION_LOST || gameState == GameState.HOPPING) this.removeClanCounter();
{ this.clanJoinMessages.clear();
clanMembers.clear();
removeClanCounter();
clanJoinMessages.clear();
} }
} }
@Subscribe @Subscribe
public void onPlayerSpawned(PlayerSpawned event) public void onPlayerSpawned(final PlayerSpawned event) {
{ if (event.getPlayer().isClanMember()) {
final Player local = client.getLocalPlayer(); ClanChatPlugin.clanMembers.add(event.getPlayer());
final Player player = event.getPlayer(); this.addClanCounter();
if (player != local && player.isClanMember())
{
clanMembers.add(player);
addClanCounter();
} }
} }
@Subscribe @Subscribe
public void onPlayerDespawned(PlayerDespawned event) public void onPlayerDespawned(final PlayerDespawned event) {
{ if (ClanChatPlugin.clanMembers.remove(event.getPlayer()) && ClanChatPlugin.clanMembers.isEmpty()) {
if (clanMembers.remove(event.getPlayer()) && clanMembers.isEmpty()) this.removeClanCounter();
{
removeClanCounter();
} }
} }
@Subscribe @Subscribe
public void onClanChanged(ClanChanged event) public void onClanChanged(final ClanChanged event) {
{ if (event.isJoined()) {
if (event.isJoined()) this.clanJoinedTick = this.client.getTickCount();
{
clanJoinedTick = client.getTickCount();
} }
else else {
{ ClanChatPlugin.clanMembers.clear();
clanMembers.clear(); this.removeClanCounter();
removeClanCounter();
} }
this.activityBuffer.clear();
activityBuffer.clear();
} }
int getClanAmount() int getClanAmount() {
{ return ClanChatPlugin.clanMembers.size();
return clanMembers.size();
} }
private void insertClanRankIcon(final ChatMessage message) private void insertClanRankIcon(final ChatMessage message) {
{ final ClanMemberRank rank = this.clanManager.getRank(message.getName());
final ClanMemberRank rank = clanManager.getRank(message.getName()); if (rank != null && rank != ClanMemberRank.UNRANKED) {
final int iconNumber = this.clanManager.getIconNumber(rank);
if (rank != null && rank != ClanMemberRank.UNRANKED)
{
int iconNumber = clanManager.getIconNumber(rank);
final String img = "<img=" + iconNumber + ">"; final String img = "<img=" + iconNumber + ">";
if (message.getType() == ChatMessageType.FRIENDSCHAT) if (message.getType() == ChatMessageType.FRIENDSCHAT) {
{ message.getMessageNode().setSender(message.getMessageNode().getSender() + " " + img);
message.getMessageNode()
.setSender(message.getMessageNode().getSender() + " " + img);
} }
else else {
{ message.getMessageNode().setName(img + message.getMessageNode().getName());
message.getMessageNode()
.setName(img + message.getMessageNode().getName());
} }
client.refreshChat(); this.client.refreshChat();
} }
} }
private void resetClanChats() private void resetClanChats() {
{ final Widget clanChatList = this.client.getWidget(WidgetInfo.CLAN_CHAT_LIST);
Widget clanChatList = client.getWidget(WidgetInfo.CLAN_CHAT_LIST); final Widget clanChatTitleWidget = this.client.getWidget(WidgetInfo.CLAN_CHAT_TITLE);
Widget clanChatTitleWidget = client.getWidget(WidgetInfo.CLAN_CHAT_TITLE); if (clanChatList == null) {
if (clanChatList == null)
{
return; return;
} }
if (this.client.getClanChatCount() == 0) {
if (client.getClanChatCount() == 0)
{
clanChatList.setChildren(null); clanChatList.setChildren(null);
} }
clanChatTitleWidget.setText("Clan Chat");
clanChatTitleWidget.setText(CLAN_CHAT_TITLE);
} }
private void loadClanChats() private void loadClanChats() {
{ final Widget clanChatList = this.client.getWidget(WidgetInfo.CLAN_CHAT_LIST);
Widget clanChatList = client.getWidget(WidgetInfo.CLAN_CHAT_LIST); if (clanChatList == null) {
if (clanChatList == null)
{
return; return;
} }
int y = 2; int y = 2;
clanChatList.setChildren(null); clanChatList.setChildren(null);
for (String chat : Lists.reverse(chats)) for (final String chat : Lists.reverse(this.chats)) {
{ final Widget widget = clanChatList.createChild(-1, 4);
Widget widget = clanChatList.createChild(-1, WidgetType.TEXT);
widget.setFontId(494); widget.setFontId(494);
widget.setTextColor(0xffffff); widget.setTextColor(16777215);
widget.setText(chat); widget.setText(chat);
widget.setOriginalHeight(14); widget.setOriginalHeight(14);
widget.setOriginalWidth(142); widget.setOriginalWidth(142);
widget.setOriginalY(y); widget.setOriginalY(y);
widget.setOriginalX(20); widget.setOriginalX(20);
widget.revalidate(); widget.revalidate();
y += 14; y += 14;
} }
} }
private void updateRecentChat(String s) private void updateRecentChat(String s) {
{ if (Strings.isNullOrEmpty(s)) {
if (Strings.isNullOrEmpty(s))
{
return; return;
} }
s = Text.toJagexName(s); s = Text.toJagexName(s);
final List<String> chats = this.chats;
chats.removeIf(s::equalsIgnoreCase); final String s2 = s;
chats.add(s); Objects.requireNonNull(s2);
chats.removeIf(s2::equalsIgnoreCase);
while (chats.size() > MAX_CHATS) this.chats.add(s);
{ while (this.chats.size() > 10) {
chats.remove(0); this.chats.remove(0);
} }
this.config.chatsData(Text.toCSV(this.chats));
config.chatsData(Text.toCSV(chats));
} }
private void removeClanCounter() private void removeClanCounter() {
{ this.infoBoxManager.removeInfoBox(this.clanMemberCounter);
infoBoxManager.removeInfoBox(clanMemberCounter); this.clanMemberCounter = null;
clanMemberCounter = null;
} }
private void addClanCounter() private void addClanCounter() {
{ if (!this.config.showClanCounter() || this.clanMemberCounter != null || ClanChatPlugin.clanMembers.isEmpty()) {
if (!config.showClanCounter() || clanMemberCounter != null || clanMembers.isEmpty())
{
return; return;
} }
final BufferedImage image = this.spriteManager.getSprite(904, 0);
this.clanMemberCounter = new ClanChatIndicator(image, this);
this.infoBoxManager.addInfoBox(this.clanMemberCounter);
}
final BufferedImage image = spriteManager.getSprite(SpriteID.TAB_CLAN_CHAT, 0); static {
clanMemberCounter = new ClanChatIndicator(image, this); ClanChatPlugin.clanMembers = new CopyOnWriteArrayList<Player>();
infoBoxManager.addInfoBox(clanMemberCounter);
} }
} }

View File

@@ -303,7 +303,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
new CrypticClue("Search the drawers, upstairs in the bank to the East of Varrock.", DRAWERS_7194, new WorldPoint(3250, 3420, 1), "Search the drawers upstairs in Varrock east bank."), new CrypticClue("Search the drawers, upstairs in the bank to the East of Varrock.", DRAWERS_7194, new WorldPoint(3250, 3420, 1), "Search the drawers upstairs in Varrock east bank."),
new CrypticClue("Speak to Hazelmere.", "Hazelmere", new WorldPoint(2677, 3088, 1), "Located upstairs in the house to the north of fairy ring CLS. Answer: 6859"), new CrypticClue("Speak to Hazelmere.", "Hazelmere", new WorldPoint(2677, 3088, 1), "Located upstairs in the house to the north of fairy ring CLS. Answer: 6859"),
new CrypticClue("The effects of this fire are magnified.", new WorldPoint(1179, 3626, 0), "Dig by the fire beside Ket'sal K'uk in the westernmost part of the Kebos Swamp. "), new CrypticClue("The effects of this fire are magnified.", new WorldPoint(1179, 3626, 0), "Dig by the fire beside Ket'sal K'uk in the westernmost part of the Kebos Swamp. "),
new CrypticClue("Always walking around the castle grounds and somehow knows everyone's age.", "Hans", new WorldPoint(3221, 3218, 0), "Talk to Hans walking around Lumbridge Castle."), new CrypticClue("Always walking around the castle grounds and somehow everyone's age.", "Hans", new WorldPoint(3221, 3218, 0), "Talk to Hans walking around Lumbridge Castle."),
new CrypticClue("In the place Duke Horacio calls home, talk to a man with a hat dropped by goblins.", "Cook", new WorldPoint(3208, 3213, 0), "Talk to the Cook in Lumbridge Castle."), new CrypticClue("In the place Duke Horacio calls home, talk to a man with a hat dropped by goblins.", "Cook", new WorldPoint(3208, 3213, 0), "Talk to the Cook in Lumbridge Castle."),
new CrypticClue("In a village of barbarians, I am the one who guards the village from up high.", "Hunding", new WorldPoint(3097, 3432, 2), "Talk to Hunding atop the tower on the east side of Barbarian Village."), new CrypticClue("In a village of barbarians, I am the one who guards the village from up high.", "Hunding", new WorldPoint(3097, 3432, 2), "Talk to Hunding atop the tower on the east side of Barbarian Village."),
new CrypticClue("Talk to Charlie the Tramp in Varrock.", "Charlie the Tramp", new WorldPoint(3209, 3390, 0), "Talk to Charlie the Tramp by the southern entrance to Varrock. He will give you a task."), new CrypticClue("Talk to Charlie the Tramp in Varrock.", "Charlie the Tramp", new WorldPoint(3209, 3390, 0), "Talk to Charlie the Tramp by the southern entrance to Varrock. He will give you a task."),

View File

@@ -143,9 +143,8 @@ public enum HotColdLocation
WILDERNESS_5(new WorldPoint(3169, 3558, 0), WILDERNESS, "North of the Grand Exchange, level 5 Wilderness."), WILDERNESS_5(new WorldPoint(3169, 3558, 0), WILDERNESS, "North of the Grand Exchange, level 5 Wilderness."),
WILDERNESS_12(new WorldPoint(3038, 3612, 0), WILDERNESS, "South-east of the Dark Warriors' Fortress, level 12 Wilderness."), WILDERNESS_12(new WorldPoint(3038, 3612, 0), WILDERNESS, "South-east of the Dark Warriors' Fortress, level 12 Wilderness."),
WILDERNESS_20(new WorldPoint(3225, 3676, 0), WILDERNESS, "East of the Corporeal Beast's lair, level 20 Wilderness."), WILDERNESS_20(new WorldPoint(3225, 3676, 0), WILDERNESS, "East of the Corporeal Beast's lair, level 20 Wilderness."),
WILDERNESS_27(new WorldPoint(3174, 3735, 0), WILDERNESS, "Inside the Ruins north of the Graveyard of Shadows, level 27 Wilderness."), WILDERNESS_27(new WorldPoint(3174, 3735, 0), WILDERNESS, "North-west of the Corporeal Beast cave, in the ruins at level 27 Wilderness."),
WILDERNESS_28(new WorldPoint(3374, 3734, 0), WILDERNESS, "East of Venenatis' nest, level 28 Wilderness."), WILDERNESS_28(new WorldPoint(3374, 3734, 0), WILDERNESS, "East of Venenatis' nest, level 28 Wilderness."),
WILDERNESS_32(new WorldPoint(3311, 3773, 0), WILDERNESS, "North of Venenatis' nest, level 32 Wilderness."),
WILDERNESS_35(new WorldPoint(3153, 3795, 0), WILDERNESS, "East of the Wilderness canoe exit, level 35 Wilderness."), WILDERNESS_35(new WorldPoint(3153, 3795, 0), WILDERNESS, "East of the Wilderness canoe exit, level 35 Wilderness."),
WILDERNESS_37(new WorldPoint(2975, 3811, 0), WILDERNESS, "South-east of the Chaos Temple, level 37 Wilderness."), WILDERNESS_37(new WorldPoint(2975, 3811, 0), WILDERNESS, "South-east of the Chaos Temple, level 37 Wilderness."),
WILDERNESS_38(new WorldPoint(3294, 3817, 0), WILDERNESS, "South of Callisto, level 38 Wilderness."), WILDERNESS_38(new WorldPoint(3294, 3817, 0), WILDERNESS, "South of Callisto, level 38 Wilderness."),

View File

@@ -406,7 +406,10 @@ public class DiscordPlugin extends Plugin
final EnumSet<WorldType> worldType = client.getWorldType(); final EnumSet<WorldType> worldType = client.getWorldType();
// Do not show location in PVP activities // Do not show location in PVP activities
if (WorldType.isPvpWorld(worldType)) if (worldType.contains(WorldType.SEASONAL_DEADMAN) ||
worldType.contains(WorldType.DEADMAN) ||
worldType.contains(WorldType.PVP) ||
worldType.contains(WorldType.PVP_HIGH_RISK))
{ {
return false; return false;
} }

View File

@@ -118,15 +118,4 @@ public interface FishingConfig extends Config
{ {
return true; return true;
} }
@ConfigItem(
position = 8,
keyName = "trawlerTimer",
name = "Trawler timer in MM:SS",
description = "Trawler Timer will display a more accurate timer in MM:SS format."
)
default boolean trawlerTimer()
{
return true;
}
} }

View File

@@ -57,10 +57,6 @@ import net.runelite.api.events.ItemContainerChanged;
import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcDespawned;
import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.NpcSpawned;
import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.VarbitChanged;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.Notifier; import net.runelite.client.Notifier;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
@@ -82,10 +78,8 @@ public class FishingPlugin extends Plugin
{ {
private static final int TRAWLER_SHIP_REGION_NORMAL = 7499; private static final int TRAWLER_SHIP_REGION_NORMAL = 7499;
private static final int TRAWLER_SHIP_REGION_SINKING = 8011; private static final int TRAWLER_SHIP_REGION_SINKING = 8011;
private static final int TRAWLER_TIME_LIMIT_IN_SECONDS = 614;
private static final int TRAWLER_ACTIVITY_THRESHOLD = Math.round(0.15f * 255);
private Instant trawlerStartTime; private static final int TRAWLER_ACTIVITY_THRESHOLD = Math.round(0.15f * 255);
@Getter(AccessLevel.PACKAGE) @Getter(AccessLevel.PACKAGE)
private final FishingSession session = new FishingSession(); private final FishingSession session = new FishingSession();
@@ -148,7 +142,6 @@ public class FishingPlugin extends Plugin
minnowSpots.clear(); minnowSpots.clear();
trawlerNotificationSent = false; trawlerNotificationSent = false;
currentSpot = null; currentSpot = null;
trawlerStartTime = null;
} }
@Subscribe @Subscribe
@@ -303,11 +296,6 @@ public class FishingPlugin extends Plugin
} }
} }
} }
if (config.trawlerTimer())
{
updateTrawlerTimer();
}
} }
@Subscribe @Subscribe
@@ -363,66 +351,6 @@ public class FishingPlugin extends Plugin
} }
} }
@Subscribe
public void onWidgetLoaded(WidgetLoaded event)
{
if (event.getGroupId() == WidgetID.FISHING_TRAWLER_GROUP_ID)
{
trawlerStartTime = Instant.now();
}
}
/**
* Changes the Fishing Trawler timer widget from minutes to minutes and seconds
*/
private void updateTrawlerTimer()
{
if (trawlerStartTime == null)
{
return;
}
int regionID = client.getLocalPlayer().getWorldLocation().getRegionID();
if (regionID != TRAWLER_SHIP_REGION_NORMAL && regionID != TRAWLER_SHIP_REGION_SINKING)
{
log.debug("Trawler session ended");
return;
}
Widget trawlerTimerWidget = client.getWidget(WidgetInfo.FISHING_TRAWLER_TIMER);
if (trawlerTimerWidget == null)
{
return;
}
long timeLeft = TRAWLER_TIME_LIMIT_IN_SECONDS - Duration.between(trawlerStartTime, Instant.now()).getSeconds();
int minutes = (int) timeLeft / 60;
int seconds = (int) timeLeft % 60;
final StringBuilder trawlerText = new StringBuilder();
trawlerText.append("Time Left: ");
if (minutes > 0)
{
trawlerText.append(minutes);
}
else
{
trawlerText.append("00");
}
trawlerText.append(':');
if (seconds < 10)
{
trawlerText.append("0");
}
trawlerText.append(seconds);
trawlerTimerWidget.setText(trawlerText.toString());
}
private void inverseSortSpotDistanceFromPlayer() private void inverseSortSpotDistanceFromPlayer()
{ {
final LocalPoint cameraPoint = new LocalPoint(client.getCameraX(), client.getCameraY()); final LocalPoint cameraPoint = new LocalPoint(client.getCameraX(), client.getCameraY());

View File

@@ -37,6 +37,7 @@ public interface NpcAggroAreaConfig extends Config
String CONFIG_CENTER2 = "center2"; String CONFIG_CENTER2 = "center2";
String CONFIG_LOCATION = "location"; String CONFIG_LOCATION = "location";
String CONFIG_DURATION = "duration"; String CONFIG_DURATION = "duration";
String CONFIG_NOT_WORKING_OVERLAY = "overlay";
@ConfigItem( @ConfigItem(
keyName = "npcUnaggroAlwaysActive", keyName = "npcUnaggroAlwaysActive",
@@ -95,12 +96,12 @@ public interface NpcAggroAreaConfig extends Config
@ConfigItem( @ConfigItem(
keyName = "npcUnaggroShowNotWorkingOverlay", keyName = "npcUnaggroShowNotWorkingOverlay",
name = "Hide overlay hint", name = "Show not working hint",
description = "Hide overlay hint if plugin is enabled in unsupported area", description = "Show hint if plugin is enabled in unsupported area",
position = 6 position = 6
) )
default boolean hideOverlayHint() default boolean showNotWorkingOverlay()
{ {
return false; return true;
} }
} }

View File

@@ -36,14 +36,12 @@ import net.runelite.client.ui.overlay.components.PanelComponent;
class NpcAggroAreaNotWorkingOverlay extends Overlay class NpcAggroAreaNotWorkingOverlay extends Overlay
{ {
private final NpcAggroAreaPlugin plugin; private final NpcAggroAreaPlugin plugin;
private final NpcAggroAreaConfig config;
private final PanelComponent panelComponent; private final PanelComponent panelComponent;
@Inject @Inject
private NpcAggroAreaNotWorkingOverlay(NpcAggroAreaPlugin plugin, NpcAggroAreaConfig config) private NpcAggroAreaNotWorkingOverlay(NpcAggroAreaPlugin plugin)
{ {
this.plugin = plugin; this.plugin = plugin;
this.config = config;
panelComponent = new PanelComponent(); panelComponent = new PanelComponent();
panelComponent.setPreferredSize(new Dimension(150, 0)); panelComponent.setPreferredSize(new Dimension(150, 0));
@@ -58,7 +56,7 @@ class NpcAggroAreaNotWorkingOverlay extends Overlay
@Override @Override
public Dimension render(Graphics2D graphics) public Dimension render(Graphics2D graphics)
{ {
if (!plugin.isActive() || plugin.getSafeCenters()[1] != null || config.hideOverlayHint()) if (!plugin.isActive() || plugin.getSafeCenters()[1] != null)
{ {
return null; return null;
} }

View File

@@ -128,6 +128,7 @@ public class NpcAggroAreaPlugin extends Plugin
private WorldPoint previousUnknownCenter; private WorldPoint previousUnknownCenter;
private boolean loggingIn; private boolean loggingIn;
private List<String> npcNamePatterns; private List<String> npcNamePatterns;
private boolean notWorkingOverlayShown = false;
@Provides @Provides
NpcAggroAreaConfig provideConfig(ConfigManager configManager) NpcAggroAreaConfig provideConfig(ConfigManager configManager)
@@ -139,7 +140,12 @@ public class NpcAggroAreaPlugin extends Plugin
protected void startUp() throws Exception protected void startUp() throws Exception
{ {
overlayManager.add(overlay); overlayManager.add(overlay);
if (config.showNotWorkingOverlay())
{
overlayManager.add(notWorkingOverlay); overlayManager.add(notWorkingOverlay);
notWorkingOverlayShown = true;
}
npcNamePatterns = NAME_SPLITTER.splitToList(config.npcNamePatterns()); npcNamePatterns = NAME_SPLITTER.splitToList(config.npcNamePatterns());
recheckActive(); recheckActive();
} }
@@ -149,7 +155,11 @@ public class NpcAggroAreaPlugin extends Plugin
{ {
removeTimer(); removeTimer();
overlayManager.remove(overlay); overlayManager.remove(overlay);
if (notWorkingOverlayShown)
{
overlayManager.remove(notWorkingOverlay); overlayManager.remove(notWorkingOverlay);
}
Arrays.fill(safeCenters, null); Arrays.fill(safeCenters, null);
lastPlayerLocation = null; lastPlayerLocation = null;
currentTimer = null; currentTimer = null;
@@ -406,6 +416,7 @@ public class NpcAggroAreaPlugin extends Plugin
configManager.unsetConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_CENTER2); configManager.unsetConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_CENTER2);
configManager.unsetConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_LOCATION); configManager.unsetConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_LOCATION);
configManager.unsetConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_DURATION); configManager.unsetConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_DURATION);
configManager.unsetConfiguration(NpcAggroAreaConfig.CONFIG_GROUP, NpcAggroAreaConfig.CONFIG_NOT_WORKING_OVERLAY);
} }
private void saveConfig() private void saveConfig()

View File

@@ -36,11 +36,12 @@ import net.runelite.api.SpriteID;
import net.runelite.api.VarClientInt; import net.runelite.api.VarClientInt;
import net.runelite.api.Varbits; import net.runelite.api.Varbits;
import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.ScriptCallbackEvent;
import net.runelite.api.events.VarClientIntChanged; import net.runelite.api.events.VarClientIntChanged;
import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.VarbitChanged;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.JavaScriptCallback; import net.runelite.api.widgets.JavaScriptCallback;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetInfo;
import net.runelite.api.widgets.WidgetPositionMode; import net.runelite.api.widgets.WidgetPositionMode;
import net.runelite.api.widgets.WidgetType; import net.runelite.api.widgets.WidgetType;
@@ -103,45 +104,46 @@ public class QuestListPlugin extends Plugin
} }
@Subscribe @Subscribe
public void onScriptCallbackEvent(ScriptCallbackEvent event) public void onWidgetLoaded(WidgetLoaded widgetLoaded)
{ {
if (!event.getEventName().equals("questProgressUpdated")) if (widgetLoaded.getGroupId() == WidgetID.QUESTLIST_GROUP_ID)
{ {
return; Widget header = client.getWidget(WidgetInfo.QUESTLIST_BOX);
} if (header != null)
{
questSearchButton = header.createChild(-1, WidgetType.GRAPHIC);
questSearchButton.setSpriteId(SpriteID.GE_SEARCH);
questSearchButton.setOriginalWidth(18);
questSearchButton.setOriginalHeight(17);
questSearchButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questSearchButton.setOriginalX(5);
questSearchButton.setOriginalY(0);
questSearchButton.setHasListener(true);
questSearchButton.setAction(1, MENU_OPEN);
questSearchButton.setOnOpListener((JavaScriptCallback) e -> openSearch());
questSearchButton.setName(MENU_SEARCH);
questSearchButton.revalidate();
Widget header = client.getWidget(WidgetInfo.QUESTLIST_BOX); questHideButton = header.createChild(-1, WidgetType.GRAPHIC);
if (header != null) redrawHideButton();
{
questSearchButton = header.createChild(-1, WidgetType.GRAPHIC);
questSearchButton.setSpriteId(SpriteID.GE_SEARCH);
questSearchButton.setOriginalWidth(18);
questSearchButton.setOriginalHeight(17);
questSearchButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questSearchButton.setOriginalX(5);
questSearchButton.setOriginalY(0);
questSearchButton.setHasListener(true);
questSearchButton.setAction(1, MENU_OPEN);
questSearchButton.setOnOpListener((JavaScriptCallback) e -> openSearch());
questSearchButton.setName(MENU_SEARCH);
questSearchButton.revalidate();
questHideButton = header.createChild(-1, WidgetType.GRAPHIC); questHideButton.setOriginalWidth(13);
redrawHideButton(); questHideButton.setOriginalHeight(13);
questHideButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questHideButton.setOriginalX(24);
questHideButton.setOriginalY(2);
questHideButton.setHasListener(true);
questHideButton.setOnOpListener((JavaScriptCallback) e -> toggleHidden());
questHideButton.setAction(1, MENU_TOGGLE);
questHideButton.revalidate();
questHideButton.setOriginalWidth(13); questSet = new EnumMap<>(QuestContainer.class);
questHideButton.setOriginalHeight(13);
questHideButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questHideButton.setOriginalX(24);
questHideButton.setOriginalY(2);
questHideButton.setHasListener(true);
questHideButton.setOnOpListener((JavaScriptCallback) e -> toggleHidden());
questHideButton.setAction(1, MENU_TOGGLE);
questHideButton.revalidate();
questSet = new EnumMap<>(QuestContainer.class); if (!header.isHidden())
{
updateFilter(); updateFilter();
}
}
} }
} }
@@ -257,26 +259,21 @@ public class QuestListPlugin extends Plugin
int y = miniList.getRelativeY() + miniList.getHeight() + 10; int y = miniList.getRelativeY() + miniList.getHeight() + 10;
int newHeight; int newHeight = 0;
if (container.getScrollHeight() > 0) if (container.getScrollHeight() > 0)
{ {
newHeight = (container.getScrollY() * y) / container.getScrollHeight(); newHeight = (container.getScrollY() * y) / container.getScrollHeight();
} }
else
{
newHeight = 0;
}
container.setScrollHeight(y); container.setScrollHeight(y);
container.revalidateScroll(); container.revalidateScroll();
clientThread.invokeLater(() -> client.runScript(
client.runScript( ScriptID.UPDATE_SCROLLBAR,
ScriptID.UPDATE_SCROLLBAR, WidgetInfo.QUESTLIST_SCROLLBAR.getId(),
WidgetInfo.QUESTLIST_SCROLLBAR.getId(), WidgetInfo.QUESTLIST_CONTAINER.getId(),
WidgetInfo.QUESTLIST_CONTAINER.getId(), newHeight
newHeight );
));
} }
private void updateList(QuestContainer questContainer, String filter) private void updateList(QuestContainer questContainer, String filter)
@@ -312,7 +309,7 @@ public class QuestListPlugin extends Plugin
// Find all of the widgets that we care about, sorting by their Y value // Find all of the widgets that we care about, sorting by their Y value
quests = Arrays.stream(list.getDynamicChildren()) quests = Arrays.stream(list.getDynamicChildren())
.sorted(Comparator.comparing(Widget::getRelativeY)) .sorted(Comparator.comparing(Widget::getRelativeY))
.filter(w -> !QUEST_HEADERS.contains(w.getText())) .filter(w -> !w.isSelfHidden() && !QUEST_HEADERS.contains(w.getText()))
.map(w -> new QuestWidget(w, Text.removeTags(w.getText()).toLowerCase())) .map(w -> new QuestWidget(w, Text.removeTags(w.getText()).toLowerCase()))
.collect(Collectors.toList()); .collect(Collectors.toList());
questSet.put(questContainer, quests); questSet.put(questContainer, quests);

View File

@@ -554,7 +554,7 @@ public class WorldHopperPlugin extends Plugin
if (config.quickhopOutOfDanger()) if (config.quickhopOutOfDanger())
{ {
currentWorldTypes.remove(WorldType.PVP); currentWorldTypes.remove(WorldType.PVP);
currentWorldTypes.remove(WorldType.HIGH_RISK); currentWorldTypes.remove(WorldType.PVP_HIGH_RISK);
} }
// Don't regard these worlds as a type that must be hopped between // Don't regard these worlds as a type that must be hopped between
currentWorldTypes.remove(WorldType.BOUNTY); currentWorldTypes.remove(WorldType.BOUNTY);

View File

@@ -245,7 +245,7 @@ class WorldTableRow extends JPanel
return; return;
} }
else if (world.getTypes().contains(WorldType.PVP) else if (world.getTypes().contains(WorldType.PVP)
|| world.getTypes().contains(WorldType.HIGH_RISK) || world.getTypes().contains(WorldType.PVP_HIGH_RISK)
|| world.getTypes().contains(WorldType.DEADMAN) || world.getTypes().contains(WorldType.DEADMAN)
|| world.getTypes().contains(WorldType.SEASONAL_DEADMAN)) || world.getTypes().contains(WorldType.SEASONAL_DEADMAN))
{ {

View File

@@ -1 +0,0 @@
A6B3A7BFE7B688A08F69B91A7FD5C7184D71147D3DAF74B1262369D85DBB3A03

View File

@@ -1,198 +0,0 @@
.id 1354
.int_stack_count 3
.string_stack_count 0
.int_var_count 7
.string_var_count 0
iconst 0
istore 3
iconst 0
istore 4
iconst 0
istore 5
invoke 1340
istore 6
LABEL8:
iload 5
iload 6
if_icmplt LABEL12
jump LABEL56
LABEL12:
iload 0
iload 5
cc_find
iconst 1
if_icmpeq LABEL18
jump LABEL51
LABEL18:
iload 5
invoke 1357
istore 3
iload 3
iconst 2
if_icmpeq LABEL25
jump LABEL28
LABEL25:
iconst 901389
istore 4
jump LABEL37
LABEL28:
iload 3
iconst 0
if_icmpeq LABEL32
jump LABEL35
LABEL32:
iconst 16776960
istore 4
jump LABEL37
LABEL35:
iconst 16711680
istore 4
LABEL37:
iload 4
cc_setcolour
iconst 85
iconst -2147483645
iconst -2147483643
iconst 16777215
sconst "Iii"
cc_setonmouseover
iconst 85
iconst -2147483645
iconst -2147483643
iload 4
sconst "Iii"
cc_setonmouseleave
LABEL51:
iload 5
iconst 1
add
istore 5
jump LABEL8
LABEL56:
iconst 0
invoke 2245
istore 6
istore 5
LABEL60:
iload 5
iload 6
if_icmplt LABEL64
jump LABEL108
LABEL64:
iload 1
iload 5
cc_find
iconst 1
if_icmpeq LABEL70
jump LABEL103
LABEL70:
iload 5
invoke 1358
istore 3
iload 3
iconst 2
if_icmpeq LABEL77
jump LABEL80
LABEL77:
iconst 901389
istore 4
jump LABEL89
LABEL80:
iload 3
iconst 0
if_icmpeq LABEL84
jump LABEL87
LABEL84:
iconst 16776960
istore 4
jump LABEL89
LABEL87:
iconst 16711680
istore 4
LABEL89:
iload 4
cc_setcolour
iconst 85
iconst -2147483645
iconst -2147483643
iconst 16777215
sconst "Iii"
cc_setonmouseover
iconst 85
iconst -2147483645
iconst -2147483643
iload 4
sconst "Iii"
cc_setonmouseleave
LABEL103:
iload 5
iconst 1
add
istore 5
jump LABEL60
LABEL108:
iconst 0
invoke 2265
istore 6
istore 5
LABEL112:
iload 5
iload 6
if_icmplt LABEL116
jump LABEL160
LABEL116:
iload 2
iload 5
cc_find
iconst 1
if_icmpeq LABEL122
jump LABEL155
LABEL122:
iload 5
invoke 1359
istore 3
iload 3
iconst 2
if_icmpeq LABEL129
jump LABEL132
LABEL129:
iconst 901389
istore 4
jump LABEL141
LABEL132:
iload 3
iconst 0
if_icmpeq LABEL136
jump LABEL139
LABEL136:
iconst 16776960
istore 4
jump LABEL141
LABEL139:
iconst 16711680
istore 4
LABEL141:
iload 4
cc_setcolour
iconst 85
iconst -2147483645
iconst -2147483643
iconst 16777215
sconst "Iii"
cc_setonmouseover
iconst 85
iconst -2147483645
iconst -2147483643
iload 4
sconst "Iii"
cc_setonmouseleave
LABEL155:
iload 5
iconst 1
add
istore 5
jump LABEL112
LABEL160:
sconst "questProgressUpdated"
runelite_callback
return