package com.coloryr.allmusic.server.core.utils; import com.coloryr.allmusic.server.core.AllMusic; import com.coloryr.allmusic.server.core.music.play.LyricSave; import com.coloryr.allmusic.server.core.music.play.PlayMusic; import com.coloryr.allmusic.server.core.objs.config.LimitObj; import com.coloryr.allmusic.server.core.objs.config.SaveObj; import com.coloryr.allmusic.server.core.objs.enums.HudDirType; import com.coloryr.allmusic.server.core.objs.enums.HudType; import com.coloryr.allmusic.server.core.objs.hud.PosObj; import com.coloryr.allmusic.server.core.objs.music.SongInfoObj; import com.coloryr.allmusic.server.core.sql.DataSql; import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class HudUtils { private static final Map HudList = new ConcurrentHashMap<>(); public static SaveObj get(String name) { name = name.toLowerCase(Locale.ROOT); if (!HudList.containsKey(name)) { SaveObj obj = AllMusic.getConfig().defaultHud.copy(); HudList.put(name, obj); String finalName = name; DataSql.task(() -> DataSql.addUser(finalName, obj)); return obj; } return HudList.get(name); } public static void add(String name, SaveObj hud) { name = name.toLowerCase(Locale.ROOT); HudList.put(name, hud); } public static void addAndSave(String name, SaveObj hud) { name = name.toLowerCase(Locale.ROOT); HudList.put(name, hud); String finalName = name; DataSql.task(() -> DataSql.addUser(finalName, hud)); } public static void save() { for (Map.Entry item : HudList.entrySet()) { DataSql.addUser(item.getKey(), item.getValue()); } } /** * 设置玩家Hud位置 * * @param player 用户名 * @param pos 位置 * @param x x * @param y y * @return 位置数据 */ public static PosObj setHudPos(String player, HudType pos, String x, String y) { SaveObj obj = get(player); if (obj == null) obj = AllMusic.getConfig().defaultHud.copy(); PosObj posOBJ = new PosObj(0, 0, HudDirType.TOP_LEFT, 0xffffff, false, true); if (!Function.isInteger(x) && !Function.isInteger(y)) return null; int x1 = Integer.parseInt(x); int y1 = Integer.parseInt(y); switch (pos) { case LYRIC: posOBJ = obj.lyric; break; case LIST: posOBJ = obj.list; break; case INFO: posOBJ = obj.info; break; case PIC: posOBJ = obj.pic; } posOBJ.x = x1; posOBJ.y = y1; addAndSave(player, obj); HudUtils.sendHudPos(player); return posOBJ; } /** * 更新Hud的List数据 */ public static void sendHudListData() { String info; if (PlayMusic.getListSize() == 0) { info = AllMusic.getMessage().hud.emptyList; } else { String now; StringBuilder list = new StringBuilder(); LimitObj limit = AllMusic.getConfig().limit; for (SongInfoObj info1 : PlayMusic.getList()) { if (info1 == null) continue; now = info1.getInfo(); if (limit.listLimit && now.length() > limit.listLimitSize) now = now.substring(0, limit.listLimitSize - 1) + limit.limitText; list.append(now).append("\n"); } info = AllMusic.getMessage().hud.list .replace("%Size%", String.valueOf(PlayMusic.getList().size())) .replace("%List%", list.toString()); } AllMusic.side.sendHudList(info); } /** * 时间转换 * * @param time 时间 * @return 结果 */ private static String tranTime(int time) { int m = time / 60; int s = time - m * 60; return (m < 10 ? "0" : "") + m + ":" + (s < 10 ? "0" : "") + s; } /** * 更新Hud的信息数据 */ public static void sendHudNowData() { String info; if (PlayMusic.nowPlayMusic == null) { info = AllMusic.getMessage().hud.emptyMusic; } else { info = AllMusic.getMessage().hud.music .replace("%Name%", PlayMusic.nowPlayMusic.getName()) .replace("%AllTime%", tranTime(PlayMusic.musicAllTime)) .replace("%NowTime%", tranTime(PlayMusic.musicNowTime / 1000)) .replace("%Author%", PlayMusic.nowPlayMusic.getAuthor()) .replace("%Alia%", PlayMusic.nowPlayMusic.getAlia()) .replace("%Al%", PlayMusic.nowPlayMusic.getAl()) .replace("%Player%", PlayMusic.nowPlayMusic.getCall()); } LimitObj limit = AllMusic.getConfig().limit; if (limit.messageLimit && info.length() > limit.messageLimitSize) info = info.substring(0, limit.messageLimitSize - 1) + limit.limitText; AllMusic.side.sendHudInfo(info); } /** * 更新Hud的歌词数据 */ public static void sendHudLyricData() { String info; LyricSave obj = PlayMusic.lyric; if (obj == null) { info = AllMusic.getMessage().hud.emptyLyric; } else { String lyric = obj.getLyric(); String tLyric = obj.getTlyric(); String kLyric = obj.getKly(); if (!AllMusic.getConfig().ktvMode) { info = AllMusic.getMessage().hud.lyric .replace("%Lyric%", lyric == null ? "" : lyric) .replace("%Tlyric%", tLyric != null ? tLyric : ""); } else { info = AllMusic.getMessage().hud.ktv .replace("%Lyric%", lyric != null ? lyric : "") .replace("%KLyric%", kLyric != null ? kLyric : "") .replace("%Tlyric%", tLyric != null ? tLyric : ""); } } AllMusic.side.sendHudLyric(info); } /** * 更新Hud的开启关闭数据 * * @param player 用户名 * @param pos 输入数据 * @return 设置结果 */ public static boolean setHudEnable(String player, HudType pos, String arg) { SaveObj obj = get(player); boolean res = false; boolean value = false; boolean have = false; if (arg != null) { try { value = Boolean.parseBoolean(arg); have = true; } catch (Exception e) { return false; } } if (obj == null) { obj = AllMusic.getConfig().defaultHud.copy(); if (have) { res = obj.info.enable = obj.list.enable = obj.lyric.enable = obj.pic.enable = value; } else { res = obj.info.enable = obj.list.enable = obj.lyric.enable = obj.pic.enable = true; } } else { if (pos == null) { if (have) { res = obj.info.enable = obj.list.enable = obj.lyric.enable = obj.pic.enable = value; } else if (obj.info.enable && obj.list.enable && obj.lyric.enable && obj.pic.enable) { obj.info.enable = obj.list.enable = obj.lyric.enable = obj.pic.enable = false; } else { res = obj.info.enable = obj.list.enable = obj.lyric.enable = obj.pic.enable = true; } } else { switch (pos) { case INFO: res = obj.info.enable = have ? value : !obj.info.enable; break; case LIST: res = obj.list.enable = have ? value : !obj.list.enable; break; case LYRIC: res = obj.lyric.enable = have ? value : !obj.lyric.enable; break; case PIC: res = obj.pic.enable = have ? value : !obj.pic.enable; break; } } } addAndSave(player, obj); HudUtils.sendHudPos(player); return res; } /** * 清空Hud数据 */ public static void clearHud() { AllMusic.side.clearHud(); } /** * 清空Hud数 * * @param player 用户名 */ public static void clearHud(String player) { AllMusic.side.clearHud(player); } /** * 发送Hud位置信息 * * @param player 用户名 */ public static void sendHudPos(String player) { AllMusic.side.runTask(() -> { try { SaveObj obj = get(player); if (obj == null) { obj = AllMusic.getConfig().defaultHud.copy(); addAndSave(player, obj); } AllMusic.side.sendHudPos(player); } catch (Exception e1) { AllMusic.log.warning("§d[AllMusic3]§c数据发送发生错误"); e1.printStackTrace(); } }); } /** * 重置Hud位置 * * @param player 用户名 */ public static void reset(String player) { SaveObj obj = AllMusic.getConfig().defaultHud.copy(); addAndSave(player, obj); HudUtils.sendHudPos(player); } public static void reset(String player, HudType type) { SaveObj obj = AllMusic.getConfig().defaultHud.copy(); SaveObj obj1 = get(player); switch (type) { case INFO: obj1.info = obj.info; break; case LIST: obj1.list = obj.list; break; case LYRIC: obj1.lyric = obj.lyric; break; case PIC: obj1.pic = obj.pic; obj1.picRotateSpeed = obj.picRotateSpeed; break; } addAndSave(player, obj1); HudUtils.sendHudPos(player); } /** * 设置Hud的图片大小 * * @param player 用户名 * @param size 大小 * @return 结果 */ public static boolean setPicSize(String player, String size) { SaveObj obj = get(player); if (obj == null) obj = AllMusic.getConfig().defaultHud.copy(); if (!Function.isInteger(size)) return false; obj.pic.color = Integer.parseInt(size); addAndSave(player, obj); HudUtils.sendHudPos(player); return true; } /** * 图片旋转开关 * * @param player 用户名 * @param open 开关 * @return 结果 */ public static boolean setPicRotate(String player, String open) { SaveObj obj = get(player); if (obj == null) obj = AllMusic.getConfig().defaultHud.copy(); if (open != null) { obj.pic.shadow = Boolean.parseBoolean(open); } else { obj.pic.shadow = !obj.pic.shadow; } addAndSave(player, obj); HudUtils.sendHudPos(player); return obj.pic.shadow; } /** * 图片旋转速度设置 * * @param player 用户名 * @param size 大小 * @return 结果 */ public static boolean setPicRotateSpeed(String player, String size) { SaveObj obj = get(player); if (obj == null) obj = AllMusic.getConfig().defaultHud.copy(); if (!Function.isInteger(size)) return false; obj.picRotateSpeed = Integer.parseInt(size); addAndSave(player, obj); HudUtils.sendHudPos(player); return true; } public static HudDirType setDir(String player, HudType hud, String arg) { HudDirType type = null; try { if (Function.isInteger(arg)) { int index = Integer.parseInt(arg); type = HudDirType.values()[index]; } else { type = HudDirType.valueOf(arg); } } catch (Exception ignored) { } if (type == null) { return null; } SaveObj obj = get(player); if (obj == null) obj = AllMusic.getConfig().defaultHud.copy(); switch (hud) { case INFO: obj.info.dir = type; break; case LIST: obj.list.dir = type; break; case LYRIC: obj.lyric.dir = type; break; case PIC: obj.pic.dir = type; break; } addAndSave(player, obj); HudUtils.sendHudPos(player); return type; } public static boolean setColor(String player, HudType type, String arg) { int color; try { color = arg.startsWith("0x") ? Integer.parseUnsignedInt(arg.substring(2), 16) : Integer.parseUnsignedInt(arg); } catch (Exception ignored) { return false; } SaveObj obj = get(player); if (obj == null) obj = AllMusic.getConfig().defaultHud.copy(); switch (type) { case INFO: obj.info.color = color; break; case LIST: obj.list.color = color; break; case LYRIC: obj.lyric.color = color; break; case PIC: obj.pic.color = color; break; } addAndSave(player, obj); HudUtils.sendHudPos(player); return true; } public static boolean setShadow(String name, HudType pos, String arg) { SaveObj obj = get(name); boolean res = false; boolean value = false; boolean have = false; if (arg != null) { try { value = Boolean.parseBoolean(arg); have = true; } catch (Exception e) { return false; } } if (obj == null) { obj = AllMusic.getConfig().defaultHud.copy(); if (have) { res = obj.info.shadow = obj.list.shadow = obj.lyric.shadow = obj.pic.shadow = value; } else { res = obj.info.shadow = obj.list.shadow = obj.lyric.shadow = obj.pic.shadow = true; } } else { if (pos == null) { if (have) { res = obj.info.shadow = obj.list.shadow = obj.lyric.shadow = obj.pic.shadow = value; } else if (obj.info.shadow && obj.list.shadow && obj.lyric.shadow && obj.pic.shadow) { obj.info.shadow = obj.list.shadow = obj.lyric.shadow = obj.pic.shadow = false; } else { res = obj.info.shadow = obj.list.shadow = obj.lyric.shadow = obj.pic.shadow = true; } } else { switch (pos) { case INFO: res = obj.info.shadow = have ? value : !obj.info.shadow; break; case LIST: res = obj.list.shadow = have ? value : !obj.list.shadow; break; case LYRIC: res = obj.lyric.shadow = have ? value : !obj.lyric.shadow; break; case PIC: res = obj.pic.shadow = have ? value : !obj.pic.shadow; break; } } } addAndSave(name, obj); HudUtils.sendHudPos(name); return res; } public static void set(String name, SaveObj obj) { addAndSave(name, obj); HudUtils.sendHudPos(name); } }