diff --git a/pom.xml b/pom.xml index 1d39005..d73c0a5 100644 --- a/pom.xml +++ b/pom.xml @@ -6,17 +6,16 @@ me.mctp MCTPAudio - 1.2 + 1.3 jar MCTPAudio - De audio plugin van MCThemeParks. + The audio plugin of McThemeParks! - 1.8 UTF-8 - https://sbdplugins.nl + https://mcthemeparks.eu clean package @@ -26,8 +25,17 @@ maven-compiler-plugin 3.8.1 - ${java.version} - ${java.version} + 11 + + -parameters + + + + org.projectlombok + lombok + 1.18.16 + + @@ -41,7 +49,18 @@ shade + true false + + + co.aikar.commands + nl.sbdeveloper.mctpaudio.libs.acf + + + co.aikar.locales + nl.sbdeveloper.mctpaudio.libs.locales + + @@ -74,7 +93,7 @@ org.spigotmc spigot-api - 1.16.4-R0.1-SNAPSHOT + 1.16.5-R0.1-SNAPSHOT provided @@ -109,5 +128,11 @@ commons-io 2.8.0 + + co.aikar + acf-paper + 0.5.0-SNAPSHOT + compile + diff --git a/src/main/java/me/mctp/Main.java b/src/main/java/me/mctp/Main.java deleted file mode 100644 index 0c1f2e9..0000000 --- a/src/main/java/me/mctp/Main.java +++ /dev/null @@ -1,88 +0,0 @@ -package me.mctp; - -import me.mctp.commands.MCTPAudioCMD; -import me.mctp.listener.LogoutListener; -import me.mctp.listener.WGListener; -import me.mctp.managers.WGManager; -import me.mctp.radio.Playlist; -import me.mctp.socket.Client; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.event.Listener; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.java.JavaPlugin; - -public class Main extends JavaPlugin implements Listener { - - private static Plugin pl; - private static Client client; - private static Playlist playlist; - - public static String prefix = (ChatColor.GOLD + "[" + ChatColor.YELLOW + "MCTP" + ChatColor.GOLD + "] " + ChatColor.GRAY); - - public void onEnable(){ - Bukkit.getServer().getPluginManager().registerEvents(this, this); - - Bukkit.getLogger().info(prefix + "loading..."); - - if (!setupPlugins()) { - Bukkit.getLogger().severe(String.format("[%s] Disabled due to no WorldGuard dependency found!", getDescription().getName())); - getServer().getPluginManager().disablePlugin(this); - return; - } - - getConfig().addDefault("Regions.demosound", "https://audiopagina.mcthemeparks.eu/gallery/voletarium.mp3"); - getConfig().addDefault("HueRegions.demosound", "255_0_0_254"); - getConfig().options().copyDefaults(true); - saveConfig(); - - pl = this; - - client = new Client("ws://173.249.31.58:8166"); - client.connect(); - - getCommand("audio").setExecutor(new MCTPAudioCMD()); - getCommand("mctpaudio").setExecutor(new MCTPAudioCMD()); - - Bukkit.getPluginManager().registerEvents(new WGListener(), this); - Bukkit.getPluginManager().registerEvents(new LogoutListener(), this); - - playlist = new Playlist(); - - Bukkit.getLogger().info(prefix + " __ __ ____ _____ ____ _ _ _ "); - Bukkit.getLogger().info(prefix + " | \\/ |/ ___|_ _| _ \\ / \\ _ _ __| (_) ___ "); - Bukkit.getLogger().info(prefix + " | |\\/| | | | | | |_) / _ \\| | | |/ _` | |/ _ \\ "); - Bukkit.getLogger().info(prefix + " | | | | |___ | | | __/ ___ \\ |_| | (_| | | (_) |"); - Bukkit.getLogger().info(prefix + " |_| |_|\\____| |_| |_| /_/ \\_\\__,_|\\__,_|_|\\___/ "); - Bukkit.getLogger().info(prefix + " "); - Bukkit.getLogger().info(prefix + "successfully enabled!"); - } - - public void onDisable() { - client.disconnect(); - Bukkit.getLogger().info(prefix + "successfully disabled!"); - } - - private boolean setupPlugins() { - if (hasWorldGuardOnServer()) { - WGManager.setWorldGuard(getServer().getPluginManager().getPlugin("WorldGuard")); - return true; - } - return false; - } - private static boolean hasWorldGuardOnServer() { - return Bukkit.getPluginManager().getPlugin("WorldGuard") != null; - } - - public static Plugin getPlugin() { - return pl; - } - - public static Client getClient() { - return client; - } - - public static Playlist getPlaylist() { - return playlist; - } -} diff --git a/src/main/java/me/mctp/api/AudioType.java b/src/main/java/me/mctp/api/AudioType.java deleted file mode 100644 index 8c6fc71..0000000 --- a/src/main/java/me/mctp/api/AudioType.java +++ /dev/null @@ -1,5 +0,0 @@ -package me.mctp.api; - -public enum AudioType { - MUSIC, SFX, RADIO -} diff --git a/src/main/java/me/mctp/api/HueType.java b/src/main/java/me/mctp/api/HueType.java deleted file mode 100644 index f57d463..0000000 --- a/src/main/java/me/mctp/api/HueType.java +++ /dev/null @@ -1,5 +0,0 @@ -package me.mctp.api; - -public enum HueType { - LEFT, MID, RIGHT, ALL -} diff --git a/src/main/java/me/mctp/commands/MCTPAudioCMD.java b/src/main/java/me/mctp/commands/MCTPAudioCMD.java deleted file mode 100644 index d06ca3a..0000000 --- a/src/main/java/me/mctp/commands/MCTPAudioCMD.java +++ /dev/null @@ -1,231 +0,0 @@ -package me.mctp.commands; - -import me.mctp.Main; -import me.mctp.api.AudioType; -import me.mctp.api.HueType; -import me.mctp.managers.PinManager; -import me.mctp.utils.HeadUtil; -import me.mctp.utils.SpigotPlayerSelector; -import net.md_5.bungee.api.chat.ClickEvent; -import net.md_5.bungee.api.chat.TextComponent; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.json.simple.JSONObject; - -import java.util.ArrayList; -import java.util.List; - -public class MCTPAudioCMD implements CommandExecutor { - - public static String prefix = (ChatColor.GOLD + "[" + ChatColor.YELLOW + "MCTP" + ChatColor.GOLD + "] " + ChatColor.GRAY); - - @Override - public boolean onCommand(CommandSender sender, Command cmd, String commandlabel, String[] args) { - if (cmd.getName().equalsIgnoreCase("mctpaudio")) { - if (!sender.hasPermission("mctp.audio")) { - sender.sendMessage(prefix + "You don't have the permission to do this."); - return true; - } - - if (args.length == 1 && args[0].equalsIgnoreCase("toggleradio")) { - if (Main.getPlaylist().isRunning()) { - Main.getPlaylist().stop(); - sender.sendMessage(prefix + "De auto radio is stopgezet. Zodra het huidige nummer is afgelopen, gebeurt er niks meer."); - } else { - Main.getPlaylist().start(); - sender.sendMessage(prefix + "De auto radio is weer gestart."); - } - return true; - } else if (args.length == 2 && args[0].equalsIgnoreCase("addsong")) { - List urls = Main.getPlugin().getConfig().getStringList("RadioSongs"); - urls.add(args[1]); - Main.getPlugin().getConfig().set("RadioSongs", urls); - Main.getPlugin().saveConfig(); - Main.getPlaylist().addSong(args[1]); - sender.sendMessage(prefix + "Nummer toegevoegd aan de lijst."); - return true; - } else if (args.length == 4 && args[0].equalsIgnoreCase("play")) { - AudioType type; - try { - type = AudioType.valueOf(args[2].toUpperCase()); - } catch (IllegalArgumentException ex) { - sender.sendMessage(prefix + args[2] + " is geen correcte type."); - return true; - } - - ArrayList players = new ArrayList<>(); - Player target = Bukkit.getPlayer(args[1]); - if (target != null) { - if (!PinManager.hasPin(target.getUniqueId())) { - sender.sendMessage(prefix + "Die speler is niet verbonden met de client."); - return true; - } - - players.add(target); - } else { - SpigotPlayerSelector selector = new SpigotPlayerSelector(args[1]); - players.addAll(selector.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", args[3]); - data.put("uuid", p.getUniqueId().toString().replace("-", "")); - Main.getClient().sendData(data); - } - - sender.sendMessage(prefix + "Gestart met afspelen!"); - return true; - } else if ((args.length == 6 || args.length == 7) && args[0].equalsIgnoreCase("hue")) { - int r; - int g; - int b; - try { - r = Integer.parseInt(args[2]); - g = Integer.parseInt(args[3]); - b = Integer.parseInt(args[4]); - } catch (IllegalArgumentException ex) { - sender.sendMessage(prefix + args[2] + ", " + args[3] + ", " + args[4] + " zijn incorrecte RGB waardes."); - return true; - } - - Integer brightness = null; - if (args.length == 7) { - try { - brightness = Integer.parseInt(args[6]); - } catch (IllegalArgumentException ex) { - sender.sendMessage(prefix + args[6] + " is geen correcte brightness."); - return true; - } - - if (brightness < 0 || brightness > 254) { - sender.sendMessage(prefix + args[6] + " is geen correcte brightness."); - return true; - } - } - - HueType type; - try { - type = HueType.valueOf(args[5].toUpperCase()); - } catch (IllegalArgumentException ex) { - sender.sendMessage(prefix + args[5] + " is geen correcte type."); - return true; - } - - ArrayList players = new ArrayList<>(); - Player target = Bukkit.getPlayer(args[1]); - if (target != null) { - if (!PinManager.hasPin(target.getUniqueId())) { - sender.sendMessage(prefix + "Die speler is niet verbonden met de client."); - return true; - } - - players.add(target); - } else { - SpigotPlayerSelector selector = new SpigotPlayerSelector(args[1]); - players.addAll(selector.getPlayers(sender)); - } - - //CHECK FOR THE REGION SELECTOR -> Then save - if (args[1].startsWith("@a") && HeadUtil.getArgument(args[1], "region").length() != 0) { - String regionID = HeadUtil.getArgument(args[1], "region"); - String data = r + "_" + g + "_" + b + "_" + type.name(); - if (brightness != null) data += "_" + brightness; - - Main.getPlugin().getConfig().set("HueRegions." + regionID, data); - Main.getPlugin().saveConfig(); - } - - JSONObject data; - for (Player p : players) { - data = new JSONObject(); - - if (!PinManager.hasPin(p.getUniqueId())) continue; - - data.put("task", "HUE"); - data.put("rgb", r + ":" + g + ":" + b); - data.put("type", type.name()); - if (brightness != null) data.put("brightness", brightness); - data.put("uuid", p.getUniqueId().toString().replace("-", "")); - Main.getClient().sendData(data); - } - - sender.sendMessage(prefix + "Indien de speler(s) is/zijn verbonden met Philips Hue, is de kleur veranderd."); - return true; - } else if (args.length == 3 && args[0].equalsIgnoreCase("setregion")) { - String regionName = args[1]; - String url = args[2]; - - Main.getPlugin().getConfig().set("Regions." + regionName, url); - Main.getPlugin().saveConfig(); - - sender.sendMessage(prefix + "De region zal vanaf nu muziek afspelen."); - return true; - } else if (args.length == 3 && args[0].equalsIgnoreCase("sethueregion")) { - String regionName = args[1]; - String url = args[2]; - - Main.getPlugin().getConfig().set("Regions." + regionName, url); - Main.getPlugin().saveConfig(); - - sender.sendMessage(prefix + "De region zal vanaf nu muziek afspelen."); - return true; - } else if (args.length == 2 && args[0].equalsIgnoreCase("stop")) { - ArrayList players = new ArrayList<>(); - Player target = Bukkit.getPlayer(args[1]); - if (target != null) { - if (!PinManager.hasPin(target.getUniqueId())) { - sender.sendMessage(prefix + "Die speler is niet verbonden met de client."); - return true; - } - - players.add(target); - } else { - SpigotPlayerSelector selector = new SpigotPlayerSelector(args[1]); - players.addAll(selector.getPlayers(sender)); - } - - JSONObject data; - for (Player p : players) { - data = new JSONObject(); - - if (!PinManager.hasPin(p.getUniqueId())) continue; - - data.put("task", "STOP"); - data.put("uuid", p.getUniqueId().toString().replace("-", "")); - Main.getClient().sendData(data); - } - - sender.sendMessage(prefix + "Gestopt met afspelen!"); - return true; - } - } else if (cmd.getName().equalsIgnoreCase("audio")) { - if (!(sender instanceof Player)) { - sender.sendMessage(prefix + "Alleen spelers kunnen verbinden met onze audioclient."); - return true; - } - - Player p = (Player) sender; - String pin = PinManager.getPIN(p.getUniqueId()); - - String url = "http://audio.mcthemeparks.eu/"; - url = url + "?uuid=" + p.getUniqueId().toString().replace("-", "") + "&pin=" + pin; - - TextComponent message = new TextComponent(TextComponent.fromLegacyText(prefix + "Click here to connect to the audio client.")); - message.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, url)); - p.spigot().sendMessage(message); - return true; - } - return false; - } - -} diff --git a/src/main/java/me/mctp/listener/WGListener.java b/src/main/java/me/mctp/listener/WGListener.java deleted file mode 100644 index 9ff5278..0000000 --- a/src/main/java/me/mctp/listener/WGListener.java +++ /dev/null @@ -1,107 +0,0 @@ -package me.mctp.listener; - -import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import me.mctp.Main; -import me.mctp.managers.PinManager; -import me.mctp.managers.WGManager; -import net.raidstone.wgevents.events.RegionsEnteredEvent; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; -import org.json.simple.JSONObject; - -import java.util.*; -import java.util.stream.Collectors; - -public class WGListener implements Listener { - /** Music detection */ - @EventHandler - public void onMove(PlayerMoveEvent e) { - if (e.getTo() == null || e.getFrom().getWorld() == null || e.getTo().getWorld() == null) return; - - if (e.getFrom().getBlockX() != e.getTo().getBlockX() || e.getFrom().getBlockY() != e.getTo().getBlockY() || e.getFrom().getBlockZ() != e.getTo().getBlockZ()) { - Set list = Main.getPlugin().getConfig().getConfigurationSection("Regions").getKeys(false); - - if (!PinManager.hasPin(Objects.requireNonNull(e.getPlayer()).getUniqueId())) return; - - List regions = WGManager.getRegionsIn(e.getFrom()); - List regionNames = regions.stream().map(ProtectedRegion::getId).collect(Collectors.toList()); - List regions2 = WGManager.getRegionsIn(e.getTo()); - List regionNames2 = regions2.stream().map(ProtectedRegion::getId).collect(Collectors.toList()); - - if ((Collections.disjoint(list, regionNames) && !Collections.disjoint(list, regionNames2)) || (!Collections.disjoint(list, regionNames) && !Collections.disjoint(list, regionNames2))) { - //Walked in a region - - if (!Collections.disjoint(list, regionNames) && !Collections.disjoint(list, regionNames2)) { - Optional name = regionNames.stream().filter(list::contains).findFirst(); - Optional name2 = regionNames2.stream().filter(list::contains).findFirst(); - if (name.isPresent() && name2.isPresent() && name.get().equals(name2.get())) { - return; - } - - if (name.isPresent() && name2.isPresent()) { - String regionURL = Main.getPlugin().getConfig().getString("Regions." + name.get()); - String regionURL2 = Main.getPlugin().getConfig().getString("Regions." + name2.get()); - - if (regionURL.equals(regionURL2)) { - return; - } - } - } - - Optional name = regionNames2.stream().filter(list::contains).findFirst(); - if (!name.isPresent()) return; - String regionURL = Main.getPlugin().getConfig().getString("Regions." + name.get()); - - JSONObject data = new JSONObject(); - data.put("task", "MUSIC"); - data.put("path", regionURL); - data.put("uuid", e.getPlayer().getUniqueId().toString().replace("-", "")); - Main.getClient().sendData(data); - } else if (!Collections.disjoint(list, regionNames) && Collections.disjoint(list, regionNames2)) { - //Not in a region, stop... - JSONObject data = new JSONObject(); - data.put("task", "MUSIC"); - data.put("path", ""); - data.put("uuid", e.getPlayer().getUniqueId().toString().replace("-", "")); - Main.getClient().sendData(data); - } - } - } - - /** Hue detection */ - @EventHandler - public void onRegionEnter(RegionsEnteredEvent e) { - if (e.getPlayer() == null) return; - - Set list2 = Main.getPlugin().getConfig().getConfigurationSection("HueRegions").getKeys(false); - - if (!Collections.disjoint(list2, e.getRegionsNames())) { - //One element is the same -> In a region - - Optional name = e.getRegionsNames().stream().filter(list2::contains).findFirst(); - if (!name.isPresent()) return; - String configData = Main.getPlugin().getConfig().getString("HueRegions." + name.get()); - - if (configData == null) return; - String[] configDataSplit = configData.split("_"); - - int r = Integer.parseInt(configDataSplit[0]); - int g = Integer.parseInt(configDataSplit[1]); - int b = Integer.parseInt(configDataSplit[2]); - String type = configDataSplit[3]; - Integer brightness = null; - if (configDataSplit.length == 5) brightness = Integer.parseInt(configDataSplit[4]); - - if (!PinManager.hasPin(e.getPlayer().getUniqueId())) return; - - JSONObject data = new JSONObject(); - data.put("task", "HUE"); - data.put("rgb", r + ":" + g + ":" + b); - data.put("type", type); - if (brightness != null) data.put("brightness", brightness); - data.put("uuid", e.getPlayer().getUniqueId().toString().replace("-", "")); - Main.getClient().sendData(data); - } - } -} diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/MCTPAudio.java b/src/main/java/nl/sbdeveloper/mctpaudio/MCTPAudio.java new file mode 100644 index 0000000..99ca6b3 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/MCTPAudio.java @@ -0,0 +1,88 @@ +package nl.sbdeveloper.mctpaudio; + +import co.aikar.commands.PaperCommandManager; +import nl.sbdeveloper.mctpaudio.commands.MCTPAudioCMD; +import nl.sbdeveloper.mctpaudio.listener.LogoutListener; +import nl.sbdeveloper.mctpaudio.listener.WGListener; +import nl.sbdeveloper.mctpaudio.managers.WGManager; +import nl.sbdeveloper.mctpaudio.radio.Playlist; +import nl.sbdeveloper.mctpaudio.socket.Client; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.java.JavaPlugin; + +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + +public final class MCTPAudio extends JavaPlugin { + private static Plugin instance; + + private static PaperCommandManager commandManager; + + private static Client client; + private static Playlist playlist; + + public void onEnable() { + Bukkit.getLogger().info("[MCTPAudio] Loading..."); + + if (!setupPlugins()) { + Bukkit.getLogger().severe("[MCTPAudio] WorldGuard not found! Disabling..."); + getServer().getPluginManager().disablePlugin(this); + return; + } + + instance = this; + + getConfig().addDefault("Regions.demosound", "https://audiopagina.mcthemeparks.eu/gallery/voletarium.mp3"); + getConfig().addDefault("HueRegions.demosound", "255_0_0_254"); + getConfig().options().copyDefaults(true); + saveConfig(); + + Bukkit.getLogger().info("[MCTPAudio] Connecting with socket..."); + client = new Client("ws://173.249.31.58:8166"); + client.connect(); + + Bukkit.getLogger().info("[MCTPAudio] Loading commands and events..."); + commandManager = new PaperCommandManager(this); + commandManager.enableUnstableAPI("help"); + + commandManager.registerCommand(new MCTPAudioCMD()); + + Bukkit.getPluginManager().registerEvents(new WGListener(), this); + Bukkit.getPluginManager().registerEvents(new LogoutListener(), this); + + Bukkit.getLogger().info("[MCTPAudio] Loading playlist..."); + playlist = new Playlist(); + + Bukkit.getLogger().info("[MCTPAudio] Plugin is enabled!"); + } + + public void onDisable() { + client.disconnect(); + instance = null; + Bukkit.getLogger().info("[MCTPAudio] Plugin is disabled!"); + } + + private boolean setupPlugins() { + if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null) { + WGManager.setWorldGuard(getServer().getPluginManager().getPlugin("WorldGuard")); + return true; + } + return false; + } + + public static Plugin getPlugin() { + return instance; + } + + public static Client getClient() { + return client; + } + + public static Playlist getPlaylist() { + return playlist; + } +} diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/api/AudioType.java b/src/main/java/nl/sbdeveloper/mctpaudio/api/AudioType.java new file mode 100644 index 0000000..effe790 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/api/AudioType.java @@ -0,0 +1,11 @@ +package nl.sbdeveloper.mctpaudio.api; + +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + +public enum AudioType { + MUSIC, SFX, RADIO +} diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/api/HueType.java b/src/main/java/nl/sbdeveloper/mctpaudio/api/HueType.java new file mode 100644 index 0000000..a28a968 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/api/HueType.java @@ -0,0 +1,11 @@ +package nl.sbdeveloper.mctpaudio.api; + +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + +public enum HueType { + LEFT, MID, RIGHT, ALL +} diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/api/events/AudioConnectionUpdateEvent.java b/src/main/java/nl/sbdeveloper/mctpaudio/api/events/AudioConnectionUpdateEvent.java new file mode 100644 index 0000000..5f8ad92 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/api/events/AudioConnectionUpdateEvent.java @@ -0,0 +1,43 @@ +package nl.sbdeveloper.mctpaudio.api.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + +public class AudioConnectionUpdateEvent extends Event { + private static final HandlerList handlers = new HandlerList(); + private final Player player; + private final boolean connected; + + public AudioConnectionUpdateEvent(@NotNull Player who, boolean connected) { + super(true); + this.player = who; + this.connected = connected; + } + + public Player getPlayer() { + return player; + } + + public boolean isConnected() { + return connected; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return handlers; + } + + @NotNull + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/src/main/java/me/mctp/api/maps/SongList.java b/src/main/java/nl/sbdeveloper/mctpaudio/api/maps/SongList.java similarity index 69% rename from src/main/java/me/mctp/api/maps/SongList.java rename to src/main/java/nl/sbdeveloper/mctpaudio/api/maps/SongList.java index 0ce4e11..e27c21f 100644 --- a/src/main/java/me/mctp/api/maps/SongList.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/api/maps/SongList.java @@ -1,6 +1,13 @@ -package me.mctp.api.maps; +package nl.sbdeveloper.mctpaudio.api.maps; -import java.util.*; +import java.util.ArrayList; +import java.util.Random; + +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ /** * An {@link ArrayList} with shuffle support. diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/commands/MCTPAudioCMD.java b/src/main/java/nl/sbdeveloper/mctpaudio/commands/MCTPAudioCMD.java new file mode 100644 index 0000000..28eac84 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/commands/MCTPAudioCMD.java @@ -0,0 +1,188 @@ +package nl.sbdeveloper.mctpaudio.commands; + +import co.aikar.commands.BaseCommand; +import co.aikar.commands.CommandHelp; +import co.aikar.commands.annotation.*; +import nl.sbdeveloper.mctpaudio.MCTPAudio; +import nl.sbdeveloper.mctpaudio.api.AudioType; +import nl.sbdeveloper.mctpaudio.api.HueType; +import nl.sbdeveloper.mctpaudio.managers.PinManager; +import nl.sbdeveloper.mctpaudio.utils.HeadUtil; +import nl.sbdeveloper.mctpaudio.utils.SpigotPlayerSelector; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.json.simple.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + +@CommandAlias("mctpaudio") +@CommandPermission("mctp.audio") +public class MCTPAudioCMD extends BaseCommand { + @Default + @HelpCommand + public void onHelp(CommandSender sender, CommandHelp help) { + help.showHelp(); + } + + @Subcommand("toggleradio") + @Description("") + public void toggleRadio(CommandSender sender) { + if (MCTPAudio.getPlaylist().isRunning()) { + MCTPAudio.getPlaylist().stop(); + sender.sendMessage(ChatColor.GRAY + "De auto radio is stopgezet. Zodra het huidige nummer is afgelopen, gebeurt er niks meer."); + } else { + MCTPAudio.getPlaylist().start(); + sender.sendMessage(ChatColor.GRAY + "De auto radio is weer gestart."); + } + } + + @Subcommand("addsong") + @Description("") + public void onAddSong(CommandSender sender, String url) { + List urls = MCTPAudio.getPlugin().getConfig().getStringList("RadioSongs"); + urls.add(url); + MCTPAudio.getPlugin().getConfig().set("RadioSongs", urls); + MCTPAudio.getPlugin().saveConfig(); + MCTPAudio.getPlaylist().addSong(url); + sender.sendMessage(ChatColor.GRAY + "Nummer toegevoegd aan de lijst."); + } + + @Subcommand("play") + @Description("") + public void onPlay(CommandSender sender, String selector, AudioType type, String url) { + ArrayList players = new ArrayList<>(); + 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."); + return; + } + + players.add(target); + } else { + SpigotPlayerSelector sel = new SpigotPlayerSelector(selector); + 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("-", "")); + MCTPAudio.getClient().sendData(data); + } + + sender.sendMessage(ChatColor.GRAY + "Gestart met afspelen!"); + } + + @Subcommand("hue") + @Description("") + public void onHue(CommandSender sender, String selector, int r, int g, int b, HueType type, @Optional Integer brightness) { + if (brightness != null && (brightness < 0 || brightness > 254)) { + sender.sendMessage(ChatColor.GRAY.toString() + brightness + " is geen correcte brightness."); + return; + } + + ArrayList players = new ArrayList<>(); + 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."); + 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 = r + "_" + g + "_" + b + "_" + type.name(); + if (brightness != null) data += "_" + brightness; + + MCTPAudio.getPlugin().getConfig().set("HueRegions." + regionID, data); + MCTPAudio.getPlugin().saveConfig(); + } + + JSONObject data; + for (Player p : players) { + data = new JSONObject(); + + if (!PinManager.hasPin(p.getUniqueId())) continue; + + data.put("task", "HUE"); + data.put("rgb", r + ":" + g + ":" + b); + data.put("type", type.name()); + if (brightness != null) data.put("brightness", brightness); + data.put("uuid", p.getUniqueId().toString().replace("-", "")); + MCTPAudio.getClient().sendData(data); + } + + sender.sendMessage(ChatColor.GRAY + "Indien de speler(s) is/zijn verbonden met Philips Hue, is de kleur veranderd."); + } + + @Subcommand("setregion") + @Description("") + public void onSetRegion(CommandSender sender, String regionName, String url) { + MCTPAudio.getPlugin().getConfig().set("Regions." + regionName, url); + MCTPAudio.getPlugin().saveConfig(); + + sender.sendMessage(ChatColor.GRAY + "De region zal vanaf nu muziek afspelen."); + } + +// @Subcommand("sethueregion") +// @Description("") +// public void onSetHueRegion(CommandSender sender, String regionName, String url) { +// MCTPAudio.getPlugin().getConfig().set("HueRegions." + regionName, url); +// MCTPAudio.getPlugin().saveConfig(); +// +// sender.sendMessage(ChatColor.GRAY + "De region zal vanaf nu licht aanpassen."); +// } + + @Subcommand("stop") + @Description("") + public void onStop(CommandSender sender, String selector) { + ArrayList players = new ArrayList<>(); + 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."); + return; + } + + players.add(target); + } else { + SpigotPlayerSelector sel = new SpigotPlayerSelector(selector); + players.addAll(sel.getPlayers(sender)); + } + + JSONObject data; + for (Player p : players) { + data = new JSONObject(); + + if (!PinManager.hasPin(p.getUniqueId())) continue; + + data.put("task", "STOP"); + data.put("uuid", p.getUniqueId().toString().replace("-", "")); + MCTPAudio.getClient().sendData(data); + } + + sender.sendMessage(ChatColor.GRAY + "Gestopt met afspelen!"); + } +} diff --git a/src/main/java/me/mctp/listener/LogoutListener.java b/src/main/java/nl/sbdeveloper/mctpaudio/listener/LogoutListener.java similarity index 55% rename from src/main/java/me/mctp/listener/LogoutListener.java rename to src/main/java/nl/sbdeveloper/mctpaudio/listener/LogoutListener.java index a009c20..8757133 100644 --- a/src/main/java/me/mctp/listener/LogoutListener.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/listener/LogoutListener.java @@ -1,17 +1,23 @@ -package me.mctp.listener; +package nl.sbdeveloper.mctpaudio.listener; -import me.mctp.Main; +import nl.sbdeveloper.mctpaudio.MCTPAudio; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; import org.json.simple.JSONObject; +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + 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("-", "")); - Main.getClient().sendData(data); + MCTPAudio.getClient().sendData(data); } } diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/listener/WGListener.java b/src/main/java/nl/sbdeveloper/mctpaudio/listener/WGListener.java new file mode 100644 index 0000000..df6e0c1 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/listener/WGListener.java @@ -0,0 +1,126 @@ +package nl.sbdeveloper.mctpaudio.listener; + +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import nl.sbdeveloper.mctpaudio.MCTPAudio; +import nl.sbdeveloper.mctpaudio.managers.PinManager; +import nl.sbdeveloper.mctpaudio.managers.WGManager; +import net.raidstone.wgevents.events.RegionsEnteredEvent; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.json.simple.JSONObject; + +import java.util.*; +import java.util.stream.Collectors; + +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + +public class WGListener implements Listener { + /** + * Music detection + */ + @EventHandler + public void onMove(PlayerMoveEvent e) { + handlePlayerMovement(e.getPlayer(), e.getFrom(), e.getTo()); + } + + @EventHandler + public void onTeleport(PlayerTeleportEvent e) { + handlePlayerMovement(e.getPlayer(), e.getFrom(), e.getTo()); + } + + private void handlePlayerMovement(Player player, Location from, Location to) { + if (to == null || from.getWorld() == null || to.getWorld() == null) return; + + if (from.getBlockX() != to.getBlockX() || from.getBlockY() != to.getBlockY() || from.getBlockZ() != to.getBlockZ()) { + Set list = MCTPAudio.getPlugin().getConfig().getConfigurationSection("Regions").getKeys(false); + + if (!PinManager.hasPin(Objects.requireNonNull(player).getUniqueId())) return; + + List fromRegions = WGManager.getRegionsIn(from).stream().map(ProtectedRegion::getId).collect(Collectors.toList()); + List toRegions = WGManager.getRegionsIn(to).stream().map(ProtectedRegion::getId).collect(Collectors.toList()); + + if ((Collections.disjoint(list, fromRegions) && !Collections.disjoint(list, toRegions)) || (!Collections.disjoint(list, fromRegions) && !Collections.disjoint(list, toRegions))) { + //Walked in a region + + if (!Collections.disjoint(list, fromRegions) && !Collections.disjoint(list, toRegions)) { + Optional name = fromRegions.stream().filter(list::contains).findFirst(); + Optional name2 = toRegions.stream().filter(list::contains).findFirst(); + + if (name.isPresent() && name2.isPresent() && name.get().equals(name2.get())) + return; //Beide heeft een region, en dat is dezelfde. + + if (name.isPresent() && name2.isPresent()) { + String regionURL = MCTPAudio.getPlugin().getConfig().getString("Regions." + name.get()); + String regionURL2 = MCTPAudio.getPlugin().getConfig().getString("Regions." + name2.get()); + + if (regionURL.equals(regionURL2)) + return; //Beide heeft een region, niet dezelfde, maar wel met dezelfde muziek. + } + } + + Optional name = toRegions.stream().filter(list::contains).findFirst(); + if (!name.isPresent()) return; + String regionURL = MCTPAudio.getPlugin().getConfig().getString("Regions." + name.get()); + + JSONObject data = new JSONObject(); + data.put("task", "MUSIC"); + data.put("path", regionURL); + data.put("uuid", player.getUniqueId().toString().replace("-", "")); + MCTPAudio.getClient().sendData(data); + } else if (!Collections.disjoint(list, fromRegions) && Collections.disjoint(list, toRegions)) { + //Not in a region, stop... + JSONObject data = new JSONObject(); + data.put("task", "MUSIC"); + data.put("path", ""); + data.put("uuid", player.getUniqueId().toString().replace("-", "")); + MCTPAudio.getClient().sendData(data); + } + } + } + + /** + * Hue detection + */ + @EventHandler + public void onRegionEnter(RegionsEnteredEvent e) { + if (e.getPlayer() == null) return; + + Set list2 = MCTPAudio.getPlugin().getConfig().getConfigurationSection("HueRegions").getKeys(false); + + if (!Collections.disjoint(list2, e.getRegionsNames())) { + //One element is the same -> In a region + + Optional name = e.getRegionsNames().stream().filter(list2::contains).findFirst(); + if (!name.isPresent()) return; + String configData = MCTPAudio.getPlugin().getConfig().getString("HueRegions." + name.get()); + + if (configData == null) return; + String[] configDataSplit = configData.split("_"); + + int r = Integer.parseInt(configDataSplit[0]); + int g = Integer.parseInt(configDataSplit[1]); + int b = Integer.parseInt(configDataSplit[2]); + String type = configDataSplit[3]; + Integer brightness = null; + if (configDataSplit.length == 5) brightness = Integer.parseInt(configDataSplit[4]); + + if (!PinManager.hasPin(e.getPlayer().getUniqueId())) return; + + JSONObject data = new JSONObject(); + data.put("task", "HUE"); + data.put("rgb", r + ":" + g + ":" + b); + data.put("type", type); + if (brightness != null) data.put("brightness", brightness); + data.put("uuid", e.getPlayer().getUniqueId().toString().replace("-", "")); + MCTPAudio.getClient().sendData(data); + } + } +} diff --git a/src/main/java/me/mctp/managers/PinManager.java b/src/main/java/nl/sbdeveloper/mctpaudio/managers/PinManager.java similarity index 84% rename from src/main/java/me/mctp/managers/PinManager.java rename to src/main/java/nl/sbdeveloper/mctpaudio/managers/PinManager.java index b40631a..0d5d79c 100644 --- a/src/main/java/me/mctp/managers/PinManager.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/managers/PinManager.java @@ -1,9 +1,15 @@ -package me.mctp.managers; +package nl.sbdeveloper.mctpaudio.managers; import java.security.SecureRandom; import java.util.UUID; import java.util.WeakHashMap; +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + public class PinManager { private static final WeakHashMap pins = new WeakHashMap<>(); @@ -11,7 +17,6 @@ public class PinManager { * Get the pin of a player * * @param pUUID The player UUID - * * @return The pin */ public static String getPIN(UUID pUUID) { @@ -36,7 +41,6 @@ public class PinManager { * Check if a player has a pin * * @param pUUID The player UUID - * * @return The pin */ public static boolean hasPin(UUID pUUID) { @@ -47,8 +51,7 @@ public class PinManager { * Check if the pin is correct * * @param pUUID The player UUID - * @param pin The pin - * + * @param pin The pin * @return true/false */ public static boolean checkPin(UUID pUUID, String pin) { diff --git a/src/main/java/me/mctp/managers/WGManager.java b/src/main/java/nl/sbdeveloper/mctpaudio/managers/WGManager.java similarity index 94% rename from src/main/java/me/mctp/managers/WGManager.java rename to src/main/java/nl/sbdeveloper/mctpaudio/managers/WGManager.java index b2a2049..c8f0231 100644 --- a/src/main/java/me/mctp/managers/WGManager.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/managers/WGManager.java @@ -1,4 +1,4 @@ -package me.mctp.managers; +package nl.sbdeveloper.mctpaudio.managers; import com.sk89q.worldedit.IncompleteRegionException; import com.sk89q.worldedit.LocalSession; @@ -32,6 +32,12 @@ import java.util.Map; import java.util.Map.Entry; import java.util.UUID; +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + /** * WorldGuard class to make the usage of WorldGuard easy. This is the 1.14.x version! * @@ -98,7 +104,8 @@ public class WGManager { RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(loc.getWorld())); - for (ProtectedRegion protectedRegion : rm.getApplicableRegions(BukkitAdapter.asBlockVector(loc))) inRegions.add(protectedRegion); + for (ProtectedRegion protectedRegion : rm.getApplicableRegions(BukkitAdapter.asBlockVector(loc))) + inRegions.add(protectedRegion); return inRegions; } @@ -108,7 +115,7 @@ public class WGManager { ApplicableRegionSet mogreg = rm.getApplicableRegions(BukkitAdapter.asBlockVector(loc)); for (ProtectedRegion mogregion : mogreg) { for (String strgo : str) { - if(strgo.equalsIgnoreCase(mogregion.getId())) { + if (strgo.equalsIgnoreCase(mogregion.getId())) { return mogregion; } } @@ -122,7 +129,7 @@ public class WGManager { RegionManager rm = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(loc.getWorld())); ApplicableRegionSet mogreg = rm.getApplicableRegions(BukkitAdapter.asBlockVector(loc)); for (ProtectedRegion mogregion : mogreg) { - if(str.equalsIgnoreCase(mogregion.getId())) { + if (str.equalsIgnoreCase(mogregion.getId())) { return mogregion; } } @@ -183,8 +190,7 @@ public class WGManager { rm.save(); return true; - } - catch (StorageException e) { + } catch (StorageException e) { return false; } } @@ -201,8 +207,7 @@ public class WGManager { rm.save(); return true; - } - catch (StorageException e) { + } catch (StorageException e) { return false; } } @@ -219,8 +224,7 @@ public class WGManager { rm.save(); return true; - } - catch (StorageException e) { + } catch (StorageException e) { return false; } } @@ -237,8 +241,7 @@ public class WGManager { rm.save(); return true; - } - catch (StorageException e) { + } catch (StorageException e) { return false; } } @@ -287,8 +290,7 @@ public class WGManager { rm.save(); return true; - } - catch (StorageException e) { + } catch (StorageException e) { return false; } } diff --git a/src/main/java/me/mctp/radio/Playlist.java b/src/main/java/nl/sbdeveloper/mctpaudio/radio/Playlist.java similarity index 78% rename from src/main/java/me/mctp/radio/Playlist.java rename to src/main/java/nl/sbdeveloper/mctpaudio/radio/Playlist.java index 8d0da92..b16b9f1 100644 --- a/src/main/java/me/mctp/radio/Playlist.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/radio/Playlist.java @@ -1,11 +1,11 @@ -package me.mctp.radio; +package nl.sbdeveloper.mctpaudio.radio; import com.mpatric.mp3agic.InvalidDataException; import com.mpatric.mp3agic.UnsupportedTagException; -import me.mctp.Main; -import me.mctp.api.maps.SongList; -import me.mctp.managers.PinManager; -import me.mctp.utils.HeadUtil; +import nl.sbdeveloper.mctpaudio.MCTPAudio; +import nl.sbdeveloper.mctpaudio.api.maps.SongList; +import nl.sbdeveloper.mctpaudio.managers.PinManager; +import nl.sbdeveloper.mctpaudio.utils.HeadUtil; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitTask; @@ -13,6 +13,12 @@ import org.json.simple.JSONObject; import java.io.IOException; +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + public class Playlist { private SongList playList = new SongList<>(); private final SongList playedList = new SongList<>(); @@ -32,11 +38,11 @@ public class Playlist { * Start this playlist */ public void start() { - for (String URL : Main.getPlugin().getConfig().getStringList("RadioSongs")) { + for (String URL : MCTPAudio.getPlugin().getConfig().getStringList("RadioSongs")) { addSong(URL); } - Bukkit.getScheduler().runTaskAsynchronously(Main.getPlugin(), this::nextSong); + Bukkit.getScheduler().runTaskAsynchronously(MCTPAudio.getPlugin(), this::nextSong); running = true; } @@ -57,6 +63,7 @@ public class Playlist { /** * Add a song by the url + * * @param url The song url (mp3) */ public void addSong(String url) { @@ -92,7 +99,7 @@ public class Playlist { data.put("task", "RADIO"); data.put("path", nextURL); data.put("uuid", p.getUniqueId().toString().replace("-", "")); - Main.getClient().sendData(data); + MCTPAudio.getClient().sendData(data); } int ticks; @@ -110,9 +117,9 @@ public class Playlist { return; } - Bukkit.getLogger().info("Started song with duration: " + ticks/20 + " sec."); + Bukkit.getLogger().info("Started song with duration: " + ticks / 20 + " sec."); - currentTimer = Bukkit.getScheduler().runTaskLaterAsynchronously(Main.getPlugin(), () -> { + currentTimer = Bukkit.getScheduler().runTaskLaterAsynchronously(MCTPAudio.getPlugin(), () -> { currentTimer = null; nextSong(); }, ticks); diff --git a/src/main/java/me/mctp/socket/Client.java b/src/main/java/nl/sbdeveloper/mctpaudio/socket/Client.java similarity index 69% rename from src/main/java/me/mctp/socket/Client.java rename to src/main/java/nl/sbdeveloper/mctpaudio/socket/Client.java index b2f3189..940306b 100644 --- a/src/main/java/me/mctp/socket/Client.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/socket/Client.java @@ -1,8 +1,10 @@ -package me.mctp.socket; +package nl.sbdeveloper.mctpaudio.socket; -import me.mctp.commands.MCTPAudioCMD; -import me.mctp.Main; -import me.mctp.managers.PinManager; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import nl.sbdeveloper.mctpaudio.MCTPAudio; +import nl.sbdeveloper.mctpaudio.api.events.AudioConnectionUpdateEvent; +import nl.sbdeveloper.mctpaudio.managers.PinManager; +import nl.sbdeveloper.mctpaudio.managers.WGManager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.java_websocket.client.WebSocketClient; @@ -11,23 +13,44 @@ import org.json.simple.JSONObject; import java.net.URI; import java.net.URISyntaxException; +import java.util.List; +import java.util.Optional; +import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; + +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ public class Client { - private String url; + private final String url; + private int taskID = 0; private int controlID = 0; + private WebSocketClient wsc; + private boolean connected = false; + /** + * Construct a new client + * + * @param url The URL to connect to + */ public Client(String url) { this.url = url; } + /** + * Connect to the websocket + */ public void connect() { if (!this.connected) { this.connected = true; - this.controlID = Bukkit.getScheduler().runTaskTimer(Main.getPlugin(), () -> { + this.controlID = Bukkit.getScheduler().runTaskTimer(MCTPAudio.getPlugin(), () -> { if (!this.connected) { Bukkit.getScheduler().cancelTask(this.controlID); this.controlID = 0; @@ -48,7 +71,8 @@ public class Client { this.wsc = new WebSocketClient(uri) { @Override - public void onOpen(ServerHandshake serverHandshake) {} + public void onOpen(ServerHandshake serverHandshake) { + } @Override public void onMessage(String s) { @@ -73,7 +97,21 @@ public class Client { Player p = Bukkit.getPlayer(pUUID); if (p != null && p.isOnline()) { - p.sendMessage(MCTPAudioCMD.prefix + "You are now connected with the audioclient."); + AudioConnectionUpdateEvent event = new AudioConnectionUpdateEvent(p, true); + Bukkit.getPluginManager().callEvent(event); + + List regions = WGManager.getRegionsIn(p.getLocation()).stream().map(ProtectedRegion::getId).collect(Collectors.toList()); + Set list = MCTPAudio.getPlugin().getConfig().getConfigurationSection("Regions").getKeys(false); + Optional regionName = regions.stream().filter(list::contains).findFirst(); + regionName.ifPresent(name -> { + String regionURL = MCTPAudio.getPlugin().getConfig().getString("Regions." + name); + + JSONObject data = new JSONObject(); + data.put("task", "MUSIC"); + data.put("path", regionURL); + data.put("uuid", p.getUniqueId().toString().replace("-", "")); + MCTPAudio.getClient().sendData(data); + }); } JSONObject reply = new JSONObject(); @@ -88,7 +126,8 @@ public class Client { UUID pUUID = JSONUtil.formatFromInput(uuid); Player p = Bukkit.getPlayer(pUUID); if (p != null && p.isOnline()) { - p.sendMessage(MCTPAudioCMD.prefix + "You are now disconnected from the audioclient."); + AudioConnectionUpdateEvent event = new AudioConnectionUpdateEvent(p, false); + Bukkit.getPluginManager().callEvent(event); } } } @@ -109,7 +148,7 @@ public class Client { this.wsc.connect(); if (this.taskID == 0) { - this.taskID = Bukkit.getScheduler().runTaskTimerAsynchronously(Main.getPlugin(), () -> { + this.taskID = Bukkit.getScheduler().runTaskTimerAsynchronously(MCTPAudio.getPlugin(), () -> { if (Client.this.wsc != null && Client.this.wsc.isOpen()) { Client.this.wsc.send("__PING__"); } else { @@ -129,6 +168,9 @@ public class Client { } } + /** + * Disconnect from socket + */ public void disconnect() { if (this.wsc != null) { this.wsc.closeConnection(404, "Disconnected from socket"); diff --git a/src/main/java/me/mctp/socket/JSONUtil.java b/src/main/java/nl/sbdeveloper/mctpaudio/socket/JSONUtil.java similarity index 70% rename from src/main/java/me/mctp/socket/JSONUtil.java rename to src/main/java/nl/sbdeveloper/mctpaudio/socket/JSONUtil.java index 4fbb6cf..831b518 100644 --- a/src/main/java/me/mctp/socket/JSONUtil.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/socket/JSONUtil.java @@ -1,4 +1,4 @@ -package me.mctp.socket; +package nl.sbdeveloper.mctpaudio.socket; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; @@ -6,15 +6,22 @@ import org.json.simple.parser.ParseException; import java.util.UUID; +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + public class JSONUtil { public static JSONObject parse(String string) { try { JSONParser parser = new JSONParser(); return (JSONObject) parser.parse(string); - } catch (ParseException ignored) { } + } catch (ParseException ignored) { + } return null; } - + public static String getValue(JSONObject object, String string) { if (object != null && !object.isEmpty()) { Object obj = object.get(string); @@ -25,14 +32,14 @@ public class JSONUtil { return null; } - public static UUID formatFromInput(String uuid) throws IllegalArgumentException{ - if(uuid == null) throw new IllegalArgumentException(); + public static UUID formatFromInput(String uuid) throws IllegalArgumentException { + if (uuid == null) throw new IllegalArgumentException(); uuid = uuid.trim(); return uuid.length() == 32 ? fromTrimmed(uuid.replaceAll("-", "")) : UUID.fromString(uuid); } - public static UUID fromTrimmed(String trimmedUUID) throws IllegalArgumentException{ - if(trimmedUUID == null) throw new IllegalArgumentException(); + public static UUID fromTrimmed(String trimmedUUID) throws IllegalArgumentException { + if (trimmedUUID == null) throw new IllegalArgumentException(); StringBuilder builder = new StringBuilder(trimmedUUID.trim()); /* Backwards adding to avoid index adjustments */ try { @@ -40,7 +47,7 @@ public class JSONUtil { builder.insert(16, "-"); builder.insert(12, "-"); builder.insert(8, "-"); - } catch (StringIndexOutOfBoundsException e){ + } catch (StringIndexOutOfBoundsException e) { throw new IllegalArgumentException(); } diff --git a/src/main/java/me/mctp/utils/HeadUtil.java b/src/main/java/nl/sbdeveloper/mctpaudio/utils/HeadUtil.java similarity index 88% rename from src/main/java/me/mctp/utils/HeadUtil.java rename to src/main/java/nl/sbdeveloper/mctpaudio/utils/HeadUtil.java index 65bcaab..e9d8638 100644 --- a/src/main/java/me/mctp/utils/HeadUtil.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/utils/HeadUtil.java @@ -1,4 +1,4 @@ -package me.mctp.utils; +package nl.sbdeveloper.mctpaudio.utils; import com.mpatric.mp3agic.InvalidDataException; import com.mpatric.mp3agic.Mp3File; @@ -12,6 +12,15 @@ import java.io.InputStream; import java.net.URL; import java.net.URLConnection; +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + +/** + * Read the head of a MP3 file. + */ public class HeadUtil { public static String getArgument(String selector, String key) { StringBuilder result = new StringBuilder(); diff --git a/src/main/java/me/mctp/utils/SpigotPlayerSelector.java b/src/main/java/nl/sbdeveloper/mctpaudio/utils/SpigotPlayerSelector.java similarity index 93% rename from src/main/java/me/mctp/utils/SpigotPlayerSelector.java rename to src/main/java/nl/sbdeveloper/mctpaudio/utils/SpigotPlayerSelector.java index 1a1ba43..0271b63 100644 --- a/src/main/java/me/mctp/utils/SpigotPlayerSelector.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/utils/SpigotPlayerSelector.java @@ -1,10 +1,9 @@ -package me.mctp.utils; +package nl.sbdeveloper.mctpaudio.utils; import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import me.mctp.managers.WGManager; +import nl.sbdeveloper.mctpaudio.managers.WGManager; import org.bukkit.Bukkit; import org.bukkit.Location; - import org.bukkit.command.BlockCommandSender; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -14,6 +13,12 @@ import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; +/* Copyright (C) McThemeParks - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Stijn Bannink , July 2020 + */ + public class SpigotPlayerSelector { private final String selector; @@ -54,16 +59,13 @@ public class SpigotPlayerSelector { .filter(player -> distance > player.getLocation().distance(standPoint)) .get(); players.add(nearest); - } - - else { + } else { Bukkit.getOnlinePlayers().stream() .filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName())) .min(Comparator.comparing(player -> player.getLocation().distance(standPoint))) .ifPresent(players::add); } - } - else if (selector.startsWith("@a")) { + } else if (selector.startsWith("@a")) { //everyone Location standPoint = getLocation(commandSender); @@ -87,20 +89,16 @@ public class SpigotPlayerSelector { .filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName())) .filter(player -> distance > player.getLocation().distance(standPoint)) .collect(Collectors.toList())); - } - - else { + } else { players.addAll(Bukkit.getOnlinePlayers().stream() .filter(player -> player.getLocation().getWorld().getName().equals(standPoint.getWorld().getName())) .collect(Collectors.toList())); } - } - else if (selector.length() <= 16) { + } else if (selector.length() <= 16) { //player Player player = Bukkit.getPlayer(selector); if (player != null) players.add(player); - } - else { + } else { //you fucked it commandSender.sendMessage("Invalid player query. Try something like @a, @p, username or other arguments."); } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 5fc90c5..240ea6d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,18 +1,8 @@ name: MCTPAudio version: ${project.version} -main: me.mctp.Main +main: nl.sbdeveloper.mctpaudio.MCTPAudio api-version: 1.16 -authors: [ SBDeveloper ] depend: [ WorldGuard ] -description: Copyright MaybeFromNL & SBDeveloper - -commands: - mctpaudio: - description: Main command - audio: - description: Connect command - -permissions: - mctp.admin: - description: Admin commands - default: op +authors: [ SBDeveloper ] +description: The audio plugin of MCThemeParks! +website: https://mcthemeparks.eu