From 0f178ea41eaf8c29d8781da53df9eaeabbaa8a0f Mon Sep 17 00:00:00 2001 From: Morphan1 Date: Tue, 4 Oct 2016 17:35:41 -0400 Subject: [PATCH] Add SKELETON_START_SWING_ARM and SKELETON_STOP_SWING_ARM animations Requires at least 1.9.2 --- .../aufdemrand/denizen/nms/NMSHandler.java | 3 ++ .../nms/abstracts/AnimationHelper.java | 23 +++++++++++++++ .../nms/interfaces/EntityAnimation.java | 8 +++++ plugin/pom.xml | 2 +- .../commands/BukkitCommandRegistry.java | 3 +- .../commands/entity/AnimateCommand.java | 27 +++++++++++++---- .../denizen/nms/Handler_v1_10_R1.java | 15 +++++----- .../nms/helpers/AnimationHelper_v1_10_R1.java | 29 +++++++++++++++++++ .../denizen/nms/Handler_v1_8_R3.java | 8 ++++- .../nms/helpers/AnimationHelper_v1_8_R3.java | 23 +++++++++++++++ .../denizen/nms/Handler_v1_9_R2.java | 7 +++++ .../nms/helpers/AnimationHelper_v1_9_R2.java | 29 +++++++++++++++++++ 12 files changed, 160 insertions(+), 17 deletions(-) create mode 100644 nmshandler/src/main/java/net/aufdemrand/denizen/nms/abstracts/AnimationHelper.java create mode 100644 nmshandler/src/main/java/net/aufdemrand/denizen/nms/interfaces/EntityAnimation.java create mode 100644 v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_10_R1.java create mode 100644 v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_8_R3.java create mode 100644 v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_9_R2.java diff --git a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java index 72ed0446e5..865a1808aa 100644 --- a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java +++ b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/NMSHandler.java @@ -1,5 +1,6 @@ package net.aufdemrand.denizen.nms; +import net.aufdemrand.denizen.nms.abstracts.AnimationHelper; import net.aufdemrand.denizen.nms.abstracts.BiomeNMS; import net.aufdemrand.denizen.nms.abstracts.BlockLight; import net.aufdemrand.denizen.nms.abstracts.ParticleHelper; @@ -81,6 +82,8 @@ public static JavaPlugin getJavaPlugin() { public abstract double[] getRecentTps(); + public abstract AnimationHelper getAnimationHelper(); + public abstract BlockHelper getBlockHelper(); public abstract ChunkHelper getChunkHelper(); diff --git a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/abstracts/AnimationHelper.java b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/abstracts/AnimationHelper.java new file mode 100644 index 0000000000..b208f6af0b --- /dev/null +++ b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/abstracts/AnimationHelper.java @@ -0,0 +1,23 @@ +package net.aufdemrand.denizen.nms.abstracts; + +import net.aufdemrand.denizen.nms.interfaces.EntityAnimation; + +import java.util.HashMap; +import java.util.Map; + +public abstract class AnimationHelper { + + private final Map entityAnimations = new HashMap(); + + protected void register(String name, EntityAnimation animation) { + entityAnimations.put(name.toUpperCase(), animation); + } + + public boolean hasEntityAnimation(String name) { + return entityAnimations.containsKey(name.toUpperCase()); + } + + public EntityAnimation getEntityAnimation(String name) { + return entityAnimations.get(name.toUpperCase()); + } +} diff --git a/nmshandler/src/main/java/net/aufdemrand/denizen/nms/interfaces/EntityAnimation.java b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/interfaces/EntityAnimation.java new file mode 100644 index 0000000000..922b6a89fd --- /dev/null +++ b/nmshandler/src/main/java/net/aufdemrand/denizen/nms/interfaces/EntityAnimation.java @@ -0,0 +1,8 @@ +package net.aufdemrand.denizen.nms.interfaces; + +import org.bukkit.entity.Entity; + +public interface EntityAnimation { + + void play(Entity entity); +} diff --git a/plugin/pom.xml b/plugin/pom.xml index 21c45630c2..eaec6f9d04 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -112,7 +112,6 @@ clean package install - ../target src/main/java @@ -174,6 +173,7 @@ maven-jar-plugin 2.2 + ../target true diff --git a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java index fad7eb167a..1052bd8190 100644 --- a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java +++ b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/BukkitCommandRegistry.java @@ -211,7 +211,8 @@ public void registerCoreMembers() { // // All entities also have available Bukkit's entity effect list, which includes: // DEATH, FIREWORK_EXPLODE, HURT, IRON_GOLEM_ROSE, SHEEP_EAT, VILLAGER_ANGRY, VILLAGER_HAPPY - // VILLAGER_HEART, WITCH_MAGIC, WOLF_HEARTS, WOLF_SHAKE, WOLF_SMOKE, ZOMBIE_TRANSFORM + // VILLAGER_HEART, WITCH_MAGIC, WOLF_HEARTS, WOLF_SHAKE, WOLF_SMOKE, ZOMBIE_TRANSFORM, + // SKELETON_START_SWING_ARM, SKELETON_STOP_SWING_ARM // // Note that the above list only applies where logical, EG 'WOLF_' animations only apply to wolves. // diff --git a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/AnimateCommand.java b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/AnimateCommand.java index 1ab6f111ef..bdfbfaa7e6 100644 --- a/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/AnimateCommand.java +++ b/plugin/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/AnimateCommand.java @@ -1,5 +1,8 @@ package net.aufdemrand.denizen.scripts.commands.entity; +import net.aufdemrand.denizen.nms.NMSHandler; +import net.aufdemrand.denizen.nms.abstracts.AnimationHelper; +import net.aufdemrand.denizen.nms.interfaces.EntityAnimation; import net.aufdemrand.denizen.objects.dEntity; import net.aufdemrand.denizen.utilities.debugging.dB; import net.aufdemrand.denizencore.exceptions.CommandExecutionException; @@ -19,6 +22,8 @@ public class AnimateCommand extends AbstractCommand { @Override public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException { + AnimationHelper animationHelper = NMSHandler.getInstance().getAnimationHelper(); + for (aH.Argument arg : aH.interpret(scriptEntry.getArguments())) { if (!scriptEntry.hasObject("entities") @@ -28,7 +33,8 @@ public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException } if (!scriptEntry.hasObject("animation") && - !scriptEntry.hasObject("effect")) { + !scriptEntry.hasObject("effect") && + !scriptEntry.hasObject("nms_animation")) { if (arg.matchesEnum(PlayerAnimation.values())) { scriptEntry.addObject("animation", PlayerAnimation.valueOf(arg.getValue().toUpperCase())); @@ -36,6 +42,9 @@ public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException else if (arg.matchesEnum(EntityEffect.values())) { scriptEntry.addObject("effect", EntityEffect.valueOf(arg.getValue().toUpperCase())); } + else if (animationHelper.hasEntityAnimation(arg.getValue())) { + scriptEntry.addObject("nms_animation", arg.getValue()); + } } } @@ -45,7 +54,7 @@ else if (arg.matchesEnum(EntityEffect.values())) { throw new InvalidArgumentsException("Must specify entity/entities!"); } - if (!scriptEntry.hasObject("effect") && !scriptEntry.hasObject("animation")) { + if (!scriptEntry.hasObject("effect") && !scriptEntry.hasObject("animation") && !scriptEntry.hasObject("nms_animation")) { throw new InvalidArgumentsException("Must specify a valid animation!"); } } @@ -60,11 +69,14 @@ public void execute(final ScriptEntry scriptEntry) throws CommandExecutionExcept (PlayerAnimation) scriptEntry.getObject("animation") : null; EntityEffect effect = scriptEntry.hasObject("effect") ? (EntityEffect) scriptEntry.getObject("effect") : null; + String nmsAnimation = scriptEntry.hasObject("nms_animation") ? + (String) scriptEntry.getObject("nms_animation") : null; // Report to dB dB.report(scriptEntry, getName(), (animation != null ? - aH.debugObj("animation", animation.name()) : - aH.debugObj("effect", effect.name())) + + aH.debugObj("animation", animation.name()) : effect != null ? + aH.debugObj("effect", effect.name()) : + aH.debugObj("animation", nmsAnimation)) + aH.debugObj("entities", entities.toString())); // Go through all the entities and animate them @@ -78,10 +90,13 @@ public void execute(final ScriptEntry scriptEntry) throws CommandExecutionExcept animation.play(player); } - else { + else if (effect != null) { entity.getBukkitEntity().playEffect(effect); } - + else { + EntityAnimation entityAnimation = NMSHandler.getInstance().getAnimationHelper().getEntityAnimation(nmsAnimation); + entityAnimation.play(entity.getBukkitEntity()); + } } catch (Exception e) { dB.echoError(scriptEntry.getResidingQueue(), "Error playing that animation!"); diff --git a/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_10_R1.java b/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_10_R1.java index ef6ec5e209..a77aaf7baf 100644 --- a/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_10_R1.java +++ b/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_10_R1.java @@ -3,6 +3,7 @@ import com.google.common.collect.Iterables; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; +import net.aufdemrand.denizen.nms.abstracts.AnimationHelper; import net.aufdemrand.denizen.nms.abstracts.BiomeNMS; import net.aufdemrand.denizen.nms.abstracts.BlockLight; import net.aufdemrand.denizen.nms.abstracts.ParticleHelper; @@ -25,22 +26,15 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Biome; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.boss.BossBar; import org.bukkit.craftbukkit.v1_10_R1.CraftServer; import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; import java.util.Map; -import java.util.UUID; public class Handler_v1_10_R1 extends NMSHandler { + private final AnimationHelper animationHelper = new AnimationHelper_v1_10_R1(); private final BlockHelper blockHelper = new BlockHelper_v1_10_R1(); private final ChunkHelper chunkHelper = new ChunkHelper_v1_10_R1(); private final CustomEntityHelper customEntityHelper = new CustomEntityHelper_v1_10_R1(); @@ -65,6 +59,11 @@ public double[] getRecentTps() { return ((CraftServer) Bukkit.getServer()).getServer().recentTps; } + @Override + public AnimationHelper getAnimationHelper() { + return animationHelper; + } + @Override public BlockHelper getBlockHelper() { return blockHelper; diff --git a/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_10_R1.java b/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_10_R1.java new file mode 100644 index 0000000000..e496b43598 --- /dev/null +++ b/v1_10_R1/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_10_R1.java @@ -0,0 +1,29 @@ +package net.aufdemrand.denizen.nms.helpers; + +import net.aufdemrand.denizen.nms.abstracts.AnimationHelper; +import net.aufdemrand.denizen.nms.interfaces.EntityAnimation; +import org.bukkit.craftbukkit.v1_10_R1.entity.CraftSkeleton; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; + +public class AnimationHelper_v1_10_R1 extends AnimationHelper { + + public AnimationHelper_v1_10_R1() { + register("SKELETON_START_SWING_ARM", new EntityAnimation() { + @Override + public void play(Entity entity) { + if (entity.getType() == EntityType.SKELETON) { + ((CraftSkeleton) entity).getHandle().a(true); + } + } + }); + register("SKELETON_STOP_SWING_ARM", new EntityAnimation() { + @Override + public void play(Entity entity) { + if (entity.getType() == EntityType.SKELETON) { + ((CraftSkeleton) entity).getHandle().a(false); + } + } + }); + } +} diff --git a/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_8_R3.java b/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_8_R3.java index 457accd4e5..bd2bffadab 100644 --- a/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_8_R3.java +++ b/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_8_R3.java @@ -3,6 +3,7 @@ import com.google.common.collect.Iterables; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; +import net.aufdemrand.denizen.nms.abstracts.AnimationHelper; import net.aufdemrand.denizen.nms.abstracts.BiomeNMS; import net.aufdemrand.denizen.nms.abstracts.BlockLight; import net.aufdemrand.denizen.nms.abstracts.ParticleHelper; @@ -10,7 +11,6 @@ import net.aufdemrand.denizen.nms.abstracts.Sidebar; import net.aufdemrand.denizen.nms.helpers.*; import net.aufdemrand.denizen.nms.impl.BiomeNMS_v1_8_R3; -import net.aufdemrand.denizen.nms.impl.BossBar_v1_8_R3; import net.aufdemrand.denizen.nms.impl.ProfileEditor_v1_8_R3; import net.aufdemrand.denizen.nms.impl.Sidebar_v1_8_R3; import net.aufdemrand.denizen.nms.impl.blocks.BlockLight_v1_8_R3; @@ -34,6 +34,7 @@ public class Handler_v1_8_R3 extends NMSHandler { + private final AnimationHelper animationHelper = new AnimationHelper_v1_8_R3(); private final BlockHelper blockHelper = new BlockHelper_v1_8_R3(); private final ChunkHelper chunkHelper = new ChunkHelper_v1_8_R3(); private final CustomEntityHelper customEntityHelper = new CustomEntityHelper_v1_8_R3(); @@ -58,6 +59,11 @@ public double[] getRecentTps() { return ((CraftServer) Bukkit.getServer()).getServer().recentTps; } + @Override + public AnimationHelper getAnimationHelper() { + return animationHelper; + } + @Override public BlockHelper getBlockHelper() { return blockHelper; diff --git a/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_8_R3.java b/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_8_R3.java new file mode 100644 index 0000000000..90ee297372 --- /dev/null +++ b/v1_8_R3/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_8_R3.java @@ -0,0 +1,23 @@ +package net.aufdemrand.denizen.nms.helpers; + +import net.aufdemrand.denizen.nms.abstracts.AnimationHelper; +import net.aufdemrand.denizen.nms.interfaces.EntityAnimation; +import org.bukkit.entity.Entity; + +public class AnimationHelper_v1_8_R3 extends AnimationHelper { + + public AnimationHelper_v1_8_R3() { + register("SKELETON_START_SWING_ARM", new EntityAnimation() { + @Override + public void play(Entity entity) { + // Not available in 1.8 + } + }); + register("SKELETON_STOP_SWING_ARM", new EntityAnimation() { + @Override + public void play(Entity entity) { + // Not available in 1.8 + } + }); + } +} diff --git a/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_9_R2.java b/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_9_R2.java index fe7d09d51a..19a586059f 100644 --- a/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_9_R2.java +++ b/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/Handler_v1_9_R2.java @@ -3,6 +3,7 @@ import com.google.common.collect.Iterables; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; +import net.aufdemrand.denizen.nms.abstracts.AnimationHelper; import net.aufdemrand.denizen.nms.abstracts.BiomeNMS; import net.aufdemrand.denizen.nms.abstracts.BlockLight; import net.aufdemrand.denizen.nms.abstracts.ParticleHelper; @@ -33,6 +34,7 @@ public class Handler_v1_9_R2 extends NMSHandler { + private final AnimationHelper animationHelper = new AnimationHelper_v1_9_R2(); private final BlockHelper blockHelper = new BlockHelper_v1_9_R2(); private final ChunkHelper chunkHelper = new ChunkHelper_v1_9_R2(); private final CustomEntityHelper customEntityHelper = new CustomEntityHelper_v1_9_R2(); @@ -57,6 +59,11 @@ public double[] getRecentTps() { return ((CraftServer) Bukkit.getServer()).getServer().recentTps; } + @Override + public AnimationHelper getAnimationHelper() { + return animationHelper; + } + @Override public BlockHelper getBlockHelper() { return blockHelper; diff --git a/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_9_R2.java b/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_9_R2.java new file mode 100644 index 0000000000..36e022e4b4 --- /dev/null +++ b/v1_9_R2/src/main/java/net/aufdemrand/denizen/nms/helpers/AnimationHelper_v1_9_R2.java @@ -0,0 +1,29 @@ +package net.aufdemrand.denizen.nms.helpers; + +import net.aufdemrand.denizen.nms.abstracts.AnimationHelper; +import net.aufdemrand.denizen.nms.interfaces.EntityAnimation; +import org.bukkit.craftbukkit.v1_9_R2.entity.CraftSkeleton; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; + +public class AnimationHelper_v1_9_R2 extends AnimationHelper { + + public AnimationHelper_v1_9_R2() { + register("SKELETON_START_SWING_ARM", new EntityAnimation() { + @Override + public void play(Entity entity) { + if (entity.getType() == EntityType.SKELETON) { + ((CraftSkeleton) entity).getHandle().a(true); + } + } + }); + register("SKELETON_STOP_SWING_ARM", new EntityAnimation() { + @Override + public void play(Entity entity) { + if (entity.getType() == EntityType.SKELETON) { + ((CraftSkeleton) entity).getHandle().a(false); + } + } + }); + } +}