From f40492b2e78cb07270df2e43051b9c450a524b53 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 8 May 2020 02:34:43 +1200 Subject: [PATCH] @eutherin#5367 fixed name ordering --- .../disguise/disguisetypes/Disguise.java | 22 +++++++++++++----- .../disguisetypes/PlayerDisguise.java | 2 +- .../disguise/utilities/DisguiseUtilities.java | 23 ++++++++++++++----- .../packethandlers/PacketHandlerMovement.java | 2 +- .../PacketListenerDestroyEntity.java | 2 +- 5 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java index 119af303..2815b925 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/Disguise.java @@ -28,6 +28,7 @@ import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.translations.LibsMsg; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.ComponentBuilder; +import org.apache.commons.lang.ArrayUtils; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.NamespacedKey; @@ -100,7 +101,6 @@ public abstract class Disguise { @Getter @Setter private boolean tallDisguisesVisible = !DisguiseConfig.isHideTallSelfDisguises(); - @Getter private String[] multiName = new String[0]; private transient int[] armorstandIds = new int[0]; @@ -109,8 +109,18 @@ public abstract class Disguise { this.disguiseName = disguiseType.toReadable(); } + public int getMultiNameLength() { + return multiName.length; + } + + public String[] getMultiName() { + return DisguiseUtilities.reverse(multiName); + } + public void setMultiName(String... name) { - String[] oldName = getMultiName(); + name = DisguiseUtilities.reverse(name); + + String[] oldName = multiName; multiName = name; if (!isDisguiseInUse()) { @@ -136,10 +146,10 @@ public abstract class Disguise { } public int[] getArmorstandIds() { - if (getMultiName().length > armorstandIds.length) { + if (getMultiNameLength() > armorstandIds.length) { int oldLen = armorstandIds.length; - armorstandIds = Arrays.copyOf(armorstandIds, getMultiName().length); + armorstandIds = Arrays.copyOf(armorstandIds, getMultiNameLength()); for (int i = oldLen; i < armorstandIds.length; i++) { armorstandIds[i] = ReflectionManager.getNewEntityId(); @@ -930,9 +940,9 @@ public abstract class Disguise { } } - if (getMultiName().length > 0) { + if (getMultiNameLength()> 0) { PacketContainer packet = new PacketContainer(Server.ENTITY_DESTROY); - packet.getIntegerArrays().write(0, Arrays.copyOf(getArmorstandIds(), getMultiName().length)); + packet.getIntegerArrays().write(0, Arrays.copyOf(getArmorstandIds(), getMultiNameLength())); try { for (Player player : DisguiseUtilities.getPerverts(this)) { diff --git a/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java b/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java index 4cb6635c..89a81df0 100644 --- a/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java +++ b/src/main/java/me/libraryaddict/disguise/disguisetypes/PlayerDisguise.java @@ -140,7 +140,7 @@ public class PlayerDisguise extends TargetedDisguise { if (isDisguiseInUse()) { if (DisguiseConfig.isArmorstandsName()) { this.nameVisible = nameVisible; - sendArmorStands(isNameVisible() ? getMultiName() : new String[0]); + sendArmorStands(isNameVisible() ? DisguiseUtilities.reverse(getMultiName()) : new String[0]); } else if (!DisguiseConfig.isScoreboardNames()) { if (stopDisguise()) { this.nameVisible = nameVisible; diff --git a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java index da527647..928e3ac7 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/DisguiseUtilities.java @@ -1269,7 +1269,7 @@ public class DisguiseUtilities { return; } - int[] ids = Arrays.copyOf(disguise.getArmorstandIds(), 1 + disguise.getMultiName().length); + int[] ids = Arrays.copyOf(disguise.getArmorstandIds(), 1 + disguise.getMultiNameLength()); ids[ids.length - 1] = DisguiseAPI.getSelfDisguiseId(); // Send a packet to destroy the fake entity @@ -1760,6 +1760,16 @@ public class DisguiseUtilities { return string.replaceAll("\\\\(?=\\\\+n)", "\\\\\\\\"); } + public static String[] reverse(String[] array) { + String[] newArray = new String[array.length]; + + for (int i = 1; i <= array.length; i++) { + newArray[array.length - i] = array[i - 1]; + } + + return newArray; + } + public static String[] splitNewLine(String string) { if (string.contains("\n")) { return string.split("\n"); @@ -2281,22 +2291,23 @@ public class DisguiseUtilities { } } - public static ArrayList getNamePackets(Disguise disguise, String[] oldNames) { + public static ArrayList getNamePackets(Disguise disguise, String[] internalOldNames) { ArrayList packets = new ArrayList<>(); String[] newNames = (disguise instanceof PlayerDisguise && !((PlayerDisguise) disguise).isNameVisible()) ? new String[0] : disguise.getMultiName(); int[] standIds = disguise.getArmorstandIds(); int[] destroyIds = new int[0]; + internalOldNames = DisguiseUtilities.reverse(internalOldNames); - if (oldNames.length > newNames.length) { + if (internalOldNames.length > newNames.length) { // Destroy packet - destroyIds = Arrays.copyOfRange(standIds, newNames.length, oldNames.length); + destroyIds = Arrays.copyOfRange(standIds, newNames.length, internalOldNames.length); } for (int i = 0; i < newNames.length; i++) { - if (i < oldNames.length) { - if (newNames[i].equals(oldNames[i]) || newNames[i].isEmpty()) { + if (i < internalOldNames.length) { + if (newNames[i].equals(internalOldNames[i]) || newNames[i].isEmpty()) { continue; } diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMovement.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMovement.java index 20742878..4d272367 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMovement.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMovement.java @@ -42,7 +42,7 @@ public class PacketHandlerMovement implements IPacketHandler { Entity entity) { handle2(disguise, sentPacket, packets, observer, entity); - int len = disguise.getMultiName().length; + int len = disguise.getMultiNameLength(); if (len == 0) { return; diff --git a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerDestroyEntity.java b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerDestroyEntity.java index 17005a69..b043dbf4 100644 --- a/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerDestroyEntity.java +++ b/src/main/java/me/libraryaddict/disguise/utilities/packets/packetlisteners/PacketListenerDestroyEntity.java @@ -34,7 +34,7 @@ public class PacketListenerDestroyEntity extends PacketAdapter { continue; } - int len = disguise.getMultiName().length; + int len = disguise.getMultiNameLength(); if (len == 0) { continue;