Files
AllMusic/core/side/BaseSide.java
T

588 lines
15 KiB
Java
Raw Normal View History

2024-04-19 09:46:54 +08:00
package com.coloryr.allmusic.server.core.side;
2021-06-21 22:25:17 +08:00
2026-01-31 19:06:53 +08:00
import com.coloryr.allmusic.codec.CommandType;
import com.coloryr.allmusic.codec.HudPosObj;
import com.coloryr.allmusic.codec.HudType;
2024-04-19 09:46:54 +08:00
import com.coloryr.allmusic.server.core.AllMusic;
2026-03-27 18:38:48 +08:00
import com.coloryr.allmusic.server.core.music.PlayMusic;
2026-02-26 20:18:57 +08:00
import com.coloryr.allmusic.server.core.objs.music.PlayerAddMusicObj;
2024-04-19 09:46:54 +08:00
import com.coloryr.allmusic.server.core.objs.music.SongInfoObj;
2025-03-24 20:13:54 +08:00
import com.coloryr.allmusic.server.core.utils.HudUtils;
2026-03-04 13:57:59 +08:00
import net.kyori.adventure.text.Component;
2022-12-27 11:33:26 +08:00
2025-03-24 20:13:54 +08:00
import java.io.File;
import java.util.Collection;
import java.util.Locale;
2024-04-17 22:15:12 +08:00
2024-05-13 09:33:41 +08:00
public abstract class BaseSide {
2023-01-06 18:01:19 +08:00
/**
2023-01-08 20:55:21 +08:00
* 主线程运行任务
*
* @param run 任务
2023-01-06 18:01:19 +08:00
*/
2023-01-08 20:55:21 +08:00
public abstract void runTask(Runnable run);
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
2023-01-08 20:55:21 +08:00
* 主线程延迟任务
*
* @param run 任务
* @param delay 延迟
*/
public abstract void runTask(Runnable run, int delay);
2024-05-17 09:04:46 +08:00
/**
* 检查权限
*
2024-11-19 10:53:23 +08:00
* @param player 用户
2024-05-17 09:04:46 +08:00
* @return 是否有权限
*/
2024-11-19 10:53:23 +08:00
public abstract boolean checkPermission(Object player);
2024-05-17 09:04:46 +08:00
2025-01-19 22:51:01 +08:00
/**
* 是否为玩家执行指令
2025-03-24 20:13:54 +08:00
*
2025-01-19 22:51:01 +08:00
* @param source 命令源
* @return 是否为玩家
*/
public abstract boolean isPlayer(Object source);
2023-01-08 20:55:21 +08:00
/**
* 检查权限
*
2024-11-19 10:53:23 +08:00
* @param player 用户
2023-01-08 20:55:21 +08:00
* @param permission 权限
* @return 是否有权限
2023-01-06 18:01:19 +08:00
*/
2024-11-19 10:53:23 +08:00
public abstract boolean checkPermission(Object player, String permission);
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
* 是否需要播放
2023-01-08 20:55:21 +08:00
*
2023-01-06 18:01:19 +08:00
* @return 结果
*/
2025-03-24 20:13:54 +08:00
public abstract boolean needPlay(boolean islist);
2023-01-08 20:55:21 +08:00
2023-01-06 18:01:19 +08:00
/**
2025-03-24 20:13:54 +08:00
* 获取所有玩家
*
* @return 玩家列表
2023-01-06 18:01:19 +08:00
*/
2025-03-25 15:36:06 +08:00
public abstract Collection<?> getPlayers();
2023-01-08 20:55:21 +08:00
2025-03-24 20:13:54 +08:00
/**
* 获取玩家名字
*
* @param player 玩家
* @return 名字
*/
public abstract String getPlayerName(Object player);
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
2025-03-24 20:13:54 +08:00
* 获取玩家所在的服务器
2023-01-08 20:55:21 +08:00
*
2025-03-24 20:13:54 +08:00
* @param player 玩家
* @return 名字
2023-01-06 18:01:19 +08:00
*/
2025-03-24 20:13:54 +08:00
public abstract String getPlayerServer(Object player);
2023-01-08 20:55:21 +08:00
2025-03-24 20:13:54 +08:00
/**
* 向玩家发送数据包
*
* @param player 玩家
* @param type 数据
* @param data 数据
* @param data1 数据
*/
2026-01-31 19:06:53 +08:00
public abstract void send(Object player, CommandType type, String data, int data1);
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
2025-03-24 20:13:54 +08:00
* 根据名字获取玩家
2023-01-08 20:55:21 +08:00
*
2025-03-24 20:13:54 +08:00
* @param player 名字
* @return 玩家
2023-01-06 18:01:19 +08:00
*/
2025-03-24 20:13:54 +08:00
public abstract Object getPlayer(String player);
2023-01-08 20:55:21 +08:00
2024-05-13 09:33:41 +08:00
/**
2025-03-24 20:13:54 +08:00
* 发送bar消息
2024-06-21 11:06:14 +08:00
*
2024-05-13 09:33:41 +08:00
* @param player 玩家
2025-03-24 20:13:54 +08:00
* @param data 消息
2024-05-13 09:33:41 +08:00
*/
2026-03-04 13:57:59 +08:00
public abstract void sendBar(Object player, Component data);
2023-01-08 20:55:21 +08:00
2025-03-24 20:13:54 +08:00
/**
* 获取插件配置文件夹
*
* @return 文件夹
*/
public abstract File getFolder();
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
2025-03-24 20:13:54 +08:00
* 发送消息
2023-01-08 20:55:21 +08:00
*
2025-03-24 20:13:54 +08:00
* @param obj 接受对象
* @param message 消息
2023-01-06 18:01:19 +08:00
*/
2026-03-04 13:57:59 +08:00
public abstract void sendMessage(Object obj, Component message);
2025-03-24 20:13:54 +08:00
/**
* 当歌曲添加时触发的事件
*
* @param obj 歌曲信息
* @return 是否阻止播放
*/
public abstract boolean onMusicPlay(SongInfoObj obj);
/**
* 当歌曲播放时触发的事件
*
* @param obj 发送者
* @param music 歌曲信息
* @return 是否阻止添加
*/
2026-02-26 20:18:57 +08:00
public abstract boolean onMusicAdd(Object obj, PlayerAddMusicObj music);
2025-03-24 20:13:54 +08:00
/**
* 广播消息
*
* @param data 消息
2023-01-08 20:55:21 +08:00
*/
2026-03-04 13:57:59 +08:00
public abstract void broadcast(Component data);
2025-03-24 20:13:54 +08:00
/**
* 重载
*/
public final void reload() {
2026-04-03 16:59:01 +08:00
AllMusic.init(getFolder());
2025-03-24 20:13:54 +08:00
}
2023-01-08 20:55:21 +08:00
/**
* 发送歌曲位置信息
*
* @param player 用户名
2024-04-17 22:15:12 +08:00
* @param pos 歌曲位置(毫秒)
2023-01-08 20:55:21 +08:00
*/
2025-03-24 20:13:54 +08:00
public final void sendPos(String player, int pos) {
Object player1 = getPlayer(player);
if (player1 == null)
return;
if (AllMusic.isSkip(player, getPlayerServer(player), true))
return;
try {
2026-01-31 19:06:53 +08:00
send(player1, CommandType.POS, null, pos);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>清空Hud发生出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
/**
* 发送停止指令
*
* @param name 用户名
*/
public final void sendStop(String name) {
2026-03-27 18:38:48 +08:00
PlayMusic.removeNowPlayPlayer(name);
2025-03-24 20:13:54 +08:00
Object player = getPlayer(name);
if (player == null)
return;
try {
2026-01-31 19:06:53 +08:00
send(player, CommandType.STOP, null, 0);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>停止指令发送出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
/**
* 发送停止指令
*/
public final void sendStop() {
2026-03-27 18:38:48 +08:00
PlayMusic.clearNowPlayer();
2025-03-24 20:13:54 +08:00
try {
for (Object player : getPlayers()) {
2026-01-31 19:06:53 +08:00
send(player, CommandType.STOP, null, 0);
2025-03-24 20:13:54 +08:00
}
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>停止指令发送出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
/**
* 向指定玩家发送播放歌曲指令
*
* @param player 玩家
* @param url 地址
*/
public final void sendMusic(String player, String url) {
2026-03-27 18:38:48 +08:00
PlayMusic.addNowPlayPlayer(player);
2025-03-24 20:13:54 +08:00
Object player1 = getPlayer(player);
if (player1 == null)
return;
try {
if (AllMusic.isSkip(player, getPlayerServer(player), false))
return;
2026-01-31 19:06:53 +08:00
send(player1, CommandType.PLAY, url, 0);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>歌曲指令发送出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
* 发送Hud的歌词数据
2023-01-08 20:55:21 +08:00
*
2023-01-06 18:01:19 +08:00
* @param data 数据
*/
2025-03-24 20:13:54 +08:00
public final void sendHudLyric(String data) {
for (Object player : getPlayers()) {
String name = getPlayerName(player);
if (name == null)
continue;
name = name.toLowerCase(Locale.ROOT);
if (AllMusic.isSkip(name, getPlayerServer(player), true))
continue;
try {
2026-01-31 19:06:53 +08:00
HudPosObj obj = HudUtils.get(name);
2025-03-24 20:13:54 +08:00
if (!obj.lyric.enable)
continue;
2026-01-31 19:06:53 +08:00
send(player, CommandType.LYRIC, data, 0);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>歌词发送出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
}
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
* 发送Hud的信息数据
2023-01-08 20:55:21 +08:00
*
2023-01-06 18:01:19 +08:00
* @param data 数据
*/
2025-03-24 20:13:54 +08:00
public final void sendHudInfo(String data) {
for (Object player : getPlayers()) {
String name = getPlayerName(player);
if (name == null)
continue;
name = name.toLowerCase(Locale.ROOT);
if (AllMusic.isSkip(name, getPlayerServer(player), true))
continue;
try {
2026-01-31 19:06:53 +08:00
HudPosObj obj = HudUtils.get(name);
2025-03-24 20:13:54 +08:00
if (!obj.lyric.enable)
continue;
2026-01-31 19:06:53 +08:00
send(player, CommandType.INFO, data, 0);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>歌词信息发送出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
}
2022-12-27 11:33:26 +08:00
2024-04-17 22:15:12 +08:00
/**
* 发送Hud的位置信息
*
* @param name 用户名
*/
2025-03-24 20:13:54 +08:00
public final void sendHudPos(String name) {
Object player = getPlayer(name);
if (player == null)
return;
if (AllMusic.isSkip(name, null, false))
return;
try {
2026-01-31 19:06:53 +08:00
HudPosObj obj = HudUtils.get(name);
2025-03-24 20:13:54 +08:00
String data = AllMusic.gson.toJson(obj);
2026-01-31 19:06:53 +08:00
send(player, CommandType.HUD_DATA, data, 0);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>界面位置发送出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
2024-04-17 22:15:12 +08:00
/**
* 发送Hud数据
2024-04-19 11:14:17 +08:00
*
2024-04-17 22:15:12 +08:00
* @param name 用户名
2024-04-19 11:14:17 +08:00
* @param pos 位置
2024-04-17 22:15:12 +08:00
* @param data 信息
*/
2025-03-24 20:13:54 +08:00
public final void sendHud(String name, HudType pos, String data) {
try {
if (pos == HudType.PIC) {
return;
}
Object player = getPlayer(name);
if (player == null)
return;
if (AllMusic.isSkip(name, getPlayerServer(player), true))
return;
switch (pos) {
case INFO:
2026-01-31 19:06:53 +08:00
send(player, CommandType.INFO, data, 0);
2025-03-24 20:13:54 +08:00
break;
case LIST:
2026-01-31 19:06:53 +08:00
send(player, CommandType.LIST, data, 0);
2025-03-24 20:13:54 +08:00
break;
case LYRIC:
2026-01-31 19:06:53 +08:00
send(player, CommandType.LYRIC, data, 0);
2025-03-24 20:13:54 +08:00
break;
}
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>停止指令发送出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
2024-04-17 22:15:12 +08:00
2023-01-06 18:01:19 +08:00
/**
* 发送Hud的歌曲列表数据
2023-01-08 20:55:21 +08:00
*
2023-01-06 18:01:19 +08:00
* @param data 数据
*/
2025-03-24 20:13:54 +08:00
public final void sendHudList(String data) {
for (Object player : getPlayers()) {
String name = getPlayerName(player);
if (name == null)
continue;
name = name.toLowerCase(Locale.ROOT);
if (AllMusic.isSkip(name, getPlayerServer(player), true))
continue;
try {
2026-01-31 19:06:53 +08:00
HudPosObj obj = HudUtils.get(name);
2025-03-24 20:13:54 +08:00
if (!obj.list.enable)
continue;
2026-01-31 19:06:53 +08:00
send(player, CommandType.LIST, data, 0);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>歌曲列表发送出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
}
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
* 发送Hud位置数据
*/
2025-03-24 20:13:54 +08:00
public final void sendHudUtilsAll() {
for (Object player : getPlayers()) {
String name = getPlayerName(player);
if (name == null)
continue;
name = name.toLowerCase(Locale.ROOT);
try {
2026-01-31 19:06:53 +08:00
HudPosObj obj = HudUtils.get(name);
2025-03-24 20:13:54 +08:00
String data = AllMusic.gson.toJson(obj);
2026-01-31 19:06:53 +08:00
send(player, CommandType.HUD_DATA, data, 0);
2025-03-24 20:13:54 +08:00
} catch (Exception e1) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>数据发送发生错误");
2025-03-24 20:13:54 +08:00
e1.printStackTrace();
}
}
}
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
* 发送Bar数据
2023-01-08 20:55:21 +08:00
*
2023-01-06 18:01:19 +08:00
* @param data 数据
*/
2026-03-04 13:57:59 +08:00
public final void sendBar(Component data) {
2025-03-24 20:13:54 +08:00
for (Object player : getPlayers()) {
String name = getPlayerName(player);
if (name == null)
continue;
name = name.toLowerCase(Locale.ROOT);
try {
if (AllMusic.isSkip(name, getPlayerServer(player), true))
continue;
sendBar(player, data);
} catch (Exception e1) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>数据发送发生错误");
2025-03-24 20:13:54 +08:00
e1.printStackTrace();
}
}
}
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
2025-03-24 20:13:54 +08:00
* 发送播放歌曲指令
2023-01-08 20:55:21 +08:00
*
2025-03-24 20:13:54 +08:00
* @param url 歌曲Url
2023-01-06 18:01:19 +08:00
*/
2025-03-24 20:13:54 +08:00
public final void sendMusic(String url) {
for (Object player : getPlayers()) {
String name = getPlayerName(player);
if (name == null)
continue;
name = name.toLowerCase(Locale.ROOT);
if (AllMusic.isSkip(name, getPlayerServer(player), false))
continue;
try {
2026-01-31 19:06:53 +08:00
send(player, CommandType.PLAY, url, 0);
2026-03-27 18:38:48 +08:00
PlayMusic.addNowPlayPlayer(name);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>歌曲指令发送出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
}
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
2025-03-24 20:13:54 +08:00
* 发送图片数据指令
*
* @param url 图片地址
2023-01-06 18:01:19 +08:00
*/
2025-03-24 20:13:54 +08:00
public final void sendPic(String url) {
for (Object player : getPlayers()) {
String name = getPlayerName(player);
if (name == null)
continue;
name = name.toLowerCase(Locale.ROOT);
if (AllMusic.isSkip(name, getPlayerServer(player), true))
continue;
2026-01-31 19:06:53 +08:00
HudPosObj obj = HudUtils.get(name);
2025-03-24 20:13:54 +08:00
if (!obj.pic.enable)
continue;
try {
2026-01-31 19:06:53 +08:00
send(player, CommandType.IMG, url, 0);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>图片指令发送出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
}
2023-01-08 20:55:21 +08:00
/**
2025-03-24 20:13:54 +08:00
* 发送图片数据指令
2023-01-08 20:55:21 +08:00
*
2025-03-24 20:13:54 +08:00
* @param player 用户名
* @param url 图片地址
2023-01-08 20:55:21 +08:00
*/
2025-03-24 20:13:54 +08:00
public final void sendPic(String player, String url) {
Object player1 = getPlayer(player);
if (player1 == null)
return;
if (AllMusic.isSkip(player, getPlayerServer(player), true))
return;
try {
2026-01-31 19:06:53 +08:00
send(player1, CommandType.IMG, url, 0);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>图片指令发送出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
2023-01-08 20:55:21 +08:00
2024-04-17 22:15:12 +08:00
/**
2025-03-24 20:13:54 +08:00
* 清理Hud数据
2024-04-19 11:14:17 +08:00
*
2025-03-24 20:13:54 +08:00
* @param name 用户名
2024-04-17 22:15:12 +08:00
*/
2025-03-24 20:13:54 +08:00
public final void clearHud(String name) {
Object player = getPlayer(name);
if (player == null)
return;
try {
2026-01-31 19:06:53 +08:00
send(player, CommandType.CLEAR, null, 0);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>清空Hud发生出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
/**
* 清理Hud数据
*/
public final void clearHud() {
for (Object player : getPlayers()) {
try {
2026-01-31 19:06:53 +08:00
send(player, CommandType.CLEAR, null, 0);
2025-03-24 20:13:54 +08:00
} catch (Exception e) {
2026-03-04 16:05:57 +08:00
AllMusic.log.data("<light_purple>[AllMusic]<red>清空Hud发生出错");
2025-03-24 20:13:54 +08:00
e.printStackTrace();
}
}
}
2024-04-17 22:15:12 +08:00
2023-01-08 20:55:21 +08:00
/**
* 在主线程中广播消息
*
* @param data 消息
*/
2026-03-04 13:57:59 +08:00
public final void broadcastInTask(Component data) {
2025-01-19 22:51:01 +08:00
runTask(() -> broadcast(data));
2024-05-13 09:33:41 +08:00
}
2022-12-27 11:33:26 +08:00
2026-03-04 13:57:59 +08:00
/**
* 在主线程中广播消息
*
* @param data 消息
*/
public final void broadcastInTask(String data) {
broadcastInTask(AllMusic.miniMessage(data));
}
2023-01-06 18:01:19 +08:00
/**
* 在主线程发送消息
2023-01-08 20:55:21 +08:00
*
* @param obj 接受对象
2023-01-06 18:01:19 +08:00
* @param message 消息
*/
2024-05-13 09:33:41 +08:00
public final void sendMessageTask(Object obj, String message) {
2026-03-04 13:57:59 +08:00
runTask(() -> sendMessage(obj, AllMusic.miniMessage(message)));
}
/**
* 广播消息
*
* @param data 消息
*/
public final void broadcast(String data) {
broadcast(AllMusic.miniMessage(data));
}
/**
* 发送消息
*
* @param obj 接受对象
* @param message 消息
*/
public final void sendMessage(Object obj, String message) {
sendMessage(obj, AllMusic.miniMessage(message));
2024-05-13 09:33:41 +08:00
}
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
* 更新信息
*/
2024-05-09 10:07:20 +08:00
public void updateInfo() {
}
2022-12-27 11:33:26 +08:00
2023-01-06 18:01:19 +08:00
/**
* 更新歌词
*/
2024-05-09 10:07:20 +08:00
public void updateLyric() {
2022-12-27 11:33:26 +08:00
2024-05-09 10:07:20 +08:00
}
2024-04-17 22:15:12 +08:00
/**
2024-05-09 10:07:20 +08:00
* BC发送ping包
2024-04-17 22:15:12 +08:00
*/
2024-05-09 10:07:20 +08:00
public void ping() {
}
2026-03-04 13:57:59 +08:00
/***
* 在主线程中广播
* @param data 数据
*/
public void sendBarInTask(Component data) {
runTask(() -> sendBar(data));
}
/***
* 在主线程中广播
* @param data 数据
*/
public void sendBarInTask(String data) {
sendBarInTask(AllMusic.miniMessage(data));
}
2021-06-21 22:25:17 +08:00
}