package tech.sbdevelopment.themeparkaudio.commands; import co.aikar.commands.BaseCommand; import co.aikar.commands.CommandHelp; import co.aikar.commands.annotation.*; import net.md_5.bungee.api.chat.TextComponent; import tech.sbdevelopment.themeparkaudio.ThemeParkAudio; import tech.sbdevelopment.themeparkaudio.api.AudioType; import tech.sbdevelopment.themeparkaudio.api.LightRegion; import tech.sbdevelopment.themeparkaudio.listener.PlayInRegionHandler; import tech.sbdevelopment.themeparkaudio.managers.PinManager; import tech.sbdevelopment.themeparkaudio.socket.messages.AudioMessage; import tech.sbdevelopment.themeparkaudio.socket.messages.LightMessage; import tech.sbdevelopment.themeparkaudio.socket.messages.StopAudioMessage; import tech.sbdevelopment.themeparkaudio.utils.HeadUtil; import tech.sbdevelopment.themeparkaudio.utils.SpigotPlayerSelector; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @CommandAlias("%tpcommand") @CommandPermission("tpa.cmd") public class TPAudioCMD extends BaseCommand { @Subcommand("help") @HelpCommand public void onHelp(CommandSender sender, CommandHelp help) { help.showHelp(); } @Default @Description("Get your audio URL.") public void getAudioUrl(Player sender) { String pin = PinManager.getPIN(sender.getUniqueId()); String url = ThemeParkAudio.getInstance().getConfig().getString("clientUrl"); url = url + "?uuid=" + sender.getUniqueId().toString().replace("-", "") + "&pin=" + pin; TextComponent component = new TextComponent(ChatColor.GRAY + "Click here to open our audio client."); component.setClickEvent(new net.md_5.bungee.api.chat.ClickEvent(net.md_5.bungee.api.chat.ClickEvent.Action.OPEN_URL, url)); sender.spigot().sendMessage(component); } @Subcommand("toggleradio") @Description("") public void toggleRadio(CommandSender sender) { if (!ThemeParkAudio.getInstance().getConfig().getBoolean("radio")) { sender.sendMessage(ChatColor.GRAY + "The radio is disabled, so it can't be toggled."); return; } if (ThemeParkAudio.getPlaylist().isRunning()) { ThemeParkAudio.getPlaylist().stop(); sender.sendMessage(ChatColor.GRAY + "The automatic radio has been stopped. Once the current song ends, it will not continue."); } else { ThemeParkAudio.getPlaylist().start(); sender.sendMessage(ChatColor.GRAY + "The automatic radio has started again."); } } @Subcommand("addsong") @Description("") public void onAddSong(CommandSender sender, String url) { List urls = ThemeParkAudio.getInstance().getConfig().getStringList("radioSongs"); urls.add(url); ThemeParkAudio.getInstance().getConfig().set("radioSongs", urls); ThemeParkAudio.getInstance().saveConfig(); ThemeParkAudio.getPlaylist().addSong(url); sender.sendMessage(ChatColor.GRAY + "The song has been added to the radio playlist."); } @Subcommand("play") @Description("") public void onPlay(CommandSender sender, String selector, AudioType type, String url) { List players = new ArrayList<>(); Player target = Bukkit.getPlayer(selector); if (target != null) { if (!PinManager.hasPin(target.getUniqueId())) { sender.sendMessage(ChatColor.GRAY + "The player is not connected to the client."); return; } players.add(target); } else { SpigotPlayerSelector sel = new SpigotPlayerSelector(selector); if (sel.getArgument("region").length() != 0) { if (!ThemeParkAudio.isRegionSupport()) { sender.sendMessage(ChatColor.GRAY + "Region support is not available."); return; } String regionID = sel.getArgument("region"); new PlayInRegionHandler(regionID, url, sel.getPlayers(sender).stream().map(Entity::getUniqueId).collect(Collectors.toList())); sender.sendMessage(ChatColor.GRAY + "Playback started in region " + regionID + "!"); return; } else { players.addAll(sel.getPlayers(sender)); } } if (type == AudioType.RADIO && !ThemeParkAudio.getInstance().getConfig().getBoolean("radio")) { sender.sendMessage(ChatColor.GRAY + "The radio is disabled, so it can't be played on."); return; } AudioMessage.of(type, url).broadcastSelection(players, PinManager::hasPin); sender.sendMessage(ChatColor.GRAY + "Playback started!"); } @Subcommand("light|hue") @Description("") public void onLight(CommandSender sender, String selector, int r, int g, int b, int w, LightRegion region, @Default("255") Integer brightness) { if (brightness < 0 || brightness > 255) { sender.sendMessage(ChatColor.GRAY.toString() + brightness + " is not a valid brightness value. It must be between 0 and 255."); return; } List players = new ArrayList<>(); Player target = Bukkit.getPlayer(selector); if (target != null) { if (!PinManager.hasPin(target.getUniqueId())) { sender.sendMessage(ChatColor.GRAY + "The player is not connected to the client."); return; } players.add(target); } else { SpigotPlayerSelector sel = new SpigotPlayerSelector(selector); players.addAll(sel.getPlayers(sender)); } //CHECK FOR THE REGION SELECTOR -> Then save if (selector.startsWith("@a") && HeadUtil.getArgument(selector, "region").length() != 0) { String regionID = HeadUtil.getArgument(selector, "region"); String data = brightness + "_" + r + "_" + g + "_" + b + "_" + w + "_" + region.name(); ThemeParkAudio.getInstance().getConfig().set("regions.light." + regionID, data); ThemeParkAudio.getInstance().saveConfig(); } LightMessage.of(brightness, r, g, b, w, region).broadcastSelection(players, PinManager::hasPin); for (Player p : players) { if (!PinManager.hasPin(p.getUniqueId())) continue; LightMessage.of(brightness, r, g, b, w, region).send(p.getUniqueId()); } sender.sendMessage(ChatColor.GRAY + "Light color has been changed!"); } @Subcommand("setregion") @Description("") public void onSetRegion(CommandSender sender, String regionName, String url) { ThemeParkAudio.getInstance().getConfig().set("regions.audio." + regionName, url); ThemeParkAudio.getInstance().saveConfig(); sender.sendMessage(ChatColor.GRAY + "The region will now play audio."); } @Subcommand("setlightregion|sethueregion") @Description("") public void onSetLightRegion(CommandSender sender, String regionName, String url) { ThemeParkAudio.getInstance().getConfig().set("regions.light." + regionName, url); ThemeParkAudio.getInstance().saveConfig(); sender.sendMessage(ChatColor.GRAY + "The region will now control the lights."); } @Subcommand("stop") @Description("") public void onStop(CommandSender sender, String selector) { List players = new ArrayList<>(); Player target = Bukkit.getPlayer(selector); if (target != null) { if (!PinManager.hasPin(target.getUniqueId())) { sender.sendMessage(ChatColor.GRAY + "The player is not connected to the client."); return; } players.add(target); } else { SpigotPlayerSelector sel = new SpigotPlayerSelector(selector); players.addAll(sel.getPlayers(sender)); } StopAudioMessage.of().broadcastSelection(players, PinManager::hasPin); sender.sendMessage(ChatColor.GRAY + "Playback stopped!"); } }