More disguiseNextEntity fixing

This commit is contained in:
libraryaddict 2020-04-22 14:20:52 +12:00
parent 7f65d8c8f1
commit fa4c577f7e
No known key found for this signature in database
GPG Key ID: 052E4FBCD257AEA4
3 changed files with 40 additions and 43 deletions

View File

@ -428,37 +428,49 @@ public class DisguiseUtilities {
} }
} }
public static void addFutureDisguise(final int entityId, final TargetedDisguise disguise) { public static void onFutureDisguise(Entity entity) {
if (!futureDisguises.containsKey(entityId)) { if (!getFutureDisguises().containsKey(entity.getEntityId())) {
futureDisguises.put(entityId, new HashSet<TargetedDisguise>()); return;
} }
futureDisguises.get(entityId).add(disguise); UUID uniqueId = entity.getUniqueId();
for (TargetedDisguise disguise : getFutureDisguises().remove(entity.getEntityId())) {
addDisguise(uniqueId, disguise);
}
}
public static void addFutureDisguise(final int entityId, final TargetedDisguise disguise) {
if (!getFutureDisguises().containsKey(entityId)) {
getFutureDisguises().put(entityId, new HashSet<>());
}
getFutureDisguises().get(entityId).add(disguise);
final BukkitRunnable runnable = new BukkitRunnable() { final BukkitRunnable runnable = new BukkitRunnable() {
@Override @Override
public void run() { public void run() {
if (futureDisguises.containsKey(entityId) && futureDisguises.get(entityId).contains(disguise)) { if (!getFutureDisguises().containsKey(entityId) ||
for (World world : Bukkit.getWorlds()) { !getFutureDisguises().get(entityId).contains(disguise)) {
for (Entity entity : world.getEntities()) { return;
if (entity.getEntityId() == entityId) { }
UUID uniqueId = entity.getUniqueId();
for (TargetedDisguise disguise : futureDisguises.remove(entityId)) { for (World world : Bukkit.getWorlds()) {
addDisguise(uniqueId, disguise); for (Entity entity : world.getEntities()) {
} if (entity.getEntityId() != entityId) {
continue;
return;
}
} }
}
futureDisguises.get(entityId).remove(disguise); onFutureDisguise(entity);
return;
if (futureDisguises.get(entityId).isEmpty()) {
futureDisguises.remove(entityId);
} }
} }
getFutureDisguises().get(entityId).remove(disguise);
if (getFutureDisguises().get(entityId).isEmpty()) {
getFutureDisguises().remove(entityId);
}
} }
}; };
@ -2227,14 +2239,14 @@ public class DisguiseUtilities {
} }
if (getFutureDisguises().containsKey(entityId)) { if (getFutureDisguises().containsKey(entityId)) {
HashSet<TargetedDisguise> hashSet = getFutureDisguises().get(entityId); for (World world : Bukkit.getWorlds()) {
for (Entity entity : world.getEntities()) {
if (entity.getEntityId() != entityId) {
continue;
}
for (TargetedDisguise dis : hashSet) { onFutureDisguise(entity);
if (!dis.canSee(observer) || !dis.isDisguiseInUse()) {
continue;
} }
return dis;
} }
} }

View File

@ -39,25 +39,10 @@ public class PacketListenerMain extends PacketAdapter {
final Disguise disguise = DisguiseUtilities.getDisguise(observer, entityId); final Disguise disguise = DisguiseUtilities.getDisguise(observer, entityId);
if (disguise == null) {
return;
}
if (disguise.getEntity() == null) {
for (Entity e : observer.getWorld().getEntities()) {
if (e.getEntityId() != entityId) {
continue;
}
disguise.setEntity(e);
break;
}
}
// If the entity is the same as the sender. Don't disguise! // If the entity is the same as the sender. Don't disguise!
// Prevents problems and there is no advantage to be gained. // Prevents problems and there is no advantage to be gained.
// Or if they are null and there's no disguise // Or if they are null and there's no disguise
if (disguise.getEntity() == observer) { if (disguise == null || disguise.getEntity() == observer) {
return; return;
} }

View File

@ -257,7 +257,7 @@ public class PacketListenerSounds extends PacketAdapter {
Entity entity = disguise.getEntity(); Entity entity = disguise.getEntity();
if (disguise != null && !disguise.getType().isPlayer() && if (!disguise.getType().isPlayer() &&
(disguise.isSelfDisguiseSoundsReplaced() || entity != event.getPlayer())) { (disguise.isSelfDisguiseSoundsReplaced() || entity != event.getPlayer())) {
DisguiseSound disSound = DisguiseSound.getType(entity.getType().name()); DisguiseSound disSound = DisguiseSound.getType(entity.getType().name());