Skip to content
This repository has been archived by the owner on Mar 26, 2024. It is now read-only.

Commit

Permalink
✨ Added tracks events
Browse files Browse the repository at this point in the history
  • Loading branch information
ItsTheSky committed Apr 21, 2022
1 parent 47019b6 commit f1d6d0d
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 8 deletions.
63 changes: 55 additions & 8 deletions src/main/java/info/itsthesky/lavaplayer/AudioListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@

import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter;
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason;
import info.itsthesky.disky.api.events.BukkitEvent;
import info.itsthesky.disky.core.Bot;
import info.itsthesky.disky.core.SkriptUtils;
import net.dv8tion.jda.api.entities.Guild;
import org.bukkit.Bukkit;

public class AudioListener extends AudioEventAdapter {

Expand All @@ -25,18 +29,49 @@ public Guild getGuild() {
return guild;
}

@Override
public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
call(TrackEventType.END, player);
}

@Override
public void onPlayerResume(AudioPlayer player) {
call(TrackEventType.RESUME, player);
}

@Override
public void onTrackException(AudioPlayer player, AudioTrack track, FriendlyException exception) {
call(TrackEventType.EXCEPTION, player);
}

@Override
public void onTrackStuck(AudioPlayer player, AudioTrack track, long thresholdMs) {
call(TrackEventType.STUCK, player);
}

@Override
public void onTrackStart(AudioPlayer player, AudioTrack track) {
call(TrackEventType.START, player);
}

@Override
public void onPlayerPause(AudioPlayer player) {
super.onPlayerPause(player);
call(TrackEventType.PAUSE, player);
}

private void call(TrackEventType type, AudioPlayer player) {
final TrackEvent event = new TrackEvent(type, player, bot, guild);
SkriptUtils.sync(() -> Bukkit.getPluginManager().callEvent(event));
}

public enum TrackEventType {
TRACK_START,
TRACK_END,
TRACK_STUCK,
TRACK_PAUSE,
TRACK_RESUME,
TRACK_SEEK,
START,
END,
STUCK,
EXCEPTION,
PAUSE,
RESUME,
SEEK,
;
}

Expand All @@ -45,12 +80,16 @@ public class TrackEvent extends BukkitEvent {
private final TrackEventType type;
private final AudioTrack track;
private final AudioPlayer player;
private final Guild guild;
private final Bot bot;

public TrackEvent(final TrackEventType type, AudioPlayer player) {
public TrackEvent(final TrackEventType type, AudioPlayer player, Bot bot, Guild guild) {
super(false);
this.type = type;
this.player = player;
this.track = player.getPlayingTrack();
this.bot = bot;
this.guild = guild;
}

public TrackEventType getType() {
Expand All @@ -64,5 +103,13 @@ public AudioPlayer getPlayer() {
public AudioTrack getTrack() {
return track;
}

public Guild getGuild() {
return guild;
}

public Bot getBot() {
return bot;
}
}
}
1 change: 1 addition & 0 deletions src/main/java/info/itsthesky/lavaplayer/LavaPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public void init(DiSky disky, SkriptAddon addon) {

registerType(AudioTrack.class, "audiotrack", AudioTrack::getIdentifier);
registerType(SearchTracks.AudioSource.class, "audiosource");
registerType(AudioListener.TrackEventType.class, "trackeventtype");

}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package info.itsthesky.lavaplayer.elements.events;

import ch.njol.skript.Skript;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SkriptEvent;
import ch.njol.skript.lang.SkriptParser;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import info.itsthesky.disky.core.Bot;
import info.itsthesky.disky.core.SkriptUtils;
import info.itsthesky.lavaplayer.AudioListener;
import net.dv8tion.jda.api.entities.Guild;
import org.bukkit.event.Event;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class TrackEvent extends SkriptEvent {

static {
Skript.registerEvent(
"Track Event", TrackEvent.class, AudioListener.TrackEvent.class,
"track [event] %trackeventtype%"
).description("Fired when a track receive a specific event. Use the literal to define the event's type such as:",
" - START",
" - END",
" - STUCK",
" - PAUSE",
" - RESUME",
" - SEEK"
).examples("on track play:", "on track end:", "on track exception:");

SkriptUtils.registerValue(AudioListener.TrackEvent.class, Bot.class, AudioListener.TrackEvent::getBot);
SkriptUtils.registerValue(AudioListener.TrackEvent.class, Guild.class, AudioListener.TrackEvent::getGuild);
SkriptUtils.registerValue(AudioListener.TrackEvent.class, AudioTrack.class, AudioListener.TrackEvent::getTrack);
SkriptUtils.registerValue(AudioListener.TrackEvent.class, AudioListener.TrackEventType.class, AudioListener.TrackEvent::getType);

}

private AudioListener.TrackEventType type;

@Override
public boolean init(Literal<?> @NotNull [] args, int matchedPattern, SkriptParser.@NotNull ParseResult parseResult) {
type = ((Literal<AudioListener.TrackEventType>) args[0]).getSingle();
return true;
}

@Override
public boolean check(@NotNull Event e) {
return e instanceof AudioListener.TrackEvent && type == ((AudioListener.TrackEvent) e).getType();
}

@Override
public boolean isEventPrioritySupported() {
return false;
}

@Override
public @NotNull String toString(@Nullable Event e, boolean debug) {
return "track " + type.name();
}
}

0 comments on commit f1d6d0d

Please sign in to comment.