mirror of
https://github.com/Coloryr/AllMusic.git
synced 2026-11-12 18:57:36 +00:00
450 lines
13 KiB
Java
450 lines
13 KiB
Java
package coloryr.allmusic.core.utils;
|
|
|
|
import coloryr.allmusic.core.AllMusic;
|
|
import coloryr.allmusic.core.objs.enums.HudType;
|
|
import coloryr.allmusic.core.music.play.LyricSave;
|
|
import coloryr.allmusic.core.music.play.PlayMusic;
|
|
import coloryr.allmusic.core.objs.config.SaveObj;
|
|
import coloryr.allmusic.core.objs.enums.HudDirType;
|
|
import coloryr.allmusic.core.objs.hud.PosObj;
|
|
import coloryr.allmusic.core.objs.music.SongInfoObj;
|
|
import coloryr.allmusic.core.sql.DataSql;
|
|
import com.google.gson.Gson;
|
|
|
|
import java.util.Locale;
|
|
import java.util.Map;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
public class HudUtils {
|
|
private static final Map<String, SaveObj> 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<String, SaveObj> 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();
|
|
for (SongInfoObj info1 : PlayMusic.getList()) {
|
|
if (info1 == null)
|
|
continue;
|
|
now = info1.getInfo();
|
|
if (now.length() > AllMusic.getConfig().messageLimitSize)
|
|
now = now.substring(0, AllMusic.getConfig().messageLimitSize - 1) + "...";
|
|
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());
|
|
}
|
|
|
|
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();
|
|
clearHud(player);
|
|
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;
|
|
}
|
|
}
|