From 86bf65612c2bd3365c9bf60072c965ba2debe23d Mon Sep 17 00:00:00 2001 From: stone-wall Date: Thu, 12 Mar 2020 07:01:54 -0400 Subject: [PATCH] OnPrayerIcon changed and OnPlayerSkull changed events. This needs 2 be tested --- .../headicon/OverheadPrayerChanged.java | 21 ++++++++ .../headicon/PlayerHeadIconChanged.java | 16 ++++++ .../player/headicon/PlayerSkullChanged.java | 21 ++++++++ .../net/runelite/mixins/RSPlayerMixin.java | 51 +++++++++++++++++-- 4 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 runelite-api/src/main/java/net/runelite/api/events/player/headicon/OverheadPrayerChanged.java create mode 100644 runelite-api/src/main/java/net/runelite/api/events/player/headicon/PlayerHeadIconChanged.java create mode 100644 runelite-api/src/main/java/net/runelite/api/events/player/headicon/PlayerSkullChanged.java diff --git a/runelite-api/src/main/java/net/runelite/api/events/player/headicon/OverheadPrayerChanged.java b/runelite-api/src/main/java/net/runelite/api/events/player/headicon/OverheadPrayerChanged.java new file mode 100644 index 0000000000..f5047805fc --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/events/player/headicon/OverheadPrayerChanged.java @@ -0,0 +1,21 @@ +package net.runelite.api.events.player.headicon; + +import lombok.Getter; +import net.runelite.api.HeadIcon; +import net.runelite.api.Player; + +public class OverheadPrayerChanged extends PlayerHeadIconChanged +{ + @Getter + private final HeadIcon oldHeadIcon; + + @Getter + private final HeadIcon newHeadIcon; + + public OverheadPrayerChanged(Player player, HeadIcon changedFrom, HeadIcon changedTo) + { + super(player); + this.oldHeadIcon = changedFrom; + this.newHeadIcon = changedTo; + } +} diff --git a/runelite-api/src/main/java/net/runelite/api/events/player/headicon/PlayerHeadIconChanged.java b/runelite-api/src/main/java/net/runelite/api/events/player/headicon/PlayerHeadIconChanged.java new file mode 100644 index 0000000000..2456339741 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/events/player/headicon/PlayerHeadIconChanged.java @@ -0,0 +1,16 @@ +package net.runelite.api.events.player.headicon; + +import lombok.Getter; +import net.runelite.api.Player; +import net.runelite.api.events.Event; + +public abstract class PlayerHeadIconChanged implements Event +{ + @Getter + private final Player player; + + public PlayerHeadIconChanged(Player player) + { + this.player = player; + } +} diff --git a/runelite-api/src/main/java/net/runelite/api/events/player/headicon/PlayerSkullChanged.java b/runelite-api/src/main/java/net/runelite/api/events/player/headicon/PlayerSkullChanged.java new file mode 100644 index 0000000000..c9bfd81095 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/events/player/headicon/PlayerSkullChanged.java @@ -0,0 +1,21 @@ +package net.runelite.api.events.player.headicon; + +import lombok.Getter; +import net.runelite.api.Player; +import net.runelite.api.SkullIcon; + +public class PlayerSkullChanged extends PlayerHeadIconChanged +{ + @Getter + private final SkullIcon oldSkullIcon; + + @Getter + private final SkullIcon newSkullIcon; + + public PlayerSkullChanged(Player player, SkullIcon changedFrom, SkullIcon changedTo) + { + super(player); + this.oldSkullIcon = changedFrom; + this.newSkullIcon = changedTo; + } +} 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 d36d369e89..6f7c2ddc59 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java @@ -27,6 +27,7 @@ package net.runelite.mixins; import java.awt.Polygon; import java.awt.Shape; import java.util.ArrayList; +import jdk.javadoc.internal.doclets.formats.html.markup.Head; import net.runelite.api.HeadIcon; import static net.runelite.api.HeadIcon.MAGIC; import static net.runelite.api.HeadIcon.MELEE; @@ -46,6 +47,8 @@ import static net.runelite.api.SkullIcon.SKULL; import static net.runelite.api.SkullIcon.SKULL_FIGHT_PIT; import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.PlayerAppearanceChanged; +import net.runelite.api.events.player.headicon.OverheadPrayerChanged; +import net.runelite.api.events.player.headicon.PlayerSkullChanged; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.MethodHook; @@ -67,6 +70,12 @@ public abstract class RSPlayerMixin implements RSPlayer @Inject private boolean friended; + @Inject + private HeadIcon oldHeadIcon = null; + + @Inject + private SkullIcon oldSkullIcon = null; + @Inject @Override public String getName() @@ -92,7 +101,41 @@ public abstract class RSPlayerMixin implements RSPlayer @Override public HeadIcon getOverheadIcon() { - switch (getRsOverheadIcon()) + final HeadIcon headIcon = getHeadIcon(getRsOverheadIcon()); + if (headIcon == null && oldHeadIcon == null) + { + return null; + } + if (headIcon != oldHeadIcon) + { + client.getCallbacks().post(OverheadPrayerChanged.class, + new OverheadPrayerChanged(this, oldHeadIcon, headIcon)); + } + oldHeadIcon = headIcon; + return headIcon; + } + + @Inject + @Override + public SkullIcon getSkullIcon() + { + final SkullIcon skullIcon = skullFromInt(getRsSkullIcon()); + if (oldSkullIcon == null && skullIcon == null) + { + return null; + } + if (skullIcon != oldSkullIcon) + { + client.getCallbacks().post(PlayerSkullChanged.class, + new PlayerSkullChanged(this, oldSkullIcon, skullIcon)); + } + oldSkullIcon = skullIcon; + return skullIcon; + } + + private HeadIcon getHeadIcon(int overheadIcon) + { + switch (overheadIcon) { case 0: return MELEE; @@ -111,11 +154,9 @@ public abstract class RSPlayerMixin implements RSPlayer } } - @Inject - @Override - public SkullIcon getSkullIcon() + private SkullIcon skullFromInt(int skull) { - switch (getRsSkullIcon()) + switch (skull) { case 0: return SKULL;