Merge pull request #2427 from stone-wall/playericon-events

client: Events for player Skull and Prayer Icon Changes
This commit is contained in:
ST0NEWALL
2020-03-12 16:43:23 -04:00
committed by GitHub
3 changed files with 88 additions and 4 deletions

View File

@@ -0,0 +1,17 @@
package net.runelite.api.events.player.headicon;
import lombok.Data;
import net.runelite.api.HeadIcon;
import net.runelite.api.Player;
import net.runelite.api.events.Event;
@Data
public class OverheadPrayerChanged implements Event
{
private final Player player;
private final HeadIcon oldHeadIcon;
private final HeadIcon newHeadIcon;
}

View File

@@ -0,0 +1,17 @@
package net.runelite.api.events.player.headicon;
import lombok.Data;
import net.runelite.api.Player;
import net.runelite.api.SkullIcon;
import net.runelite.api.events.Event;
@Data
public class PlayerSkullChanged implements Event
{
private final Player player;
private final SkullIcon oldSkullIcon;
private final SkullIcon newSkullIcon;
}

View File

@@ -46,7 +46,10 @@ 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.FieldHook;
import net.runelite.api.mixins.Inject;
import net.runelite.api.mixins.MethodHook;
import net.runelite.api.mixins.Mixin;
@@ -67,6 +70,12 @@ public abstract class RSPlayerMixin implements RSPlayer
@Inject
private boolean friended;
@Inject
private int oldHeadIcon = -1;
@Inject
private int oldSkullIcon = -1;
@Inject
@Override
public String getName()
@@ -88,11 +97,53 @@ public abstract class RSPlayerMixin implements RSPlayer
return name.replace('\u00A0', ' ');
}
@Inject
@FieldHook("headIconPrayer")
public void prayerChanged(int idx)
{
if (!(getRsOverheadIcon() == -1 && oldHeadIcon == -1))
{
final HeadIcon headIcon = getHeadIcon(getRsOverheadIcon());
if (getRsOverheadIcon() != oldHeadIcon)
{
client.getCallbacks().post(OverheadPrayerChanged.class,
new OverheadPrayerChanged(this, getHeadIcon(oldHeadIcon), headIcon));
}
}
oldHeadIcon = getRsOverheadIcon();
}
@Inject
@Override
public HeadIcon getOverheadIcon()
{
switch (getRsOverheadIcon())
return getHeadIcon(getRsOverheadIcon());
}
@Inject
@FieldHook("headIconPk")
public void skullChanged(int idx)
{
final SkullIcon skullIcon = skullFromInt(getRsSkullIcon());
if (getRsSkullIcon() != oldSkullIcon)
{
client.getCallbacks().post(PlayerSkullChanged.class,
new PlayerSkullChanged(this, skullFromInt(getRsSkullIcon()), skullIcon));
}
oldSkullIcon = getRsSkullIcon();
}
@Inject
@Override
public SkullIcon getSkullIcon()
{
return skullFromInt(getRsSkullIcon());
}
@Inject
private HeadIcon getHeadIcon(int overheadIcon)
{
switch (overheadIcon)
{
case 0:
return MELEE;
@@ -112,10 +163,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;