From 6d5f881b91d120b8a0a177eeaec221bc88828c14 Mon Sep 17 00:00:00 2001 From: fullwall Date: Mon, 19 Jun 2023 20:55:16 +0800 Subject: [PATCH] Tweak /npc sound command to allow arbitrary sounds (as long as they are registered with NMS) --- .../citizensnpcs/commands/NPCCommands.java | 19 ++++++++++++++----- .../main/java/net/citizensnpcs/util/NMS.java | 5 +++-- .../java/net/citizensnpcs/util/NMSBridge.java | 3 ++- .../nms/v1_10_R1/util/NMSImpl.java | 4 ++-- .../nms/v1_11_R1/util/NMSImpl.java | 4 ++-- .../nms/v1_12_R1/util/NMSImpl.java | 4 ++-- .../nms/v1_13_R2/util/NMSImpl.java | 4 ++-- .../nms/v1_14_R1/util/NMSImpl.java | 4 ++-- .../nms/v1_15_R1/util/NMSImpl.java | 4 ++-- .../nms/v1_16_R3/util/NMSImpl.java | 3 +-- .../nms/v1_17_R1/util/NMSImpl.java | 5 ++--- .../nms/v1_18_R2/util/NMSImpl.java | 5 ++--- .../nms/v1_19_R3/util/NMSImpl.java | 5 ++--- .../nms/v1_20_R1/util/NMSImpl.java | 5 ++--- .../nms/v1_8_R3/util/NMSImpl.java | 4 ++-- 15 files changed, 42 insertions(+), 36 deletions(-) diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index ff7863448..e1e5348d4 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -19,6 +19,7 @@ import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.OfflinePlayer; +import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -2884,8 +2885,8 @@ public class NPCCommands { max = 1, permission = "citizens.npc.sound") @Requirements(selected = true, ownership = true, livingEntity = true) - public void sound(CommandContext args, CommandSender sender, NPC npc, @Flag("death") String death, - @Flag("ambient") String ambient, @Flag("hurt") String hurt) throws CommandException { + public void sound(CommandContext args, CommandSender sender, NPC npc, @Flag("death") Sound death, + @Flag("ambient") Sound ambient, @Flag("hurt") Sound hurt) throws CommandException { String ambientSound = npc.data().get(NPC.Metadata.AMBIENT_SOUND); String deathSound = npc.data().get(NPC.Metadata.DEATH_SOUND); String hurtSound = npc.data().get(NPC.Metadata.HURT_SOUND); @@ -2906,13 +2907,21 @@ public class NPCCommands { npc.data().setPersistent(NPC.Metadata.SILENT, false); } else { if (death != null) { - deathSound = death.equals("d") ? null : NMS.getSound(death); + deathSound = NMS.getSoundPath(death); + } else if (args.hasValueFlag("death")) { + deathSound = args.getFlag("death").equals("d") ? null : args.getFlag("death"); } + if (ambient != null) { - ambientSound = ambient.equals("d") ? null : NMS.getSound(ambient); + ambientSound = NMS.getSoundPath(ambient); + } else if (args.hasValueFlag("ambient")) { + ambientSound = args.getFlag("ambient").equals("d") ? null : args.getFlag("ambient"); } + if (hurt != null) { - hurtSound = hurt.equals("d") ? null : NMS.getSound(hurt); + hurtSound = NMS.getSoundPath(hurt); + } else if (args.hasValueFlag("hurt")) { + hurtSound = args.getFlag("hurt").equals("d") ? null : args.getFlag("hurt"); } } if (deathSound == null) { diff --git a/main/src/main/java/net/citizensnpcs/util/NMS.java b/main/src/main/java/net/citizensnpcs/util/NMS.java index bba123caa..1d373f6f3 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMS.java +++ b/main/src/main/java/net/citizensnpcs/util/NMS.java @@ -14,6 +14,7 @@ import java.util.stream.Collectors; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; import org.bukkit.block.Block; @@ -526,8 +527,8 @@ public class NMS { return null; } - public static String getSound(String flag) throws CommandException { - return BRIDGE.getSound(flag); + public static String getSoundPath(Sound flag) throws CommandException { + return BRIDGE.getSoundPath(flag); } public static Entity getSource(BlockCommandSender sender) { diff --git a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java index e42a5fd56..1b5e8ecb4 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java +++ b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.List; import org.bukkit.Location; +import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.command.BlockCommandSender; @@ -95,7 +96,7 @@ public interface NMSBridge { public GameProfile getProfile(SkullMeta meta); - public String getSound(String flag) throws CommandException; + public String getSoundPath(Sound flag) throws CommandException; public Entity getSource(BlockCommandSender sender); diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java index 879b39b15..238d11262 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java @@ -572,9 +572,9 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound flag) throws CommandException { try { - String ret = CraftSound.getSound(Sound.valueOf(flag.toUpperCase())); + String ret = CraftSound.getSound(flag); if (ret == null) throw new CommandException(Messages.INVALID_SOUND); return ret; diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java index 0f0020a98..ee32855ba 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java @@ -592,9 +592,9 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound flag) throws CommandException { try { - String ret = CraftSound.getSound(Sound.valueOf(flag.toUpperCase())); + String ret = CraftSound.getSound(flag); if (ret == null) throw new CommandException(Messages.INVALID_SOUND); return ret; diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java index 2253995e3..9aaa2b3a6 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java @@ -592,9 +592,9 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound flag) throws CommandException { try { - String ret = CraftSound.getSound(Sound.valueOf(flag.toUpperCase())); + String ret = CraftSound.getSound(flag); if (ret == null) throw new CommandException(Messages.INVALID_SOUND); return ret; diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java index b9f2b5d00..3a02aa69d 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java @@ -620,9 +620,9 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound flag) throws CommandException { try { - String ret = CraftSound.getSound(Sound.valueOf(flag.toUpperCase())); + String ret = CraftSound.getSound(flag); if (ret == null) throw new CommandException(Messages.INVALID_SOUND); return ret; diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java index e95d9820b..8a169f383 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java @@ -655,9 +655,9 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound flag) throws CommandException { try { - String ret = CraftSound.getSound(Sound.valueOf(flag.toUpperCase())); + String ret = CraftSound.getSound(flag); if (ret == null) throw new CommandException(Messages.INVALID_SOUND); return ret; diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java index 0de933e7c..15efa1f16 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java @@ -670,9 +670,9 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound flag) throws CommandException { try { - String ret = CraftSound.getSound(Sound.valueOf(flag.toUpperCase())); + String ret = CraftSound.getSound(flag); if (ret == null) throw new CommandException(Messages.INVALID_SOUND); return ret; diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java index 2179db0fb..a29ce9aa8 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java @@ -686,9 +686,8 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound sound) throws CommandException { try { - Sound sound = Sound.valueOf(flag.toUpperCase()); if (CRAFTSOUND_GETSOUND != null) { String ret = (String) CRAFTSOUND_GETSOUND.invoke(sound); if (ret == null) diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java index 9aade1e53..e63696459 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java @@ -695,10 +695,9 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound flag) throws CommandException { try { - Sound sound = Sound.valueOf(flag.toUpperCase()); - SoundEvent effect = CraftSound.getSoundEffect(sound); + SoundEvent effect = CraftSound.getSoundEffect(flag); if (effect == null) throw new CommandException(Messages.INVALID_SOUND); return effect.getLocation().getPath(); diff --git a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java index 24cff7822..795956362 100644 --- a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java +++ b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java @@ -702,10 +702,9 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound flag) throws CommandException { try { - Sound sound = Sound.valueOf(flag.toUpperCase()); - SoundEvent effect = CraftSound.getSoundEffect(sound); + SoundEvent effect = CraftSound.getSoundEffect(flag); if (effect == null) throw new CommandException(Messages.INVALID_SOUND); return effect.getLocation().getPath(); diff --git a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java index e1f3ea64d..b7e832130 100644 --- a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java +++ b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java @@ -735,10 +735,9 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound flag) throws CommandException { try { - Sound sound = Sound.valueOf(flag.toUpperCase()); - SoundEvent effect = CraftSound.getSoundEffect(sound); + SoundEvent effect = CraftSound.getSoundEffect(flag); if (effect == null) throw new CommandException(Messages.INVALID_SOUND); return effect.getLocation().getPath(); diff --git a/v1_20_R1/src/main/java/net/citizensnpcs/nms/v1_20_R1/util/NMSImpl.java b/v1_20_R1/src/main/java/net/citizensnpcs/nms/v1_20_R1/util/NMSImpl.java index 5ca5a3ed0..6ca540f25 100644 --- a/v1_20_R1/src/main/java/net/citizensnpcs/nms/v1_20_R1/util/NMSImpl.java +++ b/v1_20_R1/src/main/java/net/citizensnpcs/nms/v1_20_R1/util/NMSImpl.java @@ -734,10 +734,9 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound flag) throws CommandException { try { - Sound sound = Sound.valueOf(flag.toUpperCase()); - SoundEvent effect = CraftSound.getSoundEffect(sound); + SoundEvent effect = CraftSound.getSoundEffect(flag); if (effect == null) throw new CommandException(Messages.INVALID_SOUND); return effect.getLocation().getPath(); diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java index 479a6c07e..2ee1fb39a 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java @@ -520,9 +520,9 @@ public class NMSImpl implements NMSBridge { } @Override - public String getSound(String flag) throws CommandException { + public String getSoundPath(Sound flag) throws CommandException { try { - String ret = CraftSound.getSound(Sound.valueOf(flag.toUpperCase())); + String ret = CraftSound.getSound(flag); if (ret == null) throw new CommandException(Messages.INVALID_SOUND); return ret;