menumanager: true band aid fix (#1430)

This commit is contained in:
Ganom
2019-08-22 20:42:45 -04:00
committed by Kyle
parent 0a20ef601d
commit 8abdd56f9e

View File

@@ -34,6 +34,7 @@ import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.ConcurrentModificationException;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@@ -47,9 +48,9 @@ import javax.inject.Singleton;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.MenuEntry;
import net.runelite.api.MenuOpcode; import net.runelite.api.MenuOpcode;
import static net.runelite.api.MenuOpcode.MENU_ACTION_DEPRIORITIZE_OFFSET; import static net.runelite.api.MenuOpcode.MENU_ACTION_DEPRIORITIZE_OFFSET;
import net.runelite.api.MenuEntry;
import net.runelite.api.NPCDefinition; import net.runelite.api.NPCDefinition;
import net.runelite.api.events.BeforeRender; import net.runelite.api.events.BeforeRender;
import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuEntryAdded;
@@ -807,42 +808,49 @@ public class MenuManager
private void indexPriorityEntries(MenuEntry[] entries, int menuOptionCount) private void indexPriorityEntries(MenuEntry[] entries, int menuOptionCount)
{ {
// create a array of priority entries so we can sort those // create a array of priority entries so we can sort those
SortMapping[] prios = new SortMapping[entries.length - menuOptionCount]; try
int prioAmt = 0;
for (int i = 0; i < menuOptionCount; i++)
{ {
final MenuEntry entry = entries[i]; final SortMapping[] prios = new SortMapping[entries.length - menuOptionCount];
for (AbstractComparableEntry prio : priorityEntries)
int prioAmt = 0;
for (int i = 0; i < menuOptionCount; i++)
{ {
if (!prio.matches(entry)) final MenuEntry entry = entries[i];
for (AbstractComparableEntry prio : priorityEntries)
{ {
continue; if (!prio.matches(entry))
{
continue;
}
final SortMapping map = new SortMapping(prio.getPriority(), entry);
prios[prioAmt++] = map;
entries[i] = null;
break;
} }
final SortMapping map = new SortMapping(prio.getPriority(), entry);
prios[prioAmt++] = map;
entries[i] = null;
break;
} }
}
if (prioAmt == 0) if (prioAmt == 0)
{
return;
}
// Sort em!
Arrays.sort(prios, 0, prioAmt);
int i;
// Just place them after the standard entries. clientmixin ignores null entries
for (i = 0; i < prioAmt; i++)
{
entries[menuOptionCount + i] = prios[i].entry;
}
firstEntry = entries[menuOptionCount + i - 1];
}
catch (ConcurrentModificationException ignored)
{ {
return; //true band aid :)
} }
// Sort em!
Arrays.sort(prios, 0, prioAmt);
int i;
// Just place them after the standard entries. clientmixin ignores null entries
for (i = 0; i < prioAmt; i++)
{
entries[menuOptionCount + i] = prios[i].entry;
}
firstEntry = entries[menuOptionCount + i - 1];
} }
private void indexSwapEntries(MenuEntry[] entries, int menuOptionCount) private void indexSwapEntries(MenuEntry[] entries, int menuOptionCount)