Clean up and rename TrackScheduer to TrackManager

This commit is contained in:
ZtereoHYPE 2021-11-03 23:59:11 +01:00
parent 6bd6645918
commit 562015b40c

View file

@ -1,80 +1,88 @@
package codes.ztereohype.ztereomusic.audio; package codes.ztereohype.ztereomusic.audio;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.player.event.AudioEvent;
import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter; import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter;
import com.sedmelluq.discord.lavaplayer.player.event.AudioEventListener;
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException; import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack; import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason; import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason;
import net.dv8tion.jda.api.entities.Invite; import lombok.Getter;
import net.dv8tion.jda.api.entities.MessageChannel; import net.dv8tion.jda.api.entities.MessageChannel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class TrackScheduer extends AudioEventAdapter { public class TrackManager extends AudioEventAdapter {
private final @Getter AudioPlayer player;
private final AudioPlayer player;
private final List<AudioTrack> trackQueue = new ArrayList<>(); private final List<AudioTrack> trackQueue = new ArrayList<>();
private AudioTrack currentTrack;
private final MessageChannel infoChannel; private final MessageChannel infoChannel;
public TrackScheduer(AudioPlayer player, MessageChannel infoChannel) { public TrackManager(AudioPlayer player, MessageChannel infoChannel) {
this.player = player; this.player = player;
this.infoChannel = infoChannel; this.infoChannel = infoChannel;
} }
public void queue(AudioTrack track) { public void queue(AudioTrack track) {
// change this to add to queue and call onTrackEnd! // change this to add to queue and call onTrackEnd!
if (this.currentTrack == null) { if (player.getPlayingTrack() == null) {
System.out.println("Playing song directly as there is no song playing rn"); play(track);
this.currentTrack = track;
player.playTrack(track);
} else { } else {
trackQueue.add(track); trackQueue.add(track);
System.out.println("Added song to queue"); infoChannel.sendMessage("Queued " + track.getInfo().title);
} }
} }
public AudioPlayer getPlayer() { private void play(AudioTrack track) {
return this.player; player.playTrack(track);
}
private void playNext() {
// if the player was playing a track (probably means it's a skip), stop it
if (player.getPlayingTrack() != null) {
player.stopTrack();
}
if (trackQueue.isEmpty()) {
infoChannel.sendMessage("The queue is empty!").queue();
return;
}
AudioTrack nextTrack = trackQueue.get(0);
trackQueue.remove(nextTrack);
play(nextTrack);
infoChannel.sendMessage("Playing next track: " + nextTrack.getInfo().title).queue();
}
public void pause() {
player.setPaused(true);
}
public void resume() {
player.setPaused(false);
}
public void skip() {
playNext();
} }
@Override @Override
public void onPlayerPause(AudioPlayer player) { public void onPlayerPause(AudioPlayer player) {
infoChannel.sendMessage("Pausing...").queue(); // infoChannel.sendMessage("Pausing...").queue();
} }
@Override @Override
public void onPlayerResume(AudioPlayer player) { public void onPlayerResume(AudioPlayer player) {
infoChannel.sendMessage("Resuming...").queue(); // infoChannel.sendMessage("Resuming...").queue();
} }
@Override @Override
public void onTrackStart(AudioPlayer player, AudioTrack track) { public void onTrackStart(AudioPlayer player, AudioTrack track) {
infoChannel.sendMessage("Starting track: " + track.getInfo().title).queue(); // infoChannel.sendMessage("Starting track: " + track.getInfo().title).queue();
} }
@Override @Override
public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) { public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
currentTrack = null;
if (endReason.mayStartNext) { if (endReason.mayStartNext) {
if (trackQueue.isEmpty()) { playNext();
System.out.println("track finishd, no more tracks in queue!");
infoChannel.sendMessage("no more tracks in queue!").queue();
} else {
System.out.println("track finishd, trying next track");
AudioTrack nextTrack = trackQueue.get(0);
trackQueue.remove(0);
currentTrack = nextTrack;
infoChannel.sendMessage("Playing next track: " + nextTrack.getInfo().title).queue();
player.playTrack(currentTrack);
}
} else {
System.out.println("track finishd, cant start next, bye");
infoChannel.sendMessage("oopsie woopsie byebye").queue();
} }
// endReason == FINISHED: A track finished or died by an exception (mayStartNext = true). // endReason == FINISHED: A track finished or died by an exception (mayStartNext = true).
@ -87,11 +95,15 @@ public class TrackScheduer extends AudioEventAdapter {
@Override @Override
public void onTrackException(AudioPlayer player, AudioTrack track, FriendlyException exception) { public void onTrackException(AudioPlayer player, AudioTrack track, FriendlyException exception) {
// An already playing track threw an exception (track end event will still be received separately) infoChannel.sendMessage("Uh oh, a track did something strange. Skipping...").queue();
trackQueue.remove(track);
playNext();
} }
@Override @Override
public void onTrackStuck(AudioPlayer player, AudioTrack track, long thresholdMs) { public void onTrackStuck(AudioPlayer player, AudioTrack track, long thresholdMs) {
// Audio track has been unable to provide us any audio, might want to just start a new track infoChannel.sendMessage("Unable to play track " + track.getInfo().title + ". Skipping...").queue();
trackQueue.remove(track);
playNext();
} }
} }