If the server expires the membership before the client in the party
reconnects, it will falsely assume it is in a party when it isn't.
Additionally since users are resynced on reconnect, this was duplicating
members as it would get joins for already joined members.
The command could not work before because the capitalize in
longBossName would produce a capital Of causing the hiscore
skill name to not match.
This normalizes from the hiscore name by removing : to compare
it to our internal boss names.
FileOutputStream (by design) passes FILE_ATTRIBUTE_NORMAL and
CREATE_ALWAYS to CreateFile, which causes it to fail with access denied
if it is opening a FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM file
See JDK-8047342
debug mode aggressively checks and throws whenever a gl error occurs.
The glBlitFramebuffer call is bizzare because with the alpha channel
enabled on the renderbuffer it appears to work correctly despite
causing an INVALID_OPERATION error. We have no use for the alpha channel
since the dst alpha value is always 1, so it can just be disabled on macos.
This field was originally used to show a catch rate overlay, but all its
uses were removed in 76fbab60fc when the
overlay was removed due to unreliable behavior.
Orginally the only way to form a party was via Discord invites. This has
changed semi-recently to allow sharing party ids instead.
The Discord invite system is finnicky since it doesn't work unless
Discord is detected, doesn't work right with multiple clients, or
multiple Discords. And, discord_rpc is deprecated without a suitable
replacement.
This changes the party system to instead always require sharing party
ids instead.
It can't be assumed the array passed to setModIcons is still correct in
the async image callbacks. Instead, fetch the current modicons array in
the callback and use that.