Merge pull request #5445 from devLotto/issue-1979
entityhider: make hidden entities not occupy the tile they're on
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user