From 0b63291bbf887f9fa897108ae68d33082bd0b405 Mon Sep 17 00:00:00 2001 From: WooxSolo Date: Sun, 20 May 2018 16:13:50 +0200 Subject: [PATCH] Add RSTileMixin.getGroundItems and RSNPCMixin.getTransformedComposition --- .../src/main/java/net/runelite/api/NPC.java | 7 ++++++ .../src/main/java/net/runelite/api/Tile.java | 8 ++++++ .../java/net/runelite/mixins/RSNPCMixin.java | 13 ++++++++++ .../java/net/runelite/mixins/RSTileMixin.java | 25 +++++++++++++++++++ 4 files changed, 53 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/NPC.java b/runelite-api/src/main/java/net/runelite/api/NPC.java index d9b05dd80c..a6926fc009 100644 --- a/runelite-api/src/main/java/net/runelite/api/NPC.java +++ b/runelite-api/src/main/java/net/runelite/api/NPC.java @@ -37,4 +37,11 @@ public interface NPC extends Actor int getIndex(); NPCComposition getComposition(); + + /** + * Get the composition for this NPC and transform it if required + * + * @return + */ + NPCComposition getTransformedComposition(); } diff --git a/runelite-api/src/main/java/net/runelite/api/Tile.java b/runelite-api/src/main/java/net/runelite/api/Tile.java index 0099690098..8e97430980 100644 --- a/runelite-api/src/main/java/net/runelite/api/Tile.java +++ b/runelite-api/src/main/java/net/runelite/api/Tile.java @@ -24,6 +24,7 @@ */ package net.runelite.api; +import java.util.List; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; @@ -57,4 +58,11 @@ public interface Tile int getPlane(); boolean hasLineOfSightTo(Tile other); + + /** + * Get all the ground items for this tile + * + * @return + */ + List getGroundItems(); } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java index 4503dcb816..79334a5288 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java @@ -24,6 +24,7 @@ */ package net.runelite.mixins; +import net.runelite.api.NPCComposition; import net.runelite.api.events.NpcDespawned; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.FieldHook; @@ -136,4 +137,16 @@ public abstract class RSNPCMixin implements RSNPC setSpotAnimFrame(spotAnimFrame); } } + + @Inject + @Override + public NPCComposition getTransformedComposition() + { + RSNPCComposition composition = getComposition(); + if (composition != null && composition.getConfigs() != null) + { + composition = composition.transform(); + } + return composition; + } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java index 31dad819fb..28e59ebe8f 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java @@ -30,6 +30,9 @@ import net.runelite.api.DecorativeObject; import net.runelite.api.GameObject; import net.runelite.api.GameState; import net.runelite.api.GroundObject; +import net.runelite.api.Item; +import net.runelite.api.ItemLayer; +import net.runelite.api.Node; import net.runelite.api.Point; import net.runelite.api.Tile; import net.runelite.api.WallObject; @@ -57,6 +60,8 @@ import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSCollisionData; import net.runelite.rs.api.RSGameObject; import net.runelite.rs.api.RSTile; +import java.util.ArrayList; +import java.util.List; @Mixin(RSTile.class) public abstract class RSTileMixin implements RSTile @@ -386,4 +391,24 @@ public abstract class RSTileMixin implements RSTile // No collision return true; } + + @Inject + @Override + public List getGroundItems() + { + ItemLayer layer = this.getItemLayer(); + if (layer == null) + { + return null; + } + + List result = new ArrayList(); + Node node = layer.getBottom(); + while (node instanceof Item) + { + result.add((Item)node); + node = node.getNext(); + } + return result; + } }