Add interface representing all callbacks the client does, and convert mixins to use it

This allows creating and injecting Hooks via guice
This commit is contained in:
Adam
2018-06-22 22:36:39 -04:00
parent ab936a6cdb
commit f0da475370
31 changed files with 408 additions and 282 deletions

View File

@@ -28,6 +28,7 @@ import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import javax.annotation.Nullable;
import javax.inject.Named;
import net.runelite.api.ChatMessageType;
import net.runelite.api.ClanMember;
import net.runelite.api.Friend;
@@ -81,6 +82,7 @@ import net.runelite.api.events.ResizeableChanged;
import net.runelite.api.events.UsernameChanged;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.hooks.Callbacks;
import net.runelite.api.mixins.Copy;
import net.runelite.api.mixins.FieldHook;
import net.runelite.api.mixins.Inject;
@@ -91,10 +93,6 @@ 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.client.callback.Hooks;
import static net.runelite.client.callback.Hooks.deferredEventBus;
import static net.runelite.client.callback.Hooks.eventBus;
import static net.runelite.client.callback.Hooks.log;
import net.runelite.rs.api.RSClanMemberManager;
import net.runelite.rs.api.RSClient;
import net.runelite.rs.api.RSDeque;
@@ -108,6 +106,7 @@ import net.runelite.rs.api.RSName;
import net.runelite.rs.api.RSNameable;
import net.runelite.rs.api.RSPlayer;
import net.runelite.rs.api.RSWidget;
import org.slf4j.Logger;
@Mixin(RSClient.class)
public abstract class RSClientMixin implements RSClient
@@ -115,6 +114,15 @@ public abstract class RSClientMixin implements RSClient
@Shadow("clientInstance")
private static RSClient client;
@Inject
@javax.inject.Inject
private Callbacks callbacks;
@Inject
@javax.inject.Inject
@Named("Core Logger")
private Logger logger;
@Inject
private static int tickCount;
@@ -139,6 +147,20 @@ public abstract class RSClientMixin implements RSClient
@Inject
private static int oldMenuEntryCount;
@Inject
@Override
public Callbacks getCallbacks()
{
return callbacks;
}
@Inject
@Override
public Logger getLogger()
{
return logger;
}
@Inject
@Override
public boolean isInterpolatePlayerAnimations()
@@ -512,7 +534,7 @@ public abstract class RSClientMixin implements RSClient
client.getMenuActionParams1()[newCount - 1]
);
eventBus.post(event);
client.getCallbacks().post(event);
}
}
@@ -645,7 +667,7 @@ public abstract class RSClientMixin implements RSClient
{
DraggingWidgetChanged draggingWidgetChanged = new DraggingWidgetChanged();
draggingWidgetChanged.setDraggingWidget(client.isDraggingWidget());
eventBus.post(draggingWidgetChanged);
client.getCallbacks().post(draggingWidgetChanged);
}
@Inject
@@ -683,7 +705,7 @@ public abstract class RSClientMixin implements RSClient
{
WidgetLoaded event = new WidgetLoaded();
event.setGroupId(groupId);
eventBus.post(event);
client.getCallbacks().post(event);
}
}
@@ -721,7 +743,7 @@ public abstract class RSClientMixin implements RSClient
{
Skill updatedSkill = possibleSkills[idx];
experienceChanged.setSkill(updatedSkill);
eventBus.post(experienceChanged);
client.getCallbacks().post(experienceChanged);
}
}
@@ -736,7 +758,7 @@ public abstract class RSClientMixin implements RSClient
Skill updatedSkill = skills[idx];
BoostedLevelChanged boostedLevelChanged = new BoostedLevelChanged();
boostedLevelChanged.setSkill(updatedSkill);
eventBus.post(boostedLevelChanged);
client.getCallbacks().post(boostedLevelChanged);
}
}
@@ -755,7 +777,7 @@ public abstract class RSClientMixin implements RSClient
PlayerMenuOptionsChanged optionsChanged = new PlayerMenuOptionsChanged();
optionsChanged.setIndex(idx);
eventBus.post(optionsChanged);
client.getCallbacks().post(optionsChanged);
}
@FieldHook("gameState")
@@ -764,7 +786,7 @@ public abstract class RSClientMixin implements RSClient
{
GameStateChanged gameStateChange = new GameStateChanged();
gameStateChange.setGameState(client.getGameState());
eventBus.post(gameStateChange);
client.getCallbacks().post(gameStateChange);
}
@@ -783,7 +805,7 @@ public abstract class RSClientMixin implements RSClient
{
npc.setIndex(idx);
deferredEventBus.post(new NpcSpawned(npc));
client.getCallbacks().postDeferred(new NpcSpawned(npc));
}
}
@@ -803,11 +825,11 @@ public abstract class RSClientMixin implements RSClient
if (oldPlayer != null)
{
eventBus.post(new PlayerDespawned(oldPlayer));
client.getCallbacks().post(new PlayerDespawned(oldPlayer));
}
if (player != null)
{
deferredEventBus.post(new PlayerSpawned(player));
client.getCallbacks().postDeferred(new PlayerSpawned(player));
}
}
@@ -830,7 +852,7 @@ public abstract class RSClientMixin implements RSClient
GrandExchangeOfferChanged offerChangedEvent = new GrandExchangeOfferChanged();
offerChangedEvent.setOffer(internalOffer);
offerChangedEvent.setSlot(idx);
eventBus.post(offerChangedEvent);
client.getCallbacks().post(offerChangedEvent);
}
@FieldHook("clientVarps")
@@ -838,7 +860,7 @@ public abstract class RSClientMixin implements RSClient
public static void settingsChanged(int idx)
{
VarbitChanged varbitChanged = new VarbitChanged();
eventBus.post(varbitChanged);
client.getCallbacks().post(varbitChanged);
}
@FieldHook("isResized")
@@ -848,14 +870,14 @@ public abstract class RSClientMixin implements RSClient
//maybe couple with varbitChanged. resizeable may not be a varbit but it would fit with the other client settings.
ResizeableChanged resizeableChanged = new ResizeableChanged();
resizeableChanged.setResized(client.isResized());
eventBus.post(resizeableChanged);
client.getCallbacks().post(resizeableChanged);
}
@FieldHook("clanMemberManager")
@Inject
public static void clanMemberManagerChanged(int idx)
{
eventBus.post(new ClanChanged(client.getClanMemberManager() != null));
client.getCallbacks().post(new ClanChanged(client.getClanMemberManager() != null));
}
@Inject
@@ -1001,7 +1023,7 @@ public abstract class RSClientMixin implements RSClient
menuOptionClicked.setMenuAction(MenuAction.of(menuAction));
menuOptionClicked.setId(id);
menuOptionClicked.setWidgetId(widgetId);
eventBus.post(menuOptionClicked);
client.getCallbacks().post(menuOptionClicked);
if (menuOptionClicked.isConsumed())
{
@@ -1015,7 +1037,7 @@ public abstract class RSClientMixin implements RSClient
@Inject
public static void onUsernameChanged(int idx)
{
eventBus.post(new UsernameChanged());
client.getCallbacks().post(new UsernameChanged());
}
@Override
@@ -1046,34 +1068,35 @@ public abstract class RSClientMixin implements RSClient
{
final MenuOpened event = new MenuOpened();
event.setMenuEntries(getMenuEntries());
eventBus.post(event);
callbacks.post(event);
}
@Inject
@MethodHook("updateNpcs")
public static void updateNpcs(boolean var0, PacketBuffer var1)
{
Hooks.updateNpcs();
client.getCallbacks().updateNpcs();
}
@Inject
@MethodHook("addChatMessage")
public static void onAddChatMessage(int type, String name, String message, String sender)
{
if (log.isDebugEnabled())
Logger logger = client.getLogger();
if (logger.isDebugEnabled())
{
log.debug("Chat message type {}: {}", ChatMessageType.of(type), message);
logger.debug("Chat message type {}: {}", ChatMessageType.of(type), message);
}
final ChatMessageType chatMessageType = ChatMessageType.of(type);
final ChatMessage chatMessage = new ChatMessage(chatMessageType, name, message, sender);
eventBus.post(chatMessage);
client.getCallbacks().post(chatMessage);
}
@Inject
@MethodHook("methodDraw")
public void methodDraw(boolean var1)
{
Hooks.clientMainLoop();
callbacks.clientMainLoop();
}
}