diff --git a/runelite-api/src/main/java/net/runelite/api/TileObject.java b/runelite-api/src/main/java/net/runelite/api/TileObject.java index 2f056dcfa5..abf2e36bd9 100644 --- a/runelite-api/src/main/java/net/runelite/api/TileObject.java +++ b/runelite-api/src/main/java/net/runelite/api/TileObject.java @@ -38,6 +38,8 @@ public interface TileObject int getY(); + int getPlane(); + int getId(); WorldPoint getWorldLocation(); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSDecorativeObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSDecorativeObjectMixin.java index f3fd5c155b..f16b39f81b 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSDecorativeObjectMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSDecorativeObjectMixin.java @@ -41,6 +41,23 @@ public abstract class RSDecorativeObjectMixin implements RSDecorativeObject @Shadow("clientInstance") private static RSClient client; + @Inject + private int decorativeObjectPlane; + + @Inject + @Override + public int getPlane() + { + return decorativeObjectPlane; + } + + @Inject + @Override + public void setPlane(int plane) + { + this.decorativeObjectPlane = plane; + } + @Inject private Model getModel() { diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSGroundObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSGroundObjectMixin.java index 8d84a334d1..50901fba41 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSGroundObjectMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSGroundObjectMixin.java @@ -40,6 +40,23 @@ public abstract class RSGroundObjectMixin implements RSGroundObject @Shadow("clientInstance") private static RSClient client; + @Inject + private int groundObjectPlane; + + @Inject + @Override + public int getPlane() + { + return groundObjectPlane; + } + + @Inject + @Override + public void setPlane(int plane) + { + this.groundObjectPlane = plane; + } + @Inject private Model getModel() { diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemLayerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemLayerMixin.java index 7ee2411045..8b67d4d314 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemLayerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemLayerMixin.java @@ -32,11 +32,27 @@ import net.runelite.rs.api.RSItemLayer; @Mixin(RSItemLayer.class) public abstract class RSItemLayerMixin implements RSItemLayer { + @Inject + private int itemLayerPlane; + + @Inject + @Override + public int getPlane() + { + return itemLayerPlane; + } + + @Inject + @Override + public void setPlane(int plane) + { + this.itemLayerPlane = plane; + } + @Inject @Override public Area getClickbox() { throw new UnsupportedOperationException(); } - } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java index 4f088c1035..5d9664c7ac 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java @@ -24,11 +24,16 @@ */ package net.runelite.mixins; +import net.runelite.api.Renderable; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; +import net.runelite.rs.api.RSDecorativeObject; +import net.runelite.rs.api.RSGroundObject; +import net.runelite.rs.api.RSItemLayer; import net.runelite.rs.api.RSRegion; +import net.runelite.rs.api.RSWallObject; @Mixin(RSRegion.class) public abstract class RSRegionMixin implements RSRegion @@ -52,4 +57,44 @@ public abstract class RSRegionMixin implements RSRegion isDrawingRegion = false; } } + + @Copy("addBoundaryDecoration") + abstract public void rs$addBoundaryDecoration(int plane, int x, int y, int hash, Renderable var5, Renderable var6, int var7, int var8, int var9, int var10, int var11, int var12); + + @Replace("addBoundaryDecoration") + public void rl$addBoundaryDecoration(int plane, int x, int y, int hash, Renderable var5, Renderable var6, int var7, int var8, int var9, int var10, int var11, int var12) + { + rs$addBoundaryDecoration(plane, x, y, hash, var5, var6, var7, var8, var9, var10, var11, var12); + ((RSDecorativeObject) getTiles()[plane][x][y].getDecorativeObject()).setPlane(plane); + } + + @Copy("addItemPile") + abstract public void rs$addItemPile(int plane, int x, int y, int hash, Renderable var5, int var6, Renderable var7, Renderable var8); + + @Replace("addItemPile") + public void rl$addItemPile(int plane, int x, int y, int hash, Renderable var5, int var6, Renderable var7, Renderable var8) + { + rs$addItemPile(plane, x, y, hash, var5, var6, var7, var8); + ((RSItemLayer) getTiles()[plane][x][y].getItemLayer()).setPlane(plane); + } + + @Copy("groundObjectSpawned") + abstract public void rs$groundObjectSpawned(int plane, int x, int y, int hash, Renderable var5, int var6, int var7); + + @Replace("groundObjectSpawned") + public void rl$groundObjectSpawned(int plane, int x, int y, int hash, Renderable var5, int var6, int var7) + { + rs$groundObjectSpawned(plane, x, y, hash, var5, var6, var7); + ((RSGroundObject) getTiles()[plane][x][y].getGroundObject()).setPlane(plane); + } + + @Copy("addBoundary") + abstract public void rs$addBoundary(int plane, int x, int y, int hash, Renderable var5, Renderable var6, int var7, int var8, int var9, int var10); + + @Replace("addBoundary") + public void rl$addBoundary(int plane, int x, int y, int hash, Renderable var5, Renderable var6, int var7, int var8, int var9, int var10) + { + rs$addBoundary(plane, x, y, hash, var5, var6, var7, var8, var9, var10); + ((RSWallObject) getTiles()[plane][x][y].getWallObject()).setPlane(plane); + } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSWallObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSWallObjectMixin.java index 47443cfcf7..94515de571 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSWallObjectMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSWallObjectMixin.java @@ -40,6 +40,23 @@ public abstract class RSWallObjectMixin implements RSWallObject @Shadow("clientInstance") private static RSClient client; + @Inject + private int wallPlane; + + @Inject + @Override + public int getPlane() + { + return wallPlane; + } + + @Inject + @Override + public void setPlane(int plane) + { + this.wallPlane = plane; + } + @Inject private Model getModelA() { diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/TileObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/TileObjectMixin.java index 7a89f244e0..539e389beb 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/TileObjectMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/TileObjectMixin.java @@ -71,7 +71,7 @@ public abstract class TileObjectMixin implements TileObject @Inject public WorldPoint getWorldLocation() { - return WorldPoint.fromLocal(client, getX(), getY(), client.getPlane()); //TODO: use the correct plane + return WorldPoint.fromLocal(client, getX(), getY(), getPlane()); } @Override diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSDecorativeObject.java b/runescape-api/src/main/java/net/runelite/rs/api/RSDecorativeObject.java index ea0ea0d34f..c2e539e7be 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSDecorativeObject.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSDecorativeObject.java @@ -45,4 +45,6 @@ public interface RSDecorativeObject extends DecorativeObject @Import("renderable1") Renderable getRenderable(); + + void setPlane(int plane); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSGroundObject.java b/runescape-api/src/main/java/net/runelite/rs/api/RSGroundObject.java index e1d96c500c..80ab8716b5 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSGroundObject.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSGroundObject.java @@ -42,4 +42,6 @@ public interface RSGroundObject extends GroundObject @Import("renderable") Renderable getRenderable(); + + void setPlane(int plane); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSItemLayer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSItemLayer.java index 65e50e5947..a6ae31504b 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSItemLayer.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSItemLayer.java @@ -56,4 +56,6 @@ public interface RSItemLayer extends ItemLayer @Import("top") @Override RSRenderable getTop(); + + void setPlane(int plane); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSWallObject.java b/runescape-api/src/main/java/net/runelite/rs/api/RSWallObject.java index 9cf6937e59..a119f0a697 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSWallObject.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSWallObject.java @@ -59,4 +59,6 @@ public interface RSWallObject extends WallObject @Import("config") @Override int getConfig(); + + void setPlane(int plane); }