From 2deeee7971f920ee6ed1492534ef80c947a3c505 Mon Sep 17 00:00:00 2001 From: SBDeveloper Date: Thu, 3 Apr 2025 22:21:14 +0200 Subject: [PATCH] Converted to generic ThemeParkAudio plugin. --- .forgejo/workflows/build.yaml | 29 ++++++ .github/dependabot.yml | 11 --- README.md | 5 +- pom.xml | 34 ++++--- .../{MCTPAudio.java => ThemeParkAudio.java} | 54 ++++------- .../sbdeveloper/mctpaudio/api/AudioType.java | 16 ++-- .../nl/sbdeveloper/mctpaudio/api/HueType.java | 11 --- .../mctpaudio/api/LightRegion.java | 5 + .../events/AudioConnectionUpdateEvent.java | 17 +--- .../mctpaudio/api/maps/SongList.java | 8 +- .../{MCTPAudioCMD.java => TPAudioCMD.java} | 93 +++++++++---------- .../mctpaudio/listener/LogoutListener.java | 10 +- .../listener/PlayInRegionHandler.java | 67 ++----------- .../mctpaudio/listener/WGListener.java | 69 ++++---------- .../mctpaudio/managers/PinManager.java | 8 -- .../mctpaudio/managers/WGManager.java | 16 ++-- .../sbdeveloper/mctpaudio/radio/Playlist.java | 51 +++------- .../sbdeveloper/mctpaudio/socket/Client.java | 48 +++++----- .../mctpaudio/socket/JSONUtil.java | 8 +- .../socket/messages/AbstractMessage.java | 51 ++++++++++ .../socket/messages/AudioMessage.java | 40 ++++++++ .../messages/AuthenticationMessage.java | 25 +++++ .../socket/messages/LightMessage.java | 54 +++++++++++ .../socket/messages/LogoutMessage.java | 14 +++ .../socket/messages/MessageTask.java | 5 + .../socket/messages/StopAudioMessage.java | 13 +++ .../utils/{MainUtil.java => DiscordUtil.java} | 5 +- .../sbdeveloper/mctpaudio/utils/HeadUtil.java | 8 +- .../mctpaudio/utils/SpigotPlayerSelector.java | 8 +- src/main/resources/config.yml | 8 ++ src/main/resources/plugin.yml | 2 +- 31 files changed, 425 insertions(+), 368 deletions(-) create mode 100644 .forgejo/workflows/build.yaml delete mode 100644 .github/dependabot.yml rename src/main/java/nl/sbdeveloper/mctpaudio/{MCTPAudio.java => ThemeParkAudio.java} (50%) delete mode 100644 src/main/java/nl/sbdeveloper/mctpaudio/api/HueType.java create mode 100644 src/main/java/nl/sbdeveloper/mctpaudio/api/LightRegion.java rename src/main/java/nl/sbdeveloper/mctpaudio/commands/{MCTPAudioCMD.java => TPAudioCMD.java} (64%) create mode 100644 src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AbstractMessage.java create mode 100644 src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AudioMessage.java create mode 100644 src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AuthenticationMessage.java create mode 100644 src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/LightMessage.java create mode 100644 src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/LogoutMessage.java create mode 100644 src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/MessageTask.java create mode 100644 src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/StopAudioMessage.java rename src/main/java/nl/sbdeveloper/mctpaudio/utils/{MainUtil.java => DiscordUtil.java} (91%) create mode 100644 src/main/resources/config.yml diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml new file mode 100644 index 0000000..80ea26e --- /dev/null +++ b/.forgejo/workflows/build.yaml @@ -0,0 +1,29 @@ +name: Java CI +on: [push] + +jobs: + build: + name: Build + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: https://gitea.com/actions/checkout@v4 + + - name: Set up JDK 21 + uses: https://gitea.com/actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: 21 + + - name: Set up Maven + uses: https://gitea.com/actions/setup-maven@v5 + + - name: Build with Maven + run: mvn -B package --file pom.xml + + - name: Upload build artifacts + uses: https://gitea.com/actions/upload-artifact@v3 + with: + name: ThemeParkAudio + path: target \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 5b06320..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,11 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: "maven" # See documentation for possible values - directory: "/" # Location of package manifests - schedule: - interval: "daily" diff --git a/README.md b/README.md index 21f0a9d..2bc4190 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ -# McThemeParks Audio +# ThemePark Audio Plugin -This repository contains the official audio plugin of McThemeParks. -This plugin contains all the audio functions for the server. +The ThemePark Audio Plugin is a plugin for your for ThemePark Minecraft server that allows you to play audio files and control the lights of players from in the server. ## License diff --git a/pom.xml b/pom.xml index e7bdde1..c17df63 100644 --- a/pom.xml +++ b/pom.xml @@ -4,18 +4,18 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - me.mctp - MCTPAudio - 1.5-SNAPSHOT + tech.sbdevelopment + ThemeParkAudio + 1.6 jar - MCTPAudio + ThemeParkAudio - The audio plugin of McThemeParks! + Audio and light control via your Minecraft server! UTF-8 - https://mcthemeparks.com + https://sbdevelopment.tech/ @@ -37,7 +37,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.14.0 21 @@ -61,11 +61,11 @@ co.aikar.commands - nl.sbdeveloper.mctpaudio.libs.acf + tech.sbdevelopment.ThemeParkAudio.libs.acf co.aikar.locales - nl.sbdeveloper.mctpaudio.libs.locales + tech.sbdevelopment.ThemeParkAudio.libs.locales @@ -104,19 +104,19 @@ org.spigotmc spigot-api - 1.21.1-R0.1-SNAPSHOT + 1.21.5-R0.1-SNAPSHOT provided org.bukkit craftbukkit - 1.21.1-R0.1-SNAPSHOT + 1.21.5-R0.1-SNAPSHOT provided org.java-websocket Java-WebSocket - 1.5.7 + 1.6.0 com.mpatric @@ -144,13 +144,19 @@ com.bergerkiller.bukkit BKCommonLib - 1.21.1-v1 + 1.21.4-v1-SNAPSHOT provided com.bergerkiller.bukkit TrainCarts - 1.21.1-v1 + 1.21.4-v1-SNAPSHOT + provided + + + org.projectlombok + lombok + 1.18.38 provided diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/MCTPAudio.java b/src/main/java/nl/sbdeveloper/mctpaudio/ThemeParkAudio.java similarity index 50% rename from src/main/java/nl/sbdeveloper/mctpaudio/MCTPAudio.java rename to src/main/java/nl/sbdeveloper/mctpaudio/ThemeParkAudio.java index 4f72a24..8a3da09 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/MCTPAudio.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/ThemeParkAudio.java @@ -1,7 +1,8 @@ package nl.sbdeveloper.mctpaudio; import co.aikar.commands.PaperCommandManager; -import nl.sbdeveloper.mctpaudio.commands.MCTPAudioCMD; +import lombok.Getter; +import nl.sbdeveloper.mctpaudio.commands.TPAudioCMD; import nl.sbdeveloper.mctpaudio.listener.LogoutListener; import nl.sbdeveloper.mctpaudio.listener.WGListener; import nl.sbdeveloper.mctpaudio.managers.WGManager; @@ -11,59 +12,56 @@ 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 { +public final class ThemeParkAudio extends JavaPlugin { + @Getter private static Plugin instance; + @Getter private static PaperCommandManager commandManager; + @Getter private static Client client; + + @Getter private static Playlist playlist; public void onEnable() { - Bukkit.getLogger().info("[MCTPAudio] Loading..."); + Bukkit.getLogger().info("[ThemeParkAudio] Loading..."); if (!setupPlugins()) { - Bukkit.getLogger().severe("[MCTPAudio] WorldGuard not found! Disabling..."); + Bukkit.getLogger().severe("[ThemeParkAudio] WorldGuard not found! Disabling..."); getServer().getPluginManager().disablePlugin(this); return; } instance = this; - getConfig().addDefault("Regions.demosound", "https://www.mcthemeparks.com/musicupload/downloads/Berlin/kaad.mp3"); - getConfig().addDefault("HueRegions.demosound", "255_0_0_254"); getConfig().options().copyDefaults(true); - saveConfig(); + saveDefaultConfig(); - Bukkit.getLogger().info("[MCTPAudio] Connecting with socket..."); - client = new Client("ws://116.203.56.13:25564"); + Bukkit.getLogger().info("[ThemeParkAudio] Connecting with socket..."); + client = new Client(getConfig().getString("socketUrl")); client.connect(); - Bukkit.getLogger().info("[MCTPAudio] Loading commands and events..."); + Bukkit.getLogger().info("[ThemeParkAudio] Loading commands and events..."); commandManager = new PaperCommandManager(this); commandManager.enableUnstableAPI("help"); - commandManager.registerCommand(new MCTPAudioCMD()); + commandManager.registerCommand(new TPAudioCMD()); Bukkit.getPluginManager().registerEvents(new WGListener(), this); Bukkit.getPluginManager().registerEvents(new LogoutListener(), this); - Bukkit.getLogger().info("[MCTPAudio] Loading playlist..."); + Bukkit.getLogger().info("[ThemeParkAudio] Loading playlist..."); playlist = new Playlist(); - Bukkit.getLogger().info("[MCTPAudio] Plugin is enabled!"); + Bukkit.getLogger().info("[ThemeParkAudio] Plugin is enabled!"); } public void onDisable() { client.disconnect(); instance = null; - Bukkit.getLogger().info("[MCTPAudio] Plugin is disabled!"); + Bukkit.getLogger().info("[ThemeParkAudio] Plugin is disabled!"); } private boolean setupPlugins() { @@ -73,20 +71,4 @@ public final class MCTPAudio extends JavaPlugin { } return false; } - - public static Plugin getPlugin() { - return instance; - } - - public static Client getClient() { - return client; - } - - public static Playlist getPlaylist() { - return playlist; - } - - public static PaperCommandManager getCommandManager() { - return commandManager; - } } diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/api/AudioType.java b/src/main/java/nl/sbdeveloper/mctpaudio/api/AudioType.java index effe790..c21cb05 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/api/AudioType.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/api/AudioType.java @@ -1,11 +1,15 @@ 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 - */ +import nl.sbdeveloper.mctpaudio.socket.messages.MessageTask; public enum AudioType { - MUSIC, SFX, RADIO + MUSIC, SFX, RADIO; + + public MessageTask toMessageTask() { + return switch (this) { + case MUSIC -> MessageTask.MUSIC; + case SFX -> MessageTask.SFX; + case RADIO -> MessageTask.RADIO; + }; + } } diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/api/HueType.java b/src/main/java/nl/sbdeveloper/mctpaudio/api/HueType.java deleted file mode 100644 index a28a968..0000000 --- a/src/main/java/nl/sbdeveloper/mctpaudio/api/HueType.java +++ /dev/null @@ -1,11 +0,0 @@ -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/LightRegion.java b/src/main/java/nl/sbdeveloper/mctpaudio/api/LightRegion.java new file mode 100644 index 0000000..4693215 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/api/LightRegion.java @@ -0,0 +1,5 @@ +package nl.sbdeveloper.mctpaudio.api; + +public enum LightRegion { + 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 index 258f64c..206e41a 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/api/events/AudioConnectionUpdateEvent.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/api/events/AudioConnectionUpdateEvent.java @@ -1,20 +1,17 @@ package nl.sbdeveloper.mctpaudio.api.events; +import lombok.Getter; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; 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 implements Cancellable { private static final HandlerList handlers = new HandlerList(); + @Getter private final Player player; + @Getter private final boolean connected; private boolean cancelled = false; @@ -25,14 +22,6 @@ public class AudioConnectionUpdateEvent extends Event implements Cancellable { this.connected = connected; } - public Player getPlayer() { - return player; - } - - public boolean isConnected() { - return connected; - } - @NotNull @Override public HandlerList getHandlers() { diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/api/maps/SongList.java b/src/main/java/nl/sbdeveloper/mctpaudio/api/maps/SongList.java index cfd3cff..04a4bd8 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/api/maps/SongList.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/api/maps/SongList.java @@ -3,12 +3,6 @@ package nl.sbdeveloper.mctpaudio.api.maps; 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. * @@ -34,7 +28,7 @@ public class SongList extends ArrayList { */ public E getRandom() { int size = size(); - if (size <= 0) return null; + if (size == 0) return null; return get(r.nextInt(size())); } diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/commands/MCTPAudioCMD.java b/src/main/java/nl/sbdeveloper/mctpaudio/commands/TPAudioCMD.java similarity index 64% rename from src/main/java/nl/sbdeveloper/mctpaudio/commands/MCTPAudioCMD.java rename to src/main/java/nl/sbdeveloper/mctpaudio/commands/TPAudioCMD.java index ebaa0d4..7586c1a 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/commands/MCTPAudioCMD.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/commands/TPAudioCMD.java @@ -3,9 +3,9 @@ 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.ThemeParkAudio; import nl.sbdeveloper.mctpaudio.api.AudioType; -import nl.sbdeveloper.mctpaudio.api.HueType; +import nl.sbdeveloper.mctpaudio.api.LightRegion; import nl.sbdeveloper.mctpaudio.listener.PlayInRegionHandler; import nl.sbdeveloper.mctpaudio.managers.PinManager; import nl.sbdeveloper.mctpaudio.utils.HeadUtil; @@ -21,15 +21,9 @@ import java.util.ArrayList; 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 - */ - -@CommandAlias("mctpaudio") -@CommandPermission("mctp.audio") -public class MCTPAudioCMD extends BaseCommand { +@CommandAlias("tpaudio") +@CommandPermission("tpa.cmd") +public class TPAudioCMD extends BaseCommand { @Default @HelpCommand public void onHelp(CommandSender sender, CommandHelp help) { @@ -39,30 +33,30 @@ public class MCTPAudioCMD extends BaseCommand { @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."); + 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."); } else { - MCTPAudio.getPlaylist().start(); - sender.sendMessage(ChatColor.GRAY + "De auto radio is weer gestart."); + ThemeParkAudio.getPlaylist().start(); + sender.sendMessage(ChatColor.GRAY + "De automatische radio is weer gestart."); } } @Subcommand("addsong") @Description("") public void onAddSong(CommandSender sender, String url) { - List urls = MCTPAudio.getPlugin().getConfig().getStringList("RadioSongs"); + List urls = ThemeParkAudio.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."); + ThemeParkAudio.getPlugin().getConfig().set("radioSongs", urls); + ThemeParkAudio.getPlugin().saveConfig(); + ThemeParkAudio.getPlaylist().addSong(url); + sender.sendMessage(ChatColor.GRAY + "Nummer toegevoegd aan de automatische radio."); } @Subcommand("play") @Description("") public void onPlay(CommandSender sender, String selector, AudioType type, String url) { - ArrayList players = new ArrayList<>(); + List players = new ArrayList<>(); Player target = Bukkit.getPlayer(selector); if (target != null) { if (!PinManager.hasPin(target.getUniqueId())) { @@ -94,21 +88,21 @@ public class MCTPAudioCMD extends BaseCommand { data.put("task", type.name()); data.put("path", url); data.put("uuid", p.getUniqueId().toString().replace("-", "")); - MCTPAudio.getClient().sendData(data); + ThemeParkAudio.getClient().sendData(data); } sender.sendMessage(ChatColor.GRAY + "Gestart met afspelen!"); } - @Subcommand("hue") + @Subcommand("light") @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."); + 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."); return; } - ArrayList players = new ArrayList<>(); + List players = new ArrayList<>(); Player target = Bukkit.getPlayer(selector); if (target != null) { if (!PinManager.hasPin(target.getUniqueId())) { @@ -125,11 +119,10 @@ public class MCTPAudioCMD extends BaseCommand { //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; + String data = brightness + "_" + r + "_" + g + "_" + b + "_" + w + "_" + region.name(); - MCTPAudio.getPlugin().getConfig().set("HueRegions." + regionID, data); - MCTPAudio.getPlugin().saveConfig(); + ThemeParkAudio.getPlugin().getConfig().set("regions.light." + regionID, data); + ThemeParkAudio.getPlugin().saveConfig(); } JSONObject data; @@ -138,39 +131,39 @@ public class MCTPAudioCMD extends BaseCommand { 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("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("-", "")); - MCTPAudio.getClient().sendData(data); + ThemeParkAudio.getClient().sendData(data); } - sender.sendMessage(ChatColor.GRAY + "Indien de speler(s) is/zijn verbonden met Philips Hue, is de kleur veranderd."); + sender.sendMessage(ChatColor.GRAY + "Kleuren aangepast!"); } @Subcommand("setregion") @Description("") public void onSetRegion(CommandSender sender, String regionName, String url) { - MCTPAudio.getPlugin().getConfig().set("Regions." + regionName, url); - MCTPAudio.getPlugin().saveConfig(); + ThemeParkAudio.getPlugin().getConfig().set("regions.audio." + regionName, url); + ThemeParkAudio.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("sethueregion") + @Description("") + public void onSetHueRegion(CommandSender sender, String regionName, String url) { + ThemeParkAudio.getPlugin().getConfig().set("regions.light." + regionName, url); + ThemeParkAudio.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<>(); + List players = new ArrayList<>(); Player target = Bukkit.getPlayer(selector); if (target != null) { if (!PinManager.hasPin(target.getUniqueId())) { @@ -192,7 +185,7 @@ public class MCTPAudioCMD extends BaseCommand { data.put("task", "STOP"); data.put("uuid", p.getUniqueId().toString().replace("-", "")); - MCTPAudio.getClient().sendData(data); + ThemeParkAudio.getClient().sendData(data); } sender.sendMessage(ChatColor.GRAY + "Gestopt met afspelen!"); diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/listener/LogoutListener.java b/src/main/java/nl/sbdeveloper/mctpaudio/listener/LogoutListener.java index 8757133..db39341 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/listener/LogoutListener.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/listener/LogoutListener.java @@ -1,23 +1,17 @@ package nl.sbdeveloper.mctpaudio.listener; -import nl.sbdeveloper.mctpaudio.MCTPAudio; +import nl.sbdeveloper.mctpaudio.ThemeParkAudio; 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("-", "")); - MCTPAudio.getClient().sendData(data); + ThemeParkAudio.getClient().sendData(data); } } diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/listener/PlayInRegionHandler.java b/src/main/java/nl/sbdeveloper/mctpaudio/listener/PlayInRegionHandler.java index 4c43726..167e53d 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/listener/PlayInRegionHandler.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/listener/PlayInRegionHandler.java @@ -5,30 +5,23 @@ import com.mpatric.mp3agic.UnsupportedTagException; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import net.raidstone.wgevents.events.RegionEnteredEvent; import net.raidstone.wgevents.events.RegionLeftEvent; -import nl.sbdeveloper.mctpaudio.MCTPAudio; +import nl.sbdeveloper.mctpaudio.ThemeParkAudio; import nl.sbdeveloper.mctpaudio.api.AudioType; import nl.sbdeveloper.mctpaudio.api.events.AudioConnectionUpdateEvent; import nl.sbdeveloper.mctpaudio.managers.PinManager; import nl.sbdeveloper.mctpaudio.managers.WGManager; +import nl.sbdeveloper.mctpaudio.socket.messages.AudioMessage; import nl.sbdeveloper.mctpaudio.utils.HeadUtil; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.scheduler.BukkitRunnable; -import org.json.simple.JSONObject; import java.io.IOException; -import java.util.Iterator; import java.util.List; 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 - */ - /** * This class handles playing numbers in a region. * This will NOT be used for region much, only if you start playing music in a region with the @a[region=...] selector. @@ -47,7 +40,7 @@ public class PlayInRegionHandler implements Listener { this.players = players; load(); - Bukkit.getPluginManager().registerEvents(this, MCTPAudio.getPlugin()); + Bukkit.getPluginManager().registerEvents(this, ThemeParkAudio.getPlugin()); } /** @@ -71,34 +64,9 @@ public class PlayInRegionHandler implements Listener { cancel(); } } - }.runTaskTimer(MCTPAudio.getPlugin(), 0L, 1L); + }.runTaskTimer(ThemeParkAudio.getPlugin(), 0L, 1L); - Player p; - JSONObject data; - Iterator uuidS = players.iterator(); - while (uuidS.hasNext()) { - p = Bukkit.getPlayer(uuidS.next()); - if (p == null || !PinManager.hasPin(p.getUniqueId())) { - uuidS.remove(); - continue; - } - - data = new JSONObject(); - data.put("task", AudioType.SFX.name()); - data.put("path", url); - data.put("uuid", p.getUniqueId().toString().replace("-", "")); - data.put("play", false); - MCTPAudio.getClient().sendData(data); - } - - startForAll(); - } - - /** - * Starts the song for every player. - */ - private void startForAll() { - players.forEach(this::start); + AudioMessage.of(AudioType.SFX, url, true).send(players, PinManager::hasPin); } private void start(UUID pUUID) { @@ -109,20 +77,14 @@ public class PlayInRegionHandler implements Listener { * Starts the song for a Player. * @param pUUID The player to start it for. */ - private void start(UUID pUUID, int ms) { + private void start(UUID pUUID, int tick) { if (!isListening) return; Player p = Bukkit.getPlayer(pUUID); if (p == null) return; if (!PinManager.hasPin(p.getUniqueId())) return; - JSONObject data = new JSONObject(); - data.put("task", AudioType.SFX.name()); - data.put("path", url); - data.put("uuid", p.getUniqueId().toString().replace("-", "")); - data.put("play", true); - data.put("at", ms); - MCTPAudio.getClient().sendData(data); + AudioMessage.of(AudioType.SFX, url, true, tick * 50).send(pUUID); } /** @@ -136,12 +98,7 @@ public class PlayInRegionHandler implements Listener { if (p == null) return; if (!PinManager.hasPin(p.getUniqueId())) return; - JSONObject data = new JSONObject(); - data.put("task", AudioType.SFX.name()); - data.put("path", url); - data.put("uuid", p.getUniqueId().toString().replace("-", "")); - data.put("play", false); - MCTPAudio.getClient().sendData(data); + AudioMessage.of(AudioType.SFX, url, false).send(pUUID); } @EventHandler @@ -151,7 +108,7 @@ public class PlayInRegionHandler implements Listener { if (e.getRegionName().equals(region)) { if (!players.contains(e.getPlayer().getUniqueId())) { players.add(e.getPlayer().getUniqueId()); - start(e.getPlayer().getUniqueId(), getMs()); + start(e.getPlayer().getUniqueId(), currentTick); } else { start(e.getPlayer().getUniqueId()); } @@ -175,7 +132,7 @@ public class PlayInRegionHandler implements Listener { if (regionsIn.stream().anyMatch(reg -> reg.getId().equals(region))) { players.add(e.getPlayer().getUniqueId()); e.setCancelled(true); - start(e.getPlayer().getUniqueId(), getMs()); + start(e.getPlayer().getUniqueId(), currentTick); } } else { if (!players.contains(e.getPlayer().getUniqueId())) return; @@ -183,8 +140,4 @@ public class PlayInRegionHandler implements Listener { players.remove(e.getPlayer().getUniqueId()); } } - - private int getMs() { - return Math.round(currentTick * 50); - } } diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/listener/WGListener.java b/src/main/java/nl/sbdeveloper/mctpaudio/listener/WGListener.java index e98ac6e..d26b664 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/listener/WGListener.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/listener/WGListener.java @@ -8,10 +8,13 @@ import com.bergerkiller.bukkit.tc.controller.MinecartMember; import com.bergerkiller.bukkit.tc.controller.MinecartMemberStore; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import net.raidstone.wgevents.events.RegionsEnteredEvent; -import nl.sbdeveloper.mctpaudio.MCTPAudio; +import nl.sbdeveloper.mctpaudio.ThemeParkAudio; +import nl.sbdeveloper.mctpaudio.api.AudioType; import nl.sbdeveloper.mctpaudio.managers.PinManager; import nl.sbdeveloper.mctpaudio.managers.WGManager; -import org.bukkit.Bukkit; +import nl.sbdeveloper.mctpaudio.socket.messages.AudioMessage; +import nl.sbdeveloper.mctpaudio.socket.messages.LightMessage; +import nl.sbdeveloper.mctpaudio.socket.messages.StopAudioMessage; import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -19,16 +22,8 @@ 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 { /** @@ -64,10 +59,10 @@ public class WGListener implements Listener { if (from.getBlockX() != to.getBlockX() || from.getBlockY() != to.getBlockY() || from.getBlockZ() != to.getBlockZ()) { if (!PinManager.hasPin(player.getUniqueId())) return; - Set list = MCTPAudio.getPlugin().getConfig().getConfigurationSection("Regions").getKeys(false); + Set list = ThemeParkAudio.getPlugin().getConfig().getConfigurationSection("regions.audio").getKeys(false); - List fromRegions = WGManager.getRegionsIn(from).stream().map(ProtectedRegion::getId).collect(Collectors.toList()); - List toRegions = WGManager.getRegionsIn(to).stream().map(ProtectedRegion::getId).collect(Collectors.toList()); + List fromRegions = WGManager.getRegionsIn(from).stream().map(ProtectedRegion::getId).toList(); + List toRegions = WGManager.getRegionsIn(to).stream().map(ProtectedRegion::getId).toList(); if ((Collections.disjoint(list, fromRegions) && !Collections.disjoint(list, toRegions)) || (!Collections.disjoint(list, fromRegions) && !Collections.disjoint(list, toRegions))) { //Walked in a region @@ -91,8 +86,8 @@ public class WGListener implements Listener { 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()); + String regionURL = ThemeParkAudio.getPlugin().getConfig().getString("regions.audio." + name.get()); + String regionURL2 = ThemeParkAudio.getPlugin().getConfig().getString("regions.audio." + name2.get()); if (regionURL.equals(regionURL2)) return; //Beide heeft een region, niet dezelfde, maar wel met dezelfde muziek. @@ -100,21 +95,13 @@ public class WGListener implements Listener { } Optional name = toRegions.stream().filter(list::contains).findFirst(); - if (!name.isPresent()) return; - String regionURL = MCTPAudio.getPlugin().getConfig().getString("Regions." + name.get()); + if (name.isEmpty()) return; + String regionURL = ThemeParkAudio.getPlugin().getConfig().getString("regions.audio." + 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); + AudioMessage.of(AudioType.MUSIC, regionURL).send(player.getUniqueId()); } 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); + StopAudioMessage.of(AudioType.MUSIC).send(player.getUniqueId()); } } } @@ -126,34 +113,18 @@ public class WGListener implements Listener { public void onRegionEnter(RegionsEnteredEvent e) { if (e.getPlayer() == null) return; - Set list2 = MCTPAudio.getPlugin().getConfig().getConfigurationSection("HueRegions").getKeys(false); + Set list2 = ThemeParkAudio.getPlugin().getConfig().getConfigurationSection("regions.light").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 (name.isEmpty()) return; + String configData = ThemeParkAudio.getPlugin().getConfig().getString("regions.light." + 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); + if (configData != null) { + LightMessage.of(configData).send(e.getPlayer().getUniqueId()); + } } } } diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/managers/PinManager.java b/src/main/java/nl/sbdeveloper/mctpaudio/managers/PinManager.java index 188e16e..c3b7592 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/managers/PinManager.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/managers/PinManager.java @@ -1,17 +1,9 @@ package nl.sbdeveloper.mctpaudio.managers; -import org.bukkit.Bukkit; - 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<>(); diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/managers/WGManager.java b/src/main/java/nl/sbdeveloper/mctpaudio/managers/WGManager.java index c8f0231..6e0d98c 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/managers/WGManager.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/managers/WGManager.java @@ -19,6 +19,7 @@ import com.sk89q.worldguard.protection.managers.storage.StorageException; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import lombok.experimental.UtilityClass; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.OfflinePlayer; @@ -32,24 +33,19 @@ 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! - * + *
* Note that if you do use this in one of your projects, leave this notice. * Please do credit me if you do use this in one of your projects. * * @author SBDeveloper [Fixed 1.13+ support] */ -public class WGManager { - public static WorldGuardPlugin wgp; - public static WorldEditPlugin wep; +@UtilityClass +public class WGManager { + private static WorldGuardPlugin wgp; + private static WorldEditPlugin wep; public static boolean hasWorldGuard() { return wgp != null; diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/radio/Playlist.java b/src/main/java/nl/sbdeveloper/mctpaudio/radio/Playlist.java index 71cd325..d821ee5 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/radio/Playlist.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/radio/Playlist.java @@ -2,30 +2,25 @@ package nl.sbdeveloper.mctpaudio.radio; import com.mpatric.mp3agic.InvalidDataException; import com.mpatric.mp3agic.UnsupportedTagException; -import nl.sbdeveloper.mctpaudio.MCTPAudio; +import lombok.Getter; +import nl.sbdeveloper.mctpaudio.ThemeParkAudio; +import nl.sbdeveloper.mctpaudio.api.AudioType; import nl.sbdeveloper.mctpaudio.api.maps.SongList; import nl.sbdeveloper.mctpaudio.managers.PinManager; +import nl.sbdeveloper.mctpaudio.socket.messages.AudioMessage; import nl.sbdeveloper.mctpaudio.utils.HeadUtil; -import nl.sbdeveloper.mctpaudio.utils.MainUtil; +import nl.sbdeveloper.mctpaudio.utils.DiscordUtil; import nl.sbdeveloper.mctpaudio.utils.WebhookMessage; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitTask; -import org.json.simple.JSONObject; import java.awt.*; import java.io.IOException; -import java.util.Collections; - -/* 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 final SongList playList = new SongList<>(); + @Getter private boolean running = false; private BukkitTask currentTimer; private int faultCounter = 0; @@ -42,11 +37,11 @@ public class Playlist { * Start this playlist */ public void start() { - for (String URL : MCTPAudio.getPlugin().getConfig().getStringList("RadioSongs")) { + for (String URL : ThemeParkAudio.getPlugin().getConfig().getStringList("RadioSongs")) { addSong(URL); } - Bukkit.getScheduler().runTaskAsynchronously(MCTPAudio.getPlugin(), this::nextSong); + Bukkit.getScheduler().runTaskAsynchronously(ThemeParkAudio.getPlugin(), this::nextSong); running = true; } @@ -82,7 +77,7 @@ public class Playlist { if (currentTimer != null) return; //A song is playing? if (faultCounter > 4) { - MCTPAudio.getPlugin(MCTPAudio.class).getLogger().severe("Detected to many IO errors! Stopping the radio..."); + ThemeParkAudio.getPlugin(ThemeParkAudio.class).getLogger().severe("Detected to many IO errors! Stopping the radio..."); stop(); //FALLBACK! 4 errors occured. return; } @@ -112,7 +107,7 @@ public class Playlist { embed.setDescription("A song in the radio does not have MPEG headers. A song without headers cannot be played in the radio because the length cannot be determined. Please fix as soon as possible.\n\nClick on the title to go to the song."); embed.setUrl(nextURL); try { - MainUtil.sendMessageDiscord(embed); + DiscordUtil.sendMessageDiscord(embed); } catch (IOException e) { e.printStackTrace(); } @@ -131,7 +126,7 @@ public class Playlist { embed.setDescription("A song in the radio does not have MPEG headers. A song without headers cannot be played in the radio because the length cannot be determined. Please fix as soon as possible.\n\nClick on the title to go to the song."); embed.setUrl(nextURL); try { - MainUtil.sendMessageDiscord(embed); + DiscordUtil.sendMessageDiscord(embed); } catch (IOException e) { e.printStackTrace(); } @@ -139,25 +134,14 @@ public class Playlist { return; } - //Send to client - JSONObject data; - for (Player p : Bukkit.getOnlinePlayers()) { - data = new JSONObject(); - - if (!PinManager.hasPin(p.getUniqueId())) continue; - - data.put("task", "RADIO"); - data.put("path", nextURL); - data.put("uuid", p.getUniqueId().toString().replace("-", "")); - MCTPAudio.getClient().sendData(data); - } + AudioMessage.of(AudioType.RADIO, nextURL).broadcast(PinManager::hasPin); Bukkit.getLogger().info("Started song with duration: " + ticks / 20 + " sec."); faultCounter = 0; //And started timer, so that it starts a new song if the old one is done - currentTimer = Bukkit.getScheduler().runTaskLaterAsynchronously(MCTPAudio.getPlugin(), () -> { + currentTimer = Bukkit.getScheduler().runTaskLaterAsynchronously(ThemeParkAudio.getPlugin(), () -> { currentTimer = null; nextSong(); }, ticks); @@ -165,13 +149,4 @@ public class Playlist { //And shuffle the playlist now playList.shuffle(); } - - /** - * Check if the playlist is running - * - * @return true if running - */ - public boolean isRunning() { - return running; - } } diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/socket/Client.java b/src/main/java/nl/sbdeveloper/mctpaudio/socket/Client.java index 940306b..7084fe9 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/socket/Client.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/socket/Client.java @@ -1,10 +1,14 @@ package nl.sbdeveloper.mctpaudio.socket; import com.sk89q.worldguard.protection.regions.ProtectedRegion; -import nl.sbdeveloper.mctpaudio.MCTPAudio; +import nl.sbdeveloper.mctpaudio.ThemeParkAudio; +import nl.sbdeveloper.mctpaudio.api.AudioType; import nl.sbdeveloper.mctpaudio.api.events.AudioConnectionUpdateEvent; import nl.sbdeveloper.mctpaudio.managers.PinManager; import nl.sbdeveloper.mctpaudio.managers.WGManager; +import nl.sbdeveloper.mctpaudio.socket.messages.AudioMessage; +import nl.sbdeveloper.mctpaudio.socket.messages.AuthenticationMessage; +import nl.sbdeveloper.mctpaudio.socket.messages.LightMessage; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.java_websocket.client.WebSocketClient; @@ -19,12 +23,6 @@ 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 final String url; @@ -50,7 +48,7 @@ public class Client { public void connect() { if (!this.connected) { this.connected = true; - this.controlID = Bukkit.getScheduler().runTaskTimer(MCTPAudio.getPlugin(), () -> { + this.controlID = Bukkit.getScheduler().runTaskTimer(ThemeParkAudio.getPlugin(), () -> { if (!this.connected) { Bukkit.getScheduler().cancelTask(this.controlID); this.controlID = 0; @@ -100,25 +98,25 @@ public class Client { 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); + List regions = WGManager.getRegionsIn(p.getLocation()).stream().map(ProtectedRegion::getId).toList(); + Set list = ThemeParkAudio.getPlugin().getConfig().getConfigurationSection("regions.audio").getKeys(false); Optional regionName = regions.stream().filter(list::contains).findFirst(); regionName.ifPresent(name -> { - String regionURL = MCTPAudio.getPlugin().getConfig().getString("Regions." + name); + String regionURL = ThemeParkAudio.getPlugin().getConfig().getString("regions.audio." + name); + AudioMessage.of(AudioType.MUSIC, regionURL).send(pUUID); + }); - JSONObject data = new JSONObject(); - data.put("task", "MUSIC"); - data.put("path", regionURL); - data.put("uuid", p.getUniqueId().toString().replace("-", "")); - MCTPAudio.getClient().sendData(data); + Set list2 = ThemeParkAudio.getPlugin().getConfig().getConfigurationSection("regions.light").getKeys(false); + Optional regionName2 = regions.stream().filter(list2::contains).findFirst(); + regionName2.ifPresent(name -> { + String configData = ThemeParkAudio.getPlugin().getConfig().getString("regions.light." + name); + if (configData != null) { + LightMessage.of(configData).send(pUUID); + } }); } - JSONObject reply = new JSONObject(); - reply.put("task", "AUTHENTICATION"); - reply.put("verified", verified); - reply.put("uuid", uuid); - this.send(reply.toJSONString()); + AuthenticationMessage.of(verified).send(pUUID); } else if (str.equals("DISCONNECTED")) { String uuid = JSONUtil.getValue(json, "uuid"); if (uuid == null || uuid.isEmpty()) return; @@ -148,7 +146,7 @@ public class Client { this.wsc.connect(); if (this.taskID == 0) { - this.taskID = Bukkit.getScheduler().runTaskTimerAsynchronously(MCTPAudio.getPlugin(), () -> { + this.taskID = Bukkit.getScheduler().runTaskTimerAsynchronously(ThemeParkAudio.getPlugin(), () -> { if (Client.this.wsc != null && Client.this.wsc.isOpen()) { Client.this.wsc.send("__PING__"); } else { @@ -191,9 +189,9 @@ public class Client { } } - public void sendData(JSONObject object) { - if (this.wsc != null && this.wsc.isOpen() && object != null && object.toJSONString() != null) { - this.wsc.send(object.toJSONString()); + public void sendData(JSONObject json) { + if (this.wsc != null && this.wsc.isOpen()) { + this.wsc.send(json.toJSONString()); } } } diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/socket/JSONUtil.java b/src/main/java/nl/sbdeveloper/mctpaudio/socket/JSONUtil.java index 831b518..6aa982c 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/socket/JSONUtil.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/socket/JSONUtil.java @@ -1,17 +1,13 @@ package nl.sbdeveloper.mctpaudio.socket; +import lombok.experimental.UtilityClass; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; 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 - */ - +@UtilityClass public class JSONUtil { public static JSONObject parse(String string) { try { diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AbstractMessage.java b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AbstractMessage.java new file mode 100644 index 0000000..7450c26 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AbstractMessage.java @@ -0,0 +1,51 @@ +package nl.sbdeveloper.mctpaudio.socket.messages; + +import lombok.Getter; +import nl.sbdeveloper.mctpaudio.ThemeParkAudio; +import org.bukkit.Bukkit; +import org.bukkit.entity.Entity; +import org.jetbrains.annotations.Nullable; +import org.json.simple.JSONObject; + +import java.util.List; +import java.util.UUID; +import java.util.function.Function; + +@Getter +public abstract class AbstractMessage { + private final MessageTask task; + + public AbstractMessage(MessageTask task) { + this.task = task; + } + + public void send(UUID uuid) { + send(List.of(uuid), null); + } + + public void send(List uuids) { + send(uuids, null); + } + + public void broadcast(@Nullable Function filter) { + send(Bukkit.getOnlinePlayers().stream().map(Entity::getUniqueId).toList(), filter); + } + + public void send(List uuids, @Nullable Function filter) { + JSONObject data = new JSONObject(); + data.put("task", getTask()); + 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); + } + } + } + + protected abstract JSONObject extendJson(); +} \ No newline at end of file diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AudioMessage.java b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AudioMessage.java new file mode 100644 index 0000000..74ab217 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AudioMessage.java @@ -0,0 +1,40 @@ +package nl.sbdeveloper.mctpaudio.socket.messages; + +import lombok.Getter; +import nl.sbdeveloper.mctpaudio.api.AudioType; +import org.json.simple.JSONObject; + +@Getter +public class AudioMessage extends AbstractMessage { + private final String path; + private final Boolean play; + private final Integer at; + + protected AudioMessage(AudioType type, String path, Boolean play, Integer at) { + super(type.toMessageTask()); + this.path = path; + this.play = play; + this.at = at; + } + + public static AudioMessage of(AudioType type, String path) { + return new AudioMessage(type, path, null, null); + } + + public static AudioMessage of(AudioType type, String path, boolean play) { + return new AudioMessage(type, path, play, null); + } + + public static AudioMessage of(AudioType type, String path, boolean play, int at) { + return new AudioMessage(type, path, play, at); + } + + @Override + protected JSONObject extendJson() { + JSONObject data = new JSONObject(); + data.put("path", path); + if (play != null) data.put("play", play); + if (at != null) data.put("at", at); + return data; + } +} diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AuthenticationMessage.java b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AuthenticationMessage.java new file mode 100644 index 0000000..7b36b00 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/AuthenticationMessage.java @@ -0,0 +1,25 @@ +package nl.sbdeveloper.mctpaudio.socket.messages; + +import lombok.Getter; +import org.json.simple.JSONObject; + +@Getter +public class AuthenticationMessage extends AbstractMessage { + private final boolean verified; + + private AuthenticationMessage(boolean verified) { + super(MessageTask.AUTHENTICATION); + this.verified = verified; + } + + public static AuthenticationMessage of(boolean verified) { + return new AuthenticationMessage(verified); + } + + @Override + protected JSONObject extendJson() { + JSONObject data = new JSONObject(); + data.put("verified", verified); + return data; + } +} diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/LightMessage.java b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/LightMessage.java new file mode 100644 index 0000000..a48760a --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/LightMessage.java @@ -0,0 +1,54 @@ +package nl.sbdeveloper.mctpaudio.socket.messages; + +import nl.sbdeveloper.mctpaudio.api.LightRegion; +import org.jetbrains.annotations.NotNull; +import org.json.simple.JSONObject; + +public class LightMessage extends AbstractMessage { + private final int brightness; + private final int r, g, b, w; + private final LightRegion region; + + private LightMessage(int brightness, int r, int g, int b, int w, LightRegion region) { + super(MessageTask.LIGHT); + this.brightness = brightness; + this.r = r; + this.g = g; + this.b = b; + this.w = w; + this.region = region; + } + + public static LightMessage of(int brightness, int r, int g, int b, int w, LightRegion region) { + return new LightMessage(brightness, r, g, b, w, region); + } + + private LightMessage(@NotNull String configData) { + super(MessageTask.LIGHT); + + String[] configDataSplit = configData.split("_"); + if (configDataSplit.length != 6) { + throw new IllegalArgumentException("Invalid config data: " + configData); + } + + this.brightness = Integer.parseInt(configDataSplit[0]); + this.r = Integer.parseInt(configDataSplit[1]); + this.g = Integer.parseInt(configDataSplit[2]); + this.b = Integer.parseInt(configDataSplit[3]); + this.w = Integer.parseInt(configDataSplit[4]); + this.region = LightRegion.valueOf(configDataSplit[5]); + } + + public static LightMessage of(@NotNull String configData) { + return new LightMessage(configData); + } + + @Override + protected JSONObject extendJson() { + JSONObject data = new JSONObject(); + data.put("rgbw", r + "_" + g + "_" + b + "_" + w); + data.put("region", region); + data.put("brightness", brightness); + return data; + } +} \ No newline at end of file diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/LogoutMessage.java b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/LogoutMessage.java new file mode 100644 index 0000000..c5236ba --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/LogoutMessage.java @@ -0,0 +1,14 @@ +package nl.sbdeveloper.mctpaudio.socket.messages; + +import org.json.simple.JSONObject; + +public class LogoutMessage extends AbstractMessage { + public LogoutMessage() { + super(MessageTask.LOGOUT); + } + + @Override + protected JSONObject extendJson() { + return null; + } +} diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/MessageTask.java b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/MessageTask.java new file mode 100644 index 0000000..8ce3487 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/MessageTask.java @@ -0,0 +1,5 @@ +package nl.sbdeveloper.mctpaudio.socket.messages; + +public enum MessageTask { + AUTHENTICATION, LOGOUT, LIGHT, MUSIC, SFX, RADIO +} diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/StopAudioMessage.java b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/StopAudioMessage.java new file mode 100644 index 0000000..e7e1320 --- /dev/null +++ b/src/main/java/nl/sbdeveloper/mctpaudio/socket/messages/StopAudioMessage.java @@ -0,0 +1,13 @@ +package nl.sbdeveloper.mctpaudio.socket.messages; + +import nl.sbdeveloper.mctpaudio.api.AudioType; + +public class StopAudioMessage extends AudioMessage { + public StopAudioMessage(AudioType type) { + super(type, "", null, null); + } + + public static StopAudioMessage of(AudioType type) { + return new StopAudioMessage(type); + } +} diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/utils/MainUtil.java b/src/main/java/nl/sbdeveloper/mctpaudio/utils/DiscordUtil.java similarity index 91% rename from src/main/java/nl/sbdeveloper/mctpaudio/utils/MainUtil.java rename to src/main/java/nl/sbdeveloper/mctpaudio/utils/DiscordUtil.java index 5e4504a..58232fc 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/utils/MainUtil.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/utils/DiscordUtil.java @@ -1,8 +1,11 @@ package nl.sbdeveloper.mctpaudio.utils; +import lombok.experimental.UtilityClass; + import java.io.IOException; -public class MainUtil { +@UtilityClass +public class DiscordUtil { public static void sendMessageDiscord(WebhookMessage.EmbedObject embed, String mention) throws IOException { WebhookMessage webhookMessage = new WebhookMessage("https://discord.com/api/webhooks/706629612955762778/MztXWVWupAIoTIHwb0XK8ExfOz6nrygB_FEl9EpbFENGUCGobMib_5Apj2rnUSXuMlbR"); webhookMessage.setAvatarUrl("https://mcthemeparks.com/musicupload/downloads/Designs/Logo2.png"); diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/utils/HeadUtil.java b/src/main/java/nl/sbdeveloper/mctpaudio/utils/HeadUtil.java index 405196f..5a3f9f8 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/utils/HeadUtil.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/utils/HeadUtil.java @@ -3,6 +3,7 @@ package nl.sbdeveloper.mctpaudio.utils; import com.mpatric.mp3agic.InvalidDataException; import com.mpatric.mp3agic.Mp3File; import com.mpatric.mp3agic.UnsupportedTagException; +import lombok.experimental.UtilityClass; import java.io.File; import java.io.FileOutputStream; @@ -11,15 +12,10 @@ 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. */ +@UtilityClass public class HeadUtil { public static String getArgument(String selector, String key) { StringBuilder result = new StringBuilder(); diff --git a/src/main/java/nl/sbdeveloper/mctpaudio/utils/SpigotPlayerSelector.java b/src/main/java/nl/sbdeveloper/mctpaudio/utils/SpigotPlayerSelector.java index 07e8740..716c93a 100644 --- a/src/main/java/nl/sbdeveloper/mctpaudio/utils/SpigotPlayerSelector.java +++ b/src/main/java/nl/sbdeveloper/mctpaudio/utils/SpigotPlayerSelector.java @@ -1,6 +1,7 @@ package nl.sbdeveloper.mctpaudio.utils; import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import lombok.experimental.UtilityClass; import nl.sbdeveloper.mctpaudio.managers.WGManager; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -13,14 +14,7 @@ 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; public SpigotPlayerSelector(String selector) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..a8f4aed --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,8 @@ +socketUrl: "ws://localhost:8080" +regions: + audio: + demo: https://www.mcthemeparks.com/musicupload/downloads/Berlin/kaad.mp3 + light: + demo: 255_255_0_0_0_ALL +radioSongs: + - https://www.mcthemeparks.com/musicupload/downloads/Berlin/kaad.mp3 \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index afb57a8..92b0730 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: MCTPAudio version: ${project.version} -main: nl.sbdeveloper.mctpaudio.MCTPAudio +main: nl.sbdeveloper.mctpaudio.ThemeParkAudio api-version: 1.19 depend: [ WorldGuard, Train_Carts ] authors: [ SBDeveloper ]