ThemeParkAudio/src/main/java/tech/sbdevelopment/themeparkaudio/commands/TPAudioCMD.java
SBDeveloper 536cb90868
All checks were successful
Java CI / Build (push) Successful in 1m54s
Fixes and improvements
2025-04-24 21:06:05 +02:00

198 lines
8.1 KiB
Java

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<String> 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<Player> 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<Player> 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<Player> 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!");
}
}