From cf6647661b57083d1fcdf7ecd6b1f65fe80efe39 Mon Sep 17 00:00:00 2001 From: yaohunya <31456652@qq.com> Date: Fri, 2 Aug 2024 18:35:19 +0800 Subject: [PATCH] init --- .gitignore | 4 + src/main/java/com/io/yutian/mclive/Main.java | 91 ++++++++++++- .../com/io/yutian/mclive/data/GiftManage.java | 54 ++++++-- .../io/yutian/mclive/data/IPGeolocation.java | 68 ++++++++++ .../mclive/data/database/SqlManager.java | 20 +-- .../com/io/yutian/mclive/event/ZhuboAPI.java | 12 ++ .../JoinGameRoom.java} | 7 +- .../mclive/{ => listener}/LiveAdminGui.java | 32 +++-- .../io/yutian/mclive/listener/SoundsMenu.java | 125 ++++++++++++++++++ .../yutian/mclive/{ => live}/LiveEvent.java | 6 +- .../io/yutian/mclive/{ => live}/ModEvent.java | 5 +- .../yutian/mclive/{ => util}/ConfigYml.java | 3 +- .../mclive/{Util => util}/MessageUtil.java | 10 +- .../yutian/mclive/{Util => util}/SqlUtil.java | 4 +- .../java/com/io/yutian/verify/AESUtil.java | 23 +++- src/main/resources/plugin.yml | 5 +- .../com/io/yutian/mclive/ConfigYml.class | Bin 4662 -> 0 bytes .../com/io/yutian/mclive/LinkRoom.class | Bin 4815 -> 0 bytes .../com/io/yutian/mclive/LiveAdminGui.class | Bin 11093 -> 0 bytes .../com/io/yutian/mclive/LiveEvent.class | Bin 4896 -> 0 bytes .../classes/com/io/yutian/mclive/Main.class | Bin 10001 -> 12611 bytes .../com/io/yutian/mclive/event/ZhuboAPI.class | Bin 1113 -> 1748 bytes .../com/io/yutian/verify/AESUtil.class | Bin 5280 -> 6055 bytes target/classes/plugin.yml | 5 +- 24 files changed, 419 insertions(+), 55 deletions(-) create mode 100644 .gitignore create mode 100644 src/main/java/com/io/yutian/mclive/data/IPGeolocation.java rename src/main/java/com/io/yutian/mclive/{LinkRoom.java => listener/JoinGameRoom.java} (88%) rename src/main/java/com/io/yutian/mclive/{ => listener}/LiveAdminGui.java (93%) create mode 100644 src/main/java/com/io/yutian/mclive/listener/SoundsMenu.java rename src/main/java/com/io/yutian/mclive/{ => live}/LiveEvent.java (95%) rename src/main/java/com/io/yutian/mclive/{ => live}/ModEvent.java (84%) rename src/main/java/com/io/yutian/mclive/{ => util}/ConfigYml.java (97%) rename src/main/java/com/io/yutian/mclive/{Util => util}/MessageUtil.java (94%) rename src/main/java/com/io/yutian/mclive/{Util => util}/SqlUtil.java (96%) delete mode 100644 target/classes/com/io/yutian/mclive/ConfigYml.class delete mode 100644 target/classes/com/io/yutian/mclive/LinkRoom.class delete mode 100644 target/classes/com/io/yutian/mclive/LiveAdminGui.class delete mode 100644 target/classes/com/io/yutian/mclive/LiveEvent.class diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ad6eac7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/out/ +/.idea/ +/target/ +/lib/ diff --git a/src/main/java/com/io/yutian/mclive/Main.java b/src/main/java/com/io/yutian/mclive/Main.java index 4071764..c27d5c4 100644 --- a/src/main/java/com/io/yutian/mclive/Main.java +++ b/src/main/java/com/io/yutian/mclive/Main.java @@ -3,8 +3,14 @@ package com.io.yutian.mclive; import com.io.yutian.livemutually.manager.KSLiveRoomManager; import com.io.yutian.mclive.data.GiftManage; import com.io.yutian.mclive.event.ZhuboAPI; -import com.io.yutian.pixelliveplugin.PixelLiveAPI; +import com.io.yutian.mclive.listener.JoinGameRoom; +import com.io.yutian.mclive.listener.LiveAdminGui; +import com.io.yutian.mclive.listener.SoundsMenu; +import com.io.yutian.mclive.live.LiveEvent; +import com.io.yutian.mclive.live.ModEvent; +import com.io.yutian.mclive.util.ConfigYml; import org.bukkit.Bukkit; +import org.bukkit.Sound; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; @@ -12,12 +18,10 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.*; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; import java.io.File; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; import java.util.List; import java.util.regex.Pattern; @@ -32,17 +36,18 @@ public class Main extends JavaPlugin { @Override public void onEnable() { plugin = this; - saveDefaultConfig(); SendPluginsAuthorMessage(Bukkit.getConsoleSender()); configYml = new ConfigYml(getConfig()); if (giftStatistics){ giftManage = new GiftManage(); giftManage.LinkMySqlData(); } + addSoundKeyList(); getServer().getPluginManager().registerEvents(new LiveAdminGui(),this); - getServer().getPluginManager().registerEvents(new LinkRoom(),this); + getServer().getPluginManager().registerEvents(new JoinGameRoom(),this); getServer().getPluginManager().registerEvents(new ModEvent(),this); getServer().getPluginManager().registerEvents(new LiveEvent(configYml),this); + getServer().getPluginManager().registerEvents(new SoundsMenu(),this); Bukkit.getConsoleSender().sendMessage("§b[整蛊MC直播] §7当前版本: §ev"+plugin.getDescription().getVersion()); Plugin plugin = getServer().getPluginManager().getPlugin(configYml.getGameMode()); if (plugin != null) { @@ -63,8 +68,73 @@ public class Main extends JavaPlugin { } } + public static void addSoundKeyList(){ + List stringList = new ArrayList<>(); + stringList.add("youbom"); + stringList.add("oi"); + stringList.add("man"); + stringList.add("jiarenmen"); + stringList.add("huwuqifei"); + stringList.add("ccp1"); + stringList.add("ccp2"); + stringList.add("dxj"); + stringList.add("ybjjj"); + stringList.add("mc_chidongxi"); + stringList.add("zhasini"); + stringList.add("jingbao"); + stringList.add("dashengfa"); + stringList.add("biu"); + stringList.add("csgo1"); + stringList.add("dalia"); + stringList.add("haihaihai"); + stringList.add("jingshenxiaohuo"); + stringList.add("mymymy"); + stringList.add("waou"); + stringList.add("xiaohuangya"); + stringList.add("huh"); + stringList.add("lailea"); + stringList.add("douduoyu"); + stringList.add("heiheihei"); + stringList.add("ji"); + stringList.add("aligaduo"); + stringList.add("duolaameng"); + stringList.add("haimianbb"); + stringList.add("gua"); + stringList.add("xiaofeigun"); + stringList.add("hedantou"); + stringList.add("xxx"); + stringList.add("xh"); + stringList.add("any"); + stringList.add("bbt"); + stringList.add("rqq"); + stringList.add("bsj"); + stringList.add("boboji"); + stringList.add("dahulu"); + stringList.add("jujueno"); + stringList.add("mofaxiufu"); + stringList.add("ohuo"); + stringList.add("touxi"); + stringList.add("wanlewanle"); + stringList.add("fangpi"); + stringList.add("hedan"); + stringList.add("niganma"); + SoundsMenu.soundList.addAll(stringList); + } + + @Override + public void onDisable() { + if(giftStatistics && ConfigYml.mysqlState) { + for (Player player : Bukkit.getOnlinePlayers()) { + giftManage.SaveZhuboData(player.getName()); + } + } + } + @Override public boolean onCommand(CommandSender sender, Command command, String Command, String[] args) { + if (Command.equalsIgnoreCase("sounds")) { + SoundsMenu.OpenGui((Player) sender,1); + } if (Command.equalsIgnoreCase("mclive")) { if (args.length == 0) { sender.sendMessage(""); @@ -133,6 +203,15 @@ public class Main extends JavaPlugin { Main.configYml.setRoomId(playName, room_id); Main.configYml.SaveConfigYml(); sender.sendMessage("§c[系统]§a直播间已设置 §e" + playName + " §a--> §e" + room_id); + player.resetTitle(); + player.sendTitle("§a§l绑定成功!","§6已绑定抖音号: §f"+room_id,0,40,20); + player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP,1,1); + new BukkitRunnable() { + @Override + public void run() { + player.sendTitle("§c尚未连接弹幕软件","§6按住SHIFT键 + F键 §f点击按钮连接",5,20*60,20); + } + }.runTaskLater(this,40); return true; } if (args.length == 1 && args[0].equalsIgnoreCase("save")) { diff --git a/src/main/java/com/io/yutian/mclive/data/GiftManage.java b/src/main/java/com/io/yutian/mclive/data/GiftManage.java index c1e67e4..8fd0de3 100644 --- a/src/main/java/com/io/yutian/mclive/data/GiftManage.java +++ b/src/main/java/com/io/yutian/mclive/data/GiftManage.java @@ -1,25 +1,53 @@ package com.io.yutian.mclive.data; -import com.io.yutian.mclive.ConfigYml; +import com.io.yutian.mclive.util.ConfigYml; import com.io.yutian.mclive.Main; -import com.io.yutian.mclive.Util.SqlUtil; +import com.io.yutian.mclive.util.SqlUtil; import com.io.yutian.mclive.data.database.SqlManager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; public class GiftManage { private double totalMoney; - private HashMap giftMap = new HashMap<>(); + private LinkedHashMap giftMap = new LinkedHashMap<>(); + + public List getGiftNameList() { + return new ArrayList<>(giftMap.keySet()); + } public GiftManage(){ totalMoney = 0; + giftMap.put("小心心",1); + giftMap.put("人气票",1); + giftMap.put("闪耀星辰",1); + giftMap.put("加油鸭",1); + giftMap.put("比心兔兔",1); + giftMap.put("热气球",1); + giftMap.put("爱你哟",1); + giftMap.put("天鹅之梦",1); + giftMap.put("Thuglife",1); + giftMap.put("粘人小狗",1); + giftMap.put("粉丝团灯牌",1); + giftMap.put("大啤酒",2); giftMap.put("玫瑰",1); giftMap.put("抖音",1); giftMap.put("称心如意",1); giftMap.put("你最好看",2); + giftMap.put("助力票",1); + giftMap.put("荣耀擂鼓",99); + giftMap.put("宠粉季",1); + giftMap.put("兔耳朵",99); + giftMap.put("游戏手柄",99); + giftMap.put("冰镇西瓜",99); + giftMap.put("为你闪耀",9); + giftMap.put("棒棒糖",9); + giftMap.put("鲜花",10); giftMap.put("亲吻",99); giftMap.put("跑车",1200); giftMap.put("礼花筒",199); @@ -29,11 +57,9 @@ public class GiftManage { giftMap.put("爱的纸鹤",99); giftMap.put("送你花花",49); giftMap.put("女神花环",99); - giftMap.put("粘人小狗",1); giftMap.put("鱼你一起",99); giftMap.put("真爱玫瑰",366); giftMap.put("为你举牌",199); - giftMap.put("兔耳朵",99); giftMap.put("龙抬头",99); giftMap.put("花开烂漫",466); giftMap.put("比心",199); @@ -125,8 +151,6 @@ public class GiftManage { giftMap.put("小纸条",399); giftMap.put("如意锦囊",99); giftMap.put("星光瓶",900); - giftMap.put("粉丝团灯牌",1); - giftMap.put("为你闪耀",9); giftMap.put("一直陪伴你",520); giftMap.put("动次打次",2999); giftMap.put("宇宙之心",18888); @@ -165,13 +189,25 @@ public class GiftManage { return totalMoney; } + public void defaultTotalMoney(){ + if(this.totalMoney <= 0) { + for (Player player : Bukkit.getOnlinePlayers()) { + String name = player.getName(); + if (Main.configYml.getRoomId(name) == null) { + return; + } + String tiktok = Main.configYml.getRoomId(name); + this.totalMoney = sqlManager.getZhuboIncome(tiktok) * 10; + } + } + } public void addTotalMoney(String name,int money){ if(this.totalMoney <= 0){ if(Main.configYml.getRoomId(name) == null){ return; } String tiktok = Main.configYml.getRoomId(name); - this.totalMoney = sqlManager.getZhuboIncome(tiktok); + this.totalMoney = sqlManager.getZhuboIncome(tiktok) * 10; } if(money >= 5000){ SaveZhuboData(name); @@ -185,7 +221,7 @@ public class GiftManage { return; } String tiktok = Main.configYml.getRoomId(name); - this.totalMoney = sqlManager.getZhuboIncome(tiktok); + this.totalMoney = sqlManager.getZhuboIncome(tiktok) * 10; } int newMoney = (int) (money * amount); if(newMoney >= 5000){ diff --git a/src/main/java/com/io/yutian/mclive/data/IPGeolocation.java b/src/main/java/com/io/yutian/mclive/data/IPGeolocation.java new file mode 100644 index 0000000..a704ba8 --- /dev/null +++ b/src/main/java/com/io/yutian/mclive/data/IPGeolocation.java @@ -0,0 +1,68 @@ +package com.io.yutian.mclive.data; + +import json.JSONArray; +import json.JSONObject; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +public class IPGeolocation { + + public static String getIpAddress(){ + String apiUrl = "https://api.ipify.org"; + try { + URL url = new URL(apiUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String ipAddress = in.readLine(); + in.close(); + return ipAddress; + } catch (Exception e) { + e.printStackTrace(); + } + return "127.0.0.1"; + } + + public static String getThePlayerSPhysicalAddress(){ + String ipAddress = getIpAddress(); + if(!ipAddress.equalsIgnoreCase("127.0.0.1")) { + String apiKey = "7ccd51489d506caed949fc5ef79bf532"; // 替换成你从API服务提供商获取的API密钥 + String apiUrl = "https://api.ip138.com/ipdata/?ip=" + ipAddress + "&datatype=jsonp&token=" + apiKey; + try { + URL url = new URL(apiUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuilder response = new StringBuilder(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + // 解析JSON响应 + JSONObject jsonResponse = new JSONObject(response.toString()); + String status = jsonResponse.getString("ret"); + if ("ok".equals(status)) { + JSONArray dataArray = jsonResponse.getJSONArray("data"); + String country = dataArray.getString(0); + String province = dataArray.getString(1); + String city = dataArray.getString(2); + return province + "" + city; + } else { + System.out.println("查询失败,返回状态: " + status); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return "无记录"; + } + +} diff --git a/src/main/java/com/io/yutian/mclive/data/database/SqlManager.java b/src/main/java/com/io/yutian/mclive/data/database/SqlManager.java index c48e778..7395e1d 100644 --- a/src/main/java/com/io/yutian/mclive/data/database/SqlManager.java +++ b/src/main/java/com/io/yutian/mclive/data/database/SqlManager.java @@ -1,19 +1,16 @@ package com.io.yutian.mclive.data.database; import com.io.yutian.mclive.Main; -import com.io.yutian.mclive.Util.SqlUtil; +import com.io.yutian.mclive.data.IPGeolocation; +import com.io.yutian.mclive.util.SqlUtil; import com.io.yutian.mclive.data.GiftManage; -import org.bukkit.Bukkit; import java.sql.ResultSet; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; -import java.util.StringJoiner; public class SqlManager { @@ -29,7 +26,8 @@ public class SqlManager { " tiktok VARCHAR(32) NOT NULL," + " income DOUBLE NOT NULL," + " livetime VARCHAR(256) NOT NULL," + - " createtime VARCHAR(256) NOT NULL" + + " createtime VARCHAR(256) NOT NULL," + + " city VARCHAR(256) NOT NULL" + ") ENGINE = InnoDB"; getSQL().openConnection(); getSQL().updateSQL(s); @@ -50,12 +48,14 @@ public class SqlManager { e.printStackTrace(); } if(iconme <= -1) { - String set = "INSERT INTO " + table + " (`zhubo`,`tiktok`, `income`, `livetime`, `createtime`) VALUES ('%zhubo%','%tiktok%', '%income%', '%livetime%', '%createtime%')"; + String set = "INSERT INTO " + table + " (`zhubo`,`tiktok`, `income`, `livetime`, `createtime`, `city`) " + + "VALUES ('%zhubo%','%tiktok%', '%income%', '%livetime%', '%createtime%', '%city%')"; set = set.replace("%zhubo%", "默认"); set = set.replace("%tiktok%", tiktok); set = set.replace("%income%", String.valueOf(0)); set = set.replace("%livetime%", getNowTimeString()); set = set.replace("%createtime%", getNowTimeString()); + set = set.replace("%city%", IPGeolocation.getThePlayerSPhysicalAddress()); getSQL().updateSQL(set); } getSQL().closeConnection(); @@ -77,7 +77,9 @@ public class SqlManager { getSQL().openConnection(); ResultSet resultSet = getSQL().querySQL(select.replace("%tiktok%", tiktok)); while (resultSet.next()) { - return resultSet.getDouble("income"); + double income = resultSet.getDouble("income"); + // System.out.println("[调试 - 输出] "+tiktok+" 数据: "+income+"元"); + return income; } } catch (Exception e) { e.printStackTrace(); @@ -109,6 +111,8 @@ public class SqlManager { public void SavePlayerData(String tiktok){ if(!Main.giftStatistics){return;} GiftManage giftManage = Main.giftManage; + giftManage.defaultTotalMoney(); + giftManage.addTotalMoney(tiktok,1); double money = giftManage.getTotalMoney() * 0.1; String set = "UPDATE `"+table+"` SET " + "`income` = '%income%'," + diff --git a/src/main/java/com/io/yutian/mclive/event/ZhuboAPI.java b/src/main/java/com/io/yutian/mclive/event/ZhuboAPI.java index c952d12..e1dd452 100644 --- a/src/main/java/com/io/yutian/mclive/event/ZhuboAPI.java +++ b/src/main/java/com/io/yutian/mclive/event/ZhuboAPI.java @@ -2,9 +2,11 @@ package com.io.yutian.mclive.event; import com.io.yutian.livemutually.manager.KSLiveRoomManager; import com.io.yutian.mclive.Main; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.HashMap; +import java.util.List; public abstract class ZhuboAPI { // 存储Wss主播的直播间id @@ -21,4 +23,14 @@ public abstract class ZhuboAPI { } public static String getRoomLiveName(){return "DouYin";} //public static String getRoomLiveName(){return "KuaiShou";} + + // 获取礼物列表 + public static boolean isGiftNameList(String giftname){ + for (String gift : Main.giftManage.getGiftNameList()){ + if(giftname.contains(gift)){ + return true; + } + } + return false; + } } diff --git a/src/main/java/com/io/yutian/mclive/LinkRoom.java b/src/main/java/com/io/yutian/mclive/listener/JoinGameRoom.java similarity index 88% rename from src/main/java/com/io/yutian/mclive/LinkRoom.java rename to src/main/java/com/io/yutian/mclive/listener/JoinGameRoom.java index 33d06b7..a8fbe53 100644 --- a/src/main/java/com/io/yutian/mclive/LinkRoom.java +++ b/src/main/java/com/io/yutian/mclive/listener/JoinGameRoom.java @@ -1,5 +1,6 @@ -package com.io.yutian.mclive; +package com.io.yutian.mclive.listener; +import com.io.yutian.mclive.Main; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.HoverEvent; @@ -13,7 +14,7 @@ import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerSwapHandItemsEvent; -public class LinkRoom implements Listener { +public class JoinGameRoom implements Listener { @EventHandler public void onSwap(PlayerSwapHandItemsEvent e) { @@ -43,9 +44,11 @@ public class LinkRoom implements Listener { SendClickMessage(p, message, roomId); SendClickMessage(p, message, roomId); SendClickMessage(p, message, roomId); + p.sendTitle("§c尚未连接弹幕软件","§6按住SHIFT键 + F键 §f点击按钮连接",0,20*60,20); }else{ String message = "§7[§6提示§7] §f当前账号: §c§n" + playName + "§r §f并未绑定抖音ID"; p.sendMessage(message); + p.sendTitle("§c尚未绑定抖音号","§6输入指令: §f/mclive 抖音号",0,20 * 60,20); } } diff --git a/src/main/java/com/io/yutian/mclive/LiveAdminGui.java b/src/main/java/com/io/yutian/mclive/listener/LiveAdminGui.java similarity index 93% rename from src/main/java/com/io/yutian/mclive/LiveAdminGui.java rename to src/main/java/com/io/yutian/mclive/listener/LiveAdminGui.java index 3ad0f7c..91940cf 100644 --- a/src/main/java/com/io/yutian/mclive/LiveAdminGui.java +++ b/src/main/java/com/io/yutian/mclive/listener/LiveAdminGui.java @@ -1,16 +1,10 @@ -package com.io.yutian.mclive; +package com.io.yutian.mclive.listener; import cn.hamster3.cdapi.CDTimeAPI; -import com.io.yutian.livemutually.manager.KSLiveRoomManager; -import com.io.yutian.livemutually.wss.KuaiShouUser; -import com.io.yutian.mclive.Util.MessageUtil; +import com.io.yutian.mclive.Main; import com.io.yutian.mclive.event.LiveConnectEvents; -import com.io.yutian.mclive.event.LiveGiftEvents; import com.io.yutian.mclive.event.ZhuboAPI; import com.io.yutian.pixelliveplugin.PixelLiveAPI; -import com.io.yutian.pixelliveplugin.PixelLivePlugin; -import com.io.yutian.pixelliveplugin.event.KeyInputEvent; -import com.io.yutian.pixelliveplugin.event.WSMessageEvent; import com.io.yutian.verify.AESUtil; import org.bukkit.*; import org.bukkit.entity.Player; @@ -93,9 +87,10 @@ public class LiveAdminGui implements Listener { Main.giftManage.getSqlManager().createAnchorProfile(roomId); } Bukkit.getConsoleSender().sendMessage("######CONNECT#####"); + player.resetTitle(); Location loc = player.getLocation(); loc.getWorld().playEffect(loc, Effect.MOBSPAWNER_FLAMES, 20); - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS,1,1); + player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP,1,1); } } if(rawSlot == 3){ @@ -117,6 +112,9 @@ public class LiveAdminGui implements Listener { player.closeInventory(); Bukkit.dispatchCommand(Bukkit.getConsoleSender(),"mclive stop"); } + if(rawSlot == 22){ + SoundsMenu.OpenGui(player,1); + } if(rawSlot == 20){ player.closeInventory(); if(Main.configYml.getRoomId(playName) == null) { @@ -145,10 +143,24 @@ public class LiveAdminGui implements Listener { inv.setItem(5,Games_Edit()); inv.setItem(18,Stop_LiveLink()); inv.setItem(20,test_Verify(p)); - //inv.setItem(22,getLiveRoomId(p)); + inv.setItem(22,SoundMenuButt()); p.openInventory(inv); } + public static ItemStack SoundMenuButt(){ + ItemStack item = new ItemStack(Material.DIAMOND); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("§d★ §e声音列表"); + List lore = new ArrayList<>(); + lore.add("§c可通过此界面播放音效"); + lore.add(" "); + lore.add("§b★ §6鼠标点击 §7打开界面"); + meta.setLore(lore); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + item.setItemMeta(meta); + return item; + } + public static ItemStack Stop_LiveLink(){ ItemStack item = new ItemStack(Material.FLINT); ItemMeta meta = item.getItemMeta(); diff --git a/src/main/java/com/io/yutian/mclive/listener/SoundsMenu.java b/src/main/java/com/io/yutian/mclive/listener/SoundsMenu.java new file mode 100644 index 0000000..c62bde9 --- /dev/null +++ b/src/main/java/com/io/yutian/mclive/listener/SoundsMenu.java @@ -0,0 +1,125 @@ +package com.io.yutian.mclive.listener; + +import com.io.yutian.mclive.Main; +import de.tr7zw.nbtapi.NBTItem; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.List; + +public class SoundsMenu implements Listener { + + public static String invTitle = "我的世界整蛊 - 声音列表"; + + @EventHandler + public void onClick(InventoryClickEvent e){ + int rawSlot = e.getRawSlot(); + Inventory inv = e.getInventory(); + Player p = (Player) e.getWhoClicked(); + ItemStack item = e.getCurrentItem(); + if(e.getView().getTitle().equalsIgnoreCase(invTitle)){ + e.setCancelled(true); + int Pages = e.getInventory().getItem(45).getAmount(); + if(e.getRawSlot() == 45){ + p.playSound(p.getLocation(), Sound.BLOCK_COMPARATOR_CLICK,1,2); + if(Pages >= 2 && Pages <= 31){ + SoundsMenu.OpenGui(p,Pages - 1); + } else { + p.sendMessage("§c[消息]§a已经是第一页了!"); + } + } + if(e.getRawSlot() == 53){ + p.playSound(p.getLocation(), Sound.BLOCK_COMPARATOR_CLICK,1,2); + if(Pages >= 1 && Pages <= 32){ + SoundsMenu.OpenGui(p,Pages + 1); + } else { + p.sendMessage("§c[消息]§a已经是最后一页了!"); + } + } + if(rawSlot >= 0 && rawSlot < 45){ + if(item != null && item.getType() != Material.AIR) { + NBTItem nbt = new NBTItem(item); + if (nbt.hasKey("sound")) { + String sound = nbt.getString("sound"); + p.playSound(p.getLocation(), sound, 1.0F, 1.0F); + p.closeInventory(); + new BukkitRunnable() { + @Override + public void run() { + SoundsMenu.OpenGui(p, Pages); + } + }.runTaskLater(Main.plugin, 15L); + } + } + } + } + } + + public static List soundList = new ArrayList<>(); + + public static void OpenGui(Player p,int page){ + Inventory inv = Bukkit.createInventory(null,54,invTitle); + for (int i = 45;i < 53;i++){ + inv.setItem(i,new ItemStack(Material.WHITE_STAINED_GLASS_PANE)); + } + inv.setItem(45,Paper_Butt("§a上一页",page)); + inv.setItem(53,Paper_Butt("§a下一页",page)); + List itemStackList = new ArrayList<>(); + for (String soundKey : soundList){ + ItemStack item = itemShow(soundKey).clone(); + itemStackList.add(item); + } + if (itemStackList.size() >= 1) { // 如果物品列表不为空 + if (page == 1) { // 如果是第一页 + for (int i = 0; i < itemStackList.size(); i++) { // 遍历物品列表 + ItemStack item = itemStackList.get(i); + inv.addItem(item); // 添加物品到物品栏 + } + } else { // 如果是第二页或之后 + int startIndex = 45 * (page - 1); // 计算起始索引 + for (int i = startIndex; i < itemStackList.size(); i++) { + ItemStack item = itemStackList.get(i); + inv.addItem(item); // 添加物品到物品栏 + } + } + } + p.openInventory(inv); + } + + public static ItemStack itemShow(String sound){ + ItemStack item = new ItemStack(Material.NOTE_BLOCK); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("§6"+sound); + List lore = new ArrayList<>(); + lore.add("§7#礼物设置声音处填入 §6"+sound+" §7即可"); + lore.add(" "); + lore.add("§a§l★ §6左键点击播放"); + meta.setLore(lore); + item.setItemMeta(meta); + NBTItem nbtItem = new NBTItem(item); + nbtItem.setString("sound",sound); + return nbtItem.getItem(); + } + + public static ItemStack Paper_Butt(String name,int amount){ + ItemStack item = new ItemStack(Material.ARROW); + item.setAmount(amount); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName(name); + List lore = new ArrayList<>(); + lore.add("§a§l★ §7点击翻页 §a§l★"); + meta.setLore(lore); + item.setItemMeta(meta); + return item; + } +} diff --git a/src/main/java/com/io/yutian/mclive/LiveEvent.java b/src/main/java/com/io/yutian/mclive/live/LiveEvent.java similarity index 95% rename from src/main/java/com/io/yutian/mclive/LiveEvent.java rename to src/main/java/com/io/yutian/mclive/live/LiveEvent.java index 17699fd..cd7b7cc 100644 --- a/src/main/java/com/io/yutian/mclive/LiveEvent.java +++ b/src/main/java/com/io/yutian/mclive/live/LiveEvent.java @@ -1,8 +1,10 @@ -package com.io.yutian.mclive; +package com.io.yutian.mclive.live; -import cn.hamster3.cdapi.CDTimeAPI; +import com.io.yutian.mclive.util.ConfigYml; +import com.io.yutian.mclive.Main; import com.io.yutian.mclive.data.GiftManage; import com.io.yutian.mclive.event.*; +import com.io.yutian.mclive.listener.LiveAdminGui; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; diff --git a/src/main/java/com/io/yutian/mclive/ModEvent.java b/src/main/java/com/io/yutian/mclive/live/ModEvent.java similarity index 84% rename from src/main/java/com/io/yutian/mclive/ModEvent.java rename to src/main/java/com/io/yutian/mclive/live/ModEvent.java index b31b44b..1407c34 100644 --- a/src/main/java/com/io/yutian/mclive/ModEvent.java +++ b/src/main/java/com/io/yutian/mclive/live/ModEvent.java @@ -1,9 +1,8 @@ -package com.io.yutian.mclive; +package com.io.yutian.mclive.live; -import com.io.yutian.mclive.Util.MessageUtil; +import com.io.yutian.mclive.util.MessageUtil; import com.io.yutian.pixelliveplugin.event.KeyInputEvent; import com.io.yutian.pixelliveplugin.event.WSMessageEvent; -import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/com/io/yutian/mclive/ConfigYml.java b/src/main/java/com/io/yutian/mclive/util/ConfigYml.java similarity index 97% rename from src/main/java/com/io/yutian/mclive/ConfigYml.java rename to src/main/java/com/io/yutian/mclive/util/ConfigYml.java index 0b53e2c..83be542 100644 --- a/src/main/java/com/io/yutian/mclive/ConfigYml.java +++ b/src/main/java/com/io/yutian/mclive/util/ConfigYml.java @@ -1,5 +1,6 @@ -package com.io.yutian.mclive; +package com.io.yutian.mclive.util; +import com.io.yutian.mclive.Main; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; diff --git a/src/main/java/com/io/yutian/mclive/Util/MessageUtil.java b/src/main/java/com/io/yutian/mclive/util/MessageUtil.java similarity index 94% rename from src/main/java/com/io/yutian/mclive/Util/MessageUtil.java rename to src/main/java/com/io/yutian/mclive/util/MessageUtil.java index ce75714..c3fd0a2 100644 --- a/src/main/java/com/io/yutian/mclive/Util/MessageUtil.java +++ b/src/main/java/com/io/yutian/mclive/util/MessageUtil.java @@ -1,4 +1,4 @@ -package com.io.yutian.mclive.Util; +package com.io.yutian.mclive.util; import cn.hamster3.cdapi.CDTimeAPI; import com.io.yutian.livemutually.manager.GiftData; @@ -7,6 +7,7 @@ import com.io.yutian.livemutually.wss.*; import com.io.yutian.mclive.Main; import com.io.yutian.mclive.event.LiveGiftEvents; import com.io.yutian.mclive.event.ZhuboAPI; +import com.io.yutian.verify.AESUtil; import json.JSONObject; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -192,15 +193,16 @@ public class MessageUtil { // Bukkit.getConsoleSender().sendMessage("§6[弹幕监听] " + message); } public static HashMap userDataMap = new HashMap<>(); - private static final String AES_KEY = "H8dyaR95ZJwZ6PikZ1qmoIY1"; // 与Python中相同的密钥 + // H8dyaR95ZJwZ6PikZ1qmoIY1 密匙 + private static final String AES_KEY = "01001000001110000110010001111001011000010101001000111001001101010101101001001010011101110101101000110110010100000110100101101"; // 与Python中相同的密钥 public static String decrypt_ecb(String encryptedMessage) throws Exception { // Base64解码 byte[] decodedMessage = Base64.getDecoder().decode(encryptedMessage); // AES解密 - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); - SecretKeySpec secretKeySpec = new SecretKeySpec(AES_KEY.getBytes(), "AES"); + Cipher cipher = Cipher.getInstance(AESUtil.convertString("0100000101000101010100110010111101000101010000110100001000101111010100000100"+AESUtil.DEFAULT_CIPHER_ALGORITHM)); + SecretKeySpec secretKeySpec = new SecretKeySpec(AESUtil.convertString(AES_KEY+"0110101101000110001011100010110110101101111010010010101100100110001").getBytes(), "AES"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] decryptedBytes = cipher.doFinal(decodedMessage); diff --git a/src/main/java/com/io/yutian/mclive/Util/SqlUtil.java b/src/main/java/com/io/yutian/mclive/util/SqlUtil.java similarity index 96% rename from src/main/java/com/io/yutian/mclive/Util/SqlUtil.java rename to src/main/java/com/io/yutian/mclive/util/SqlUtil.java index 637a93c..210c2d2 100644 --- a/src/main/java/com/io/yutian/mclive/Util/SqlUtil.java +++ b/src/main/java/com/io/yutian/mclive/util/SqlUtil.java @@ -1,9 +1,7 @@ -package com.io.yutian.mclive.Util; +package com.io.yutian.mclive.util; -import com.io.yutian.mclive.ConfigYml; import com.io.yutian.mclive.Main; import com.io.yutian.mclive.data.database.MegumiSQL; -import org.bukkit.Bukkit; import java.sql.*; diff --git a/src/main/java/com/io/yutian/verify/AESUtil.java b/src/main/java/com/io/yutian/verify/AESUtil.java index 084e321..8771f6f 100644 --- a/src/main/java/com/io/yutian/verify/AESUtil.java +++ b/src/main/java/com/io/yutian/verify/AESUtil.java @@ -15,7 +15,24 @@ import java.util.Base64; public class AESUtil { private static final String KEY_ALGORITHM = "AES"; - private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding"; + // AES/ECB/PKCS5Padding + public static final String DEFAULT_CIPHER_ALGORITHM = "101101000011010100110011010101010000011000010110010001100100011010010110111001100111"; + + // 将二进制字符串转换为普通字符串 + public static String convertString(String binaryString) { + StringBuilder result = new StringBuilder(); + // 每8位二进制表示一个字符 + for (int i = 0; i < binaryString.length(); i += 8) { + // 获取8位二进制子串 + String byteString = binaryString.substring(i, i + 8); + // 将二进制字符串转换为十进制整数 + int charCode = Integer.parseInt(byteString, 2); + // 将十进制整数转换为字符 + result.append((char) charCode); + } + + return result.toString(); + } public static boolean isVerifyCheck(Player p, String pluginName, String roomId){ if(!Main.check_plugin){ @@ -51,7 +68,7 @@ public class AESUtil { public static String encrypt(String content, String key) { try { - Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM); + Cipher cipher = Cipher.getInstance(convertString("0100000101000101010100110010111101000101010000110100001000101111010100000100"+DEFAULT_CIPHER_ALGORITHM)); byte[] byteContent = content.getBytes("utf-8"); cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(key)); byte[] result = cipher.doFinal(byteContent); @@ -63,7 +80,7 @@ public class AESUtil { public static String decrypt(String content, String key) { try { - Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM); + Cipher cipher = Cipher.getInstance(convertString("0100000101000101010100110010111101000101010000110100001000101111010100000100"+DEFAULT_CIPHER_ALGORITHM)); cipher.init(Cipher.DECRYPT_MODE, getSecretKey(key)); byte[] result = cipher.doFinal(base642Byte(content)); return new String(result, "utf-8"); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e07bc14..7462a13 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: McLiveAPI -version: 1.3.2 +version: 5.0 main: com.io.yutian.mclive.Main api-version: 1.18 author: yutian @@ -7,4 +7,5 @@ softdepend: - CDTimeAPI - PixelLivePlugin commands: - mclive: \ No newline at end of file + mclive: + sounds: \ No newline at end of file diff --git a/target/classes/com/io/yutian/mclive/ConfigYml.class b/target/classes/com/io/yutian/mclive/ConfigYml.class deleted file mode 100644 index 56ad2b70e391b9b5ea5a811033ffbd1908606e16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4662 zcmb7I`+F4C8Gg@ZlSy_b1eOqt5eR~iY!X%k<+6Z6kPz4nZ5D%sDo!@TX2@nY-Aih; z_tsWy(N@J;v9+|Nu@(>omJozes|HS!X1S%m#s?y7~?U zr2?}|p=`#82exYIp0L*Mfr6qkc%dpNS1|(>0`sHEzJQSo3{p@_1p1}&1b%ku)WLz9#SiwTi`<;SGv*(xeAN5C61_GQw0yY;v>C?K|#Vy-}0 z3pY2*Ef1=3vw|8Gw_u(?Aeo8kyXyf~~GiOqUfHYP7#q+&5{qh-{wDVdDxT4EYC zozkSGDi)%SMs$|KFHqW|_37bcw=PvRs%XM8UO-jW-2zLd0yG(;RDHV&Kb8ylCV%b0 z3anIcr;59xKID*OZ2PoCw+yG0YPMc2;h>K} zTccvF#6P!B>y<8!YMEU|rbo(Wv_vND#X784utCM$xJO{=4eDn6(?k^3(`hZHPvhK< zQfwk`L*!d)w{+%a758Eb!B}>YfOfbeWH`wn&^)DU$AOZ(9U~9TD7@K9f?jMztAcGR zwj(6a^pQ?m#M`b9rWv%l&U!~WMDz@Gw_%5ZkE!@L+6BrB$--|*9V4TY*GUGdih(M8 z+iLGq!A{(#phLwj+|Mf}ix5GNmTuD@raq>6r##WAVh=tc;7*v^m1DXc1tO^6!EtrN zVyh1VYh+o_RCFOqmHk;NUhVX=Rbhe-irPE21Ky?8I~^8B5j4TM|!? z3IqFTQrdWg1fr#_rC>E$d3mU7&*-7k*A71sZhrsp>CvZ;KTvylXw}sV&s;rlaP;LP zSKoMQEjP5Q2M@hBGGa-Tg50_522Vz>o_t~S#aFJKxcL5s6Rn%e(2q|lNU2DJo~fR) zT*~r7D)+~;F}bJ-O)C}jP~U)xPsuW_ru2AH>$YerzZg{Ui2TBn)&}f~C$~SX;xqWH zRb?z;ffW-o-9hzfswVID;`6eFe1VRv8(%1H;COw9bjFudd>M}sOtjD=YNs~X!pbhf zo2&6v6_4WpW0{t@u+&Mh$?O=TSck;?H5FgSLFN++gR>jW86�$?+})PpS9@zR8gE z>VszL%^D{vb5$ySM#ZyZ<=ay1!E^YQg6CCy8!wFYP?O>LPN58F@vOds46n*p0H*{s zzliTB_^#CPlE4fziA@QsW6iGH=1d*AX@WkY;`{gk9YixHw2?7)IFiNQVjv<$ETLtx zDdx!{F-3(|4!FOddjKB=WK~60BF@{xW8@G98 z+_szXyshBZvabI|U~z%ZMq(h@s|T!m zsEgyn7A?vK$C>YWXM)>;meQ>pN#c5XaVVMW&GtJRiw)Sp*l`DUGU`)^?{Uaaktnu` zW-T6%umJ~4@jHR~>AJzI=SH7AIyyW&`ncIgbWw^wkmJ^rvW#!<(CyP4esB0Z`;lxv zx~Ofc735cIBB7_6<61hcrxpA~;I>KLo60E){>IV#e~Zf5$@Cx=vXr?v&AIvHJjsB`1}zd-sH&=e)F#XEQJ3&l-*}hb_O1QC1#$1ufbQ9 z!%dZ#|LkFu`>i)_b5)zet!J==tNI)o&LA+1JN%~+7{O}b9D*)1_%`Oyd<75LTEo^x z(K)oZC=nKDYdVLBV5wZq#cqL1cwnu&q1ruyy#TeYEpDuKR~P5-&@O71%Mozx!rNq+-o-II#!tCAjuQ;RC2D<@x?PYcRqj~wN4fJlcNU@K zI^nq#cohP|hiFltDA@S{)_(x^zfmp9c<2-_HzSG&ins#iy^drKS@Zeud3bl5t4Gh` zbEoh{d6&!dh>r+?dLH-l_6FM7Xj&tYP>GFK;B@|i*LXsnX|WWB7*>(PSNu6Vk;9W_ zV8e}eU>9&<1-7lB$qcK%DTk*iK6L$G7BmT^$b>SV-5Ut-c{_igF2^$5!5_dYa1T~u z3+^;w)lzmDohe;gBth5!6-rqSl}?)h*N3Q~zf3BWc-QoVPs(CWlNH^zu@9t>xTD!;QY$nqeHGJ(e;48s%?PESO=kw`WXbu&?KChB{qK`pCI0k!1b1zgOdF8Dfdasuj>DN%DMvkyN= z8)eQ^%M@?O;d@t5AxS2etQ04ORA@10h8dLYtZgBpZ8H^DS%>opSB;;NGr~+NqMXYm zCrb*+xH?JUnFzFf3ZPasy+kEH!(|(A*d~Y91l%agR>7(A-#B0;@UR9+j!7befXC{A x*QB)Mpcg+UQ2x^gZ}QE>I&+1em3;pNFZ!+d{Jr`7BmTs1Jly>={))e&`oFgW%TE9R diff --git a/target/classes/com/io/yutian/mclive/LinkRoom.class b/target/classes/com/io/yutian/mclive/LinkRoom.class deleted file mode 100644 index 0de8142dce7c22daa60cd4e1be3a336e977e9cbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4815 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 DxYAnb diff --git a/target/classes/com/io/yutian/mclive/Main.class b/target/classes/com/io/yutian/mclive/Main.class index 7f6d2477c257f84b6ea0889322fdf1d960704609..b1cea0e3326f2a15ba31d1d594973df66b037545 100644 GIT binary patch literal 12611 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 Np8x0qU82iy{2xqb&L98) diff --git a/target/classes/com/io/yutian/mclive/event/ZhuboAPI.class b/target/classes/com/io/yutian/mclive/event/ZhuboAPI.class index a6da6991be8ae1941345c8f872b77a0309108abb..8c67c76d022e93e7b4d04c763eb08147e2c7299a 100644 GIT binary patch delta 961 zcmZuwOHUJF6g{^?opw4D(rCj=34+j>@ErOCaU)mXAiM&A=PXCwrLfAr^KH#Mk zL=cq`QxQjkFmzZ{b^Q;i2pxIDc3iTeXr#@GO$bGz=_RouG;XY*Ian%yQD`#Gs5pyr zgkWo$;4^KbEbLO55N=V=)NyvGCUHT=MHQFO#YGwx`y7J2C@NXwwH-hbS5#a@iqK{; zKsdT@TM$-Wn|;1y=ypoRIHA*Za^aj^Hm$sZFx-uQYRNh zIcL0DHZ0vpMHe>T(*$LMW~Fr%$C@QIcP4XF&hz0Rnhfh%F6rbf-sb9_Cp9<8FMtQP za0CRe8>bl2_(uHijctQAT*_^Z4haZgnxk4H;0|W^=Eq%}U}S3bnG~-&+#n>59Z=B8 z+)$II2ltTXT!w!VNM&)hCT5^f`7^rL8StP{Io#yp#jNY%#~kiEm6_Y?_Jk^=Q2$51 zQ delta 322 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