Files
AllMusic/core/side/BaseSide.java
T

571 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
2024-04-19 09:46:54 +08:00
import com.coloryr.allmusic.server.core.AllMusic;
2025-03-24 20:13:54 +08:00
import com.coloryr.allmusic.server.core.objs.config.SaveObj;
import com.coloryr.allmusic.server.core.objs.enums.ComType;
2024-04-19 09:46:54 +08:00
import com.coloryr.allmusic.server.core.objs.enums.HudType;
import com.coloryr.allmusic.server.core.objs.music.MusicObj;
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;
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 数据
*/
public abstract void send(Object player, ComType 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
*/
2025-03-24 20:13:54 +08:00
public abstract void sendBar(Object player, String 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
*/
2025-03-24 20:13:54 +08:00
public abstract void sendMessage(Object obj, String message);
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 obj 接受对象
* @param message 消息
* @param end 结尾
* @param command 指令
*/
public abstract void sendMessageRun(Object obj, String message, String end, String command);
/**
* 发送推荐指令
*
* @param obj 接受对象
* @param message 消息
* @param end 结尾
* @param command 指令
*/
public abstract void sendMessageSuggest(Object obj, String message, String end, String command);
/**
* 当歌曲添加时触发的事件
*
* @param obj 歌曲信息
* @return 是否阻止播放
*/
public abstract boolean onMusicPlay(SongInfoObj obj);
/**
* 当歌曲播放时触发的事件
*
* @param obj 发送者
* @param music 歌曲信息
* @return 是否阻止添加
*/
public abstract boolean onMusicAdd(Object obj, MusicObj music);
/**
* 广播消息
*
* @param data 消息
2023-01-08 20:55:21 +08:00
*/
2025-03-24 20:13:54 +08:00
public abstract void broadcast(String data);
/**
* 广播点击消息
*
* @param message 消息
* @param end 结尾
* @param command 指令
*/
public abstract void broadcastWithRun(String message, String end, String command);
/**
* 重载
*/
public final void reload() {
new AllMusic().init(getFolder());
}
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 {
send(player1, ComType.POS, null, pos);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c清空Hud发生出错");
e.printStackTrace();
}
}
/**
* 发送停止指令
*
* @param name 用户名
*/
public final void sendStop(String name) {
AllMusic.removeNowPlayPlayer(name);
Object player = getPlayer(name);
if (player == null)
return;
try {
send(player, ComType.STOP, null, 0);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c停止指令发送出错");
e.printStackTrace();
}
}
/**
* 发送停止指令
*/
public final void sendStop() {
AllMusic.clearNowPlayer();
try {
for (Object player : getPlayers()) {
send(player, ComType.STOP, null, 0);
}
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c停止指令发送出错");
e.printStackTrace();
}
}
/**
* 向指定玩家发送播放歌曲指令
*
* @param player 玩家
* @param url 地址
*/
public final void sendMusic(String player, String url) {
AllMusic.addNowPlayPlayer(player);
Object player1 = getPlayer(player);
if (player1 == null)
return;
try {
if (AllMusic.isSkip(player, getPlayerServer(player), false))
return;
send(player1, ComType.PLAY, url, 0);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c歌曲指令发送出错");
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 {
SaveObj obj = HudUtils.get(name);
if (!obj.lyric.enable)
continue;
send(player, ComType.LYRIC, data, 0);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c歌词发送出错");
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 {
SaveObj obj = HudUtils.get(name);
if (!obj.lyric.enable)
continue;
send(player, ComType.INFO, data, 0);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c歌词信息发送出错");
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 {
SaveObj obj = HudUtils.get(name);
String data = AllMusic.gson.toJson(obj);
send(player, ComType.HUD, data, 0);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c界面位置发送出错");
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:
send(player, ComType.INFO, data, 0);
break;
case LIST:
send(player, ComType.LIST, data, 0);
break;
case LYRIC:
send(player, ComType.LYRIC, data, 0);
break;
}
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c停止指令发送出错");
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 {
SaveObj obj = HudUtils.get(name);
if (!obj.list.enable)
continue;
send(player, ComType.LIST, data, 0);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c歌曲列表发送出错");
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 {
SaveObj obj = HudUtils.get(name);
String data = AllMusic.gson.toJson(obj);
send(player, ComType.HUD, data, 0);
} catch (Exception e1) {
AllMusic.log.warning("§d[AllMusic]§c数据发送发生错误");
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 数据
*/
2025-03-24 20:13:54 +08:00
public final void sendBar(String data) {
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) {
AllMusic.log.warning("§d[AllMusic]§c数据发送发生错误");
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 {
send(player, ComType.PLAY, url, 0);
AllMusic.addNowPlayPlayer(name);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c歌曲指令发送出错");
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;
SaveObj obj = HudUtils.get(name);
if (!obj.pic.enable)
continue;
try {
send(player, ComType.IMG, url, 0);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c图片指令发送出错");
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 {
send(player1, ComType.IMG, url, 0);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c图片指令发送出错");
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 {
send(player, ComType.CLEAR, null, 0);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c清空Hud发生出错");
e.printStackTrace();
}
}
/**
* 清理Hud数据
*/
public final void clearHud() {
for (Object player : getPlayers()) {
try {
send(player, ComType.CLEAR, null, 0);
} catch (Exception e) {
AllMusic.log.warning("§d[AllMusic]§c清空Hud发生出错");
e.printStackTrace();
}
}
}
2024-04-17 22:15:12 +08:00
2023-01-08 20:55:21 +08:00
/**
* 在主线程中广播消息
*
* @param data 消息
*/
2025-01-19 22:51:01 +08:00
public final void broadcastInTask(String data) {
runTask(() -> broadcast(data));
2024-05-13 09:33:41 +08:00
}
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 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) {
2024-05-13 10:28:24 +08:00
runTask(() -> sendMessage(obj, 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() {
}
2021-06-21 22:25:17 +08:00
}