From d715b3a50c73f4f8a2a9492f73e3b24c43baacdf Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 24 Nov 2018 11:10:50 -0500 Subject: [PATCH] runelite-api: add skull icon api for local player --- .../main/java/net/runelite/api/Player.java | 10 +++ .../main/java/net/runelite/api/SkullIcon.java | 61 +++++++++++++++++++ .../net/runelite/mixins/RSPlayerMixin.java | 39 ++++++++++++ .../java/net/runelite/rs/api/RSPlayer.java | 5 ++ 4 files changed, 115 insertions(+) create mode 100644 runelite-api/src/main/java/net/runelite/api/SkullIcon.java diff --git a/runelite-api/src/main/java/net/runelite/api/Player.java b/runelite-api/src/main/java/net/runelite/api/Player.java index 8dce016d12..560fd19e9b 100644 --- a/runelite-api/src/main/java/net/runelite/api/Player.java +++ b/runelite-api/src/main/java/net/runelite/api/Player.java @@ -25,6 +25,7 @@ package net.runelite.api; import java.awt.Polygon; +import javax.annotation.Nullable; /** * Represents a player entity in the game. @@ -76,4 +77,13 @@ public interface Player extends Actor * @return the overhead icon */ HeadIcon getOverheadIcon(); + + /** + * Gets the displayed skull icon of the player. + * Only works on the local player. + * + * @return the skull icon + */ + @Nullable + SkullIcon getSkullIcon(); } diff --git a/runelite-api/src/main/java/net/runelite/api/SkullIcon.java b/runelite-api/src/main/java/net/runelite/api/SkullIcon.java new file mode 100644 index 0000000000..f16cbc2ef9 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/SkullIcon.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2018, Infinitay + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.api; + +/** + * An enumeration of PK skulls. + */ +public enum SkullIcon +{ + /** + * White skull from PVP world or wilderness + */ + SKULL, + /** + * Red skull from Tzhaar Fight Pits + */ + SKULL_FIGHT_PIT, + /** + * Deadman mode sprite carrying one key + */ + DEAD_MAN_ONE, + /** + * Deadman mode sprite carrying two keys + */ + DEAD_MAN_TWO, + /** + * Deadman mode sprite carrying three keys + */ + DEAD_MAN_THREE, + /** + * Deadman mode sprite carrying four keys + */ + DEAD_MAN_FOUR, + /** + * Deadman mode sprite carrying five keys + */ + DEAD_MAN_FIVE, +} 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 79497273ff..c898f84694 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java @@ -37,6 +37,14 @@ import static net.runelite.api.HeadIcon.SMITE; import net.runelite.api.Model; import net.runelite.api.Perspective; import net.runelite.api.Point; +import net.runelite.api.SkullIcon; +import static net.runelite.api.SkullIcon.DEAD_MAN_FIVE; +import static net.runelite.api.SkullIcon.DEAD_MAN_FOUR; +import static net.runelite.api.SkullIcon.DEAD_MAN_ONE; +import static net.runelite.api.SkullIcon.DEAD_MAN_THREE; +import static net.runelite.api.SkullIcon.DEAD_MAN_TWO; +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.mixins.Copy; import net.runelite.api.mixins.Inject; @@ -100,6 +108,37 @@ public abstract class RSPlayerMixin implements RSPlayer } } + @Inject + @Override + public SkullIcon getSkullIcon() + { + if (this != client.getLocalPlayer()) + { + // prevent seeing skulls of other players. + return null; + } + + switch (getRsSkullIcon()) + { + case 0: + return SKULL; + case 1: + return SKULL_FIGHT_PIT; + case 8: + return DEAD_MAN_FIVE; + case 9: + return DEAD_MAN_FOUR; + case 10: + return DEAD_MAN_THREE; + case 11: + return DEAD_MAN_TWO; + case 12: + return DEAD_MAN_ONE; + default: + return null; + } + } + @Inject @Override public Polygon[] getPolygons() diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java index f8229afffc..bd8b0b16fb 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java @@ -26,6 +26,7 @@ package net.runelite.rs.api; import net.runelite.api.Player; import net.runelite.mapping.Import; +import net.runelite.mapping.Protect; public interface RSPlayer extends RSActor, Player { @@ -60,4 +61,8 @@ public interface RSPlayer extends RSActor, Player @Import("overheadIcon") int getRsOverheadIcon(); + + @Import("skullIcon") + @Protect + int getRsSkullIcon(); }