list = WrappedDataWatcher.getEntityWatcher(player).getWatchableObjects().stream()
+ .map(v -> new WatcherValue(MetaIndex.getMetaIndex(PlayerWatcher.class, v.getIndex()), v.getRawValue())).collect(Collectors.toList());
+
+ PacketContainer metaPacket = ReflectionManager.getMetadataPacket(player.getEntityId(), list);
+
+ ProtocolLibrary.getProtocolManager().sendServerPacket(player, metaPacket);
} catch (Exception ex) {
ex.printStackTrace();
}
@@ -2154,7 +2144,7 @@ public class DisguiseUtilities {
String testName = namePrefix + tName + nameSuffix;
- if (!isValidPlayerName(board, testName)) {
+ if (isInvalidPlayerName(board, testName)) {
continue;
}
@@ -2191,7 +2181,7 @@ public class DisguiseUtilities {
String[] extended = new String[]{prefix, nName, suffix};
- if ((playerName == null || !playerName.equals(extended[1])) && !isValidPlayerName(board, extended[1])) {
+ if ((playerName == null || !playerName.equals(extended[1])) && isInvalidPlayerName(board, extended[1])) {
continue;
}
@@ -2245,35 +2235,10 @@ public class DisguiseUtilities {
return builder.reverse().toString();
}
- private static boolean isValidPlayerName(Scoreboard board, String name) {
- return board.getEntryTeam(name) == null && Bukkit.getPlayerExact(name) == null;
+ private static boolean isInvalidPlayerName(Scoreboard board, String name) {
+ return board.getEntryTeam(name) != null || Bukkit.getPlayerExact(name) != null;
}
- /**
- * Splits a string while respecting quotes.
- *
- * Re
- */
- /*public static String[] split(String string) {
- Matcher matcher = Pattern.compile("\"(?:\"(?=\\S)|\\\\\"|[^\"])*(?:[^\\\\]\"(?=\\s|$))|\\S+").matcher(string);
-
- List list = new ArrayList<>();
-
- while (matcher.find()) {
- String match = matcher.group();
-
- // If the match was quoted, then remove quotes and escapes
- if (match.matches("\"(?:\"(?=\\S)|\\\\\"|[^\"])*(?:[^\\\\]\")")) {
- // Replace the match by removing first and last quote
- // Then remove escaped slashes from the trailing with regex
- match = match.substring(1, match.length() - 1).replaceAll("\\\\\\\\(?=(\\\\\\\\)*$)", "\\");
- }
-
- list.add(matcher.group());
- }
-
- return list.toArray(new String[0]);
- }*/
public static String quote(String string) {
string = string.replace("\n", "\\n");
@@ -2330,7 +2295,7 @@ public class DisguiseUtilities {
}
}
- lines.add(builder.toString() + string.substring(last));
+ lines.add(builder + string.substring(last));
return lines.toArray(new String[0]);
}
@@ -2469,10 +2434,10 @@ public class DisguiseUtilities {
// Send the player a packet with himself being spawned
manager.sendServerPacket(player, manager.createPacketConstructor(Server.NAMED_ENTITY_SPAWN, player).createPacket(player));
- WrappedDataWatcher dataWatcher = WrappedDataWatcher.getEntityWatcher(player);
+ List watcherList = WrappedDataWatcher.getEntityWatcher(player).getWatchableObjects().stream()
+ .map(v -> new WatcherValue(MetaIndex.getMetaIndex(PlayerWatcher.class, v.getIndex()), v.getRawValue())).collect(Collectors.toList());
- sendSelfPacket(player, manager.createPacketConstructor(Server.ENTITY_METADATA, player.getEntityId(), dataWatcher, true)
- .createPacket(player.getEntityId(), dataWatcher, true));
+ sendSelfPacket(player, ReflectionManager.getMetadataPacket(player.getEntityId(), watcherList));
boolean isMoving = false;
@@ -2542,11 +2507,11 @@ public class DisguiseUtilities {
}
public static String quoteHex(String string) {
- return string.replaceAll("(<)(#[0-9a-fA-F]{6}>)", "$1\\$2");
+ return string.replaceAll("(<)(#[\\da-fA-F]{6}>)", "$1\\$2");
}
public static String unquoteHex(String string) {
- return string.replaceAll("(<)\\\\(#[0-9a-fA-F]{6}>)", "$1$2");
+ return string.replaceAll("(<)\\\\(#[\\da-fA-F]{6}>)", "$1$2");
}
public static void sendMessage(CommandSender sender, String message) {
@@ -2574,7 +2539,7 @@ public class DisguiseUtilities {
public static int[] getNumericVersion(String version) {
int[] v = new int[0];
for (String split : version.split("[.\\-]")) {
- if (!split.matches("[0-9]+")) {
+ if (!split.matches("\\d+")) {
return v;
}
@@ -2630,7 +2595,7 @@ public class DisguiseUtilities {
public static String translateAlternateColorCodes(String string) {
if (NmsVersion.v1_16.isSupported()) {
- string = string.replaceAll("&(?=#[0-9a-fA-F]{6})", ChatColor.COLOR_CHAR + "");
+ string = string.replaceAll("&(?=#[\\da-fA-F]{6})", ChatColor.COLOR_CHAR + "");
}
return ChatColor.translateAlternateColorCodes('&', string);
@@ -2690,52 +2655,38 @@ public class DisguiseUtilities {
LibsPackets transformed = PacketsManager.getPacketsHandler().transformPacket(packet, disguise, player, player);
- try {
- if (transformed.isUnhandled()) {
- transformed.addPacket(packet);
- }
-
- LibsPackets newPackets = new LibsPackets(disguise);
-
- for (PacketContainer p : transformed.getPackets()) {
- p.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
-
- newPackets.addPacket(p);
- }
-
- for (Map.Entry> entry : transformed.getDelayedPacketsMap().entrySet()) {
- for (PacketContainer newPacket : entry.getValue()) {
- if (newPacket.getType() != Server.PLAYER_INFO && newPacket.getType() != Server.ENTITY_DESTROY &&
- newPacket.getIntegers().read(0) == player.getEntityId()) {
- newPacket.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
- }
-
- newPackets.addDelayedPacket(newPacket, entry.getKey());
- }
- }
-
- if (disguise.isPlayerDisguise()) {
- LibsDisguises.getInstance().getSkinHandler().handlePackets(player, (PlayerDisguise) disguise, newPackets);
- }
-
- for (PacketContainer p : newPackets.getPackets()) {
- ProtocolLibrary.getProtocolManager().sendServerPacket(player, p, false);
- }
-
- newPackets.sendDelayed(player);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
+ if (transformed.isUnhandled()) {
+ transformed.addPacket(packet);
}
- }
- public static PacketContainer getTabPacket(PlayerDisguise disguise, EnumWrappers.PlayerInfoAction action) {
- PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
+ LibsPackets newPackets = new LibsPackets(disguise);
- addTab.getPlayerInfoAction().write(0, action);
- addTab.getPlayerInfoDataLists().write(0, Collections.singletonList(
- new PlayerInfoData(disguise.getGameProfile(), 0, EnumWrappers.NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(disguise.getName()))));
+ for (PacketContainer p : transformed.getPackets()) {
+ p.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
- return addTab;
+ newPackets.addPacket(p);
+ }
+
+ for (Map.Entry> entry : transformed.getDelayedPacketsMap().entrySet()) {
+ for (PacketContainer newPacket : entry.getValue()) {
+ if (newPacket.getType() != Server.PLAYER_INFO && newPacket.getType() != Server.ENTITY_DESTROY &&
+ newPacket.getIntegers().read(0) == player.getEntityId()) {
+ newPacket.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
+ }
+
+ newPackets.addDelayedPacket(newPacket, entry.getKey());
+ }
+ }
+
+ if (disguise.isPlayerDisguise()) {
+ LibsDisguises.getInstance().getSkinHandler().handlePackets(player, (PlayerDisguise) disguise, newPackets);
+ }
+
+ for (PacketContainer p : newPackets.getPackets()) {
+ ProtocolLibrary.getProtocolManager().sendServerPacket(player, p, false);
+ }
+
+ newPackets.sendDelayed(player);
}
/**
@@ -2890,38 +2841,26 @@ public class DisguiseUtilities {
}
}
- /**
- * Create a new datawatcher but with the 'correct' values
- */
- public static WrappedDataWatcher createSanitizedDataWatcher(Player player, WrappedDataWatcher entityWatcher, FlagWatcher disguiseWatcher) {
- WrappedDataWatcher newWatcher = new WrappedDataWatcher();
+ public static WrappedDataWatcher createDatawatcher(List watcherValues) {
+ WrappedDataWatcher watcher = new WrappedDataWatcher();
- try {
- List list = DisguiseConfig.isMetaPacketsEnabled() ? disguiseWatcher.convert(player, entityWatcher.getWatchableObjects()) :
- disguiseWatcher.getWatchableObjects();
-
- for (WrappedWatchableObject watchableObject : list) {
- if (watchableObject == null) {
- continue;
- }
-
- Object object = watchableObject.getRawValue();
-
- if (object == null) {
- continue;
- }
-
- MetaIndex metaIndex = MetaIndex.getMetaIndex(disguiseWatcher, watchableObject.getIndex());
-
- WrappedDataWatcher.WrappedDataWatcherObject obj = ReflectionManager.createDataWatcherObject(metaIndex, object);
-
- newWatcher.setObject(obj, object);
+ for (WatcherValue value : watcherValues) {
+ if (value == null) {
+ continue;
}
- } catch (Exception ex) {
- ex.printStackTrace();
+
+ watcher.setObject(value.getIndex(), value.getWatchableObject());
}
- return newWatcher;
+ return watcher;
+ }
+
+ public static List createSanitizedWatcherValues(Player player, WrappedDataWatcher entityWatcher, FlagWatcher flagWatcher) {
+ if (!DisguiseConfig.isMetaPacketsEnabled()) {
+ return flagWatcher.getWatchableObjects();
+ }
+
+ return flagWatcher.convert(player, WatcherValue.getValues(entityWatcher));
}
public static byte getPitch(DisguiseType disguiseType, EntityType entityType, byte value) {
@@ -3021,8 +2960,6 @@ public class DisguiseUtilities {
continue;
}
- WrappedDataWatcher watcher = new WrappedDataWatcher();
-
Object name;
if (NmsVersion.v1_13.isSupported()) {
@@ -3031,15 +2968,10 @@ public class DisguiseUtilities {
name = ChatColor.translateAlternateColorCodes('&', newNames[i]);
}
- WrappedDataWatcher.WrappedDataWatcherObject obj =
- ReflectionManager.createDataWatcherObject(NmsVersion.v1_13.isSupported() ? MetaIndex.ENTITY_CUSTOM_NAME : MetaIndex.ENTITY_CUSTOM_NAME_OLD,
- name);
+ MetaIndex index = NmsVersion.v1_13.isSupported() ? MetaIndex.ENTITY_CUSTOM_NAME : MetaIndex.ENTITY_CUSTOM_NAME_OLD;
- watcher.setObject(obj, ReflectionManager.convertInvalidMeta(name));
-
- PacketContainer metaPacket =
- ProtocolLibrary.getProtocolManager().createPacketConstructor(PacketType.Play.Server.ENTITY_METADATA, 0, watcher, true)
- .createPacket(standIds[i], watcher, true);
+ PacketContainer metaPacket = ReflectionManager.getMetadataPacket(standIds[i],
+ Collections.singletonList(new WatcherValue(index, ReflectionManager.convertInvalidMeta(name))));
packets.add(metaPacket);
} else if (newNames[i].isEmpty()) {
@@ -3060,7 +2992,7 @@ public class DisguiseUtilities {
packet.getDoubles().write(2, loc.getZ());
packets.add(packet);
- WrappedDataWatcher watcher = new WrappedDataWatcher();
+ List watcherValues = new ArrayList<>();
for (MetaIndex index : MetaIndex.getMetaIndexes(ArmorStandWatcher.class)) {
Object val = index.getDefault();
@@ -3077,18 +3009,18 @@ public class DisguiseUtilities {
val = true;
}
- WrappedDataWatcher.WrappedDataWatcherObject obj = ReflectionManager.createDataWatcherObject(index, val);
-
- watcher.setObject(obj, ReflectionManager.convertInvalidMeta(val));
+ watcherValues.add(new WatcherValue(index, val));
}
if (NmsVersion.v1_15.isSupported()) {
- PacketContainer metaPacket =
- ProtocolLibrary.getProtocolManager().createPacketConstructor(PacketType.Play.Server.ENTITY_METADATA, standIds[i], watcher, true)
- .createPacket(standIds[i], watcher, true);
+ PacketContainer metaPacket = ReflectionManager.getMetadataPacket(standIds[i], watcherValues);
packets.add(metaPacket);
} else {
+ WrappedDataWatcher watcher = new WrappedDataWatcher();
+
+ watcherValues.forEach(v -> watcher.setObject(v.getIndex(), ReflectionManager.createDataWatcherObject(v.getMetaIndex(), v.getValue())));
+
packet.getDataWatcherModifier().write(0, watcher);
}
}
diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/DisguiseListener.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/DisguiseListener.java
index f788d3f8..ed9db502 100644
--- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/DisguiseListener.java
+++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/DisguiseListener.java
@@ -277,11 +277,7 @@ public class DisguiseListener implements Listener {
packet.getItemModifier().write(0, currentlyHeld);
- try {
- ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
+ ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
}
org.bukkit.inventory.ItemStack newHeld = player.getInventory().getItem(event.getNewSlot());
@@ -301,11 +297,7 @@ public class DisguiseListener implements Listener {
packet.getItemModifier().write(0, new ItemStack(Material.AIR));
- try {
- ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
+ ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
}
}
@@ -460,10 +452,8 @@ public class DisguiseListener implements Listener {
PlayerDisguise disguise = (PlayerDisguise) targetedDisguise;
if (disguise.isDisplayedInTab()) {
- try {
- ProtocolLibrary.getProtocolManager().sendServerPacket(p, DisguiseUtilities.getTabPacket(disguise, PlayerInfoAction.ADD_PLAYER));
- } catch (InvocationTargetException e) {
- e.printStackTrace();
+ for (PacketContainer packet : ReflectionManager.createTablistAddPackets(disguise)) {
+ ProtocolLibrary.getProtocolManager().sendServerPacket(p, packet);
}
}
}
diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/PlayerSkinHandler.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/PlayerSkinHandler.java
index 76704d5b..300264af 100644
--- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/PlayerSkinHandler.java
+++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/listeners/PlayerSkinHandler.java
@@ -21,6 +21,9 @@ import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
import me.libraryaddict.disguise.events.UndisguiseEvent;
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
import me.libraryaddict.disguise.utilities.packets.LibsPackets;
+import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
+import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
+import me.libraryaddict.disguise.utilities.reflection.WatcherValue;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
@@ -33,6 +36,7 @@ import org.bukkit.scheduler.BukkitRunnable;
import java.lang.ref.WeakReference;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -161,11 +165,7 @@ public class PlayerSkinHandler implements Listener {
packet.getModifier().write(0, id);
- try {
- ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
+ ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
}
}
@@ -259,11 +259,11 @@ public class PlayerSkinHandler implements Listener {
}
Entity entity = disguise.getEntity();
- WrappedDataWatcher watcher = DisguiseUtilities.createSanitizedDataWatcher(player, WrappedDataWatcher.getEntityWatcher(entity), disguise.getWatcher());
- PacketContainer metaPacket =
- ProtocolLibrary.getProtocolManager().createPacketConstructor(PacketType.Play.Server.ENTITY_METADATA, entity.getEntityId(), watcher, true)
- .createPacket(entity.getEntityId(), watcher, true);
+ List watcherValues =
+ DisguiseUtilities.createSanitizedWatcherValues(player, WrappedDataWatcher.getEntityWatcher(entity), disguise.getWatcher());
+
+ PacketContainer metaPacket = ReflectionManager.getMetadataPacket(entity.getEntityId(), watcherValues);
ProtocolLibrary.getProtocolManager().sendServerPacket(player, metaPacket, false);
}
@@ -319,16 +319,16 @@ public class PlayerSkinHandler implements Listener {
}
try {
- for (Map.Entry> entry : skin.getSleptPackets().entrySet()) {
- if (entry.getKey() == 0) {
- for (PacketContainer packet : entry.getValue()) {
- ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
- }
- } else {
- new BukkitRunnable() {
- @Override
- public void run() {
- try {
+ if (disguise.isDisguiseInUse()) {
+ for (Map.Entry> entry : skin.getSleptPackets().entrySet()) {
+ if (entry.getKey() == 0) {
+ for (PacketContainer packet : entry.getValue()) {
+ ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
+ }
+ } else {
+ new BukkitRunnable() {
+ @Override
+ public void run() {
if (!disguise.isDisguiseInUse()) {
return;
}
@@ -336,39 +336,37 @@ public class PlayerSkinHandler implements Listener {
for (PacketContainer packet : entry.getValue()) {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
}
+ }
+ }.runTaskLater(LibsDisguises.getInstance(), entry.getKey());
+ }
+ }
+
+ if (skin.isSleepPackets()) {
+ addTeleport(player, skin);
+
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ try {
+ addMetadata(player, skin);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
- }.runTaskLater(LibsDisguises.getInstance(), entry.getKey());
+ }.runTask(LibsDisguises.getInstance());
}
- }
- if (skin.isSleepPackets()) {
- addTeleport(player, skin);
+ if (DisguiseConfig.isArmorstandsName() && disguise.isNameVisible() && disguise.getMultiNameLength() > 0) {
+ ArrayList packets = DisguiseUtilities.getNamePackets(disguise, new String[0]);
- new BukkitRunnable() {
- @Override
- public void run() {
- try {
- addMetadata(player, skin);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
+ for (PacketContainer p : packets) {
+ ProtocolLibrary.getProtocolManager().sendServerPacket(player, p);
}
- }.runTask(LibsDisguises.getInstance());
- }
-
- if (DisguiseConfig.isArmorstandsName() && disguise.isNameVisible() && disguise.getMultiNameLength() > 0) {
- ArrayList packets = DisguiseUtilities.getNamePackets(disguise, new String[0]);
-
- for (PacketContainer p : packets) {
- ProtocolLibrary.getProtocolManager().sendServerPacket(player, p);
}
}
if (skin.isDoTabList()) {
- PacketContainer packetContainer = DisguiseUtilities.getTabPacket(disguise, EnumWrappers.PlayerInfoAction.REMOVE_PLAYER);
+ PacketContainer packetContainer = ReflectionManager.createTablistPacket(disguise, EnumWrappers.PlayerInfoAction.REMOVE_PLAYER);
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packetContainer);
}
diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/LibsPackets.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/LibsPackets.java
index 2d0e5123..c119510d 100644
--- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/LibsPackets.java
+++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/LibsPackets.java
@@ -77,13 +77,9 @@ public class LibsPackets {
packets.removeIf(p -> p.getType() != PacketType.Play.Server.PLAYER_INFO);
}
- try {
- for (PacketContainer packet : entry.getValue()) {
- // To have right click handled properly, equip packets sent are normal
- ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, packet.getType() == PacketType.Play.Server.ENTITY_EQUIPMENT);
- }
- } catch (InvocationTargetException e) {
- e.printStackTrace();
+ for (PacketContainer packet : entry.getValue()) {
+ // To have right click handled properly, equip packets sent are normal
+ ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, packet.getType() == PacketType.Play.Server.ENTITY_EQUIPMENT);
}
}, entry.getKey());
}
diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerEquipment.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerEquipment.java
index 3dd4b160..1c7681fe 100644
--- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerEquipment.java
+++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerEquipment.java
@@ -14,11 +14,13 @@ import me.libraryaddict.disguise.utilities.packets.LibsPackets;
import me.libraryaddict.disguise.utilities.packets.PacketsHandler;
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
+import me.libraryaddict.disguise.utilities.reflection.WatcherValue;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.EquipmentSlot;
+import java.sql.Ref;
import java.util.ArrayList;
import java.util.List;
@@ -86,11 +88,11 @@ public class PacketHandlerEquipment implements IPacketHandler {
slot == EquipmentSlot.OFF_HAND)) {
if (itemStack != null && itemStack.getType() != Material.AIR) {
// Convert the datawatcher
- List list = new ArrayList<>();
+ List list = new ArrayList<>();
if (DisguiseConfig.isMetaPacketsEnabled()) {
- WrappedWatchableObject watch = ReflectionManager.createWatchable(MetaIndex.LIVING_META,
- WrappedDataWatcher.getEntityWatcher(entity).getByte(MetaIndex.LIVING_META.getIndex()));
+ WatcherValue watch =
+ new WatcherValue(MetaIndex.LIVING_META, WrappedDataWatcher.getEntityWatcher(entity).getByte(MetaIndex.LIVING_META.getIndex()));
if (watch != null) {
list.add(watch);
@@ -98,7 +100,7 @@ public class PacketHandlerEquipment implements IPacketHandler {
list = disguise.getWatcher().convert(observer, list);
} else {
- for (WrappedWatchableObject obj : disguise.getWatcher().getWatchableObjects()) {
+ for (WatcherValue obj : disguise.getWatcher().getWatchableObjects()) {
if (obj.getIndex() == MetaIndex.LIVING_META.getIndex()) {
list.add(obj);
break;
@@ -107,16 +109,12 @@ public class PacketHandlerEquipment implements IPacketHandler {
}
// Construct the packets to return
- PacketContainer packetBlock = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
+ PacketContainer packetBlock = ReflectionManager.getMetadataPacket(entity.getEntityId(), list);
- packetBlock.getModifier().write(0, entity.getEntityId());
- packetBlock.getWatchableCollectionModifier().write(0, list);
+ list.forEach(v -> v.setValue((byte) 0));
- PacketContainer packetUnblock = packetBlock.deepClone();
// Make a packet to send the 'unblock'
- for (WrappedWatchableObject watcher : packetUnblock.getWatchableCollectionModifier().read(0)) {
- watcher.setValue((byte) 0);
- }
+ PacketContainer packetUnblock = ReflectionManager.getMetadataPacket(entity.getEntityId(), list);
// Send the unblock before the itemstack change so that the 2nd metadata packet works. Why?
// Scheduler
@@ -162,12 +160,11 @@ public class PacketHandlerEquipment implements IPacketHandler {
if (itemStack != null && itemStack.getType() != Material.AIR) {
// Convert the datawatcher
- List list = new ArrayList<>();
+ List list = new ArrayList<>();
MetaIndex toUse = NmsVersion.v1_13.isSupported() ? MetaIndex.LIVING_META : MetaIndex.ENTITY_META;
if (DisguiseConfig.isMetaPacketsEnabled()) {
- WrappedWatchableObject watch =
- ReflectionManager.createWatchable(toUse, WrappedDataWatcher.getEntityWatcher(entity).getByte(toUse.getIndex()));
+ WatcherValue watch = new WatcherValue(toUse, WrappedDataWatcher.getEntityWatcher(entity).getByte(toUse.getIndex()));
if (watch != null) {
list.add(watch);
@@ -175,7 +172,7 @@ public class PacketHandlerEquipment implements IPacketHandler {
list = disguise.getWatcher().convert(observer, list);
} else {
- for (WrappedWatchableObject obj : disguise.getWatcher().getWatchableObjects()) {
+ for (WatcherValue obj : disguise.getWatcher().getWatchableObjects()) {
if (obj.getIndex() == toUse.getIndex()) {
list.add(obj);
break;
@@ -184,20 +181,12 @@ public class PacketHandlerEquipment implements IPacketHandler {
}
// Construct the packets to return
- PacketContainer packetBlock = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
+ PacketContainer packetBlock = ReflectionManager.getMetadataPacket(entity.getEntityId(), list);
- packetBlock.getModifier().write(0, entity.getEntityId());
- packetBlock.getWatchableCollectionModifier().write(0, list);
+ list.forEach(v -> v.setValue(NmsVersion.v1_13.isSupported() ? (byte) 0 : (byte) ((byte) v.getValue() & ~(1 << 4))));
- PacketContainer packetUnblock = packetBlock.deepClone();
// Make a packet to send the 'unblock'
- for (WrappedWatchableObject watcher : packetUnblock.getWatchableCollectionModifier().read(0)) {
- if (NmsVersion.v1_13.isSupported()) {
- watcher.setValue((byte) 0);
- } else {
- watcher.setValue((byte) ((byte) watcher.getRawValue() & ~(1 << 4)));
- }
- }
+ PacketContainer packetUnblock = ReflectionManager.getMetadataPacket(entity.getEntityId(), list);
// Send the unblock before the itemstack change so that the 2nd metadata packet works. Why?
// Scheduler
diff --git a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMetadata.java b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMetadata.java
index c9972a23..ffafa703 100644
--- a/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMetadata.java
+++ b/plugin/src/main/java/me/libraryaddict/disguise/utilities/packets/packethandlers/PacketHandlerMetadata.java
@@ -3,15 +3,20 @@ package me.libraryaddict.disguise.utilities.packets.packethandlers;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.reflect.StructureModifier;
+import com.comphenix.protocol.wrappers.WrappedDataValue;
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
import me.libraryaddict.disguise.DisguiseConfig;
import me.libraryaddict.disguise.disguisetypes.Disguise;
import me.libraryaddict.disguise.utilities.packets.IPacketHandler;
import me.libraryaddict.disguise.utilities.packets.LibsPackets;
import me.libraryaddict.disguise.utilities.packets.PacketsHandler;
+import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
+import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
+import me.libraryaddict.disguise.utilities.reflection.WatcherValue;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -37,21 +42,17 @@ public class PacketHandlerMetadata implements IPacketHandler {
return;
}
- List watchableObjects = disguise.getWatcher().convert(observer, sentPacket.getWatchableCollectionModifier().read(0));
+ List watcherValues = WatcherValue.getValues(disguise.getWatcher(), sentPacket);
+
+ List watchableObjects = disguise.getWatcher().convert(observer, watcherValues);
if (watchableObjects.isEmpty()) {
return;
}
- PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
+ PacketContainer metaPacket = ReflectionManager.getMetadataPacket(entity.getEntityId(), watchableObjects);
packets.addPacket(metaPacket);
-
- StructureModifier