Hopefully fixes #487

This commit is contained in:
libraryaddict 2020-06-26 14:24:48 +12:00
parent c5ee5f1fbd
commit 472649cad7
2 changed files with 34 additions and 10 deletions

View File

@ -109,6 +109,7 @@ public class DisguiseUtilities {
@Getter @Getter
public static final Random random = new Random(); public static final Random random = new Random();
private static LinkedHashMap<String, Disguise> clonedDisguises = new LinkedHashMap<>(); private static LinkedHashMap<String, Disguise> clonedDisguises = new LinkedHashMap<>();
private static final List<Integer> isNoInteract = new ArrayList<>();
/** /**
* A hashmap of the uuid's of entitys, alive and dead. And their disguises in use * A hashmap of the uuid's of entitys, alive and dead. And their disguises in use
*/ */
@ -186,6 +187,12 @@ public class DisguiseUtilities {
saveDisguiseCommandUsed = true; saveDisguiseCommandUsed = true;
} }
public static boolean isNotInteractable(int entityId) {
synchronized (isNoInteract) {
return isNoInteract.contains(entityId);
}
}
public static boolean isGrabSkinCommandUsed() { public static boolean isGrabSkinCommandUsed() {
return grabSkinCommandUsed; return grabSkinCommandUsed;
} }
@ -402,9 +409,24 @@ public class DisguiseUtilities {
return false; return false;
} }
public static void addDisguise(UUID entityId, TargetedDisguise disguise) { public static void addDisguise(UUID entityUUID, TargetedDisguise disguise) {
if (!getDisguises().containsKey(entityId)) { if (!getDisguises().containsKey(entityUUID)) {
getDisguises().put(entityId, new HashSet<>()); getDisguises().put(entityUUID, new HashSet<>());
synchronized (isNoInteract) {
Entity entity = disguise.getEntity();
switch (entity.getType()) {
case EXPERIENCE_ORB:
case DROPPED_ITEM:
case ARROW:
case SPECTRAL_ARROW:
isNoInteract.add(entity.getEntityId());
break;
default:
break;
}
}
} }
if ("a%%__USER__%%a".equals("a12345a") || (LibsPremium.getUserID().matches("[0-9]+") && if ("a%%__USER__%%a".equals("a12345a") || (LibsPremium.getUserID().matches("[0-9]+") &&
@ -427,7 +449,7 @@ public class DisguiseUtilities {
} }
} }
getDisguises().get(entityId).add(disguise); getDisguises().get(entityUUID).add(disguise);
checkConflicts(disguise, null); checkConflicts(disguise, null);
@ -1263,6 +1285,12 @@ public class DisguiseUtilities {
if (getDisguises().containsKey(entityId) && getDisguises().get(entityId).remove(disguise)) { if (getDisguises().containsKey(entityId) && getDisguises().get(entityId).remove(disguise)) {
if (getDisguises().get(entityId).isEmpty()) { if (getDisguises().get(entityId).isEmpty()) {
getDisguises().remove(entityId); getDisguises().remove(entityId);
if (disguise.getEntity() != null) {
synchronized (isNoInteract) {
isNoInteract.remove(disguise.getEntity().getEntityId());
}
}
} }
if (disguise.getDisguiseTarget() == TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS && if (disguise.getDisguiseTarget() == TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS &&

View File

@ -48,13 +48,9 @@ public class PacketListenerClientInteract extends PacketAdapter {
if (packet.getIntegers().read(0) == DisguiseAPI.getSelfDisguiseId()) { if (packet.getIntegers().read(0) == DisguiseAPI.getSelfDisguiseId()) {
// Self disguise // Self disguise
event.setCancelled(true); event.setCancelled(true);
} else { } else if (DisguiseUtilities.isNotInteractable(packet.getIntegers().read(0))) {
Entity entity = DisguiseUtilities.getEntity(observer.getWorld(), packet.getIntegers().read(0));
if (entity instanceof ExperienceOrb || entity instanceof Item || entity instanceof Arrow) {
event.setCancelled(true); event.setCancelled(true);
} }
}
if (event.isAsync()) { if (event.isAsync()) {
new BukkitRunnable() { new BukkitRunnable() {