diff --git a/src/main/java/me/mctp/api/maps/Playlist.java b/src/main/java/me/mctp/api/maps/SongList.java similarity index 81% rename from src/main/java/me/mctp/api/maps/Playlist.java rename to src/main/java/me/mctp/api/maps/SongList.java index c4524e3..0ce4e11 100644 --- a/src/main/java/me/mctp/api/maps/Playlist.java +++ b/src/main/java/me/mctp/api/maps/SongList.java @@ -2,7 +2,12 @@ package me.mctp.api.maps; import java.util.*; -public class Playlist extends ArrayList { +/** + * An {@link ArrayList} with shuffle support. + * + * @param The type you want to store + */ +public class SongList extends ArrayList { public void shuffle() { Random random = new Random(); diff --git a/src/main/java/me/mctp/commands/MCTPAudioCMD.java b/src/main/java/me/mctp/commands/MCTPAudioCMD.java index a6758ba..d06ca3a 100644 --- a/src/main/java/me/mctp/commands/MCTPAudioCMD.java +++ b/src/main/java/me/mctp/commands/MCTPAudioCMD.java @@ -36,7 +36,7 @@ public class MCTPAudioCMD implements CommandExecutor { Main.getPlaylist().stop(); sender.sendMessage(prefix + "De auto radio is stopgezet. Zodra het huidige nummer is afgelopen, gebeurt er niks meer."); } else { - Main.getPlaylist().init(); + Main.getPlaylist().start(); sender.sendMessage(prefix + "De auto radio is weer gestart."); } return true; diff --git a/src/main/java/me/mctp/radio/Playlist.java b/src/main/java/me/mctp/radio/Playlist.java index 324656e..8d0da92 100644 --- a/src/main/java/me/mctp/radio/Playlist.java +++ b/src/main/java/me/mctp/radio/Playlist.java @@ -3,6 +3,7 @@ package me.mctp.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 org.bukkit.Bukkit; @@ -13,21 +14,24 @@ import org.json.simple.JSONObject; import java.io.IOException; public class Playlist { - private final me.mctp.api.maps.Playlist songList = new me.mctp.api.maps.Playlist<>(); + private SongList playList = new SongList<>(); + private final SongList playedList = new SongList<>(); + private boolean running = false; private BukkitTask currentTimer; /** - * Init, load all the songs from the data and start first + * Create a new PlayList object + * Starts the playlist */ public Playlist() { - init(); + start(); } /** - * Load the songs into the system and start + * Start this playlist */ - public void init() { + public void start() { for (String URL : Main.getPlugin().getConfig().getStringList("RadioSongs")) { addSong(URL); } @@ -38,10 +42,10 @@ public class Playlist { } /** - * Stop the playlist (clears the queue) + * Stop the playlist */ public void stop() { - songList.clear(); + playList.clear(); if (currentTimer != null) { currentTimer.cancel(); @@ -56,8 +60,8 @@ public class Playlist { * @param url The song url (mp3) */ public void addSong(String url) { - songList.add(url); - songList.shuffle(); + playList.add(url); + playList.shuffle(); } /** @@ -66,12 +70,19 @@ public class Playlist { public void nextSong() { if (currentTimer != null) return; - if (songList.isEmpty()) return; + if (playList.isEmpty()) { + //All numbers played + playList = (SongList) playedList.clone(); //Copy a clone. + playedList.clear(); + } //Get song - String nextURL = songList.getRandom(); + String nextURL = playList.getRandom(); if (nextURL == null) return; + playList.remove(nextURL); + playedList.add(nextURL); + JSONObject data; for (Player p : Bukkit.getOnlinePlayers()) { data = new JSONObject(); @@ -107,9 +118,14 @@ public class Playlist { }, ticks); //Shuffle playlist again - songList.shuffle(); + playList.shuffle(); } + /** + * Check if the playlist is running + * + * @return true if running + */ public boolean isRunning() { return running; }