mirror of
https://github.com/TotalFreedomMC/TF-LibsDisguises.git
synced 2025-02-11 19:50:30 +00:00
Only allow refreshing entity is the entity is valid
This commit is contained in:
parent
4e09a64abb
commit
c2e7aae201
1 changed files with 49 additions and 43 deletions
|
@ -383,29 +383,32 @@ public class DisguiseUtilities {
|
||||||
* the entity to all the watching players, which is where the magic begins
|
* the entity to all the watching players, which is where the magic begins
|
||||||
*/
|
*/
|
||||||
public static void refreshTracker(TargetedDisguise disguise, String player) {
|
public static void refreshTracker(TargetedDisguise disguise, String player) {
|
||||||
try {
|
if (disguise.getEntity() != null && disguise.getEntity().isValid()) {
|
||||||
Object world = ReflectionManager.getWorld(disguise.getEntity().getWorld());
|
try {
|
||||||
Object tracker = world.getClass().getField("tracker").get(world);
|
Object world = ReflectionManager.getWorld(disguise.getEntity().getWorld());
|
||||||
Object trackedEntities = tracker.getClass().getField("trackedEntities").get(tracker);
|
Object tracker = world.getClass().getField("tracker").get(world);
|
||||||
Object entityTrackerEntry = trackedEntities.getClass().getMethod("get", int.class)
|
Object trackedEntities = tracker.getClass().getField("trackedEntities").get(tracker);
|
||||||
.invoke(trackedEntities, disguise.getEntity().getEntityId());
|
Object entityTrackerEntry = trackedEntities.getClass().getMethod("get", int.class)
|
||||||
if (entityTrackerEntry != null) {
|
.invoke(trackedEntities, disguise.getEntity().getEntityId());
|
||||||
HashSet trackedPlayers = (HashSet) entityTrackerEntry.getClass().getField("trackedPlayers")
|
if (entityTrackerEntry != null) {
|
||||||
.get(entityTrackerEntry);
|
HashSet trackedPlayers = (HashSet) entityTrackerEntry.getClass().getField("trackedPlayers")
|
||||||
Method clear = entityTrackerEntry.getClass().getMethod("clear", ReflectionManager.getNmsClass("EntityPlayer"));
|
.get(entityTrackerEntry);
|
||||||
Method updatePlayer = entityTrackerEntry.getClass().getMethod("updatePlayer",
|
Method clear = entityTrackerEntry.getClass()
|
||||||
ReflectionManager.getNmsClass("EntityPlayer"));
|
.getMethod("clear", ReflectionManager.getNmsClass("EntityPlayer"));
|
||||||
HashSet cloned = (HashSet) trackedPlayers.clone();
|
Method updatePlayer = entityTrackerEntry.getClass().getMethod("updatePlayer",
|
||||||
for (Object p : cloned) {
|
ReflectionManager.getNmsClass("EntityPlayer"));
|
||||||
if (player.equals(((Player) ReflectionManager.getBukkitEntity(p)).getName())) {
|
HashSet cloned = (HashSet) trackedPlayers.clone();
|
||||||
clear.invoke(entityTrackerEntry, p);
|
for (Object p : cloned) {
|
||||||
updatePlayer.invoke(entityTrackerEntry, p);
|
if (player.equals(((Player) ReflectionManager.getBukkitEntity(p)).getName())) {
|
||||||
break;
|
clear.invoke(entityTrackerEntry, p);
|
||||||
|
updatePlayer.invoke(entityTrackerEntry, p);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -414,32 +417,35 @@ public class DisguiseUtilities {
|
||||||
* convidence method for me to refresh trackers in other plugins
|
* convidence method for me to refresh trackers in other plugins
|
||||||
*/
|
*/
|
||||||
public static void refreshTrackers(Entity entity) {
|
public static void refreshTrackers(Entity entity) {
|
||||||
try {
|
if (entity.isValid()) {
|
||||||
Object world = ReflectionManager.getWorld(entity.getWorld());
|
try {
|
||||||
Object tracker = world.getClass().getField("tracker").get(world);
|
Object world = ReflectionManager.getWorld(entity.getWorld());
|
||||||
Object trackedEntities = tracker.getClass().getField("trackedEntities").get(tracker);
|
Object tracker = world.getClass().getField("tracker").get(world);
|
||||||
Object entityTrackerEntry = trackedEntities.getClass().getMethod("get", int.class)
|
Object trackedEntities = tracker.getClass().getField("trackedEntities").get(tracker);
|
||||||
.invoke(trackedEntities, entity.getEntityId());
|
Object entityTrackerEntry = trackedEntities.getClass().getMethod("get", int.class)
|
||||||
if (entityTrackerEntry != null) {
|
.invoke(trackedEntities, entity.getEntityId());
|
||||||
HashSet trackedPlayers = (HashSet) entityTrackerEntry.getClass().getField("trackedPlayers")
|
if (entityTrackerEntry != null) {
|
||||||
.get(entityTrackerEntry);
|
HashSet trackedPlayers = (HashSet) entityTrackerEntry.getClass().getField("trackedPlayers")
|
||||||
Method clear = entityTrackerEntry.getClass().getMethod("clear", ReflectionManager.getNmsClass("EntityPlayer"));
|
.get(entityTrackerEntry);
|
||||||
Method updatePlayer = entityTrackerEntry.getClass().getMethod("updatePlayer",
|
Method clear = entityTrackerEntry.getClass()
|
||||||
ReflectionManager.getNmsClass("EntityPlayer"));
|
.getMethod("clear", ReflectionManager.getNmsClass("EntityPlayer"));
|
||||||
HashSet cloned = (HashSet) trackedPlayers.clone();
|
Method updatePlayer = entityTrackerEntry.getClass().getMethod("updatePlayer",
|
||||||
for (Object p : cloned) {
|
ReflectionManager.getNmsClass("EntityPlayer"));
|
||||||
Player player = (Player) ReflectionManager.getBukkitEntity(p);
|
HashSet cloned = (HashSet) trackedPlayers.clone();
|
||||||
// if (entity instanceof Player && !((Player) ReflectionManager.getBukkitEntity(player)).canSee((Player)
|
for (Object p : cloned) {
|
||||||
// entity))
|
Player player = (Player) ReflectionManager.getBukkitEntity(p);
|
||||||
// continue;
|
// if (entity instanceof Player && !((Player) ReflectionManager.getBukkitEntity(player)).canSee((Player)
|
||||||
if (!(entity instanceof Player) || player.canSee((Player) entity)) {
|
// entity))
|
||||||
clear.invoke(entityTrackerEntry, p);
|
// continue;
|
||||||
updatePlayer.invoke(entityTrackerEntry, p);
|
if (!(entity instanceof Player) || player.canSee((Player) entity)) {
|
||||||
|
clear.invoke(entityTrackerEntry, p);
|
||||||
|
updatePlayer.invoke(entityTrackerEntry, p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue