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 com.google.inject.Provides;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import net.runelite.api.Client;
|
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.ConfigChanged;
|
||||||
|
import net.runelite.api.events.GameStateChanged;
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
import net.runelite.client.plugins.PluginDescriptor;
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
@@ -66,9 +70,18 @@ public class EntityHiderPlugin extends Plugin
|
|||||||
updateConfig();
|
updateConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onGameStateChanged(GameStateChanged event)
|
||||||
|
{
|
||||||
|
if (event.getGameState() == GameState.LOGGED_IN)
|
||||||
|
{
|
||||||
|
client.setIsHidingEntities(isPlayerRegionAllowed());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void updateConfig()
|
private void updateConfig()
|
||||||
{
|
{
|
||||||
client.setIsHidingEntities(true);
|
client.setIsHidingEntities(isPlayerRegionAllowed());
|
||||||
|
|
||||||
client.setPlayersHidden(config.hidePlayers());
|
client.setPlayersHidden(config.hidePlayers());
|
||||||
client.setPlayersHidden2D(config.hidePlayers2D());
|
client.setPlayersHidden2D(config.hidePlayers2D());
|
||||||
@@ -108,4 +121,19 @@ public class EntityHiderPlugin extends Plugin
|
|||||||
|
|
||||||
client.setProjectilesHidden(false);
|
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;
|
private static boolean hideProjectiles;
|
||||||
|
|
||||||
@Copy("addEntityMarker")
|
@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")
|
@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")
|
@Copy("draw2DExtras")
|
||||||
|
|||||||
@@ -691,4 +691,7 @@ public interface RSClient extends RSGameEngine, Client
|
|||||||
@Import("menuAction")
|
@Import("menuAction")
|
||||||
@Protect
|
@Protect
|
||||||
void menuAction(int var0, int var1, int var2, int var3, String var4, String var5, int var6, int var7);
|
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