Merge pull request #5445 from devLotto/issue-1979

entityhider: make hidden entities not occupy the tile they're on
This commit is contained in:
Tomas Slusny
2018-09-18 13:35:02 +02:00
committed by GitHub
3 changed files with 48 additions and 4 deletions

View File

@@ -29,7 +29,11 @@ import com.google.common.eventbus.Subscribe;
import com.google.inject.Provides;
import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.GameState;
import net.runelite.api.Player;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.ConfigChanged;
import net.runelite.api.events.GameStateChanged;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
@@ -66,9 +70,18 @@ public class EntityHiderPlugin extends Plugin
updateConfig();
}
@Subscribe
public void onGameStateChanged(GameStateChanged event)
{
if (event.getGameState() == GameState.LOGGED_IN)
{
client.setIsHidingEntities(isPlayerRegionAllowed());
}
}
private void updateConfig()
{
client.setIsHidingEntities(true);
client.setIsHidingEntities(isPlayerRegionAllowed());
client.setPlayersHidden(config.hidePlayers());
client.setPlayersHidden2D(config.hidePlayers2D());
@@ -108,4 +121,19 @@ public class EntityHiderPlugin extends Plugin
client.setProjectilesHidden(false);
}
private boolean isPlayerRegionAllowed()
{
final Player localPlayer = client.getLocalPlayer();
if (localPlayer == null)
{
return true;
}
final int playerRegionID = WorldPoint.fromLocalInstance(client, localPlayer.getLocalLocation()).getRegionID();
// 9520 = Castle Wars
return playerRegionID != 9520;
}
}

View File

@@ -77,12 +77,25 @@ public abstract class EntityHiderMixin implements RSScene
private static boolean hideProjectiles;
@Copy("addEntityMarker")
abstract boolean addEntityMarker(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, RSRenderable renderable, int var10, boolean var11, long var12, int var13);
abstract boolean addEntityMarker(int var1, int var2, int var3, int var4, int var5, int x, int y, int var8, RSRenderable renderable, int var10, boolean var11, long var12, int var13);
@Replace("addEntityMarker")
boolean rl$addEntityMarker(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, RSRenderable renderable, int var10, boolean var11, long var12, int var13)
boolean rl$addEntityMarker(int var1, int var2, int var3, int var4, int var5, int x, int y, int var8, RSRenderable renderable, int var10, boolean var11, long var12, int var13)
{
return shouldDraw(renderable, false) && addEntityMarker(var1, var2, var3, var4, var5, var6, var7, var8, renderable, var10, var11, var12, var13);
final boolean shouldDraw = shouldDraw(renderable, false);
if (!shouldDraw)
{
final int tileX = x >> 7;
final int tileY = y >> 7;
/*
* Set the 'occupied' tick to -1, to reset the tile being 'occupied',
* making the game think an entity hasn't been rendered at the location yet.
*/
client.getOccupiedTilesTick()[tileX][tileY] = -1;
}
return shouldDraw && addEntityMarker(var1, var2, var3, var4, var5, x, y, var8, renderable, var10, var11, var12, var13);
}
@Copy("draw2DExtras")

View File

@@ -691,4 +691,7 @@ public interface RSClient extends RSGameEngine, Client
@Import("menuAction")
@Protect
void menuAction(int var0, int var1, int var2, int var3, String var4, String var5, int var6, int var7);
@Import("occupiedTilesTick")
int[][] getOccupiedTilesTick();
}