diff --git a/core/AllMusic.java b/core/AllMusic.java index ec1cd767..c7953abd 100644 --- a/core/AllMusic.java +++ b/core/AllMusic.java @@ -56,15 +56,6 @@ public class AllMusic { * 语言文件配置版本号 */ public static final String messageVersion = "210"; - /** - * 搜歌结果 - * 玩家名 结果 - */ - private static final Map searchSave = new HashMap<>(); - /** - * 正在播放的玩家 - */ - private static final Set nowPlayPlayer = new HashSet<>(); /** * 日志 */ @@ -128,15 +119,6 @@ public class AllMusic { } } - /** - * 获取正在播放的玩家列表 - * - * @return 列表 - */ - public static Set getNowPlayPlayer() { - return nowPlayPlayer; - } - /** * 检查是否需要放歌 * @@ -156,7 +138,7 @@ public class AllMusic { return true; if (!checkPlay) return false; - return AllMusic.containNowPlay(name); + return PlayMusic.containNowPlay(name); } catch (NoSuchElementException e) { return true; } @@ -182,23 +164,12 @@ public class AllMusic { return true; if (!checkPlay) return false; - return AllMusic.containNowPlay(name); + return PlayMusic.containNowPlay(name); } catch (NoSuchElementException e) { return true; } } - /** - * 是否存在正在播放的玩家 - * - * @param player 用户名 - * @return 是否存在 - */ - public static boolean containNowPlay(String player) { - player = player.toLowerCase(); - return !nowPlayPlayer.contains(player); - } - /** * 获取配置文件 * @@ -225,65 +196,6 @@ public class AllMusic { return message; } - /** - * 添加搜歌结果 - * - * @param player 用户名 - * @param page 结果 - */ - public static void addSearch(String player, SearchPageObj page) { - player = player.toLowerCase(); - searchSave.put(player, page); - } - - /** - * 获取搜歌结果 - * - * @param player 用户名 - * @return 结果 - */ - public static SearchPageObj getSearch(String player) { - player = player.toLowerCase(); - return searchSave.get(player); - } - - /** - * 删除搜歌结果 - * - * @param player 用户名 - */ - public static void removeSearch(String player) { - player = player.toLowerCase(); - searchSave.remove(player); - } - - /** - * 添加正在播放的玩家 - * - * @param player 用户名 - */ - public static void addNowPlayPlayer(String player) { - player = player.toLowerCase(); - nowPlayPlayer.add(player); - } - - /** - * 删除正在播放的玩家 - * - * @param player 用户名 - */ - public static void removeNowPlayPlayer(String player) { - player = player.toLowerCase(); - nowPlayPlayer.remove(player); - } - - /** - * 清空正在播放玩家的列表 - */ - public static void clearNowPlayer() { - nowPlayPlayer.clear(); - } - /** * 保存配置文件 */ @@ -358,10 +270,6 @@ public class AllMusic { */ public static void stop() { isRun = false; - - PlayMusic.clearVote(); - PlayMusic.clearPush(); - PlayMusic.clear(); PlayRuntime.stop(); DataSql.stop(); side.sendStop(); @@ -427,7 +335,7 @@ public class AllMusic { public static void joinPlay(String player) { DataSql.task(() -> { String player1 = player.toLowerCase(); - if (DataSql.checkMutePlayer(player1) || nowPlayPlayer.contains(player1)) { + if (DataSql.checkMutePlayer(player1) || PlayMusic.containNowPlay(player1)) { return; } if (DataSql.checkMuteListPlayer(player1) && PlayMusic.nowPlayMusic != null diff --git a/core/command/CommandEX.java b/core/command/CommandEX.java index aa8fa011..e4bacdd6 100644 --- a/core/command/CommandEX.java +++ b/core/command/CommandEX.java @@ -288,7 +288,7 @@ public class CommandEX { if (checkAdmin(sender, name)) { arguments.addAll(admin); } - if (AllMusic.getSearch(name) != null) { + if (MusicSearch.getSearch(name) != null) { return search; } } else { @@ -298,7 +298,7 @@ public class CommandEX { arguments.addAll(admin); } if (arg[0] == null || arg[0].isEmpty()) { - if (AllMusic.getSearch(name) != null) { + if (MusicSearch.getSearch(name) != null) { return search; } } diff --git a/core/command/sub/CommandLastPage.java b/core/command/sub/CommandLastPage.java index 7b4e49db..4c9dca7e 100644 --- a/core/command/sub/CommandLastPage.java +++ b/core/command/sub/CommandLastPage.java @@ -14,7 +14,7 @@ public class CommandLastPage extends ACommand { AllMusic.side.sendMessage(sender, AllMusic.getMessage().search.noPer); return; } - SearchPageObj obj = AllMusic.getSearch(name); + SearchPageObj obj = MusicSearch.getSearch(name); if (obj == null) { AllMusic.side.sendMessage(sender, AllMusic.getMessage().search.emptySearch); } else if (obj.lastPage()) { diff --git a/core/command/sub/CommandNextPage.java b/core/command/sub/CommandNextPage.java index 481e6554..9253a999 100644 --- a/core/command/sub/CommandNextPage.java +++ b/core/command/sub/CommandNextPage.java @@ -14,7 +14,7 @@ public class CommandNextPage extends ACommand { AllMusic.side.sendMessage(sender, AllMusic.getMessage().search.noPer); return; } - SearchPageObj obj = AllMusic.getSearch(name); + SearchPageObj obj = MusicSearch.getSearch(name); if (obj == null) { AllMusic.side.sendMessage(sender, AllMusic.getMessage().search.emptySearch); } else if (obj.nextPage()) { diff --git a/core/command/sub/CommandSelect.java b/core/command/sub/CommandSelect.java index f39ffb19..7e3ec8ea 100644 --- a/core/command/sub/CommandSelect.java +++ b/core/command/sub/CommandSelect.java @@ -4,6 +4,7 @@ import com.coloryr.allmusic.server.core.AllMusic; import com.coloryr.allmusic.server.core.command.ACommand; import com.coloryr.allmusic.server.core.command.CommandEX; import com.coloryr.allmusic.server.core.command.PermissionList; +import com.coloryr.allmusic.server.core.music.MusicSearch; import com.coloryr.allmusic.server.core.objs.message.ARG; import com.coloryr.allmusic.server.core.objs.music.SearchPageObj; import com.coloryr.allmusic.server.core.sql.DataSql; @@ -21,7 +22,7 @@ public class CommandSelect extends ACommand { AllMusic.side.sendMessage(sender, AllMusic.getMessage().search.noPer); return; } - SearchPageObj obj = AllMusic.getSearch(name); + SearchPageObj obj = MusicSearch.getSearch(name); if (obj == null) { AllMusic.side.sendMessage(sender, AllMusic.getMessage().search.emptySearch); } else if (!args[1].isEmpty() && Function.isInteger(args[1])) { @@ -34,7 +35,7 @@ public class CommandSelect extends ACommand { AllMusic.side.sendMessage(sender, AllMusic.getMessage().search.choice.replace(ARG.index, "" + a)); DataSql.task(() -> CommandEX.addMusic(sender, name, obj.getApi(), id)); - AllMusic.removeSearch(name); + MusicSearch.removeSearch(name); } else { AllMusic.side.sendMessage(sender, AllMusic.getMessage().search.errorNum); } @@ -44,7 +45,7 @@ public class CommandSelect extends ACommand { public List tab(Object player, String name, String[] args, int index) { if (args.length == 1 || (args.length == 2)) { List list = new ArrayList<>(); - SearchPageObj obj = AllMusic.getSearch(name); + SearchPageObj obj = MusicSearch.getSearch(name); if (obj != null) { for (int a = 0; a < obj.getIndex(); a++) { list.add(String.valueOf(a + 1)); diff --git a/core/command/sub/CommandStop.java b/core/command/sub/CommandStop.java index f56ea0e0..e3e68773 100644 --- a/core/command/sub/CommandStop.java +++ b/core/command/sub/CommandStop.java @@ -3,6 +3,7 @@ package com.coloryr.allmusic.server.core.command.sub; import com.coloryr.allmusic.server.core.AllMusic; import com.coloryr.allmusic.server.core.command.ACommand; import com.coloryr.allmusic.server.core.command.CommandEX; +import com.coloryr.allmusic.server.core.music.PlayMusic; import com.coloryr.allmusic.server.core.utils.HudUtils; import java.util.ArrayList; @@ -25,7 +26,7 @@ public class CommandStop extends ACommand { @Override public List tab(Object player, String name, String[] args, int index) { if (args.length == index || (args.length == index + 1) && CommandEX.checkAdmin(player, name)) { - return new ArrayList<>(AllMusic.getNowPlayPlayer()); + return new ArrayList<>(PlayMusic.getNowPlayPlayer()); } else { return Collections.emptyList(); } diff --git a/core/music/MusicSearch.java b/core/music/MusicSearch.java index 327ed541..3c4cff99 100644 --- a/core/music/MusicSearch.java +++ b/core/music/MusicSearch.java @@ -7,10 +7,19 @@ import com.coloryr.allmusic.server.core.objs.message.ARG; import com.coloryr.allmusic.server.core.objs.music.PlayerAddMusicObj; import com.coloryr.allmusic.server.core.objs.music.SearchPageObj; +import java.util.HashMap; +import java.util.Map; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; public class MusicSearch { + + /** + * 搜歌结果 + * 玩家名 结果 + */ + private static final Map searchSave = new HashMap<>(); + private static final Queue tasks = new ConcurrentLinkedQueue<>(); private static void task() { @@ -30,7 +39,7 @@ public class MusicSearch { .cantSearch.replace(ARG.name, obj.isDefault ? obj.args[0] : obj.args[1])); else { AllMusic.side.sendMessageTask(obj.sender, AllMusic.getMessage().search.res); - AllMusic.addSearch(obj.name, search); + addSearch(obj.name, search); AllMusic.side.runTask(() -> showSearch(obj.sender, search)); } } @@ -40,6 +49,8 @@ public class MusicSearch { e.printStackTrace(); } } + searchSave.clear(); + tasks.clear(); AllMusic.log.data("歌曲搜索线程停止"); } @@ -82,4 +93,36 @@ public class MusicSearch { } AllMusic.side.sendMessage(sender, ""); } + + /** + * 添加搜歌结果 + * + * @param player 用户名 + * @param page 结果 + */ + public static void addSearch(String player, SearchPageObj page) { + player = player.toLowerCase(); + searchSave.put(player, page); + } + + /** + * 获取搜歌结果 + * + * @param player 用户名 + * @return 结果 + */ + public static SearchPageObj getSearch(String player) { + player = player.toLowerCase(); + return searchSave.get(player); + } + + /** + * 删除搜歌结果 + * + * @param player 用户名 + */ + public static void removeSearch(String player) { + player = player.toLowerCase(); + searchSave.remove(player); + } } diff --git a/core/music/PlayMusic.java b/core/music/PlayMusic.java index 0e4c39a9..b904aac1 100644 --- a/core/music/PlayMusic.java +++ b/core/music/PlayMusic.java @@ -21,6 +21,10 @@ public class PlayMusic { private static final List playList = new ArrayList<>(); private static final Queue tasks = new ConcurrentLinkedQueue<>(); private static final Queue deep = new ConcurrentLinkedQueue<>(); + /** + * 正在播放的玩家 + */ + private static final Set nowPlayPlayer = new HashSet<>(); /** * 切歌投票的玩家 */ @@ -77,7 +81,10 @@ public class PlayMusic { * 插歌目标 */ private static SongInfoObj push; - private static int idleNow; + /** + * 空闲列表取出的歌曲序号 + */ + private static int idleIndex; /** * 开始歌曲逻辑 @@ -223,6 +230,13 @@ public class PlayMusic { e.printStackTrace(); } } + nowPlayPlayer.clear(); + votePlayer.clear(); + pushPlayer.clear(); + playList.clear(); + clearVote(); + clearPush(); + AllMusic.log.data("歌曲处理线程关闭"); } @@ -492,10 +506,10 @@ public class PlayMusic { music = DataSql.readListItem(); } } else { - music = DataSql.readListItem(idleNow); - idleNow++; - if (idleNow >= len) { - idleNow = 0; + music = DataSql.readListItem(idleIndex); + idleIndex++; + if (idleIndex >= len) { + idleIndex = 0; } } return music; @@ -525,5 +539,52 @@ public class PlayMusic { return list1.get(index); } + + /** + * 获取正在播放的玩家列表 + * + * @return 列表 + */ + public static Set getNowPlayPlayer() { + return nowPlayPlayer; + } + + /** + * 是否存在正在播放的玩家 + * + * @param player 用户名 + * @return 是否存在 + */ + public static boolean containNowPlay(String player) { + player = player.toLowerCase(); + return !nowPlayPlayer.contains(player); + } + + /** + * 添加正在播放的玩家 + * + * @param player 用户名 + */ + public static void addNowPlayPlayer(String player) { + player = player.toLowerCase(); + nowPlayPlayer.add(player); + } + + /** + * 删除正在播放的玩家 + * + * @param player 用户名 + */ + public static void removeNowPlayPlayer(String player) { + player = player.toLowerCase(); + nowPlayPlayer.remove(player); + } + + /** + * 清空正在播放玩家的列表 + */ + public static void clearNowPlayer() { + nowPlayPlayer.clear(); + } } diff --git a/core/side/BaseSide.java b/core/side/BaseSide.java index 2464b3f8..b5d06933 100644 --- a/core/side/BaseSide.java +++ b/core/side/BaseSide.java @@ -4,6 +4,7 @@ import com.coloryr.allmusic.codec.CommandType; import com.coloryr.allmusic.codec.HudPosObj; import com.coloryr.allmusic.codec.HudType; import com.coloryr.allmusic.server.core.AllMusic; +import com.coloryr.allmusic.server.core.music.PlayMusic; import com.coloryr.allmusic.server.core.objs.music.PlayerAddMusicObj; import com.coloryr.allmusic.server.core.objs.music.SongInfoObj; import com.coloryr.allmusic.server.core.utils.HudUtils; @@ -182,7 +183,7 @@ public abstract class BaseSide { * @param name 用户名 */ public final void sendStop(String name) { - AllMusic.removeNowPlayPlayer(name); + PlayMusic.removeNowPlayPlayer(name); Object player = getPlayer(name); if (player == null) return; @@ -198,7 +199,7 @@ public abstract class BaseSide { * 发送停止指令 */ public final void sendStop() { - AllMusic.clearNowPlayer(); + PlayMusic.clearNowPlayer(); try { for (Object player : getPlayers()) { send(player, CommandType.STOP, null, 0); @@ -216,7 +217,7 @@ public abstract class BaseSide { * @param url 地址 */ public final void sendMusic(String player, String url) { - AllMusic.addNowPlayPlayer(player); + PlayMusic.addNowPlayPlayer(player); Object player1 = getPlayer(player); if (player1 == null) return; @@ -417,7 +418,7 @@ public abstract class BaseSide { continue; try { send(player, CommandType.PLAY, url, 0); - AllMusic.addNowPlayPlayer(name); + PlayMusic.addNowPlayPlayer(name); } catch (Exception e) { AllMusic.log.data("[AllMusic]歌曲指令发送出错"); e.printStackTrace(); diff --git a/core/sql/DataSql.java b/core/sql/DataSql.java index 98811038..6f95a03f 100644 --- a/core/sql/DataSql.java +++ b/core/sql/DataSql.java @@ -738,6 +738,13 @@ public class DataSql { */ public static void stop() { semaphore.release(); + try { + if (connection != null && connection.isClosed()) { + connection.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } } private static void run() { diff --git a/folia/gradle/wrapper/gradle-wrapper.properties b/folia/gradle/wrapper/gradle-wrapper.properties index 94113f20..aaaabb3c 100644 --- a/folia/gradle/wrapper/gradle-wrapper.properties +++ b/folia/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/folia/src/main/java/com/coloryr/allmusic/server/ListenerFolia.java b/folia/src/main/java/com/coloryr/allmusic/server/ListenerFolia.java index 6f814494..3e162236 100644 --- a/folia/src/main/java/com/coloryr/allmusic/server/ListenerFolia.java +++ b/folia/src/main/java/com/coloryr/allmusic/server/ListenerFolia.java @@ -1,6 +1,7 @@ package com.coloryr.allmusic.server; import com.coloryr.allmusic.server.core.AllMusic; +import com.coloryr.allmusic.server.core.music.PlayMusic; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; @@ -9,7 +10,7 @@ import org.bukkit.event.player.PlayerQuitEvent; public class ListenerFolia implements Listener { @EventHandler public void onPlayerQuitEvent(final PlayerQuitEvent e) { - AllMusic.removeNowPlayPlayer(e.getPlayer().getName()); + PlayMusic.removeNowPlayPlayer(e.getPlayer().getName()); } @EventHandler