runelite-mixins: wrap drawTileUnderlay in try/catch

The rasterizer crashes on certain tiles ingame with specific camera angles.

java.lang.ArrayIndexOutOfBoundsException: -1
    at Graphics3D.rasterGouraudLine(Graphics3D.java:797)
    at Graphics3D.rasterGouraud(Graphics3D.java:680)
    at Region.drawTileUnderlay(Region.java:1853)
    at Region.draw(Region.java:1376)
    at Region.drawRegion(Region.java:1187)
    at class35.method682(class35.java:808)
    at WorldMapType3.gameDraw(WorldMapType3.java:448)
    at class218.method4359(class218.java:1069)
    at Client.method1268(Client.java:3922)
    at Client.methodDraw(Client.java:2239)
    at GameEngine.method914(GameEngine.java:605)
    at GameEngine.run(GameEngine.java:1027)
    at java.lang.Thread.run(Thread.java:748)
This commit is contained in:
Adam
2018-05-14 18:22:23 -04:00
parent bdb2c5b1b3
commit 0acde2bd06

View File

@@ -25,11 +25,13 @@
package net.runelite.mixins;
import net.runelite.api.Renderable;
import net.runelite.api.SceneTilePaint;
import net.runelite.api.Tile;
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 static net.runelite.client.callback.Hooks.log;
import net.runelite.rs.api.RSDecorativeObject;
import net.runelite.rs.api.RSGroundObject;
import net.runelite.rs.api.RSItemLayer;
@@ -130,4 +132,20 @@ public abstract class RSRegionMixin implements RSRegion
}
}
}
@Copy("drawTileUnderlay")
abstract public void rs$drawTileUnderlay(SceneTilePaint tile, int z, int pitchSin, int pitchCos, int yawSin, int yawCos, int x, int y);
@Replace("drawTileUnderlay")
public void rl$drawTileUnderlay(SceneTilePaint tile, int z, int pitchSin, int pitchCos, int yawSin, int yawCos, int x, int y)
{
try
{
rs$drawTileUnderlay(tile, z, pitchSin, pitchCos, yawSin, yawCos, x, y);
}
catch (Exception ex)
{
log.warn("error during tile underlay rendering", ex);
}
}
}