menumanager: true band aid fix (#1430)
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user