diff options
Diffstat (limited to 'src/main/java/audio/TrackScheduler.java')
| -rw-r--r-- | src/main/java/audio/TrackScheduler.java | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/main/java/audio/TrackScheduler.java b/src/main/java/audio/TrackScheduler.java new file mode 100644 index 0000000..b5886c4 --- /dev/null +++ b/src/main/java/audio/TrackScheduler.java @@ -0,0 +1,59 @@ +package audio;
+
+import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
+import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter;
+import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
+import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+/**
+ * This class schedules tracks for the audio player. It contains the queue of tracks.
+ */
+public class TrackScheduler extends AudioEventAdapter {
+ public final AudioPlayer player;
+ public final BlockingQueue<AudioTrack> queue;
+
+ /**
+ * @param player The audio player this scheduler uses
+ */
+ public TrackScheduler(AudioPlayer player) {
+ this.player = player;
+ this.queue = new LinkedBlockingQueue<>();
+ }
+
+ /**
+ * Add the next track to queue or play right away if nothing is in the queue.
+ *
+ * @param track The track to play or add to queue.
+ */
+ public void queue(AudioTrack track) {
+ if (!player.startTrack(track, true)) {
+ queue.offer(track);
+ }
+ }
+
+ /**
+ * Start the next track, stopping the current one if it is playing.
+ */
+ public void nextTrack() {
+
+ player.startTrack(queue.poll(), false);
+
+ }
+
+ @Override
+ public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
+ // Only start the next track if the end reason is suitable for it (FINISHED or LOAD_FAILED)
+ if (endReason.mayStartNext) {
+ nextTrack();
+ }
+ }
+ public void shuffle()
+ {
+ Collections.shuffle((List<?>) queue);
+ }
+}
\ No newline at end of file |
