Injector, deob, mixins

This commit is contained in:
Lucas
2019-06-08 09:33:50 +02:00
parent 276ff1995d
commit 49afdf7dc7
599 changed files with 84012 additions and 1821 deletions

View File

@@ -24,19 +24,9 @@
*/
package net.runelite.mixins;
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.ChatMessageType;
import net.runelite.api.ClanMember;
import net.runelite.api.EnumComposition;
import net.runelite.api.EnumDefinition;
import net.runelite.api.Friend;
import net.runelite.api.GameState;
import net.runelite.api.GrandExchangeOffer;
@@ -68,7 +58,7 @@ import net.runelite.api.Point;
import net.runelite.api.Prayer;
import net.runelite.api.Projectile;
import net.runelite.api.Skill;
import net.runelite.api.SpritePixels;
import net.runelite.api.Sprite;
import net.runelite.api.Tile;
import net.runelite.api.VarPlayer;
import net.runelite.api.Varbits;
@@ -99,6 +89,21 @@ import net.runelite.api.events.VarbitChanged;
import net.runelite.api.events.WidgetLoaded;
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;
@@ -106,35 +111,30 @@ 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.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.RSChatLineBuffer;
import net.runelite.rs.api.RSClanMemberManager;
import org.slf4j.Logger;
import net.runelite.rs.api.RSAbstractIndexCache;
import net.runelite.rs.api.RSChatChannel;
import net.runelite.rs.api.RSClanChat;
import net.runelite.rs.api.RSClient;
import net.runelite.rs.api.RSDeque;
import net.runelite.rs.api.RSEnum;
import net.runelite.rs.api.RSFriendContainer;
import net.runelite.rs.api.RSFriendManager;
import net.runelite.rs.api.RSHashTable;
import net.runelite.rs.api.RSIgnoreContainer;
import net.runelite.rs.api.RSIndexDataBase;
import net.runelite.rs.api.RSEnumDefinition;
import net.runelite.rs.api.RSFriendSystem;
import net.runelite.rs.api.RSFriendsList;
import net.runelite.rs.api.RSGroundItem;
import net.runelite.rs.api.RSIgnoreList;
import net.runelite.rs.api.RSIndexedSprite;
import net.runelite.rs.api.RSItem;
import net.runelite.rs.api.RSItemContainer;
import net.runelite.rs.api.RSNPC;
import net.runelite.rs.api.RSName;
import net.runelite.rs.api.RSNodeDeque;
import net.runelite.rs.api.RSNodeHashTable;
import net.runelite.rs.api.RSPlayer;
import net.runelite.rs.api.RSSpritePixels;
import net.runelite.rs.api.RSSprite;
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
{
@Shadow("clientInstance")
@Shadow("client")
private static RSClient client;
@Inject
@@ -174,7 +174,7 @@ public abstract class RSClientMixin implements RSClient
private static int oldMenuEntryCount;
@Inject
private static RSItem lastItemDespawn;
private static RSGroundItem lastItemDespawn;
@Inject
private boolean gpu;
@@ -186,13 +186,23 @@ public abstract class RSClientMixin implements RSClient
static int skyboxColor;
@Inject
private final Cache<Integer, RSEnum> enumCache = CacheBuilder.newBuilder()
private final Cache<Integer, RSEnumDefinition> enumCache = CacheBuilder.newBuilder()
.maximumSize(64)
.build();
@Inject
private static HealthBarOverride healthBarOverride;
@Inject
private static boolean printMenuActions;
@Inject
@Override
public void setPrintMenuActions(boolean yes)
{
printMenuActions = yes;
}
@Inject
public RSClientMixin()
{
@@ -627,7 +637,7 @@ public abstract class RSClientMixin implements RSClient
oldMenuEntryCount = count;
}
@FieldHook("menuOptionCount")
@FieldHook("menuOptionsCount")
@Inject
public static void onMenuOptionsChanged(int idx)
{
@@ -656,7 +666,7 @@ public abstract class RSClientMixin implements RSClient
public List<Projectile> getProjectiles()
{
List<Projectile> projectiles = new ArrayList<Projectile>();
RSDeque projectileDeque = this.getProjectilesDeque();
RSNodeDeque projectileDeque = this.getProjectilesDeque();
Node head = projectileDeque.getHead();
for (Node node = head.getNext(); node != head; node = node.getNext())
@@ -672,7 +682,7 @@ public abstract class RSClientMixin implements RSClient
public List<GraphicsObject> getGraphicsObjects()
{
List<GraphicsObject> graphicsObjects = new ArrayList<GraphicsObject>();
RSDeque graphicsObjectDeque = this.getGraphicsObjectDeque();
RSNodeDeque graphicsObjectDeque = this.getGraphicsObjectDeque();
Node head = graphicsObjectDeque.getHead();
for (Node node = head.getNext(); node != head; node = node.getNext())
@@ -711,14 +721,14 @@ public abstract class RSClientMixin implements RSClient
setLowMemory(lowMemory);
setSceneLowMemory(lowMemory);
setAudioHighMemory(true);
setObjectCompositionLowDetail(lowMemory);
setObjectDefinitionLowDetail(lowMemory);
}
@Inject
@Override
public RSItemContainer getItemContainer(InventoryID inventory)
{
RSHashTable itemContainers = getItemContainers();
RSNodeHashTable itemContainers = getItemContainers();
return (RSItemContainer) itemContainers.get(inventory.getId());
}
@@ -726,7 +736,7 @@ public abstract class RSClientMixin implements RSClient
@Override
public boolean isFriended(String name, boolean mustBeLoggedIn)
{
RSName rsName = createName(name, getLoginType());
RSUsername rsName = createName(name, getLoginType());
return getFriendManager().isFriended(rsName, mustBeLoggedIn);
}
@@ -734,7 +744,7 @@ public abstract class RSClientMixin implements RSClient
@Override
public int getClanChatCount()
{
final RSClanMemberManager clanMemberManager = getClanMemberManager();
final RSClanChat clanMemberManager = getClanMemberManager();
return clanMemberManager != null ? clanMemberManager.getCount() : 0;
}
@@ -742,7 +752,7 @@ public abstract class RSClientMixin implements RSClient
@Override
public ClanMember[] getClanMembers()
{
final RSClanMemberManager clanMemberManager = getClanMemberManager();
final RSClanChat clanMemberManager = getClanMemberManager();
if (clanMemberManager == null)
{
return null;
@@ -770,13 +780,13 @@ public abstract class RSClientMixin implements RSClient
@Override
public Friend[] getFriends()
{
final RSFriendManager friendManager = getFriendManager();
final RSFriendSystem friendManager = getFriendManager();
if (friendManager == null)
{
return null;
}
final RSFriendContainer friendContainer = friendManager.getFriendContainer();
final RSFriendsList friendContainer = friendManager.getFriendContainer();
if (friendContainer == null)
{
return null;
@@ -790,13 +800,13 @@ public abstract class RSClientMixin implements RSClient
@Override
public int getFriendsCount()
{
final RSFriendManager friendManager = getFriendManager();
final RSFriendSystem friendManager = getFriendManager();
if (friendManager == null)
{
return -1;
}
final RSFriendContainer friendContainer = friendManager.getFriendContainer();
final RSFriendsList friendContainer = friendManager.getFriendContainer();
if (friendContainer == null)
{
return -1;
@@ -809,13 +819,13 @@ public abstract class RSClientMixin implements RSClient
@Override
public Ignore[] getIgnores()
{
final RSFriendManager friendManager = getFriendManager();
final RSFriendSystem friendManager = getFriendManager();
if (friendManager == null)
{
return null;
}
final RSIgnoreContainer ignoreContainer = friendManager.getIgnoreContainer();
final RSIgnoreList ignoreContainer = friendManager.getIgnoreContainer();
if (ignoreContainer == null)
{
return null;
@@ -829,13 +839,13 @@ public abstract class RSClientMixin implements RSClient
@Override
public int getIgnoreCount()
{
final RSFriendManager friendManager = getFriendManager();
final RSFriendSystem friendManager = getFriendManager();
if (friendManager == null)
{
return -1;
}
final RSIgnoreContainer ignoreContainer = friendManager.getIgnoreContainer();
final RSIgnoreList ignoreContainer = friendManager.getIgnoreContainer();
if (ignoreContainer == null)
{
return -1;
@@ -848,11 +858,11 @@ public abstract class RSClientMixin implements RSClient
@Override
public boolean isClanMember(String name)
{
final RSClanMemberManager clanMemberManager = getClanMemberManager();
final RSClanChat clanMemberManager = getClanMemberManager();
return clanMemberManager != null && clanMemberManager.isMember(createName(name, getLoginType()));
}
@FieldHook("draggingWidget")
@FieldHook("clickedWidget")
@Inject
public static void draggingWidgetChanged(int idx)
{
@@ -863,7 +873,7 @@ public abstract class RSClientMixin implements RSClient
@Inject
@Override
public SpritePixels createItemSprite(int itemId, int quantity, int border, int shadowColor, int stackable, boolean noted, int scale)
public Sprite createItemSprite(int itemId, int quantity, int border, int shadowColor, int stackable, boolean noted, int scale)
{
assert isClientThread();
int zoom = get3dZoom();
@@ -900,7 +910,7 @@ public abstract class RSClientMixin implements RSClient
}
}
@FieldHook("itemPressedDuration")
@FieldHook("itemDragDuration")
@Inject
public static void itemPressedDurationChanged(int idx)
{
@@ -922,7 +932,7 @@ public abstract class RSClientMixin implements RSClient
}
}
@FieldHook("skillExperiences")
@FieldHook("experience")
@Inject
public static void experiencedChanged(int idx)
{
@@ -938,7 +948,7 @@ public abstract class RSClientMixin implements RSClient
}
}
@FieldHook("boostedSkillLevels")
@FieldHook("currentLevels")
@Inject
public static void boostedSkillLevelsChanged(int idx)
{
@@ -953,7 +963,7 @@ public abstract class RSClientMixin implements RSClient
}
}
@FieldHook("playerOptions")
@FieldHook("playerMenuActions")
@Inject
public static void playerOptionsChanged(int idx)
{
@@ -981,7 +991,7 @@ public abstract class RSClientMixin implements RSClient
}
@FieldHook("cachedNPCs")
@FieldHook("npcs")
@Inject
public static void cachedNPCsChanged(int idx)
{
@@ -1000,7 +1010,7 @@ public abstract class RSClientMixin implements RSClient
}
}
@FieldHook("cachedPlayers")
@FieldHook("players")
@Inject
public static void cachedPlayersChanged(int idx)
{
@@ -1046,7 +1056,7 @@ public abstract class RSClientMixin implements RSClient
client.getCallbacks().post(offerChangedEvent);
}
@FieldHook("clientVarps")
@FieldHook("Varps_main")
@Inject
public static void settingsChanged(int idx)
{
@@ -1055,7 +1065,7 @@ public abstract class RSClientMixin implements RSClient
client.getCallbacks().post(varbitChanged);
}
@FieldHook("isResized")
@FieldHook("isResizable")
@Inject
public static void resizeChanged(int idx)
{
@@ -1072,7 +1082,7 @@ public abstract class RSClientMixin implements RSClient
}
}
@FieldHook("clanMemberManager")
@FieldHook("clanChat")
@Inject
public static void clanMemberManagerChanged(int idx)
{
@@ -1221,6 +1231,11 @@ public abstract class RSClientMixin implements RSClient
@Replace("menuAction")
static void rl$menuAction(int actionParam, int widgetId, int menuAction, int id, String menuOption, String menuTarget, int var6, int var7)
{
if (printMenuActions && client.getLogger().isDebugEnabled())
{
client.getLogger().debug("Menuaction: {} {} {} {} {} {} {} {}", actionParam, widgetId, menuAction, id, menuOption, menuTarget, var6, var7);
}
/* Along the way, the RuneScape client may change a menuAction by incrementing it with 2000.
* I have no idea why, but it does. Their code contains the same conditional statement.
*/
@@ -1246,7 +1261,7 @@ public abstract class RSClientMixin implements RSClient
rs$menuAction(actionParam, widgetId, menuAction, id, menuOption, menuTarget, var6, var7);
}
@FieldHook("username")
@FieldHook("Login_username")
@Inject
public static void onUsernameChanged(int idx)
{
@@ -1309,8 +1324,8 @@ public abstract class RSClientMixin implements RSClient
}
// Get the message node which was added
Map<Integer, RSChatLineBuffer> chatLineMap = client.getChatLineMap();
RSChatLineBuffer chatLineBuffer = chatLineMap.get(type);
Map<Integer, RSChatChannel> chatLineMap = client.getChatLineMap();
RSChatChannel chatLineBuffer = chatLineMap.get(type);
MessageNode messageNode = chatLineBuffer.getLines()[0];
final ChatMessageType chatMessageType = ChatMessageType.of(type);
@@ -1325,7 +1340,7 @@ public abstract class RSClientMixin implements RSClient
callbacks.clientMainLoop();
}
@MethodHook("renderWidgetLayer")
@MethodHook("drawWidgetGroup")
@Inject
public static void renderWidgetLayer(Widget[] widgets, int parentId, int minX, int minY, int maxX, int maxY, int x, int y, int var8)
{
@@ -1388,14 +1403,14 @@ public abstract class RSClientMixin implements RSClient
@Inject
@Override
public RSItem getLastItemDespawn()
public RSGroundItem getLastItemDespawn()
{
return lastItemDespawn;
}
@Inject
@Override
public void setLastItemDespawn(RSItem lastItemDespawn)
public void setLastItemDespawn(RSGroundItem lastItemDespawn)
{
RSClientMixin.lastItemDespawn = lastItemDespawn;
}
@@ -1426,9 +1441,9 @@ public abstract class RSClientMixin implements RSClient
@Inject
@Override
public RSSpritePixels[] getSprites(IndexDataBase source, int archiveId, int fileId)
public RSSprite[] getSprites(IndexDataBase source, int archiveId, int fileId)
{
RSIndexDataBase rsSource = (RSIndexDataBase) source;
RSAbstractIndexCache rsSource = (RSAbstractIndexCache) source;
byte[] configData = rsSource.getConfigData(archiveId, fileId);
if (configData == null)
{
@@ -1442,12 +1457,12 @@ public abstract class RSClientMixin implements RSClient
int maxHeight = getIndexedSpriteHeight();
int[] offsetX = getIndexedSpriteOffsetXs();
int[] offsetY = getIndexedSpriteOffsetYs();
int[] widths = getIndexSpriteWidths();
int[] widths = getIndexedSpriteWidths();
int[] heights = getIndexedSpriteHeights();
byte[][] spritePixelsArray = getSpritePixels();
int[] indexedSpritePalette = getIndexedSpritePalette();
RSSpritePixels[] array = new RSSpritePixels[indexedSpriteCount];
RSSprite[] array = new RSSprite[indexedSpriteCount];
for (int i = 0; i < indexedSpriteCount; ++i)
{
@@ -1457,7 +1472,7 @@ public abstract class RSClientMixin implements RSClient
byte[] pixelArray = spritePixelsArray[i];
int[] pixels = new int[width * height];
RSSpritePixels spritePixels = createSpritePixels(pixels, width, height);
RSSprite spritePixels = createSprite(pixels, width, height);
spritePixels.setMaxHeight(maxHeight);
spritePixels.setMaxWidth(maxWidth);
spritePixels.setOffsetX(offsetX[i]);
@@ -1473,9 +1488,9 @@ public abstract class RSClientMixin implements RSClient
setIndexedSpriteOffsetXs(null);
setIndexedSpriteOffsetYs(null);
setIndexSpriteWidths(null);
setIndexedSpriteWidths(null);
setIndexedSpriteHeights(null);
setIndexSpritePalette(null);
setIndexedSpritePalette(null);
setSpritePixels(null);
return array;
@@ -1536,18 +1551,18 @@ public abstract class RSClientMixin implements RSClient
@Inject
@Override
public EnumComposition getEnum(int id)
public EnumDefinition getEnum(int id)
{
assert isClientThread() : "getEnum must be called on client thread";
RSEnum rsEnum = enumCache.getIfPresent(id);
if (rsEnum != null)
RSEnumDefinition rsEnumDefinition = enumCache.getIfPresent(id);
if (rsEnumDefinition != null)
{
return rsEnum;
return rsEnumDefinition;
}
rsEnum = getRsEnum(id);
enumCache.put(id, rsEnum);
return rsEnum;
rsEnumDefinition = getRsEnum(id);
enumCache.put(id, rsEnumDefinition);
return rsEnumDefinition;
}
}