diff --git a/api/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java b/api/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java index 5aa0800..a209252 100644 --- a/api/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java +++ b/api/src/main/java/net/islandearth/rpgregions/managers/data/region/ConfiguredRegion.java @@ -46,15 +46,14 @@ public class ConfiguredRegion { private String id; private String customName; private final List rewards; - @NeedsGUI private String sound; + private String sound; private String icon; private int iconModel; private int undiscoveredIconModel; private String undiscoveredIcon; private final List iconCommand; private boolean showCoords; - @EditableField(material = Material.ENDER_PEARL, name = "Set teleport location", description = "Set the teleport location to your current location") - @NeedsGUI private Location location; + private Location location; @NeedsGUI private final List hints; private boolean showHint; private boolean teleportable; @@ -141,9 +140,12 @@ public class ConfiguredRegion { return rewards; } - @Nullable - public String getSoundName() { - return sound; + public Optional getSoundName() { + return Optional.ofNullable(sound); + } + + public void setSoundName(String sound) { + this.sound = sound; } @Nullable diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java b/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java index bf9d770..7e013c9 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java @@ -6,6 +6,8 @@ import cloud.commandframework.annotations.CommandMethod; import cloud.commandframework.annotations.CommandPermission; import cloud.commandframework.annotations.Hidden; import cloud.commandframework.annotations.specifier.Greedy; +import cloud.commandframework.annotations.suggestions.Suggestions; +import cloud.commandframework.context.CommandContext; import cloud.commandframework.minecraft.extras.MinecraftHelp; import cloud.commandframework.paper.PaperCommandManager; import net.islandearth.rpgregions.RPGRegions; @@ -28,6 +30,7 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.OfflinePlayer; +import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -39,10 +42,12 @@ import java.io.File; import java.io.FileReader; import java.io.Reader; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; public class RPGRegionsCommand { @@ -292,6 +297,21 @@ public class RPGRegionsCommand { Colors.sendColourful(player, Component.text("Location has been updated.", Colors.EREBOR_GREEN)); } + @CommandDescription("Sets or removes the sound of a region when it is discovered") + @CommandPermission("rpgregions.edit") + @CommandMethod("rpgregions|rpgr setsound [sound]") + public void onSetSound(CommandSender sender, + @Argument("region") ConfiguredRegion region, + @Argument(value = "sound", suggestions = "sound_names") @Nullable String soundName) { + region.setSoundName(soundName); + Colors.sendColourful(sender, Component.text("Set the sound name to " + soundName + ".", Colors.EREBOR_GREEN)); + } + + @Suggestions("sound_names") + public List soundNameSuggestions(CommandContext context, String input) { + return Arrays.stream(Sound.values()).map(Enum::name).collect(Collectors.toList()); + } + //TODO: use confirmation api @CommandDescription("If configured, regenerates a region to the set schematic") @CommandPermission("rpgregions.regenerate") diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java b/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java index dae7b11..60ae455 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/listener/RegionListener.java @@ -131,8 +131,7 @@ public class RegionListener implements Listener { ConfiguredRegion region = rde.getRegion(); this.sendTitles(player, region, true); - final String soundName = region.getSoundName(); - final String configSound = soundName != null ? soundName : plugin.getConfig().getString("settings.server.discoveries.discovered.sound.name", ""); + final String configSound = region.getSoundName().orElse(plugin.getConfig().getString("settings.server.discoveries.discovered.sound.name", "")); Enums.getIfPresent(Sound.class, configSound).toJavaUtil().ifPresentOrElse(sound -> { player.playSound( player.getLocation(),