diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index b30f5c7315..c0faa13aab 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -30,6 +30,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Injector; +import com.openosrs.client.game.PlayerManager; import java.io.File; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; @@ -143,6 +144,9 @@ public class RuneLite @Inject private Provider xpDropManager; + @Inject + private Provider playerManager; + @Inject private WorldService worldService; @@ -387,6 +391,8 @@ public class RuneLite overlayManager.add(worldMapOverlay.get()); overlayManager.add(tooltipOverlay.get()); + playerManager.get(); + // legacy method, i cant figure out how to make it work without garbage eventBus.register(xpDropManager.get()); } @@ -526,4 +532,4 @@ public class RuneLite System.setProperty("runelite.launcher.version", "" + RuneLiteAPI.getVersion()); } -} +} \ No newline at end of file diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java index 80c4f3fcfd..8bdab8f82c 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java @@ -35,6 +35,7 @@ import static net.runelite.api.SkullIcon.*; import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.OverheadPrayerChanged; import net.runelite.api.events.PlayerChanged; +import net.runelite.api.events.PlayerCompositionChanged; import net.runelite.api.events.PlayerSkullChanged; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.FieldHook; @@ -268,4 +269,19 @@ public abstract class RSPlayerMixin implements RSPlayer { client.getCallbacks().post(new PlayerChanged(this)); } + + @Copy("read") + @Replace("read") + @SuppressWarnings("InfiniteRecursion") + public void copy$read(RSBuffer buffer) + { + final long appearanceHash = getPlayerComposition() == null ? 0 : getPlayerComposition().getHash(); + + this.copy$read(buffer); + + if (client.isComparingAppearance() && getPlayerComposition().getHash() != appearanceHash) + { + client.getCallbacks().post(new PlayerCompositionChanged(this)); + } + } }