From 919cfa5e5ebf2c82774c2325933e5439452735a9 Mon Sep 17 00:00:00 2001 From: MCMDEV Date: Tue, 14 Jul 2020 15:13:26 +0200 Subject: [PATCH 1/2] Added Animations --- .../main/java/net/jitse/npclib/api/NPC.java | 8 +++++++ .../jitse/npclib/api/state/NPCAnimation.java | 20 ++++++++++++++++ .../net/jitse/npclib/internal/NPCBase.java | 11 +++++++++ .../npclib/internal/NPCPacketHandler.java | 3 +++ .../PacketPlayOutAnimationWrapper.java | 20 ++++++++++++++++ .../PacketPlayOutAnimationWrapper.java | 20 ++++++++++++++++ .../PacketPlayOutAnimationWrapper.java | 20 ++++++++++++++++ .../PacketPlayOutAnimationWrapper.java | 20 ++++++++++++++++ .../PacketPlayOutAnimationWrapper.java | 20 ++++++++++++++++ .../PacketPlayOutAnimationWrapper.java | 20 ++++++++++++++++ .../PacketPlayOutAnimationWrapper.java | 20 ++++++++++++++++ .../npclib/nms/v1_16_R1/NPC_v1_16_R1.java | 10 ++++++++ .../PacketPlayOutAnimationWrapper.java | 20 ++++++++++++++++ .../PacketPlayOutAnimationWrapper.java | 23 +++++++++++++++++++ .../PacketPlayOutAnimationWrapper.java | 23 +++++++++++++++++++ .../PacketPlayOutAnimationWrapper.java | 20 ++++++++++++++++ .../PacketPlayOutAnimationWrapper.java | 20 ++++++++++++++++ 17 files changed, 298 insertions(+) create mode 100644 api/src/main/java/net/jitse/npclib/api/state/NPCAnimation.java create mode 100644 nms/v1_10_R1/src/main/java/net/jitse/npclib/nms/v1_10_R1/packets/PacketPlayOutAnimationWrapper.java create mode 100644 nms/v1_11_R1/src/main/java/net/jitse/npclib/nms/v1_11_R1/packets/PacketPlayOutAnimationWrapper.java create mode 100644 nms/v1_12_R1/src/main/java/net/jitse/npclib/nms/v1_12_R1/packets/PacketPlayOutAnimationWrapper.java create mode 100644 nms/v1_13_R1/src/main/java/net/jitse/npclib/nms/v1_13_R1/packets/PacketPlayOutAnimationWrapper.java create mode 100644 nms/v1_13_R2/src/main/java/net/jitse/npclib/nms/v1_13_R2/packets/PacketPlayOutAnimationWrapper.java create mode 100644 nms/v1_14_R1/src/main/java/net/jitse/npclib/nms/v1_14_R1/packets/PacketPlayOutAnimationWrapper.java create mode 100644 nms/v1_15_R1/src/main/java/net/jitse/npclib/nms/v1_15_R1/packets/PacketPlayOutAnimationWrapper.java create mode 100644 nms/v1_16_R1/src/main/java/net/jitse/npclib/nms/v1_16_R1/packets/PacketPlayOutAnimationWrapper.java create mode 100644 nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/packets/PacketPlayOutAnimationWrapper.java create mode 100644 nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/packets/PacketPlayOutAnimationWrapper.java create mode 100644 nms/v1_9_R1/src/main/java/net/jitse/npclib/nms/v1_9_R1/packets/PacketPlayOutAnimationWrapper.java create mode 100644 nms/v1_9_R2/src/main/java/net/jitse/npclib/nms/v1_9_R2/packets/PacketPlayOutAnimationWrapper.java diff --git a/api/src/main/java/net/jitse/npclib/api/NPC.java b/api/src/main/java/net/jitse/npclib/api/NPC.java index 16b9fe0..3836644 100644 --- a/api/src/main/java/net/jitse/npclib/api/NPC.java +++ b/api/src/main/java/net/jitse/npclib/api/NPC.java @@ -5,6 +5,7 @@ package net.jitse.npclib.api; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.api.state.NPCState; import org.bukkit.Location; @@ -103,6 +104,13 @@ public interface NPC { */ NPC toggleState(NPCState state); + /** + * Plays an animation as the the NPC. + * + * @param animation The animation to play. + */ + void playAnimation(NPCAnimation animation); + /** * Get state of NPC. * diff --git a/api/src/main/java/net/jitse/npclib/api/state/NPCAnimation.java b/api/src/main/java/net/jitse/npclib/api/state/NPCAnimation.java new file mode 100644 index 0000000..119f250 --- /dev/null +++ b/api/src/main/java/net/jitse/npclib/api/state/NPCAnimation.java @@ -0,0 +1,20 @@ +package net.jitse.npclib.api.state; + +public enum NPCAnimation { + + SWING_MAINHAND(0), + TAKE_DAMAGE(1), + SWING_OFFHAND(3), + CRITICAL_DAMAGE(4), + MAGICAL_DAMAGE(5); + + private int id; + + NPCAnimation(int id) { + this.id = id; + } + + public int getId() { + return id; + } +} diff --git a/api/src/main/java/net/jitse/npclib/internal/NPCBase.java b/api/src/main/java/net/jitse/npclib/internal/NPCBase.java index 3bd2152..05b0856 100644 --- a/api/src/main/java/net/jitse/npclib/internal/NPCBase.java +++ b/api/src/main/java/net/jitse/npclib/internal/NPCBase.java @@ -11,6 +11,7 @@ import net.jitse.npclib.api.NPC; import net.jitse.npclib.api.events.NPCHideEvent; import net.jitse.npclib.api.events.NPCShowEvent; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.api.state.NPCState; import net.jitse.npclib.hologram.Hologram; @@ -268,6 +269,16 @@ public abstract class NPCBase implements NPC, NPCPacketHandler { return this; } + @Override + public void playAnimation(NPCAnimation animation) { + for (UUID shownUuid : shown) { + Player player = Bukkit.getPlayer(shownUuid); + if (player != null && isShown(player)) { + sendAnimationPacket(player, animation); + } + } + } + @Override public ItemStack getItem(NPCSlot slot) { Objects.requireNonNull(slot, "Slot cannot be null"); diff --git a/api/src/main/java/net/jitse/npclib/internal/NPCPacketHandler.java b/api/src/main/java/net/jitse/npclib/internal/NPCPacketHandler.java index de51ea7..ab64479 100644 --- a/api/src/main/java/net/jitse/npclib/internal/NPCPacketHandler.java +++ b/api/src/main/java/net/jitse/npclib/internal/NPCPacketHandler.java @@ -4,6 +4,7 @@ package net.jitse.npclib.internal; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import org.bukkit.entity.Player; @@ -22,6 +23,8 @@ interface NPCPacketHandler { void sendEquipmentPacket(Player player, NPCSlot slot, boolean auto); + void sendAnimationPacket(Player player, NPCAnimation animation); + default void sendEquipmentPackets(Player player) { for (NPCSlot slot : NPCSlot.values()) sendEquipmentPacket(player, slot, true); diff --git a/nms/v1_10_R1/src/main/java/net/jitse/npclib/nms/v1_10_R1/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_10_R1/src/main/java/net/jitse/npclib/nms/v1_10_R1/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..90f9241 --- /dev/null +++ b/nms/v1_10_R1/src/main/java/net/jitse/npclib/nms/v1_10_R1/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,20 @@ +package net.jitse.npclib.nms.v1_10_R1.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_10_R1.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, npcAnimation.getId()); + + return packetPlayOutAnimation; + } + +} diff --git a/nms/v1_11_R1/src/main/java/net/jitse/npclib/nms/v1_11_R1/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_11_R1/src/main/java/net/jitse/npclib/nms/v1_11_R1/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..092a96c --- /dev/null +++ b/nms/v1_11_R1/src/main/java/net/jitse/npclib/nms/v1_11_R1/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,20 @@ +package net.jitse.npclib.nms.v1_11_R1.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_11_R1.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, npcAnimation.getId()); + + return packetPlayOutAnimation; + } + +} diff --git a/nms/v1_12_R1/src/main/java/net/jitse/npclib/nms/v1_12_R1/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_12_R1/src/main/java/net/jitse/npclib/nms/v1_12_R1/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..d36d9d9 --- /dev/null +++ b/nms/v1_12_R1/src/main/java/net/jitse/npclib/nms/v1_12_R1/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,20 @@ +package net.jitse.npclib.nms.v1_12_R1.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_12_R1.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, npcAnimation.getId()); + + return packetPlayOutAnimation; + } + +} diff --git a/nms/v1_13_R1/src/main/java/net/jitse/npclib/nms/v1_13_R1/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_13_R1/src/main/java/net/jitse/npclib/nms/v1_13_R1/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..14b09dc --- /dev/null +++ b/nms/v1_13_R1/src/main/java/net/jitse/npclib/nms/v1_13_R1/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,20 @@ +package net.jitse.npclib.nms.v1_13_R1.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_13_R1.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, npcAnimation.getId()); + + return packetPlayOutAnimation; + } + +} diff --git a/nms/v1_13_R2/src/main/java/net/jitse/npclib/nms/v1_13_R2/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_13_R2/src/main/java/net/jitse/npclib/nms/v1_13_R2/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..63e1bd0 --- /dev/null +++ b/nms/v1_13_R2/src/main/java/net/jitse/npclib/nms/v1_13_R2/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,20 @@ +package net.jitse.npclib.nms.v1_13_R2.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_13_R2.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, npcAnimation.getId()); + + return packetPlayOutAnimation; + } + +} diff --git a/nms/v1_14_R1/src/main/java/net/jitse/npclib/nms/v1_14_R1/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_14_R1/src/main/java/net/jitse/npclib/nms/v1_14_R1/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..14e708f --- /dev/null +++ b/nms/v1_14_R1/src/main/java/net/jitse/npclib/nms/v1_14_R1/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,20 @@ +package net.jitse.npclib.nms.v1_14_R1.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_14_R1.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, npcAnimation.getId()); + + return packetPlayOutAnimation; + } + +} diff --git a/nms/v1_15_R1/src/main/java/net/jitse/npclib/nms/v1_15_R1/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_15_R1/src/main/java/net/jitse/npclib/nms/v1_15_R1/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..3771340 --- /dev/null +++ b/nms/v1_15_R1/src/main/java/net/jitse/npclib/nms/v1_15_R1/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,20 @@ +package net.jitse.npclib.nms.v1_15_R1.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_15_R1.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, npcAnimation.getId()); + + return packetPlayOutAnimation; + } + +} diff --git a/nms/v1_16_R1/src/main/java/net/jitse/npclib/nms/v1_16_R1/NPC_v1_16_R1.java b/nms/v1_16_R1/src/main/java/net/jitse/npclib/nms/v1_16_R1/NPC_v1_16_R1.java index c7ee60c..667ac9a 100644 --- a/nms/v1_16_R1/src/main/java/net/jitse/npclib/nms/v1_16_R1/NPC_v1_16_R1.java +++ b/nms/v1_16_R1/src/main/java/net/jitse/npclib/nms/v1_16_R1/NPC_v1_16_R1.java @@ -5,6 +5,7 @@ import com.mojang.authlib.properties.Property; import com.mojang.datafixers.util.Pair; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -30,6 +31,7 @@ public class NPC_v1_16_R1 extends NPCBase { private PacketPlayOutPlayerInfo packetPlayOutPlayerInfoAdd, packetPlayOutPlayerInfoRemove; private PacketPlayOutEntityHeadRotation packetPlayOutEntityHeadRotation; private PacketPlayOutEntityDestroy packetPlayOutEntityDestroy; + private PacketPlayOutAnimation packetPlayOutAnimation; public NPC_v1_16_R1(NPCLib instance, List lines) { super(instance, lines); @@ -109,6 +111,14 @@ public class NPC_v1_16_R1 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/nms/v1_16_R1/src/main/java/net/jitse/npclib/nms/v1_16_R1/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_16_R1/src/main/java/net/jitse/npclib/nms/v1_16_R1/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..b2c8a37 --- /dev/null +++ b/nms/v1_16_R1/src/main/java/net/jitse/npclib/nms/v1_16_R1/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,20 @@ +package net.jitse.npclib.nms.v1_16_R1.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_16_R1.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, npcAnimation.getId()); + + return packetPlayOutAnimation; + } + +} diff --git a/nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..884ce57 --- /dev/null +++ b/nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,23 @@ +package net.jitse.npclib.nms.v1_8_R2.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_8_R2.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + int id = npcAnimation.getId(); + if(id == 3) throw new IllegalArgumentException("Offhand Swing Animations are only available on 1.9 and up."); + + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, id); + + return packetPlayOutAnimation; + } + +} diff --git a/nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..6fd6551 --- /dev/null +++ b/nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,23 @@ +package net.jitse.npclib.nms.v1_8_R3.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_8_R3.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + int id = npcAnimation.getId(); + if(id == 3) throw new IllegalArgumentException("Offhand Swing Animations are only available on 1.9 and up."); + + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, id); + + return packetPlayOutAnimation; + } + +} diff --git a/nms/v1_9_R1/src/main/java/net/jitse/npclib/nms/v1_9_R1/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_9_R1/src/main/java/net/jitse/npclib/nms/v1_9_R1/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..aa1fa07 --- /dev/null +++ b/nms/v1_9_R1/src/main/java/net/jitse/npclib/nms/v1_9_R1/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,20 @@ +package net.jitse.npclib.nms.v1_9_R1.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_9_R1.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, npcAnimation.getId()); + + return packetPlayOutAnimation; + } + +} diff --git a/nms/v1_9_R2/src/main/java/net/jitse/npclib/nms/v1_9_R2/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_9_R2/src/main/java/net/jitse/npclib/nms/v1_9_R2/packets/PacketPlayOutAnimationWrapper.java new file mode 100644 index 0000000..553a20b --- /dev/null +++ b/nms/v1_9_R2/src/main/java/net/jitse/npclib/nms/v1_9_R2/packets/PacketPlayOutAnimationWrapper.java @@ -0,0 +1,20 @@ +package net.jitse.npclib.nms.v1_9_R2.packets; + +import com.comphenix.tinyprotocol.Reflection; +import net.jitse.npclib.api.state.NPCAnimation; +import net.minecraft.server.v1_9_R2.PacketPlayOutAnimation; + +public class PacketPlayOutAnimationWrapper { + + public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { + PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); + + Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) + .set(packetPlayOutAnimation, entityId); + Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) + .set(packetPlayOutAnimation, npcAnimation.getId()); + + return packetPlayOutAnimation; + } + +} From a984f6ddec613cae3c0106d89071eef1397b9ea6 Mon Sep 17 00:00:00 2001 From: MCMDEV Date: Tue, 14 Jul 2020 15:37:17 +0200 Subject: [PATCH 2/2] Increased version number --- api/pom.xml | 2 +- nms/pom.xml | 2 +- nms/v1_10_R1/pom.xml | 2 +- .../net/jitse/npclib/nms/v1_10_R1/NPC_v1_10_R1.java | 9 +++++++++ nms/v1_11_R1/pom.xml | 2 +- .../net/jitse/npclib/nms/v1_11_R1/NPC_v1_11_R1.java | 9 +++++++++ nms/v1_12_R1/pom.xml | 2 +- .../net/jitse/npclib/nms/v1_12_R1/NPC_v1_12_R1.java | 9 +++++++++ nms/v1_13_R1/pom.xml | 2 +- .../net/jitse/npclib/nms/v1_13_R1/NPC_v1_13_R1.java | 9 +++++++++ nms/v1_13_R2/pom.xml | 2 +- .../net/jitse/npclib/nms/v1_13_R2/NPC_v1_13_R2.java | 9 +++++++++ nms/v1_14_R1/pom.xml | 2 +- .../net/jitse/npclib/nms/v1_14_R1/NPC_v1_14_R1.java | 9 +++++++++ nms/v1_15_R1/pom.xml | 2 +- .../net/jitse/npclib/nms/v1_15_R1/NPC_v1_15_R1.java | 9 +++++++++ nms/v1_16_R1/pom.xml | 2 +- nms/v1_8_R2/pom.xml | 2 +- .../net/jitse/npclib/nms/v1_8_R2/NPC_v1_8_R2.java | 13 +++++++++++++ .../packets/PacketPlayOutAnimationWrapper.java | 5 +---- nms/v1_8_R3/pom.xml | 2 +- .../net/jitse/npclib/nms/v1_8_R3/NPC_v1_8_R3.java | 13 +++++++++++++ .../packets/PacketPlayOutAnimationWrapper.java | 5 +---- nms/v1_9_R1/pom.xml | 2 +- .../net/jitse/npclib/nms/v1_9_R1/NPC_v1_9_R1.java | 9 +++++++++ nms/v1_9_R2/pom.xml | 2 +- .../net/jitse/npclib/nms/v1_9_R2/NPC_v1_9_R2.java | 9 +++++++++ plugin/pom.xml | 2 +- pom.xml | 2 +- 29 files changed, 125 insertions(+), 24 deletions(-) diff --git a/api/pom.xml b/api/pom.xml index 04993c0..a0ce66b 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -8,7 +8,7 @@ npclib net.jitse - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-api diff --git a/nms/pom.xml b/nms/pom.xml index c073a82..286a9da 100644 --- a/nms/pom.xml +++ b/nms/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms diff --git a/nms/v1_10_R1/pom.xml b/nms/v1_10_R1/pom.xml index 881bb41..7d18f5f 100755 --- a/nms/v1_10_R1/pom.xml +++ b/nms/v1_10_R1/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_10_R1 diff --git a/nms/v1_10_R1/src/main/java/net/jitse/npclib/nms/v1_10_R1/NPC_v1_10_R1.java b/nms/v1_10_R1/src/main/java/net/jitse/npclib/nms/v1_10_R1/NPC_v1_10_R1.java index 9d2c8ec..50485df 100755 --- a/nms/v1_10_R1/src/main/java/net/jitse/npclib/nms/v1_10_R1/NPC_v1_10_R1.java +++ b/nms/v1_10_R1/src/main/java/net/jitse/npclib/nms/v1_10_R1/NPC_v1_10_R1.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -109,6 +110,14 @@ public class NPC_v1_10_R1 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/nms/v1_11_R1/pom.xml b/nms/v1_11_R1/pom.xml index 3055261..5fa1c32 100755 --- a/nms/v1_11_R1/pom.xml +++ b/nms/v1_11_R1/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_11_R1 diff --git a/nms/v1_11_R1/src/main/java/net/jitse/npclib/nms/v1_11_R1/NPC_v1_11_R1.java b/nms/v1_11_R1/src/main/java/net/jitse/npclib/nms/v1_11_R1/NPC_v1_11_R1.java index dfb1151..9a85420 100755 --- a/nms/v1_11_R1/src/main/java/net/jitse/npclib/nms/v1_11_R1/NPC_v1_11_R1.java +++ b/nms/v1_11_R1/src/main/java/net/jitse/npclib/nms/v1_11_R1/NPC_v1_11_R1.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -109,6 +110,14 @@ public class NPC_v1_11_R1 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/nms/v1_12_R1/pom.xml b/nms/v1_12_R1/pom.xml index 2a69e05..aa9b953 100755 --- a/nms/v1_12_R1/pom.xml +++ b/nms/v1_12_R1/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_12_R1 diff --git a/nms/v1_12_R1/src/main/java/net/jitse/npclib/nms/v1_12_R1/NPC_v1_12_R1.java b/nms/v1_12_R1/src/main/java/net/jitse/npclib/nms/v1_12_R1/NPC_v1_12_R1.java index bd778f5..7cdfbf7 100755 --- a/nms/v1_12_R1/src/main/java/net/jitse/npclib/nms/v1_12_R1/NPC_v1_12_R1.java +++ b/nms/v1_12_R1/src/main/java/net/jitse/npclib/nms/v1_12_R1/NPC_v1_12_R1.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -109,6 +110,14 @@ public class NPC_v1_12_R1 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/nms/v1_13_R1/pom.xml b/nms/v1_13_R1/pom.xml index 1379b81..2c0742b 100755 --- a/nms/v1_13_R1/pom.xml +++ b/nms/v1_13_R1/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_13_R1 diff --git a/nms/v1_13_R1/src/main/java/net/jitse/npclib/nms/v1_13_R1/NPC_v1_13_R1.java b/nms/v1_13_R1/src/main/java/net/jitse/npclib/nms/v1_13_R1/NPC_v1_13_R1.java index af88de9..97b5465 100755 --- a/nms/v1_13_R1/src/main/java/net/jitse/npclib/nms/v1_13_R1/NPC_v1_13_R1.java +++ b/nms/v1_13_R1/src/main/java/net/jitse/npclib/nms/v1_13_R1/NPC_v1_13_R1.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -109,6 +110,14 @@ public class NPC_v1_13_R1 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/nms/v1_13_R2/pom.xml b/nms/v1_13_R2/pom.xml index 95f2eaf..4c544ae 100755 --- a/nms/v1_13_R2/pom.xml +++ b/nms/v1_13_R2/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_13_R2 diff --git a/nms/v1_13_R2/src/main/java/net/jitse/npclib/nms/v1_13_R2/NPC_v1_13_R2.java b/nms/v1_13_R2/src/main/java/net/jitse/npclib/nms/v1_13_R2/NPC_v1_13_R2.java index b6fad8f..e22b612 100755 --- a/nms/v1_13_R2/src/main/java/net/jitse/npclib/nms/v1_13_R2/NPC_v1_13_R2.java +++ b/nms/v1_13_R2/src/main/java/net/jitse/npclib/nms/v1_13_R2/NPC_v1_13_R2.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -109,6 +110,14 @@ public class NPC_v1_13_R2 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/nms/v1_14_R1/pom.xml b/nms/v1_14_R1/pom.xml index ab91ec7..6814941 100755 --- a/nms/v1_14_R1/pom.xml +++ b/nms/v1_14_R1/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_14_R1 diff --git a/nms/v1_14_R1/src/main/java/net/jitse/npclib/nms/v1_14_R1/NPC_v1_14_R1.java b/nms/v1_14_R1/src/main/java/net/jitse/npclib/nms/v1_14_R1/NPC_v1_14_R1.java index 8e36033..d4c9c44 100755 --- a/nms/v1_14_R1/src/main/java/net/jitse/npclib/nms/v1_14_R1/NPC_v1_14_R1.java +++ b/nms/v1_14_R1/src/main/java/net/jitse/npclib/nms/v1_14_R1/NPC_v1_14_R1.java @@ -4,6 +4,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -105,6 +106,14 @@ public class NPC_v1_14_R1 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/nms/v1_15_R1/pom.xml b/nms/v1_15_R1/pom.xml index 71a04e6..0708d81 100644 --- a/nms/v1_15_R1/pom.xml +++ b/nms/v1_15_R1/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_15_R1 diff --git a/nms/v1_15_R1/src/main/java/net/jitse/npclib/nms/v1_15_R1/NPC_v1_15_R1.java b/nms/v1_15_R1/src/main/java/net/jitse/npclib/nms/v1_15_R1/NPC_v1_15_R1.java index 044b54a..d0341ed 100644 --- a/nms/v1_15_R1/src/main/java/net/jitse/npclib/nms/v1_15_R1/NPC_v1_15_R1.java +++ b/nms/v1_15_R1/src/main/java/net/jitse/npclib/nms/v1_15_R1/NPC_v1_15_R1.java @@ -4,6 +4,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -106,6 +107,14 @@ public class NPC_v1_15_R1 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/nms/v1_16_R1/pom.xml b/nms/v1_16_R1/pom.xml index 7c521e3..62cae7a 100644 --- a/nms/v1_16_R1/pom.xml +++ b/nms/v1_16_R1/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_16_R1 diff --git a/nms/v1_8_R2/pom.xml b/nms/v1_8_R2/pom.xml index d3a4a9e..1ff6d62 100755 --- a/nms/v1_8_R2/pom.xml +++ b/nms/v1_8_R2/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_8_R2 diff --git a/nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/NPC_v1_8_R2.java b/nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/NPC_v1_8_R2.java index bfea259..42a44a1 100755 --- a/nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/NPC_v1_8_R2.java +++ b/nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/NPC_v1_8_R2.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -114,6 +115,18 @@ public class NPC_v1_8_R2 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + if(animation == NPCAnimation.SWING_OFFHAND) { + throw new IllegalArgumentException("Offhand Swing Animations are only available on 1.9 and up."); + } + + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/packets/PacketPlayOutAnimationWrapper.java index 884ce57..6e915b1 100644 --- a/nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/packets/PacketPlayOutAnimationWrapper.java +++ b/nms/v1_8_R2/src/main/java/net/jitse/npclib/nms/v1_8_R2/packets/PacketPlayOutAnimationWrapper.java @@ -7,15 +7,12 @@ import net.minecraft.server.v1_8_R2.PacketPlayOutAnimation; public class PacketPlayOutAnimationWrapper { public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { - int id = npcAnimation.getId(); - if(id == 3) throw new IllegalArgumentException("Offhand Swing Animations are only available on 1.9 and up."); - PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) .set(packetPlayOutAnimation, entityId); Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) - .set(packetPlayOutAnimation, id); + .set(packetPlayOutAnimation, npcAnimation.getId()); return packetPlayOutAnimation; } diff --git a/nms/v1_8_R3/pom.xml b/nms/v1_8_R3/pom.xml index abca64d..f79d2fd 100755 --- a/nms/v1_8_R3/pom.xml +++ b/nms/v1_8_R3/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_8_R3 diff --git a/nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/NPC_v1_8_R3.java b/nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/NPC_v1_8_R3.java index c1909e7..16fa1ae 100755 --- a/nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/NPC_v1_8_R3.java +++ b/nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/NPC_v1_8_R3.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -115,6 +116,18 @@ public class NPC_v1_8_R3 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + if(animation == NPCAnimation.SWING_OFFHAND) { + throw new IllegalArgumentException("Offhand Swing Animations are only available on 1.9 and up."); + } + + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/packets/PacketPlayOutAnimationWrapper.java b/nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/packets/PacketPlayOutAnimationWrapper.java index 6fd6551..72ca110 100644 --- a/nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/packets/PacketPlayOutAnimationWrapper.java +++ b/nms/v1_8_R3/src/main/java/net/jitse/npclib/nms/v1_8_R3/packets/PacketPlayOutAnimationWrapper.java @@ -7,15 +7,12 @@ import net.minecraft.server.v1_8_R3.PacketPlayOutAnimation; public class PacketPlayOutAnimationWrapper { public PacketPlayOutAnimation create(NPCAnimation npcAnimation, int entityId) { - int id = npcAnimation.getId(); - if(id == 3) throw new IllegalArgumentException("Offhand Swing Animations are only available on 1.9 and up."); - PacketPlayOutAnimation packetPlayOutAnimation = new PacketPlayOutAnimation(); Reflection.getField(packetPlayOutAnimation.getClass(), "a", int.class) .set(packetPlayOutAnimation, entityId); Reflection.getField(packetPlayOutAnimation.getClass(), "b", int.class) - .set(packetPlayOutAnimation, id); + .set(packetPlayOutAnimation, npcAnimation.getId()); return packetPlayOutAnimation; } diff --git a/nms/v1_9_R1/pom.xml b/nms/v1_9_R1/pom.xml index 855a828..6760a1f 100755 --- a/nms/v1_9_R1/pom.xml +++ b/nms/v1_9_R1/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_9_R1 diff --git a/nms/v1_9_R1/src/main/java/net/jitse/npclib/nms/v1_9_R1/NPC_v1_9_R1.java b/nms/v1_9_R1/src/main/java/net/jitse/npclib/nms/v1_9_R1/NPC_v1_9_R1.java index 042e13f..9d04d92 100755 --- a/nms/v1_9_R1/src/main/java/net/jitse/npclib/nms/v1_9_R1/NPC_v1_9_R1.java +++ b/nms/v1_9_R1/src/main/java/net/jitse/npclib/nms/v1_9_R1/NPC_v1_9_R1.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -109,6 +110,14 @@ public class NPC_v1_9_R1 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/nms/v1_9_R2/pom.xml b/nms/v1_9_R2/pom.xml index e593cd2..0a13be4 100755 --- a/nms/v1_9_R2/pom.xml +++ b/nms/v1_9_R2/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib-nms - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-nms-v1_9_R2 diff --git a/nms/v1_9_R2/src/main/java/net/jitse/npclib/nms/v1_9_R2/NPC_v1_9_R2.java b/nms/v1_9_R2/src/main/java/net/jitse/npclib/nms/v1_9_R2/NPC_v1_9_R2.java index 8eb9dd4..fbf0309 100755 --- a/nms/v1_9_R2/src/main/java/net/jitse/npclib/nms/v1_9_R2/NPC_v1_9_R2.java +++ b/nms/v1_9_R2/src/main/java/net/jitse/npclib/nms/v1_9_R2/NPC_v1_9_R2.java @@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.jitse.npclib.NPCLib; import net.jitse.npclib.api.skin.Skin; +import net.jitse.npclib.api.state.NPCAnimation; import net.jitse.npclib.api.state.NPCSlot; import net.jitse.npclib.hologram.Hologram; import net.jitse.npclib.internal.MinecraftVersion; @@ -109,6 +110,14 @@ public class NPC_v1_9_R2 extends NPCBase { playerConnection.sendPacket(packet); } + @Override + public void sendAnimationPacket(Player player, NPCAnimation animation) { + PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection; + + PacketPlayOutAnimation packet = new PacketPlayOutAnimationWrapper().create(animation, entityId); + playerConnection.sendPacket(packet); + } + @Override public void updateSkin(Skin skin) { GameProfile newProfile = new GameProfile(uuid, name); diff --git a/plugin/pom.xml b/plugin/pom.xml index 113b733..e22133a 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -8,7 +8,7 @@ net.jitse npclib - 2.8-SNAPSHOT + 2.9-SNAPSHOT npclib-plugin diff --git a/pom.xml b/pom.xml index 07841be..f82abf4 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ net.jitse npclib - 2.8-SNAPSHOT + 2.9-SNAPSHOT UTF-8