diff --git a/pom.xml b/pom.xml index 5109c3d..69098a8 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ tech.sbdevelopment ThemeParkAudio - 1.6 + 1.0 jar ThemeParkAudio diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/ThemeParkAudio.java b/src/main/java/tech/sbdevelopment/themeparkaudio/ThemeParkAudio.java index 0d6ef33..9ddf868 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/ThemeParkAudio.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/ThemeParkAudio.java @@ -2,10 +2,9 @@ package tech.sbdevelopment.themeparkaudio; import co.aikar.commands.PaperCommandManager; import lombok.Getter; +import org.bukkit.ChatColor; import tech.sbdevelopment.themeparkaudio.commands.TPAudioCMD; import tech.sbdevelopment.themeparkaudio.listener.LogoutListener; -import tech.sbdevelopment.themeparkaudio.listener.WGListener; -import tech.sbdevelopment.themeparkaudio.managers.WGManager; import tech.sbdevelopment.themeparkaudio.radio.Playlist; import tech.sbdevelopment.themeparkaudio.socket.Client; import org.bukkit.Bukkit; @@ -25,13 +24,18 @@ public final class ThemeParkAudio extends JavaPlugin { @Getter private static Playlist playlist; + @Getter + private static boolean regionSupport = false; + public void onEnable() { Bukkit.getLogger().info("[ThemeParkAudio] Loading..."); - if (!setupPlugins()) { - Bukkit.getLogger().severe("[ThemeParkAudio] WorldGuard not found! Disabling..."); - getServer().getPluginManager().disablePlugin(this); - return; + if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null && Bukkit.getPluginManager().getPlugin("Train_Carts") != null) { + Bukkit.getLogger().info("[ThemeParkAudio] WorldGuard and TrainCarts found! Loading region support..."); + regionSupport = true; + Bukkit.getPluginManager().registerEvents(new tech.sbdevelopment.themeparkaudio.listener.WGListener(), this); + } else { + Bukkit.getLogger().warning("[ThemeParkAudio] WorldGuard not found! Regions won't work..."); } instance = this; @@ -47,13 +51,15 @@ public final class ThemeParkAudio extends JavaPlugin { commandManager = new PaperCommandManager(this); commandManager.enableUnstableAPI("help"); + commandManager.getCommandReplacements().addReplacement("tpcommand", getConfig().getString("command")); commandManager.registerCommand(new TPAudioCMD()); - Bukkit.getPluginManager().registerEvents(new WGListener(), this); Bukkit.getPluginManager().registerEvents(new LogoutListener(), this); - Bukkit.getLogger().info("[ThemeParkAudio] Loading playlist..."); - playlist = new Playlist(); + if (ThemeParkAudio.getInstance().getConfig().getBoolean("radio")) { + Bukkit.getLogger().info("[ThemeParkAudio] Loading radio playlist..."); + playlist = new Playlist(); + } Bukkit.getLogger().info("[ThemeParkAudio] Plugin is enabled!"); } @@ -63,12 +69,4 @@ public final class ThemeParkAudio extends JavaPlugin { instance = null; Bukkit.getLogger().info("[ThemeParkAudio] Plugin is disabled!"); } - - private boolean setupPlugins() { - if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null) { - WGManager.setWorldGuard(getServer().getPluginManager().getPlugin("WorldGuard")); - return true; - } - return false; - } } diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/commands/TPAudioCMD.java b/src/main/java/tech/sbdevelopment/themeparkaudio/commands/TPAudioCMD.java index e6e6c67..0c96829 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/commands/TPAudioCMD.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/commands/TPAudioCMD.java @@ -3,11 +3,15 @@ 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; @@ -15,30 +19,47 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; -import org.json.simple.JSONObject; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; -@CommandAlias("tpaudio") +@CommandAlias("%tpcommand") @CommandPermission("tpa.cmd") public class TPAudioCMD extends BaseCommand { - @Default + @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 + "De automatische radio is stopgezet. Zodra het huidige nummer is afgelopen, gebeurt er niks meer."); + 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 + "De automatische radio is weer gestart."); + sender.sendMessage(ChatColor.GRAY + "The automatic radio has started again."); } } @@ -50,7 +71,7 @@ public class TPAudioCMD extends BaseCommand { ThemeParkAudio.getInstance().getConfig().set("radioSongs", urls); ThemeParkAudio.getInstance().saveConfig(); ThemeParkAudio.getPlaylist().addSong(url); - sender.sendMessage(ChatColor.GRAY + "Nummer toegevoegd aan de automatische radio."); + sender.sendMessage(ChatColor.GRAY + "The song has been added to the radio playlist."); } @Subcommand("play") @@ -60,7 +81,7 @@ public class TPAudioCMD extends BaseCommand { Player target = Bukkit.getPlayer(selector); if (target != null) { if (!PinManager.hasPin(target.getUniqueId())) { - sender.sendMessage(ChatColor.GRAY + "Die speler is niet verbonden met de client."); + sender.sendMessage(ChatColor.GRAY + "The player is not connected to the client."); return; } @@ -69,36 +90,35 @@ public class TPAudioCMD extends BaseCommand { 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 + "Gestart met afspelen!"); + sender.sendMessage(ChatColor.GRAY + "Playback started in region " + regionID + "!"); return; } else { players.addAll(sel.getPlayers(sender)); } } - JSONObject data; - for (Player p : players) { - data = new JSONObject(); - - if (!PinManager.hasPin(p.getUniqueId())) continue; - - data.put("task", type.name()); - data.put("path", url); - data.put("uuid", p.getUniqueId().toString().replace("-", "")); - ThemeParkAudio.getClient().sendData(data); + 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; } - sender.sendMessage(ChatColor.GRAY + "Gestart met afspelen!"); + AudioMessage.of(type, url).broadcastSelection(players, PinManager::hasPin); + + sender.sendMessage(ChatColor.GRAY + "Playback started!"); } - @Subcommand("light") + @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 geen geldige brightness."); + sender.sendMessage(ChatColor.GRAY.toString() + brightness + " is not a valid brightness value. It must be between 0 and 255."); return; } @@ -106,7 +126,7 @@ public class TPAudioCMD extends BaseCommand { Player target = Bukkit.getPlayer(selector); if (target != null) { if (!PinManager.hasPin(target.getUniqueId())) { - sender.sendMessage(ChatColor.GRAY + "Die speler is niet verbonden met de client."); + sender.sendMessage(ChatColor.GRAY + "The player is not connected to the client."); return; } @@ -125,21 +145,15 @@ public class TPAudioCMD extends BaseCommand { ThemeParkAudio.getInstance().saveConfig(); } - JSONObject data; - for (Player p : players) { - data = new JSONObject(); + LightMessage.of(brightness, r, g, b, w, region).broadcastSelection(players, PinManager::hasPin); + for (Player p : players) { if (!PinManager.hasPin(p.getUniqueId())) continue; - data.put("task", "LIGHT"); - data.put("rgbw", r + ":" + g + ":" + b + ":" + w); - data.put("region", region.name()); - data.put("brightness", brightness); - data.put("uuid", p.getUniqueId().toString().replace("-", "")); - ThemeParkAudio.getClient().sendData(data); + LightMessage.of(brightness, r, g, b, w, region).send(p.getUniqueId()); } - sender.sendMessage(ChatColor.GRAY + "Kleuren aangepast!"); + sender.sendMessage(ChatColor.GRAY + "Light color has been changed!"); } @Subcommand("setregion") @@ -148,16 +162,16 @@ public class TPAudioCMD extends BaseCommand { ThemeParkAudio.getInstance().getConfig().set("regions.audio." + regionName, url); ThemeParkAudio.getInstance().saveConfig(); - sender.sendMessage(ChatColor.GRAY + "De region zal vanaf nu muziek afspelen."); + sender.sendMessage(ChatColor.GRAY + "The region will now play audio."); } - @Subcommand("sethueregion") + @Subcommand("setlightregion|sethueregion") @Description("") - public void onSetHueRegion(CommandSender sender, String regionName, String url) { + public void onSetLightRegion(CommandSender sender, String regionName, String url) { ThemeParkAudio.getInstance().getConfig().set("regions.light." + regionName, url); ThemeParkAudio.getInstance().saveConfig(); - sender.sendMessage(ChatColor.GRAY + "De region zal vanaf nu licht aanpassen."); + sender.sendMessage(ChatColor.GRAY + "The region will now control the lights."); } @Subcommand("stop") @@ -167,7 +181,7 @@ public class TPAudioCMD extends BaseCommand { Player target = Bukkit.getPlayer(selector); if (target != null) { if (!PinManager.hasPin(target.getUniqueId())) { - sender.sendMessage(ChatColor.GRAY + "Die speler is niet verbonden met de client."); + sender.sendMessage(ChatColor.GRAY + "The player is not connected to the client."); return; } @@ -177,17 +191,8 @@ public class TPAudioCMD extends BaseCommand { players.addAll(sel.getPlayers(sender)); } - JSONObject data; - for (Player p : players) { - data = new JSONObject(); + StopAudioMessage.of().broadcastSelection(players, PinManager::hasPin); - if (!PinManager.hasPin(p.getUniqueId())) continue; - - data.put("task", "STOP"); - data.put("uuid", p.getUniqueId().toString().replace("-", "")); - ThemeParkAudio.getClient().sendData(data); - } - - sender.sendMessage(ChatColor.GRAY + "Gestopt met afspelen!"); + sender.sendMessage(ChatColor.GRAY + "Playback stopped!"); } } diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/listener/LogoutListener.java b/src/main/java/tech/sbdevelopment/themeparkaudio/listener/LogoutListener.java index bd14c5f..5063748 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/listener/LogoutListener.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/listener/LogoutListener.java @@ -1,17 +1,13 @@ package tech.sbdevelopment.themeparkaudio.listener; -import tech.sbdevelopment.themeparkaudio.ThemeParkAudio; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; -import org.json.simple.JSONObject; +import tech.sbdevelopment.themeparkaudio.socket.messages.LogoutMessage; public class LogoutListener implements Listener { @EventHandler public void onDisconnect(PlayerQuitEvent e) { - JSONObject data = new JSONObject(); - data.put("task", "LOGOUT"); - data.put("uuid", e.getPlayer().getUniqueId().toString().replace("-", "")); - ThemeParkAudio.getClient().sendData(data); + LogoutMessage.of().send(e.getPlayer().getUniqueId()); } } diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/listener/WGListener.java b/src/main/java/tech/sbdevelopment/themeparkaudio/listener/WGListener.java index c778a89..5a2a2a7 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/listener/WGListener.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/listener/WGListener.java @@ -101,7 +101,7 @@ public class WGListener implements Listener { AudioMessage.of(AudioType.MUSIC, regionURL).send(player.getUniqueId()); } else if (!Collections.disjoint(list, fromRegions) && Collections.disjoint(list, toRegions)) { //Not in a region, stop... - StopAudioMessage.of(AudioType.MUSIC).send(player.getUniqueId()); + AudioMessage.of(AudioType.MUSIC, "").send(player.getUniqueId()); } } } diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/managers/PinManager.java b/src/main/java/tech/sbdevelopment/themeparkaudio/managers/PinManager.java index c26f5a6..8f37a0e 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/managers/PinManager.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/managers/PinManager.java @@ -1,6 +1,7 @@ package tech.sbdevelopment.themeparkaudio.managers; import lombok.experimental.UtilityClass; +import tech.sbdevelopment.themeparkaudio.ThemeParkAudio; import java.security.SecureRandom; import java.util.UUID; @@ -28,8 +29,13 @@ public class PinManager { String pin = builder.toString(); pins.put(pUUID, pin); + + ThemeParkAudio.getInstance().getLogger().info("Assigned pin " + pin + " to " + pUUID); + return pin; } else { + ThemeParkAudio.getInstance().getLogger().info("Pin " + pins.get(pUUID) + " already assigned to " + pUUID); + return pins.get(pUUID); } } @@ -52,10 +58,18 @@ public class PinManager { * @return true/false */ public static boolean checkPin(UUID pUUID, String pin) { + ThemeParkAudio.getInstance().getLogger().info("Checking pin " + pin + " for " + pUUID); + if (pUUID == null || pin == null || pin.isEmpty()) { return false; } + pins.forEach((uuid, p) -> { + if (pUUID.equals(uuid)) { + ThemeParkAudio.getInstance().getLogger().info("Pin " + p + " for " + pUUID); + } + }); + return pins.containsKey(pUUID) && pin.equals(pins.get(pUUID)); } diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/managers/WGManager.java b/src/main/java/tech/sbdevelopment/themeparkaudio/managers/WGManager.java index 6a16369..42b484a 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/managers/WGManager.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/managers/WGManager.java @@ -4,11 +4,9 @@ import com.sk89q.worldedit.IncompleteRegionException; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitAdapter; -import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.regions.Polygonal2DRegion; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldguard.WorldGuard; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.domains.DefaultDomain; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.flags.Flags; @@ -25,7 +23,6 @@ import org.bukkit.Location; import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; import java.util.ArrayList; import java.util.List; @@ -44,27 +41,6 @@ import java.util.UUID; @UtilityClass public class WGManager { - private static WorldGuardPlugin wgp; - private static WorldEditPlugin wep; - - public static boolean hasWorldGuard() { - return wgp != null; - } - - public static boolean hasWorldEdit() { - return wep != null; - } - - public static boolean setWorldGuard(Plugin plugin) { - wgp = (WorldGuardPlugin) plugin; - return true; - } - - public static boolean setWorldEdit(Plugin plugin) { - wep = (WorldEditPlugin) plugin; - return true; - } - public static ProtectedRegion createRegion(Player p, String id) throws StorageException { LocalSession l = WorldEdit.getInstance().getSessionManager().get(BukkitAdapter.adapt(p)); Region s; diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/radio/Playlist.java b/src/main/java/tech/sbdevelopment/themeparkaudio/radio/Playlist.java index 34b15b1..5ce0799 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/radio/Playlist.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/radio/Playlist.java @@ -37,7 +37,7 @@ public class Playlist { * Start this playlist */ public void start() { - for (String URL : ThemeParkAudio.getInstance().getConfig().getStringList("RadioSongs")) { + for (String URL : ThemeParkAudio.getInstance().getConfig().getStringList("radioSongs")) { addSong(URL); } diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/Client.java b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/Client.java index 69aed5e..8a16018 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/Client.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/Client.java @@ -1,11 +1,9 @@ package tech.sbdevelopment.themeparkaudio.socket; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; import tech.sbdevelopment.themeparkaudio.ThemeParkAudio; import tech.sbdevelopment.themeparkaudio.api.AudioType; import tech.sbdevelopment.themeparkaudio.api.events.AudioConnectionUpdateEvent; import tech.sbdevelopment.themeparkaudio.managers.PinManager; -import tech.sbdevelopment.themeparkaudio.managers.WGManager; import tech.sbdevelopment.themeparkaudio.socket.messages.AudioMessage; import tech.sbdevelopment.themeparkaudio.socket.messages.AuthenticationMessage; import tech.sbdevelopment.themeparkaudio.socket.messages.LightMessage; @@ -14,6 +12,7 @@ import org.bukkit.entity.Player; import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; import org.json.simple.JSONObject; +import tech.sbdevelopment.themeparkaudio.socket.messages.PingMessage; import java.net.URI; import java.net.URISyntaxException; @@ -97,22 +96,25 @@ public class Client { AudioConnectionUpdateEvent event = new AudioConnectionUpdateEvent(p, true); Bukkit.getPluginManager().callEvent(event); - List regions = WGManager.getRegionsIn(p.getLocation()).stream().map(ProtectedRegion::getId).toList(); - Set list = ThemeParkAudio.getInstance().getConfig().getConfigurationSection("regions.audio").getKeys(false); - Optional regionName = regions.stream().filter(list::contains).findFirst(); - regionName.ifPresent(name -> { - String regionURL = ThemeParkAudio.getInstance().getConfig().getString("regions.audio." + name); - AudioMessage.of(AudioType.MUSIC, regionURL).send(pUUID); - }); + if (ThemeParkAudio.isRegionSupport()) { + List regions = tech.sbdevelopment.themeparkaudio.managers.WGManager.getRegionsIn(p.getLocation()).stream().map(com.sk89q.worldguard.protection.regions.ProtectedRegion::getId).toList(); - Set list2 = ThemeParkAudio.getInstance().getConfig().getConfigurationSection("regions.light").getKeys(false); - Optional regionName2 = regions.stream().filter(list2::contains).findFirst(); - regionName2.ifPresent(name -> { - String configData = ThemeParkAudio.getInstance().getConfig().getString("regions.light." + name); - if (configData != null) { - LightMessage.of(configData).send(pUUID); - } - }); + Set list = ThemeParkAudio.getInstance().getConfig().getConfigurationSection("regions.audio").getKeys(false); + Optional regionName = regions.stream().filter(list::contains).findFirst(); + regionName.ifPresent(name -> { + String regionURL = ThemeParkAudio.getInstance().getConfig().getString("regions.audio." + name); + AudioMessage.of(AudioType.MUSIC, regionURL).send(pUUID); + }); + + Set list2 = ThemeParkAudio.getInstance().getConfig().getConfigurationSection("regions.light").getKeys(false); + Optional regionName2 = regions.stream().filter(list2::contains).findFirst(); + regionName2.ifPresent(name -> { + String configData = ThemeParkAudio.getInstance().getConfig().getString("regions.light." + name); + if (configData != null) { + LightMessage.of(configData).send(pUUID); + } + }); + } } AuthenticationMessage.of(verified).send(pUUID); @@ -147,7 +149,7 @@ public class Client { if (this.taskID == 0) { this.taskID = Bukkit.getScheduler().runTaskTimerAsynchronously(ThemeParkAudio.getInstance(), () -> { if (Client.this.wsc != null && Client.this.wsc.isOpen()) { - Client.this.wsc.send("__PING__"); + PingMessage.of().sendService(); } else { if (Client.this.wsc != null) { Client.this.wsc.closeConnection(404, "Disconnected from socket"); @@ -188,6 +190,10 @@ public class Client { } } + public String getAudioUrl(UUID pUUID) { + return this.url; + } + public void sendData(JSONObject json) { if (this.wsc != null && this.wsc.isOpen()) { this.wsc.send(json.toJSONString()); diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/AbstractMessage.java b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/AbstractMessage.java index a288898..59f6c5a 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/AbstractMessage.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/AbstractMessage.java @@ -1,6 +1,7 @@ package tech.sbdevelopment.themeparkaudio.socket.messages; import lombok.Getter; +import org.bukkit.entity.Player; import tech.sbdevelopment.themeparkaudio.ThemeParkAudio; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; @@ -19,6 +20,10 @@ public abstract class AbstractMessage { this.task = task; } + public void sendService() { + send(null, null); + } + public void send(UUID uuid) { send(List.of(uuid), null); } @@ -31,18 +36,24 @@ public abstract class AbstractMessage { send(Bukkit.getOnlinePlayers().stream().map(Entity::getUniqueId).toList(), filter); } - public void send(List uuids, @Nullable Function filter) { + public void broadcastSelection(@Nullable List players, @Nullable Function filter) { + send(players.stream().map(Entity::getUniqueId).toList(), filter); + } + + public void send(@Nullable List uuids, @Nullable Function filter) { JSONObject data = new JSONObject(); - data.put("task", getTask()); + data.put("task", getTask().name().toUpperCase()); JSONObject extendData = extendJson(); if (extendData != null) { data.putAll(extendData); } - for (UUID uuid : uuids) { - if (filter == null || filter.apply(uuid)) { - data.put("uuid", uuid.toString().replace("-", "")); - ThemeParkAudio.getClient().sendData(data); + if (uuids != null && !uuids.isEmpty()) { + for (UUID uuid : uuids) { + if (filter == null || filter.apply(uuid)) { + data.put("uuid", uuid.toString().replace("-", "")); + ThemeParkAudio.getClient().sendData(data); + } } } } diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/LightMessage.java b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/LightMessage.java index 57839b5..8c3dff9 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/LightMessage.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/LightMessage.java @@ -46,8 +46,11 @@ public class LightMessage extends AbstractMessage { @Override protected JSONObject extendJson() { JSONObject data = new JSONObject(); - data.put("rgbw", r + "_" + g + "_" + b + "_" + w); - data.put("region", region); + data.put("r", r); + data.put("g", g); + data.put("b", b); + data.put("w", w); + data.put("region", region.name().toUpperCase()); data.put("brightness", brightness); return data; } diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/LogoutMessage.java b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/LogoutMessage.java index d741cb7..44d7cbb 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/LogoutMessage.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/LogoutMessage.java @@ -7,6 +7,10 @@ public class LogoutMessage extends AbstractMessage { super(MessageTask.LOGOUT); } + public static LogoutMessage of() { + return new LogoutMessage(); + } + @Override protected JSONObject extendJson() { return null; diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/MessageTask.java b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/MessageTask.java index 093cf02..04987e8 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/MessageTask.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/MessageTask.java @@ -1,5 +1,5 @@ package tech.sbdevelopment.themeparkaudio.socket.messages; public enum MessageTask { - AUTHENTICATION, LOGOUT, LIGHT, MUSIC, SFX, RADIO + AUTHENTICATION, LOGOUT, LIGHT, MUSIC, SFX, RADIO, PING, STOP } diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/PingMessage.java b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/PingMessage.java new file mode 100644 index 0000000..4f8c76b --- /dev/null +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/PingMessage.java @@ -0,0 +1,18 @@ +package tech.sbdevelopment.themeparkaudio.socket.messages; + +import org.json.simple.JSONObject; + +public class PingMessage extends AbstractMessage { + public PingMessage() { + super(MessageTask.PING); + } + + public static PingMessage of() { + return new PingMessage(); + } + + @Override + protected JSONObject extendJson() { + return null; + } +} diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/StopAudioMessage.java b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/StopAudioMessage.java index 3b0eb94..3319d37 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/StopAudioMessage.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/socket/messages/StopAudioMessage.java @@ -1,13 +1,18 @@ package tech.sbdevelopment.themeparkaudio.socket.messages; -import tech.sbdevelopment.themeparkaudio.api.AudioType; +import org.json.simple.JSONObject; -public class StopAudioMessage extends AudioMessage { - public StopAudioMessage(AudioType type) { - super(type, "", null, null); +public class StopAudioMessage extends AbstractMessage { + public StopAudioMessage() { + super(MessageTask.STOP); } - public static StopAudioMessage of(AudioType type) { - return new StopAudioMessage(type); + public static StopAudioMessage of() { + return new StopAudioMessage(); + } + + @Override + protected JSONObject extendJson() { + return null; } } diff --git a/src/main/java/tech/sbdevelopment/themeparkaudio/utils/SpigotPlayerSelector.java b/src/main/java/tech/sbdevelopment/themeparkaudio/utils/SpigotPlayerSelector.java index 89e22c6..9dc05da 100644 --- a/src/main/java/tech/sbdevelopment/themeparkaudio/utils/SpigotPlayerSelector.java +++ b/src/main/java/tech/sbdevelopment/themeparkaudio/utils/SpigotPlayerSelector.java @@ -1,6 +1,7 @@ package tech.sbdevelopment.themeparkaudio.utils; import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import tech.sbdevelopment.themeparkaudio.ThemeParkAudio; import tech.sbdevelopment.themeparkaudio.managers.WGManager; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -34,7 +35,7 @@ public class SpigotPlayerSelector { //get Location Location standPoint = getLocation(commandSender); - if (getArgument("r").length() != 0) { + if (!getArgument("r").isEmpty()) { int radius = Integer.parseInt(getArgument("r")); Player nearest = Bukkit.getOnlinePlayers().stream() .filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName())) @@ -44,7 +45,7 @@ public class SpigotPlayerSelector { players.add(nearest); } - if (getArgument("distance").length() != 0) { + if (!getArgument("distance").isEmpty()) { int distance = Integer.parseInt(getArgument("distance")); Player nearest = Bukkit.getOnlinePlayers().stream() .filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName())) @@ -62,7 +63,12 @@ public class SpigotPlayerSelector { //everyone Location standPoint = getLocation(commandSender); - if (getArgument("region").length() != 0) { + if (!getArgument("region").isEmpty()) { + if (!ThemeParkAudio.isRegionSupport()) { + commandSender.sendMessage("Region support is not available."); + return players; + } + String regionID = getArgument("region"); for (Player p : Bukkit.getOnlinePlayers()) { ArrayList regions = WGManager.getRegionsIn(p.getLocation()); @@ -70,22 +76,22 @@ public class SpigotPlayerSelector { players.add(p); } } - } else if (getArgument("r").length() != 0) { + } else if (!getArgument("r").isEmpty()) { int radius = Integer.parseInt(getArgument("r")); players.addAll(Bukkit.getOnlinePlayers().stream() .filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName())) .filter(player -> radius > player.getLocation().distance(standPoint)) - .collect(Collectors.toList())); - } else if (getArgument("distance").length() != 0) { + .toList()); + } else if (!getArgument("distance").isEmpty()) { int distance = Integer.parseInt(getArgument("distance")); players.addAll(Bukkit.getOnlinePlayers().stream() .filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName())) .filter(player -> distance > player.getLocation().distance(standPoint)) - .collect(Collectors.toList())); + .toList()); } else { players.addAll(Bukkit.getOnlinePlayers().stream() .filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName())) - .collect(Collectors.toList())); + .toList()); } } else if (selector.length() <= 16) { //player @@ -113,7 +119,7 @@ public class SpigotPlayerSelector { initialLocation = ((BlockCommandSender) commandSender).getBlock().getLocation(); } - if (!getArgument("x").equals("") && !getArgument("y").equals("") && !getArgument("z").equals("")) { + if (!getArgument("x").isEmpty() && !getArgument("y").isEmpty() && !getArgument("z").isEmpty()) { try { int x = Integer.parseInt(getArgument("x")); int y = Integer.parseInt(getArgument("y")); @@ -129,19 +135,6 @@ public class SpigotPlayerSelector { } public String getArgument(String key) { - StringBuilder result = new StringBuilder(); - String[] arguments = selector.split(key + "="); - if (arguments.length == 1) return ""; - for (byte type : arguments[1].getBytes()) { - char element = (char) type; - if (element == ',' || element == ']') { - return result.toString(); - } else { - result.append(element); - } - } - - return result.toString().replaceAll("\\.", ""); + return HeadUtil.getArgument(selector, key); } - } \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index a8f4aed..ad2e595 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,4 +1,7 @@ -socketUrl: "ws://localhost:8080" +command: "tpaudio" +socketUrl: "wss://localhost:8080" +clientUrl: "https://localhost:8081" +radio: false regions: audio: demo: https://www.mcthemeparks.com/musicupload/downloads/Berlin/kaad.mp3 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 9bdd76d..0ce073f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,7 +2,7 @@ name: ThemeParkAudio version: ${project.version} main: tech.sbdevelopment.themeparkaudio.ThemeParkAudio api-version: 1.21 -depend: [ WorldGuard, Train_Carts ] +softdepend: [ WorldGuard, Train_Carts ] authors: [ SBDeveloper ] description: Audio and light control from your Minecraft server! website: https://sbdevelopment.tech