diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/EmotesCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/EmotesCommand.java index 5a76b21c716cb38d361e20641728fc0f0ac899a2..ef07fc22bda93328fcaa345ac5b4d9be4d8b4646 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/EmotesCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/EmotesCommand.java @@ -4,6 +4,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.managers.gestures.Gesture; +import io.lumine.cosmetics.managers.gestures.GestureManager; import io.lumine.cosmetics.players.Profile; import io.lumine.utils.commands.Command; import org.bukkit.command.CommandSender; @@ -22,16 +23,22 @@ public class EmotesCommand extends Command<MCCosmeticsPlugin> { @Override public boolean onCommand(CommandSender commandSender, String[] strings) { - if(strings.length == 0){ + if(strings.length == 0) { + CommandHelper.sendError(commandSender, "Syntax: /emote [emote_name]"); return false; } - Optional<Profile> profile = plugin.getProfiles().getProfile(((Player)commandSender).getName()); + Optional<Profile> maybeProfile = plugin.getProfiles().getProfile(((Player)commandSender).getName()); - var cosmetic = getPlugin().getGestureManager().getCosmetic(strings[0]); + maybeProfile.ifPresent(profile -> { + var maybeCosmetic = getPlugin().getGestureManager().getCosmetic(strings[0]); + + maybeCosmetic.ifPresent(gesture -> { + gesture.equip(profile); + ((GestureManager) gesture.getManager()).playGesture(profile); + }); + }); - profile.ifPresent(value -> cosmetic.ifPresent(gesture -> gesture.equip(value))); - /**TODO: Make it silently tell you if you only typed /emote instead of erroring **/ return true; } diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/Gesture.java b/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/Gesture.java index cbff47cf880a4bc948971d55c99e35274006def6..0bad3e8e96dc04765bc2c278a328cb07bd2ce104 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/Gesture.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/Gesture.java @@ -70,6 +70,7 @@ public class Gesture extends AbstractCosmetic { .click((prof,p) -> { if(prof.getPlayer().isOp() || prof.has(this)) { prof.equip(this); + ((GestureManager) getManager()).playGesture(prof); CommandHelper.sendSuccess(p, "Now playing gesture: " + getDisplay()); p.closeInventory(); } else { diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/GestureManager.java b/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/GestureManager.java index 6f360e52dc707734288e96850be62949172e8571..a64a44207d338e846a25186bd2cb29eacff41f47 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/GestureManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/GestureManager.java @@ -58,7 +58,21 @@ public class GestureManager extends MCCosmeticsManager<Gesture> { @Override public void equip(CosmeticProfile profile) { + // Gestures aren't really equipped + } + + @Override + public void unequip(CosmeticProfile profile) { + stopGesture(profile); + } + + public void playGesture(CosmeticProfile profile) { + if(ticking.containsKey(profile.getPlayer())) { + return; + } + final var maybeEquipped = profile.getEquipped(Gesture.class); + if(maybeEquipped.isEmpty()) { return; } @@ -68,26 +82,25 @@ public class GestureManager extends MCCosmeticsManager<Gesture> { return; } - final var player = profile.getPlayer(); - CustomPlayerModel model = new CustomPlayerModel(player, gesture.getQuitMethod(), gesture.isCanLook(), () -> profile.unequip(gesture)); - ticking.put(player, model); - final var animation = model.getTexture().isSlim() ? gesture.getSlimGesture() : gesture.getDefaultGesture(); - model.playAnimation(animation); + final var player = profile.getPlayer(); + CustomPlayerModel model = new CustomPlayerModel(player, gesture.getQuitMethod(), gesture.isCanLook(), () -> profile.unequip(gesture)); + ticking.put(player, model); + final var animation = model.getTexture().isSlim() ? gesture.getSlimGesture() : gesture.getDefaultGesture(); + model.playAnimation(animation); - ((VolatileEquipmentHelper) getNMSHelper()).apply(profile); + ((VolatileEquipmentHelper) getNMSHelper()).apply(profile); } - - @Override - public void unequip(CosmeticProfile profile) { - CustomPlayerModel model = ticking.remove(profile.getPlayer()); - if(model == null) - return; - model.despawn(); - ((VolatileEquipmentHelper) getNMSHelper()).unapply(profile); + + public void stopGesture(CosmeticProfile profile) { + CustomPlayerModel model = ticking.remove(profile.getPlayer()); + if(model == null) { + return; + } + model.despawn(); + ((VolatileEquipmentHelper) getNMSHelper()).unapply(profile); } private void loadGestures() { - PlayerAnimator.api.getAnimationManager().clearRegistry(); final String type = CosmeticType.folder(cosmeticClass);