Add RSTileMixin.getGroundItems and RSNPCMixin.getTransformedComposition

This commit is contained in:
WooxSolo
2018-05-20 16:13:50 +02:00
committed by Adam
parent d718133782
commit 0b63291bbf
4 changed files with 53 additions and 0 deletions

View File

@@ -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();
}

View File

@@ -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<Item> getGroundItems();
}

View File

@@ -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;
}
}

View File

@@ -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<Item> getGroundItems()
{
ItemLayer layer = this.getItemLayer();
if (layer == null)
{
return null;
}
List<Item> result = new ArrayList<Item>();
Node node = layer.getBottom();
while (node instanceof Item)
{
result.add((Item)node);
node = node.getNext();
}
return result;
}
}