project: add missing features (#2951)

* client: add stuff

client: add stuff

* mixins

* Update XpDropEvent.java

* Update EntityHiderBridgeMixin.java

* would help if I uploaded the right files

would help if I uploaded the right files
This commit is contained in:
Kyle
2021-02-26 12:05:23 +00:00
committed by GitHub
parent d04ae86168
commit d3162944fa
5 changed files with 252 additions and 25 deletions

View File

@@ -25,6 +25,9 @@
*/
package net.runelite.mixins;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import net.runelite.api.mixins.Inject;
import net.runelite.api.mixins.Mixin;
import net.runelite.rs.api.RSClient;
@@ -38,6 +41,12 @@ public abstract class EntityHiderBridgeMixin implements RSClient
@Inject
public static boolean isHidingEntities;
@Inject
public static boolean hidePlayers;
@Inject
public static boolean hidePlayers2D;
@Inject
public static boolean hideOthers;
@@ -77,9 +86,21 @@ public abstract class EntityHiderBridgeMixin implements RSClient
@Inject
public static boolean hideDeadNPCs;
@Inject
public static Set<Integer> blacklistDeadNpcs = new HashSet<>();
@Inject
public static List<String> hideSpecificPlayers = new ArrayList<>();
@Inject
public static HashMap<String, Integer> hiddenNpcsDeath = new HashMap<>();
@Inject
public static HashMap<String, Integer> hiddenNpcsName = new HashMap<>();
@Inject
public static List<Integer> hiddenNpcIndices = new ArrayList<>();
@Inject
@Override
public void setIsHidingEntities(boolean state)
@@ -184,4 +205,95 @@ public abstract class EntityHiderBridgeMixin implements RSClient
{
hideDeadNPCs = state;
}
@Inject
@Override
public void addHiddenNpcDeath(String npc)
{
npc = npc.toLowerCase();
int i = hiddenNpcsDeath.getOrDefault(npc, 0);
if (i == Integer.MAX_VALUE)
{
throw new RuntimeException("NPC death " + npc + " has been hidden Integer.MAX_VALUE times, is something wrong?");
}
hiddenNpcsDeath.put(npc, ++i);
}
@Inject
@Override
public void removeHiddenNpcDeath(String npc)
{
npc = npc.toLowerCase();
int i = hiddenNpcsDeath.getOrDefault(npc, 0);
if (i == 0)
{
return;
}
hiddenNpcsDeath.put(npc, --i);
}
@Inject
@Override
public void setBlacklistDeadNpcs(Set<Integer> blacklist)
{
blacklistDeadNpcs = blacklist;
}
@Inject
@Override
public void addHiddenNpcName(String npc)
{
npc = npc.toLowerCase();
int i = hiddenNpcsName.getOrDefault(npc, 0);
if (i == Integer.MAX_VALUE)
{
throw new RuntimeException("NPC name " + npc + " has been hidden Integer.MAX_VALUE times, is something wrong?");
}
hiddenNpcsName.put(npc, ++i);
}
@Inject
@Override
public void removeHiddenNpcName(String npc)
{
npc = npc.toLowerCase();
int i = hiddenNpcsName.getOrDefault(npc, 0);
if (i == 0)
{
return;
}
hiddenNpcsName.put(npc, --i);
}
@Inject
@Override
public void setPlayersHidden(boolean state)
{
hidePlayers = state;
}
@Inject
@Override
public void setPlayersHidden2D(boolean state)
{
hidePlayers2D = state;
}
@Inject
@Override
public void setHiddenNpcIndices(List<Integer> npcIndices)
{
hiddenNpcIndices = npcIndices;
}
@Inject
@Override
public List<Integer> getHiddenNpcIndices()
{
return hiddenNpcIndices;
}
}

View File

@@ -25,7 +25,10 @@
*/
package net.runelite.mixins;
import java.util.HashMap;
import java.util.Set;
import net.runelite.api.mixins.*;
import net.runelite.api.util.Text;
import net.runelite.rs.api.*;
import java.util.List;
@@ -39,6 +42,12 @@ public abstract class EntityHiderMixin implements RSScene
@Shadow("isHidingEntities")
private static boolean isHidingEntities;
@Shadow("hidePlayers")
private static boolean hidePlayers;
@Shadow("hidePlayers2D")
private static boolean hidePlayers2D;
@Shadow("hideOthers")
private static boolean hideOthers;
@@ -63,9 +72,18 @@ public abstract class EntityHiderMixin implements RSScene
@Shadow("hideNPCs")
private static boolean hideNPCs;
@Shadow("hiddenNpcsName")
private static HashMap<String, Integer> hiddenNpcsName;
@Shadow("hiddenNpcsDeath")
private static HashMap<String, Integer> hiddenNpcsDeath;
@Shadow("hideSpecificPlayers")
private static List<String> hideSpecificPlayers;
@Shadow("blacklistDeadNpcs")
private static Set<Integer> blacklistDeadNpcs;
@Shadow("hideNPCs2D")
private static boolean hideNPCs2D;
@@ -81,6 +99,9 @@ public abstract class EntityHiderMixin implements RSScene
@Shadow("hideDeadNPCs")
private static boolean hideDeadNPCs;
@Shadow("hiddenNpcIndices")
private static List<Integer> hiddenNpcIndices;
@Copy("newGameObject")
@Replace("newGameObject")
boolean copy$addEntityMarker(int var1, int var2, int var3, int var4, int var5, int x, int y, int var8, RSRenderable entity, int var10, boolean var11, long var12, int var13)
@@ -122,17 +143,10 @@ public abstract class EntityHiderMixin implements RSScene
if (entity instanceof RSPlayer)
{
boolean local = drawingUI ? hideLocalPlayer2D : hideLocalPlayer;
boolean other = drawingUI ? hidePlayers2D : hidePlayers;
boolean isLocalPlayer = entity == client.getLocalPlayer();
RSPlayer player = (RSPlayer) entity;
RSPlayer local = client.getLocalPlayer();
if (player.getName() == null)
{
return true;
}
if (player == local)
{
return drawingUI ? !hideLocalPlayer2D : !hideLocalPlayer;
}
for (String name : hideSpecificPlayers)
{
@@ -145,33 +159,37 @@ public abstract class EntityHiderMixin implements RSScene
}
}
if (hideAttackers && player.getInteracting() == local)
if (isLocalPlayer ? local : other)
{
return false;
}
if (!hideAttackers)
{
if (player.getInteracting() == client.getLocalPlayer())
{
return true;
}
}
if (player.isFriend())
{
return !hideFriends;
}
if (player.getName() == null)
{
// player.isFriend() and player.isClanMember() npe when the player has a null name
return false;
}
if (player.isFriendsChatMember())
{
return !hideClanMates;
return (!hideFriends && player.isFriend()) ||
(!isLocalPlayer && !hideClanMates && player.isFriendsChatMember());
}
if (client.getFriendManager().isIgnored(player.getRsName()))
{
return !hideIgnores;
}
return drawingUI ? !hideOthers2D : !hideOthers;
}
else if (entity instanceof RSNPC)
{
RSNPC npc = (RSNPC) entity;
if (npc.isDead() && hideDeadNPCs)
if (npc.getInteracting() == client.getLocalPlayer() && hideAttackers)
{
return false;
}
@@ -181,11 +199,31 @@ public abstract class EntityHiderMixin implements RSScene
return false;
}
if (npc.getInteracting() == client.getLocalPlayer() && hideAttackers)
if (hideDeadNPCs && npc.getHealthRatio() == 0 && !blacklistDeadNpcs.contains(npc.getId()))
{
return false;
}
if (npc.getName() != null &&
hiddenNpcsName.getOrDefault(Text.standardize(npc.getName().toLowerCase()), 0) > 0)
{
return false;
}
if (npc.getName() != null && npc.getHealthRatio() == 0 &&
hiddenNpcsDeath.getOrDefault(Text.standardize(npc.getName().toLowerCase()), 0) > 0)
{
return false;
}
for (Integer index : hiddenNpcIndices)
{
if (index != null && npc.getIndex() == index)
{
return false;
}
}
return drawingUI ? !hideNPCs2D : !hideNPCs;
}
else if (entity instanceof RSProjectile)