menumanager: fix shift drop when shift to walk is enabled (#778)

This commit is contained in:
se7enAte9
2019-06-27 17:59:06 -04:00
committed by Kyleeld
parent ee95632d5a
commit d9b75eec5d

View File

@@ -165,32 +165,40 @@ public class MenuManager
client.setMenuEntries(menuEntries); client.setMenuEntries(menuEntries);
} }
} }
}
final MenuEntry newestEntry = menuEntries[menuEntries.length - 1]; @Subscribe
private void onClientTick(ClientTick event)
{
originalType = null;
currentPriorityEntries.clear();
client.sortMenuEntries();
MenuEntry[] oldEntries = client.getMenuEntries();
List<MenuEntry> newEntries = Lists.newArrayList(oldEntries);
for (MenuEntry entry : oldEntries)
{
for (ComparableEntry p : priorityEntries) for (ComparableEntry p : priorityEntries)
{ {
if (p.matches(newestEntry)) if (p.matches(entry))
{ {
currentPriorityEntries.add(newestEntry); currentPriorityEntries.add(entry);
} }
} }
// Make a copy of the menu entries, cause you can't remove from Arrays.asList()
List<MenuEntry> copy = Lists.newArrayList(menuEntries);
// If there are entries we want to prioritize, we have to remove the rest // If there are entries we want to prioritize, we have to remove the rest
if (!currentPriorityEntries.isEmpty()) if (!currentPriorityEntries.isEmpty() && !client.isMenuOpen())
{ {
copy.retainAll(currentPriorityEntries); newEntries.retainAll(currentPriorityEntries);
// This is because players existing changes walk-here target // This is because players existing changes walk-here target
// so without this we lose track of em // so without this we lose track of em
if (copy.size() != currentPriorityEntries.size()) if (newEntries.size() != currentPriorityEntries.size())
{ {
for (MenuEntry e : currentPriorityEntries) for (MenuEntry e : currentPriorityEntries)
{ {
if (copy.contains(e)) if (newEntries.contains(e))
{ {
continue; continue;
} }
@@ -200,7 +208,7 @@ public class MenuManager
if (e.getType() == e2.getType()) if (e.getType() == e2.getType())
{ {
e.setTarget(e2.getTarget()); e.setTarget(e2.getTarget());
copy.add(e); newEntries.add(e);
} }
} }
} }
@@ -210,7 +218,7 @@ public class MenuManager
boolean isHidden = false; boolean isHidden = false;
for (ComparableEntry p : hiddenEntries) for (ComparableEntry p : hiddenEntries)
{ {
if (p.matches(newestEntry)) if (p.matches(entry))
{ {
isHidden = true; isHidden = true;
break; break;
@@ -219,35 +227,16 @@ public class MenuManager
if (isHidden) if (isHidden)
{ {
copy.remove(newestEntry); newEntries.remove(entry);
}
} }
client.setMenuEntries(copy.toArray(new MenuEntry[0])); if (!currentPriorityEntries.isEmpty() && !client.isMenuOpen())
}
@Subscribe
private void onClientTick(ClientTick event)
{ {
originalType = null; newEntries.add(0, CANCEL());
client.sortMenuEntries();
final MenuEntry[] oldentries = client.getMenuEntries();
MenuEntry[] newEntries;
if (!currentPriorityEntries.isEmpty())
{
newEntries = new MenuEntry[client.getMenuOptionCount() + 1];
newEntries[0] = CANCEL();
System.arraycopy(oldentries, 0, newEntries, 1, oldentries.length);
}
else
{
newEntries = Arrays.copyOf(oldentries, client.getMenuOptionCount());
} }
MenuEntry leftClickEntry = newEntries[newEntries.length - 1]; MenuEntry leftClickEntry = newEntries.get(newEntries.size() - 1);
for (ComparableEntry src : swaps.keySet()) for (ComparableEntry src : swaps.keySet())
{ {
@@ -258,14 +247,14 @@ public class MenuManager
ComparableEntry tgt = swaps.get(src); ComparableEntry tgt = swaps.get(src);
for (int i = newEntries.length - 2; i > 0; i--) for (int i = newEntries.size() - 2; i > 0; i--)
{ {
MenuEntry e = newEntries[i]; MenuEntry e = newEntries.get(i);
if (tgt.matches(e)) if (tgt.matches(e))
{ {
newEntries[newEntries.length - 1] = e; newEntries.set(newEntries.size() - 1, e);
newEntries[i] = leftClickEntry; newEntries.set(i, leftClickEntry);
int type = e.getType(); int type = e.getType();
@@ -285,8 +274,7 @@ public class MenuManager
} }
} }
client.setMenuEntries(newEntries); client.setMenuEntries(newEntries.toArray(new MenuEntry[0]));
currentPriorityEntries.clear();
} }
public void addPlayerMenuItem(String menuText) public void addPlayerMenuItem(String menuText)