summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy/hideAndSeek/util/packet
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util/packet')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/packet/AbstractPacket.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/packet/EntityMetadataPacket.java70
2 files changed, 71 insertions, 3 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/packet/AbstractPacket.java b/src/main/java/net/tylermurphy/hideAndSeek/util/packet/AbstractPacket.java
index 9293beb..4e3fc3b 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/util/packet/AbstractPacket.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/packet/AbstractPacket.java
@@ -23,9 +23,7 @@ public class AbstractPacket {
}
public void send(Player player){
- try {
- protocolManager.sendServerPacket(player, packet);
- } catch (InvocationTargetException ignored) {}
+ protocolManager.sendServerPacket(player, packet);
}
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/packet/EntityMetadataPacket.java b/src/main/java/net/tylermurphy/hideAndSeek/util/packet/EntityMetadataPacket.java
new file mode 100644
index 0000000..d77a227
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/packet/EntityMetadataPacket.java
@@ -0,0 +1,70 @@
+package net.tylermurphy.hideAndSeek.util.packet;
+
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.wrappers.WrappedDataValue;
+import com.comphenix.protocol.wrappers.WrappedDataWatcher;
+import com.comphenix.protocol.wrappers.WrappedWatchableObject;
+import org.bukkit.entity.Entity;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EntityMetadataPacket extends AbstractPacket {
+
+ private final WrappedDataWatcher watcher;
+ private final WrappedDataWatcher.Serializer serializer;
+
+ public EntityMetadataPacket(){
+ super(PacketType.Play.Server.ENTITY_METADATA);
+ watcher = new WrappedDataWatcher();
+ serializer = WrappedDataWatcher.Registry.get(Byte.class);
+ }
+
+ public void setEntity(@NotNull Entity target){
+ super.packet.getIntegers().write(0, target.getEntityId());
+ watcher.setEntity(target);
+ }
+
+ public void setGlow(boolean glowing){
+ if (glowing) {
+ watcher.setObject(0, serializer, (byte) (0x40));
+ } else {
+ watcher.setObject(0, serializer, (byte) (0x0));
+ }
+ }
+
+ public void writeMetadata() {
+
+ // thank you to
+ // https://www.spigotmc.org/threads/unable-to-modify-entity-metadata-packet-using-protocollib-1-19-3.582442/
+
+ try {
+ // 1.19.3 And Up
+ Class.forName("com.comphenix.protocol.wrappers.WrappedDataValue");
+
+ final List<WrappedDataValue> wrappedDataValueList = new ArrayList<>();
+
+ for(final WrappedWatchableObject entry : watcher.getWatchableObjects()) {
+ if(entry == null) continue;
+
+ final WrappedDataWatcher.WrappedDataWatcherObject watcherObject = entry.getWatcherObject();
+ wrappedDataValueList.add(
+ new WrappedDataValue(
+ watcherObject.getIndex(),
+ watcherObject.getSerializer(),
+ entry.getRawValue()
+ )
+ );
+ }
+
+ packet.getDataValueCollectionModifier().write(0, wrappedDataValueList);
+
+ } catch (ClassCastException | ClassNotFoundException ignored) {
+ // 1.9 to 1.19.2 And Up
+ packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects());
+ }
+
+ }
+
+} \ No newline at end of file