diff --git a/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java b/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java
index b3746be9e9..977dfec0ff 100644
--- a/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java
+++ b/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java
@@ -50,10 +50,11 @@ public class MenuOptionClicked implements Event
authentic = true;
}
- public MenuOptionClicked(MenuEntry entry, boolean authentic)
+ public MenuOptionClicked(MenuEntry entry, boolean authentic, int mouseButton)
{
menuEntry = entry;
this.authentic = authentic;
+ this.mouseButton = mouseButton;
}
/**
@@ -127,6 +128,11 @@ public class MenuOptionClicked implements Event
*/
private boolean consumed;
+ /**
+ * The mouse button will be 1 if a non draggable widget was clicked,
+ */
+ private int mouseButton;
+
/**
* Marks the event as having been consumed.
*
diff --git a/runelite-client/src/main/java/net/runelite/client/menus/ComparableEntries.java b/runelite-client/src/main/java/net/runelite/client/menus/ComparableEntries.java
index 75b63f99a4..02bb88d796 100644
--- a/runelite-client/src/main/java/net/runelite/client/menus/ComparableEntries.java
+++ b/runelite-client/src/main/java/net/runelite/client/menus/ComparableEntries.java
@@ -71,6 +71,6 @@ public interface ComparableEntries
*/
static BankComparableEntry newBankComparableEntry(String option, String itemName)
{
- return new BankComparableEntry(option, itemName);
+ return new BankComparableEntry(option, itemName, true);
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java
index 11bcb9798f..b50b527ba0 100644
--- a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java
+++ b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java
@@ -429,9 +429,7 @@ public class MenuManager
{
if (!client.isMenuOpen() && event.isAuthentic())
{
- // The mouse button will not be 0 if a non draggable widget was clicked,
- // otherwise the left click entry will have been set in onWidgetPressed
- if (client.getMouseCurrentButton() != 0)
+ if (event.getMouseButton() != 0)
{
leftClickEntry = rebuildLeftClickMenu();
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/BankComparableEntry.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/BankComparableEntry.java
index 3cfde1b37d..30961a8e9e 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/BankComparableEntry.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/BankComparableEntry.java
@@ -10,10 +10,11 @@ import net.runelite.client.util.Text;
@EqualsAndHashCode(callSuper = true)
public class BankComparableEntry extends AbstractComparableEntry
{
- public BankComparableEntry(String option, String itemName)
+ public BankComparableEntry(String option, String itemName, boolean strictTarget)
{
this.setOption(Text.standardize(option));
this.setTarget(Text.standardize(itemName));
+ this.setStrictTarget(strictTarget);
}
public boolean matches(MenuEntry entry)
@@ -25,6 +26,11 @@ public class BankComparableEntry extends AbstractComparableEntry
return false;
}
- return Text.standardize(entry.getOption()).contains(this.getOption()) && Text.standardize(entry.getTarget()).equals(this.getTarget());
+ if (isStrictTarget() && Text.standardize(entry.getTarget()).equals(this.getTarget()))
+ {
+ return false;
+ }
+
+ return Text.standardize(entry.getOption()).contains(this.getOption()) && Text.standardize(entry.getTarget()).contains(this.getTarget());
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/InventoryComparableEntry.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/InventoryComparableEntry.java
new file mode 100644
index 0000000000..cbdd849644
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/InventoryComparableEntry.java
@@ -0,0 +1,36 @@
+package net.runelite.client.plugins.menuentryswapper;
+
+import lombok.EqualsAndHashCode;
+import net.runelite.api.MenuEntry;
+import net.runelite.api.widgets.WidgetID;
+import net.runelite.api.widgets.WidgetInfo;
+import net.runelite.client.menus.AbstractComparableEntry;
+import net.runelite.client.util.Text;
+
+@EqualsAndHashCode(callSuper = true)
+public class InventoryComparableEntry extends AbstractComparableEntry
+{
+ public InventoryComparableEntry(String option, String itemName, boolean strictTarget)
+ {
+ this.setOption(Text.standardize(option));
+ this.setTarget(Text.standardize(itemName));
+ this.setStrictTarget(strictTarget);
+ }
+
+ public boolean matches(MenuEntry entry)
+ {
+ final int groupId = WidgetInfo.TO_GROUP(entry.getParam1());
+
+ if (groupId != WidgetID.INVENTORY_GROUP_ID)
+ {
+ return false;
+ }
+
+ if (isStrictTarget() && Text.standardize(entry.getTarget()).equals(this.getTarget()))
+ {
+ return false;
+ }
+
+ return Text.standardize(entry.getOption()).contains(this.getOption()) && Text.standardize(entry.getTarget()).contains(this.getTarget());
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java
index ad6e33279d..9ab4369662 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java
@@ -1248,7 +1248,7 @@ public class MenuEntrySwapperPlugin extends Plugin
if (this.swapBoxTrap)
{
- menuManager.addPriorityEntry("Reset", "Box trap");
+ menuManager.addPriorityEntry("Reset", "Shaking box");
menuManager.addPriorityEntry("Lay", "Box trap");
menuManager.addPriorityEntry("Activate", "Box trap");
}
@@ -1318,21 +1318,19 @@ public class MenuEntrySwapperPlugin extends Plugin
if (this.swapTeleportItem)
{
- menuManager.addSwap("Wear", "", "Rub");
- menuManager.addSwap("Wield", "", "Rub");
- menuManager.addSwap("Wear", "", "Teleport");
- menuManager.addSwap("Wield", "", "Teleport");
+ menuManager.addPriorityEntry(new InventoryComparableEntry("Rub", "", false)).setPriority(1);
+ menuManager.addPriorityEntry(new InventoryComparableEntry("Teleport", "", false)).setPriority(1);
}
if (this.swapCoalBag)
{
menuManager.addPriorityEntry("Fill", "Coal bag");
- menuManager.addPriorityEntry(new BankComparableEntry("Empty", "Coal bag"));
+ menuManager.addPriorityEntry(newBankComparableEntry("Empty", "Coal bag"));
}
if (this.swapBones)
{
- menuManager.addSwap("Bury", "", "Use");
+ menuManager.addPriorityEntry(new InventoryComparableEntry("Use", "bone", false));
}
if (this.swapNexus)
@@ -1498,17 +1496,20 @@ public class MenuEntrySwapperPlugin extends Plugin
Text.fromCSV(this.getSellFiftyItems).forEach(item -> menuManager.removePriorityEntry("Sell 50", item));
menuManager.removeSwaps("Fairy ring");
menuManager.removeSwaps("Tree");
- menuManager.removePriorityEntry(this.getGloryMode.toString());
- menuManager.removePriorityEntry(this.getGloryMode.toString());
- menuManager.removePriorityEntry(this.getSkillsNecklaceMode.toString());
- menuManager.removePriorityEntry(this.getNecklaceofPassageMode.toString());
- menuManager.removePriorityEntry(this.getDigsitePendantMode.toString());
- menuManager.removePriorityEntry(this.getSlayerRingMode.toString());
- menuManager.removePriorityEntry(this.getSlayerRingMode.toString());
- menuManager.removePriorityEntry(this.getXericsTalismanMode.toString());
- menuManager.removePriorityEntry(this.getRingofWealthMode.toString());
+ menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getBurningAmuletMode.toString(), "burning amulet"));
+ menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getCombatBraceletMode.toString(), "combat bracelet"));
+ menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getGamesNecklaceMode.toString(), "games necklace"));
+ menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getDuelingRingMode.toString(), "ring of dueling"));
+ menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getGloryMode.toString(), "glory"));
+ menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getSkillsNecklaceMode.toString(), "skills necklace"));
+ menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getNecklaceofPassageMode.toString(), "necklace of passage"));
+ menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getDigsitePendantMode.toString(), "digsite pendant"));
+ menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getSlayerRingMode.toString(), "slayer ring"));
+ menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getXericsTalismanMode.toString(), "talisman"));
+ menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getRingofWealthMode.toString(), "ring of wealth"));
menuManager.removePriorityEntry(this.maxMode.toString(), "max cape");
menuManager.removePriorityEntry(this.questCapeMode.toString(), "quest point cape");
+ menuManager.removePriorityEntry(new InventoryComparableEntry("Use", "bone", false));
menuManager.removePriorityEntry("Smith All");
menuManager.removePriorityEntry("Smith All Sets");
menuManager.removePriorityEntry("Tan All");
@@ -1568,7 +1569,7 @@ public class MenuEntrySwapperPlugin extends Plugin
menuManager.removePriorityEntry("Pay-toll(10gp)", "Gate");
menuManager.removePriorityEntry("Travel", "Trapdoor");
menuManager.removePriorityEntry("Harpoon");
- menuManager.removePriorityEntry("Reset", "Box trap");
+ menuManager.removePriorityEntry("Reset", "Shaking box");
menuManager.removePriorityEntry("Lay", "Box trap");
menuManager.removePriorityEntry("Activate", "Box trap");
menuManager.removePriorityEntry("Chase");
@@ -1601,10 +1602,8 @@ public class MenuEntrySwapperPlugin extends Plugin
menuManager.removePriorityEntry("Search");
menuManager.removePriorityEntry("Search for traps");
menuManager.removePriorityEntry("Guzzle", "Dwarven rock cake");
- menuManager.removeSwap("Wear", "", "Rub");
- menuManager.removeSwap("Wield", "", "Rub");
- menuManager.removeSwap("Wear", "", "Teleport");
- menuManager.removeSwap("Wield", "", "Teleport");
+ menuManager.removePriorityEntry(new InventoryComparableEntry("Rub", "", false));
+ menuManager.removePriorityEntry(new InventoryComparableEntry("Teleport", "", false));
menuManager.removePriorityEntry(this.getConstructionMode.getBuild());
menuManager.removePriorityEntry(this.getConstructionMode.getRemove());
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java
index cf2adbfb4a..ef52865434 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftConfig.java
@@ -49,6 +49,8 @@ public interface RunecraftConfig extends Config
name = "Lavas",
description = "Swaps Ring of dueling menu entry depending on location, requires fire tiara or RC cape to be worn.",
parent = "utilStub",
+ warning = "
This config option is incompatible with menu-entry-swapper equipment swaps." +
+ "
Expect bugs if you use them together.",
position = 2
)
default boolean Lavas()
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java
index 5e6c605888..0ca5735033 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java
@@ -24,10 +24,9 @@
*/
package net.runelite.client.plugins.runecraft;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.inject.Provides;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
import java.util.stream.Stream;
import javax.inject.Inject;
@@ -37,12 +36,11 @@ import lombok.Getter;
import net.runelite.api.ChatMessageType;
import net.runelite.api.Client;
import net.runelite.api.DecorativeObject;
-import net.runelite.api.EquipmentInventorySlot;
import net.runelite.api.GameState;
import net.runelite.api.InventoryID;
import net.runelite.api.Item;
+import net.runelite.api.ItemContainer;
import net.runelite.api.ItemID;
-import net.runelite.api.MenuEntry;
import net.runelite.api.NPC;
import net.runelite.api.NpcID;
import net.runelite.api.events.ChatMessage;
@@ -51,18 +49,19 @@ import net.runelite.api.events.DecorativeObjectDespawned;
import net.runelite.api.events.DecorativeObjectSpawned;
import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.ItemContainerChanged;
-import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.NpcDespawned;
import net.runelite.api.events.NpcSpawned;
import net.runelite.client.Notifier;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.EventBus;
+import net.runelite.client.menus.BaseComparableEntry;
+import static net.runelite.client.menus.ComparableEntries.newBaseComparableEntry;
import net.runelite.client.menus.MenuManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
+import net.runelite.client.plugins.menuentryswapper.BankComparableEntry;
+import net.runelite.client.plugins.menuentryswapper.EquipmentComparableEntry;
import net.runelite.client.ui.overlay.OverlayManager;
-import static net.runelite.client.util.MenuUtil.swap;
-import net.runelite.client.util.Text;
@PluginDescriptor(
@@ -71,89 +70,68 @@ import net.runelite.client.util.Text;
tags = {"abyssal", "minimap", "overlay", "rifts", "rc", "runecrafting"}
)
@Singleton
+@Getter(AccessLevel.PACKAGE)
public class RunecraftPlugin extends Plugin
{
- private static final int FIRE_ALTAR = 10315;
- private static final String POUCH_DECAYED_NOTIFICATION_MESSAGE = "Your rune pouch has decayed.";
+ private static final BankComparableEntry POUCH = new BankComparableEntry("fill", "pouch", false);
+ private static final BaseComparableEntry EMPTY = newBaseComparableEntry("empty", "pouch", false);
+ private static final EquipmentComparableEntry CASTLE_WARS = new EquipmentComparableEntry("castle wars", "ring of dueling");
+ private static final EquipmentComparableEntry DUEL_ARENA = new EquipmentComparableEntry("duel arena", "ring of dueling");
private static final String POUCH_DECAYED_MESSAGE = "Your pouch has decayed through use.";
- private static final List DEGRADED_POUCHES = ImmutableList.of(
+ private static final String POUCH_DECAYED_NOTIFICATION_MESSAGE = "Your rune pouch has decayed.";
+ private static final int FIRE_ALTAR = 10315;
+ private static final Set DEGRADED_POUCHES = ImmutableSet.of(
ItemID.MEDIUM_POUCH_5511,
ItemID.LARGE_POUCH_5513,
ItemID.GIANT_POUCH_5515
);
-
- private boolean wearingTiara;
- private boolean wearingCape;
-
- @Getter(AccessLevel.PACKAGE)
- private final Set abyssObjects = new HashSet<>();
-
- @Getter(AccessLevel.PACKAGE)
- private boolean degradedPouchInInventory;
-
- @Getter(AccessLevel.PACKAGE)
- private NPC darkMage;
-
@Inject
+ @Getter(AccessLevel.NONE)
private Client client;
-
@Inject
+ @Getter(AccessLevel.NONE)
private OverlayManager overlayManager;
-
@Inject
+ @Getter(AccessLevel.NONE)
private AbyssOverlay abyssOverlay;
-
@Inject
+ @Getter(AccessLevel.NONE)
private RunecraftOverlay runecraftOverlay;
-
@Inject
+ @Getter(AccessLevel.NONE)
private RunecraftConfig config;
-
@Inject
+ @Getter(AccessLevel.NONE)
private Notifier notifier;
-
@Inject
+ @Getter(AccessLevel.NONE)
private MenuManager menuManager;
-
@Inject
+ @Getter(AccessLevel.NONE)
private EventBus eventBus;
- private boolean Lavas;
- @Getter(AccessLevel.PACKAGE)
- private boolean essPouch;
- @Getter(AccessLevel.PACKAGE)
- private boolean hightlightDarkMage;
+ private final Set abyssObjects = new HashSet<>();
+ private boolean degradedPouchInInventory;
private boolean degradingNotification;
- @Getter(AccessLevel.PACKAGE)
- private boolean showRifts;
- @Getter(AccessLevel.PACKAGE)
+ private boolean essPouch;
+ private boolean hightlightDarkMage;
+ private boolean lavas;
private boolean showAir;
- @Getter(AccessLevel.PACKAGE)
private boolean showBlood;
- @Getter(AccessLevel.PACKAGE)
private boolean showBody;
- @Getter(AccessLevel.PACKAGE)
private boolean showChaos;
- @Getter(AccessLevel.PACKAGE)
- private boolean showCosmic;
- @Getter(AccessLevel.PACKAGE)
- private boolean showDeath;
- @Getter(AccessLevel.PACKAGE)
- private boolean showEarth;
- @Getter(AccessLevel.PACKAGE)
- private boolean showFire;
- @Getter(AccessLevel.PACKAGE)
- private boolean showLaw;
- @Getter(AccessLevel.PACKAGE)
- private boolean showMind;
- @Getter(AccessLevel.PACKAGE)
- private boolean showNature;
- @Getter(AccessLevel.PACKAGE)
- private boolean showSoul;
- @Getter(AccessLevel.PACKAGE)
- private boolean showWater;
- @Getter(AccessLevel.PACKAGE)
private boolean showClickBox;
+ private boolean showCosmic;
+ private boolean showDeath;
+ private boolean showEarth;
+ private boolean showFire;
+ private boolean showLaw;
+ private boolean showMind;
+ private boolean showNature;
+ private boolean showRifts;
+ private boolean showSoul;
+ private boolean showWater;
+ private NPC darkMage;
@Provides
RunecraftConfig getConfig(ConfigManager configManager)
@@ -166,22 +144,20 @@ public class RunecraftPlugin extends Plugin
{
updateConfig();
addSubscriptions();
-
- overlayManager.add(abyssOverlay);
abyssOverlay.updateConfig();
+ overlayManager.add(abyssOverlay);
overlayManager.add(runecraftOverlay);
- addSwaps();
+ handleSwaps();
}
@Override
protected void shutDown() throws Exception
{
eventBus.unregister(this);
-
- overlayManager.remove(abyssOverlay);
abyssObjects.clear();
darkMage = null;
degradedPouchInInventory = false;
+ overlayManager.remove(abyssOverlay);
overlayManager.remove(runecraftOverlay);
removeSwaps();
}
@@ -190,7 +166,6 @@ public class RunecraftPlugin extends Plugin
{
eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged);
eventBus.subscribe(ChatMessage.class, this, this::onChatMessage);
- eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded);
eventBus.subscribe(DecorativeObjectSpawned.class, this, this::onDecorativeObjectSpawned);
eventBus.subscribe(DecorativeObjectDespawned.class, this, this::onDecorativeObjectDespawned);
eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged);
@@ -208,9 +183,10 @@ public class RunecraftPlugin extends Plugin
updateConfig();
- if (event.getKey().equals("essPouch"))
+ if (event.getKey().equals("essPouch") || event.getKey().equals("Lavas"))
{
- addSwaps();
+ removeSwaps();
+ handleSwaps();
}
abyssOverlay.updateConfig();
@@ -229,83 +205,9 @@ public class RunecraftPlugin extends Plugin
}
}
- private void onMenuEntryAdded(MenuEntryAdded entry)
- {
- if (wearingCape || wearingTiara)
- {
- final String option = Text.removeTags(entry.getOption()).toLowerCase();
- final String target = Text.removeTags(entry.getTarget()).toLowerCase();
-
- if (target.contains("ring of dueling") && option.contains("remove")) // Incompatible with easyscape
- {
- if (client.getLocalPlayer().getWorldLocation().getRegionID() != FIRE_ALTAR)
- { //changes duel ring teleport options based on location
- swap(client, "duel arena", option, target);
- }
- else if (client.getLocalPlayer().getWorldLocation().getRegionID() == FIRE_ALTAR)
- {
- swap(client, "castle wars", option, target);
- }
- }
- else if (target.contains("altar") && option.contains("craft")) // Don't accidentally click the altar to craft
- {
- hide(option, target);
- }
- else if (target.contains("pure") && option.contains("use")) // Don't accidentally use pure essence on altar
- {
- hide("use", target);
- hide("drop", target);
- }
- }
- }
-
- private void hide(String option, String target)
- {
- final MenuEntry[] entries = client.getMenuEntries();
- int index = searchIndex(entries, option, target);
- if (index < 0)
- {
- return;
- }
-
- MenuEntry[] newEntries = new MenuEntry[entries.length - 1];
- int i2 = 0;
-
- for (int i = 0; i < entries.length - 1; i++)
- {
- if (i == index)
- {
- continue;
- }
-
- newEntries[i2] = entries[i];
- i2++;
- }
-
- client.setMenuEntries(newEntries);
- }
-
- private int searchIndex(MenuEntry[] entries, String option, String target)
- {
- for (int i = entries.length - 1; i >= 0; i--)
- {
- MenuEntry entry = entries[i];
- String entryOption = Text.removeTags(entry.getOption()).toLowerCase();
- String entryTarget = Text.removeTags(entry.getTarget()).toLowerCase();
-
- if (entryOption.contains(option.toLowerCase())
- && (entryTarget.contains(target)))
- {
- return i;
- }
- }
-
- return -1;
- }
-
private void onDecorativeObjectSpawned(DecorativeObjectSpawned event)
{
- DecorativeObject decorativeObject = event.getDecorativeObject();
+ final DecorativeObject decorativeObject = event.getDecorativeObject();
if (AbyssRifts.getRift(decorativeObject.getId()) != null)
{
abyssObjects.add(decorativeObject);
@@ -314,13 +216,14 @@ public class RunecraftPlugin extends Plugin
private void onDecorativeObjectDespawned(DecorativeObjectDespawned event)
{
- DecorativeObject decorativeObject = event.getDecorativeObject();
+ final DecorativeObject decorativeObject = event.getDecorativeObject();
abyssObjects.remove(decorativeObject);
}
private void onGameStateChanged(GameStateChanged event)
{
- GameState gameState = event.getGameState();
+ final GameState gameState = event.getGameState();
+
switch (gameState)
{
case LOADING:
@@ -331,34 +234,28 @@ public class RunecraftPlugin extends Plugin
case LOGIN_SCREEN:
darkMage = null;
break;
+ case LOGGED_IN:
+ removeSwaps();
+ handleSwaps();
+ break;
}
}
private void onItemContainerChanged(ItemContainerChanged event)
{
- if (event.getItemContainer() == client.getItemContainer(InventoryID.INVENTORY))
- {
+ final ItemContainer container = event.getItemContainer();
- final Item[] items = event.getItemContainer().getItems();
+ if (container == client.getItemContainer(InventoryID.INVENTORY))
+ {
+ final Item[] items = container.getItems();
degradedPouchInInventory = Stream.of(items).anyMatch(i -> DEGRADED_POUCHES.contains(i.getId()));
}
- else if (event.getItemContainer() == client.getItemContainer(InventoryID.EQUIPMENT))
- {
- final Item[] items = event.getItemContainer().getItems();
-
- if (items.length == 0)
- {
- return;
- }
-
- wearingTiara = this.Lavas && items[EquipmentInventorySlot.HEAD.getSlotIdx()].getId() == ItemID.FIRE_TIARA;
- wearingCape = this.Lavas && items[EquipmentInventorySlot.CAPE.getSlotIdx()].getId() == ItemID.RUNECRAFT_CAPE || config.Lavas() && items[EquipmentInventorySlot.CAPE.getSlotIdx()].getId() == ItemID.RUNECRAFT_CAPET || config.Lavas() && items[EquipmentInventorySlot.CAPE.getSlotIdx()].getId() == ItemID.MAX_CAPE_13342;
- }
}
private void onNpcSpawned(NpcSpawned event)
{
final NPC npc = event.getNpc();
+
if (npc.getId() == NpcID.DARK_MAGE)
{
darkMage = npc;
@@ -368,35 +265,61 @@ public class RunecraftPlugin extends Plugin
private void onNpcDespawned(NpcDespawned event)
{
final NPC npc = event.getNpc();
- if (npc != null && npc.equals(darkMage))
+
+ if (npc != null && npc == darkMage)
{
darkMage = null;
}
}
- private void addSwaps()
+ private void handleSwaps()
{
- if (config.essPouch())
+ if (this.essPouch)
{
- menuManager.addSwap("deposit", "pouch", 2, 57, "fill", "pouch", 9, 1007);
- menuManager.addSwap("fill", "pouch", "empty", "pouch", true, false);
+ menuManager.addPriorityEntry(POUCH).setPriority(100);
+ menuManager.addPriorityEntry(EMPTY).setPriority(10);
}
else
{
- menuManager.removeSwap("deposit", "pouch", 2, 57, "fill", "pouch", 9, 1007);
- menuManager.removeSwap("fill", "pouch", "empty", "pouch", true, false);
+ menuManager.removePriorityEntry(POUCH);
+ menuManager.removePriorityEntry(EMPTY);
+ }
+
+ if (client.getLocalPlayer() == null || !this.lavas)
+ {
+ menuManager.removeHiddenEntry("craft", "altar", false, false);
+ menuManager.removeHiddenEntry("use", "pure essence", false, true);
+ return;
+ }
+
+ menuManager.addHiddenEntry("craft", "altar", false, false);
+ menuManager.addHiddenEntry("use", "Pure essence", false, true);
+
+ if (client.getLocalPlayer().getWorldLocation().getRegionID() != FIRE_ALTAR)
+ {
+ menuManager.addPriorityEntry(DUEL_ARENA).setPriority(100);
+ menuManager.removePriorityEntry(CASTLE_WARS);
+ }
+ else if (client.getLocalPlayer().getWorldLocation().getRegionID() == FIRE_ALTAR)
+ {
+ menuManager.addPriorityEntry(CASTLE_WARS).setPriority(100);
+ menuManager.removePriorityEntry(DUEL_ARENA);
}
}
private void removeSwaps()
{
- menuManager.removeSwap("deposit", "pouch", 2, 57, "fill", "pouch", 9, 1007);
- menuManager.removeSwap("fill", "pouch", "empty", "pouch", true, false);
+ menuManager.removeHiddenEntry("craft", "altar", false, false);
+ menuManager.removeHiddenEntry("use", "Pure essence", false, true);
+ menuManager.removePriorityEntry(POUCH);
+ menuManager.removePriorityEntry(EMPTY);
+ menuManager.removePriorityEntry(CASTLE_WARS);
+ menuManager.removePriorityEntry(DUEL_ARENA);
}
private void updateConfig()
{
- this.Lavas = config.Lavas();
+ this.lavas = config.Lavas();
this.essPouch = config.essPouch();
this.hightlightDarkMage = config.hightlightDarkMage();
this.degradingNotification = config.degradingNotification();
diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java
index 65c80aac97..658b56ba7e 100644
--- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java
+++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java
@@ -24,9 +24,19 @@
*/
package net.runelite.mixins;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.EnumSet;
import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
import java.util.Set;
+import javax.annotation.Nullable;
+import javax.inject.Named;
import net.runelite.api.ChatMessageType;
import net.runelite.api.ClanMember;
import net.runelite.api.EnumDefinition;
@@ -91,21 +101,6 @@ import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.events.WidgetPressed;
import net.runelite.api.hooks.Callbacks;
import net.runelite.api.hooks.DrawCallbacks;
-import net.runelite.api.vars.AccountType;
-import net.runelite.api.widgets.Widget;
-import net.runelite.api.widgets.WidgetInfo;
-import net.runelite.api.widgets.WidgetItem;
-import net.runelite.api.widgets.WidgetType;
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.List;
-import java.util.Map;
-import javax.annotation.Nullable;
-import javax.inject.Named;
import net.runelite.api.mixins.Copy;
import net.runelite.api.mixins.FieldHook;
import net.runelite.api.mixins.Inject;
@@ -113,8 +108,11 @@ import net.runelite.api.mixins.MethodHook;
import net.runelite.api.mixins.Mixin;
import net.runelite.api.mixins.Replace;
import net.runelite.api.mixins.Shadow;
-import net.runelite.rs.api.RSPacketBuffer;
-import org.slf4j.Logger;
+import net.runelite.api.vars.AccountType;
+import net.runelite.api.widgets.Widget;
+import net.runelite.api.widgets.WidgetInfo;
+import net.runelite.api.widgets.WidgetItem;
+import net.runelite.api.widgets.WidgetType;
import net.runelite.rs.api.RSAbstractArchive;
import net.runelite.rs.api.RSChatChannel;
import net.runelite.rs.api.RSClanChat;
@@ -122,17 +120,19 @@ import net.runelite.rs.api.RSClient;
import net.runelite.rs.api.RSEnumDefinition;
import net.runelite.rs.api.RSFriendSystem;
import net.runelite.rs.api.RSFriendsList;
-import net.runelite.rs.api.RSTileItem;
import net.runelite.rs.api.RSIgnoreList;
import net.runelite.rs.api.RSIndexedSprite;
import net.runelite.rs.api.RSItemContainer;
import net.runelite.rs.api.RSNPC;
import net.runelite.rs.api.RSNodeDeque;
import net.runelite.rs.api.RSNodeHashTable;
+import net.runelite.rs.api.RSPacketBuffer;
import net.runelite.rs.api.RSPlayer;
import net.runelite.rs.api.RSSprite;
+import net.runelite.rs.api.RSTileItem;
import net.runelite.rs.api.RSUsername;
import net.runelite.rs.api.RSWidget;
+import org.slf4j.Logger;
@Mixin(RSClient.class)
public abstract class RSClientMixin implements RSClient
@@ -1328,7 +1328,8 @@ public abstract class RSClientMixin implements RSClient
widgetId,
false
),
- authentic
+ authentic,
+ client.getMouseCurrentButton()
);
client.getCallbacks().post(MenuOptionClicked.class, menuOptionClicked);