diff --git a/.idea/McLiveAPI.iml b/.idea/McLiveAPI.iml
index 735519e..1f4702c 100644
--- a/.idea/McLiveAPI.iml
+++ b/.idea/McLiveAPI.iml
@@ -4,8 +4,8 @@
- SPIGOT
BUNGEECORD
+ SPIGOT
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/PixelLivePlugin.jar b/lib/PixelLivePlugin.jar
new file mode 100644
index 0000000..e34e641
Binary files /dev/null and b/lib/PixelLivePlugin.jar differ
diff --git a/out/artifacts/McLiveAPI/McLiveAPI.jar b/out/artifacts/McLiveAPI/McLiveAPI.jar
deleted file mode 100644
index fe6fff8..0000000
Binary files a/out/artifacts/McLiveAPI/McLiveAPI.jar and /dev/null differ
diff --git a/src/main/java/com/io/yutian/livemutually/liveroom/Gift.java b/src/main/java/com/io/yutian/livemutually/liveroom/Gift.java
deleted file mode 100644
index 75beb27..0000000
--- a/src/main/java/com/io/yutian/livemutually/liveroom/Gift.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.io.yutian.livemutually.liveroom;
-
-public interface Gift {
-
- User user();
-
- String name();
-
- long count();
-
-}
diff --git a/src/main/java/com/io/yutian/livemutually/liveroom/KSLiveRoomClient.java b/src/main/java/com/io/yutian/livemutually/liveroom/KSLiveRoomClient.java
deleted file mode 100644
index 233c9b7..0000000
--- a/src/main/java/com/io/yutian/livemutually/liveroom/KSLiveRoomClient.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.io.yutian.livemutually.liveroom;
-
-import com.io.yutian.livemutually.wss.KSWebSocketClient;
-import com.io.yutian.mclive.Main;
-import org.bukkit.entity.Player;
-
-import java.net.URI;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-public class KSLiveRoomClient {
-
- private static final String URL = "ws://localhost:8765";
- private String roomId;
- private Map headMap = new HashMap<>();
- private KSWebSocketClient socketClient;
- private ExecutorService executor = Executors.newCachedThreadPool();
-
- public KSLiveRoomClient(String roomId) {
- this.roomId = roomId;
- headMap.put("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1");
- headMap.put("Content-Type", "text/plain;charset=UTF-8");
- headMap.put("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
- headMap.put("cookie", "__ac_nonce=0638733a400869171be51");
- }
-
- public KSWebSocketClient getSocketClient() {
- return socketClient;
- }
-
- public void openRoom(Player player) throws Exception {
- URI uri = new URI(URL);
- KSWebSocketClient ksWebSocketClient = new KSWebSocketClient(player, uri, headMap);
- socketClient = ksWebSocketClient;
- Main.LiveRoomClientList.add(ksWebSocketClient);
- executor.submit(() -> socketClient.run());
- }
-
- public void close() {
- if (socketClient == null || socketClient.isClosed() || socketClient.isClosing()) {
- return;
- }
- socketClient.setForcedClose(true);
- socketClient.close();
- }
-
- public String getRoomId() {
- return roomId;
- }
-}
diff --git a/src/main/java/com/io/yutian/livemutually/liveroom/LiveRoomWatcher.java b/src/main/java/com/io/yutian/livemutually/liveroom/LiveRoomWatcher.java
index 095debb..cffe0da 100644
--- a/src/main/java/com/io/yutian/livemutually/liveroom/LiveRoomWatcher.java
+++ b/src/main/java/com/io/yutian/livemutually/liveroom/LiveRoomWatcher.java
@@ -1,5 +1,7 @@
package com.io.yutian.livemutually.liveroom;
+import org.bukkit.Bukkit;
+
import java.util.Objects;
import java.util.function.Consumer;
@@ -9,7 +11,6 @@ public class LiveRoomWatcher {
protected Consumer userHandler;
protected Consumer likeHandler;
protected Consumer followHandler;
- protected Consumer giftHandler;
public final LiveRoomWatcher onChat(Consumer handler) {
Objects.requireNonNull(handler);
@@ -35,12 +36,6 @@ public class LiveRoomWatcher {
return this;
}
- public final LiveRoomWatcher onGift(Consumer handler) {
- Objects.requireNonNull(handler);
- this.giftHandler = handler;
- return this;
- }
-
public void callChat(Chat chat) {
if (chatHandler != null) {
chatHandler.accept(chat);
@@ -65,10 +60,4 @@ public class LiveRoomWatcher {
}
}
- public void callGift(Gift gift) {
- if (giftHandler != null) {
- giftHandler.accept(gift);
- }
- }
-
}
diff --git a/src/main/java/com/io/yutian/livemutually/liveroom/新建文本文档.txt b/src/main/java/com/io/yutian/livemutually/liveroom/新建文本文档.txt
deleted file mode 100644
index d0aa534..0000000
--- a/src/main/java/com/io/yutian/livemutually/liveroom/新建文本文档.txt
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.io.yutian.livemutually.wss;
-
-import com.io.yutian.livemutually.liveroom.KSLiveRoomClient;
-import com.io.yutian.livemutually.liveroom.LiveRoomWatcher;
-import com.io.yutian.livemutually.liveroom.User;
-import com.io.yutian.mclive.Main;
-import json.JSONObject;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.bukkit.scheduler.BukkitRunnable;
-import org.java_websocket.client.WebSocketClient;
-import org.java_websocket.drafts.Draft_6455;
-import org.java_websocket.handshake.ServerHandshake;
-
-import java.net.URI;
-import java.util.HashMap;
-import java.util.Map;
-
-public class KSWebSocketClient extends WebSocketClient {
-
- private Player player;
- private LiveRoomWatcher liveRoomWatcher;
-
- public Player getPlayer() {
- return player;
- }
-
- public KSWebSocketClient(Player player, URI uri, Map httpHeaders) {
- super(uri, new Draft_6455(), httpHeaders);
- this.player = player;
- this.liveRoomWatcher = new KSAPILiveRoomWatcher(player);
- Bukkit.getConsoleSender().sendMessage("#WebSocketClient 已创建.");
- }
-
- @Override
- public void onOpen(ServerHandshake serverHandshake) {
- this.send();
- }
-
- public HashMap hashMap = new HashMap<>();
- @Override
- public void onMessage(String s) {
- //if(s.isEmpty()){return;}
- Bukkit.getConsoleSender().sendMessage("TEST = "+s);
- Bukkit.getConsoleSender().sendMessage("TEST = "+new JSONObject(s));
- JSONObject jsonObject = new JSONObject(s);
- /*String type = jsonObject.getString("type");
- if (!type.equalsIgnoreCase("liudui")) {
- if (type.equalsIgnoreCase("礼物")) {
- String username = jsonObject.getString("昵称");
- String userpng = jsonObject.getString("头像");
- if(hashMap.get(userpng) != null){
- username = hashMap.get(userpng);
- }
- String giftname = jsonObject.getString("礼物名称");
- int amount = jsonObject.getInt("礼物增量");
- if (amount >= 1){
- liveRoomWatcher.callGift(new KuaiShouGift(username, giftname, amount));
- }
- }else if (type.equalsIgnoreCase("muyu")) {
- String user = jsonObject.getString("user");
- int zan = jsonObject.getInt("zan");
- liveRoomWatcher.callLike(new KuaiShouLike(user, zan));
- } else if (type.equalsIgnoreCase("点赞")) {
- String user = jsonObject.getString("昵称");
- int zan = jsonObject.getInt("点赞次数");
- liveRoomWatcher.callLike(new KuaiShouLike(user, zan));
- } else if (type.equalsIgnoreCase("fayan")) {
- String nickname = jsonObject.getString("nickname");
- String headurl = jsonObject.getString("headurl");
- String nr = jsonObject.getString("nr");
- liveRoomWatcher.callChat(new KuaiShouChat(nickname, nr));
- } else if (type.equalsIgnoreCase("gift")) {
- String username = jsonObject.getString("giftusername");
- String giftpic = jsonObject.getString("giftpic");
- hashMap.put(giftpic,username);
- int amount = jsonObject.getInt("liwushuliang");
- String giftPic2 = jsonObject.getString("liwutupian");
- String nr = jsonObject.getString("giftnr");
- String giftname = nr.split("个")[1];
- } else if (type.equalsIgnoreCase("others")) {
- String qian = jsonObject.getString("qian");
- if(qian.contains("欢迎")){
- String nr = jsonObject.getString("othernr");
- String userName = nr.split(" 进入")[0];
- liveRoomWatcher.callUser(new KuaiShouUser(userName));
- }
- }
- }*/
- }
-
- @Override
- public void onClose(int i, String s, boolean b) {
- }
-
- @Override
- public void onError(Exception e) {
- e.printStackTrace();
- }
-
- private void sendVerify() {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("type", "register");
- KSWebSocketClient.this.send(jsonObject.toString().getBytes());
- }
-
- public void send() {
- new BukkitRunnable() {
- @Override
- public void run() {
- if (!KSWebSocketClient.this.isOpen()) {
- // Bukkit.getConsoleSender().sendMessage("[直播互动] 心跳检测失败,已自动重连.");
- // restartReconnectionTimer();
- cancel();
- return;
- }
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("type", "heartbeat");
- KSWebSocketClient.this.send(jsonObject.toString().getBytes());
- }
- }.runTaskTimerAsynchronously(Main.plugin, 0L, 10 * 20L);
- }
-
- private boolean forcedClose = false;
- private volatile boolean isReconnecting = false;
-
- public void setForcedClose(boolean forcedClose) {
- this.forcedClose = forcedClose;
- }
-
- private void restartReconnectionTimer() {
- new BukkitRunnable() {
- private int i = 0;
- @Override
- public void run() {
- try {
- if (reconnectBlocking()) {
- cancel();
- isReconnecting = false;
- return;
- }
- if (i >= 100) {
- if (player != null) {
- player.sendMessage("§c[系统]§a直播间自动重连失败...");
- }
- cancel();
- return;
- }
- i++;
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }.runTaskTimerAsynchronously(Main.plugin, 0L, 5L);
- }
-
-}
diff --git a/src/main/java/com/io/yutian/livemutually/manager/GiftData.java b/src/main/java/com/io/yutian/livemutually/manager/GiftData.java
new file mode 100644
index 0000000..adcb49d
--- /dev/null
+++ b/src/main/java/com/io/yutian/livemutually/manager/GiftData.java
@@ -0,0 +1,32 @@
+package com.io.yutian.livemutually.manager;
+
+public class GiftData {
+
+ private String name;
+
+ private long amount;
+
+ private long sendTime;
+
+ public GiftData(String name,long amount,long sendTime){
+ this.name = name;
+ this.amount = amount;
+ this.sendTime = sendTime;
+ }
+
+ public long getAmount() {
+ return amount;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public long getSendTime() {
+ return sendTime;
+ }
+
+ public void setSendTime(long sendTime) {
+ this.sendTime = sendTime;
+ }
+}
diff --git a/src/main/java/com/io/yutian/livemutually/manager/KSLiveRoomManager.java b/src/main/java/com/io/yutian/livemutually/manager/KSLiveRoomManager.java
index 40b8dbc..3e5c933 100644
--- a/src/main/java/com/io/yutian/livemutually/manager/KSLiveRoomManager.java
+++ b/src/main/java/com/io/yutian/livemutually/manager/KSLiveRoomManager.java
@@ -1,63 +1,33 @@
package com.io.yutian.livemutually.manager;
import cn.hamster3.cdapi.CDTimeAPI;
-import com.io.yutian.livemutually.liveroom.KSLiveRoomClient;
import com.io.yutian.mclive.*;
+import com.io.yutian.pixelliveplugin.PixelLiveAPI;
import com.io.yutian.verify.AESUtil;
import org.bukkit.entity.Player;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
import java.util.regex.Pattern;
public class KSLiveRoomManager {
- public static Map liveRoomClientMap = new HashMap<>();
-
- public static void connect(Player player, String id) {
- if (isConnected(player)) {
- disconnect(player);
- return;
- }
- if(!Pattern.matches("[a-zA-Z0-9_]+", id)) {
- return;
- }
- String pluginName = Main.configYml.getGameMode();
- if (AESUtil.isVerifyCheck(player,pluginName,id)) {
- return;
- }
- CDTimeAPI.setPlayerCD(player.getUniqueId(),"link_live_Cd",1000 * 6);
- KSLiveRoomClient liveRoomClient = new KSLiveRoomClient(id);
- try {
- liveRoomClient.openRoom(player);
- } catch (Exception e) {
- e.printStackTrace();
- }
- liveRoomClientMap.put(player, liveRoomClient);
- if (player != null) {
- player.sendMessage("§c[系统]§a您的直播间: §e" + id + " §a已连接...");
- }
- }
-
- public static KSLiveRoomClient getLiveRoomClient(Player player) {
- return liveRoomClientMap.get(player);
- }
+ public static List livepluginList = new ArrayList<>();
public static boolean isConnected(Player player) {
- KSLiveRoomClient liveRoomClient = getLiveRoomClient(player);
- return liveRoomClient != null && liveRoomClient.getSocketClient() != null && liveRoomClient.getSocketClient().isOpen();
+ if(livepluginList.contains(player)){
+ return true;
+ }
+ return false;
}
public static void disconnect(Player player) {
if (!isConnected(player)) {
return;
}
- KSLiveRoomClient liveRoomClient = getLiveRoomClient(player);
- liveRoomClient.close();
- if (player != null) {
- player.sendMessage("§c[系统]§b已断开直播间连接...");
- }
- liveRoomClientMap.remove(player);
+ livepluginList.remove(player);
+ PixelLiveAPI.disconnect(player);
+ player.sendMessage("§c[系统]§b已断开直播间连接...");
}
}
diff --git a/src/main/java/com/io/yutian/livemutually/manager/UserData.java b/src/main/java/com/io/yutian/livemutually/manager/UserData.java
new file mode 100644
index 0000000..5118082
--- /dev/null
+++ b/src/main/java/com/io/yutian/livemutually/manager/UserData.java
@@ -0,0 +1,39 @@
+package com.io.yutian.livemutually.manager;
+
+import java.util.HashMap;
+
+public class UserData {
+
+ private String userName;
+ // 礼物 礼物数据
+ private HashMap giftData = new HashMap<>();
+
+ public UserData(String userName){
+ this.userName = userName;
+ this.giftData = new HashMap<>();
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ // 判断本次赠送礼物是否已送过
+ public boolean isExitGift(String giftName){
+ if(giftData.get(giftName) != null){
+ return true;
+ }
+ return false;
+ }
+
+ public GiftData getGiftsData(String giftName){
+ if(giftData.get(giftName) != null){
+ return giftData.get(giftName);
+ }
+ return null;
+ }
+
+ public void createGiftsData(String giftName,long giftAmount){
+ long sendTime = System.currentTimeMillis();
+ giftData.put(giftName,new GiftData(giftName,giftAmount,sendTime));
+ }
+}
diff --git a/src/main/java/com/io/yutian/livemutually/wss/KSAPILiveRoomWatcher.java b/src/main/java/com/io/yutian/livemutually/wss/KSAPILiveRoomWatcher.java
index a9094ea..f25d721 100644
--- a/src/main/java/com/io/yutian/livemutually/wss/KSAPILiveRoomWatcher.java
+++ b/src/main/java/com/io/yutian/livemutually/wss/KSAPILiveRoomWatcher.java
@@ -4,7 +4,6 @@ import com.io.yutian.livemutually.liveroom.LiveRoomWatcher;
import com.io.yutian.mclive.Main;
import com.io.yutian.mclive.event.LiveChatEvents;
import com.io.yutian.mclive.event.LiveEnterEvents;
-import com.io.yutian.mclive.event.LiveGiftEvents;
import com.io.yutian.mclive.event.LiveLikeEvents;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -33,26 +32,5 @@ public class KSAPILiveRoomWatcher extends LiveRoomWatcher {
Bukkit.getPluginManager().callEvent(event);
});
});
- onGift(gift -> {
- String giftName = gift.name();
- long count = gift.count();
- String count_color = "§a";
- if (count >= 1314) {
- count_color = "§c";
- } else if (count >= 520) {
- count_color = "§d";
- } else if (count >= 188) {
- count_color = "§e";
- } else if (count >= 66) {
- count_color = "§b";
- }
- String message = "§6[日志 - 礼物触发] §f"+player.getName()+ " >>> " + gift.user().nickName() + " = §a" + giftName + " 数量: "+count_color + count;
- Bukkit.getConsoleSender().sendMessage(message);
- Bukkit.getScheduler().runTask(Main.plugin, () -> {
- LiveGiftEvents event = new LiveGiftEvents(player, gift.user(), gift.name(), gift.count());
- Bukkit.getPluginManager().callEvent(event);
- });
- });
}
-
}
diff --git a/src/main/java/com/io/yutian/livemutually/wss/KSWebSocketClient.java b/src/main/java/com/io/yutian/livemutually/wss/KSWebSocketClient.java
deleted file mode 100644
index d0aa534..0000000
--- a/src/main/java/com/io/yutian/livemutually/wss/KSWebSocketClient.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.io.yutian.livemutually.wss;
-
-import com.io.yutian.livemutually.liveroom.KSLiveRoomClient;
-import com.io.yutian.livemutually.liveroom.LiveRoomWatcher;
-import com.io.yutian.livemutually.liveroom.User;
-import com.io.yutian.mclive.Main;
-import json.JSONObject;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.bukkit.scheduler.BukkitRunnable;
-import org.java_websocket.client.WebSocketClient;
-import org.java_websocket.drafts.Draft_6455;
-import org.java_websocket.handshake.ServerHandshake;
-
-import java.net.URI;
-import java.util.HashMap;
-import java.util.Map;
-
-public class KSWebSocketClient extends WebSocketClient {
-
- private Player player;
- private LiveRoomWatcher liveRoomWatcher;
-
- public Player getPlayer() {
- return player;
- }
-
- public KSWebSocketClient(Player player, URI uri, Map httpHeaders) {
- super(uri, new Draft_6455(), httpHeaders);
- this.player = player;
- this.liveRoomWatcher = new KSAPILiveRoomWatcher(player);
- Bukkit.getConsoleSender().sendMessage("#WebSocketClient 已创建.");
- }
-
- @Override
- public void onOpen(ServerHandshake serverHandshake) {
- this.send();
- }
-
- public HashMap hashMap = new HashMap<>();
- @Override
- public void onMessage(String s) {
- //if(s.isEmpty()){return;}
- Bukkit.getConsoleSender().sendMessage("TEST = "+s);
- Bukkit.getConsoleSender().sendMessage("TEST = "+new JSONObject(s));
- JSONObject jsonObject = new JSONObject(s);
- /*String type = jsonObject.getString("type");
- if (!type.equalsIgnoreCase("liudui")) {
- if (type.equalsIgnoreCase("礼物")) {
- String username = jsonObject.getString("昵称");
- String userpng = jsonObject.getString("头像");
- if(hashMap.get(userpng) != null){
- username = hashMap.get(userpng);
- }
- String giftname = jsonObject.getString("礼物名称");
- int amount = jsonObject.getInt("礼物增量");
- if (amount >= 1){
- liveRoomWatcher.callGift(new KuaiShouGift(username, giftname, amount));
- }
- }else if (type.equalsIgnoreCase("muyu")) {
- String user = jsonObject.getString("user");
- int zan = jsonObject.getInt("zan");
- liveRoomWatcher.callLike(new KuaiShouLike(user, zan));
- } else if (type.equalsIgnoreCase("点赞")) {
- String user = jsonObject.getString("昵称");
- int zan = jsonObject.getInt("点赞次数");
- liveRoomWatcher.callLike(new KuaiShouLike(user, zan));
- } else if (type.equalsIgnoreCase("fayan")) {
- String nickname = jsonObject.getString("nickname");
- String headurl = jsonObject.getString("headurl");
- String nr = jsonObject.getString("nr");
- liveRoomWatcher.callChat(new KuaiShouChat(nickname, nr));
- } else if (type.equalsIgnoreCase("gift")) {
- String username = jsonObject.getString("giftusername");
- String giftpic = jsonObject.getString("giftpic");
- hashMap.put(giftpic,username);
- int amount = jsonObject.getInt("liwushuliang");
- String giftPic2 = jsonObject.getString("liwutupian");
- String nr = jsonObject.getString("giftnr");
- String giftname = nr.split("个")[1];
- } else if (type.equalsIgnoreCase("others")) {
- String qian = jsonObject.getString("qian");
- if(qian.contains("欢迎")){
- String nr = jsonObject.getString("othernr");
- String userName = nr.split(" 进入")[0];
- liveRoomWatcher.callUser(new KuaiShouUser(userName));
- }
- }
- }*/
- }
-
- @Override
- public void onClose(int i, String s, boolean b) {
- }
-
- @Override
- public void onError(Exception e) {
- e.printStackTrace();
- }
-
- private void sendVerify() {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("type", "register");
- KSWebSocketClient.this.send(jsonObject.toString().getBytes());
- }
-
- public void send() {
- new BukkitRunnable() {
- @Override
- public void run() {
- if (!KSWebSocketClient.this.isOpen()) {
- // Bukkit.getConsoleSender().sendMessage("[直播互动] 心跳检测失败,已自动重连.");
- // restartReconnectionTimer();
- cancel();
- return;
- }
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("type", "heartbeat");
- KSWebSocketClient.this.send(jsonObject.toString().getBytes());
- }
- }.runTaskTimerAsynchronously(Main.plugin, 0L, 10 * 20L);
- }
-
- private boolean forcedClose = false;
- private volatile boolean isReconnecting = false;
-
- public void setForcedClose(boolean forcedClose) {
- this.forcedClose = forcedClose;
- }
-
- private void restartReconnectionTimer() {
- new BukkitRunnable() {
- private int i = 0;
- @Override
- public void run() {
- try {
- if (reconnectBlocking()) {
- cancel();
- isReconnecting = false;
- return;
- }
- if (i >= 100) {
- if (player != null) {
- player.sendMessage("§c[系统]§a直播间自动重连失败...");
- }
- cancel();
- return;
- }
- i++;
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }.runTaskTimerAsynchronously(Main.plugin, 0L, 5L);
- }
-
-}
diff --git a/src/main/java/com/io/yutian/livemutually/wss/KuaiShouGift.java b/src/main/java/com/io/yutian/livemutually/wss/KuaiShouGift.java
deleted file mode 100644
index 0cebf0e..0000000
--- a/src/main/java/com/io/yutian/livemutually/wss/KuaiShouGift.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.io.yutian.livemutually.wss;
-
-import com.io.yutian.livemutually.liveroom.Gift;
-import com.io.yutian.livemutually.liveroom.User;
-
-public class KuaiShouGift implements Gift {
-
- private String userName;
- private String giftName;
- private int amount;
-
- private User user;
-
- public KuaiShouGift(String userName, String giftName, int amount) {
- this.userName = userName;
- this.giftName = giftName;
- this.amount = amount;
- this.user = new KuaiShouUser(userName);
- }
-
- @Override
- public User user() {
- return user;
- }
-
- @Override
- public String name() {
- return giftName;
- }
-
- @Override
- public long count() {
- return amount;
- }
-
-}
diff --git a/src/main/java/com/io/yutian/mclive/ConfigYml.java b/src/main/java/com/io/yutian/mclive/ConfigYml.java
index 4c8d798..c5138a9 100644
--- a/src/main/java/com/io/yutian/mclive/ConfigYml.java
+++ b/src/main/java/com/io/yutian/mclive/ConfigYml.java
@@ -8,10 +8,15 @@ import java.util.HashMap;
public class ConfigYml {
private String GameMode;
+ private long gifts_delay;
private boolean MainDebug;
private HashMap RoomId_Map = new HashMap<>();
public ConfigYml(FileConfiguration yml) {
+ this.gifts_delay = 3500;
+ if (yml.getLong("GiftDelay") >= 1000) {
+ this.gifts_delay = yml.getLong("GiftDelay");
+ }
this.MainDebug = yml.getBoolean("MainDebug");
this.GameMode = yml.getString("GameMode");
Bukkit.getConsoleSender().sendMessage("§b[整蛊MC直播] §7对接游戏: §e"+ this.GameMode);
@@ -55,6 +60,13 @@ public class ConfigYml {
MainDebug = butt;
}
+ public long getGifts_delay() {return gifts_delay;}
+ public void setGifts_delay(long gifts_delay) {
+ FileConfiguration yml = Main.plugin.getConfig();
+ yml.set("GiftDelay",gifts_delay);
+ Main.plugin.saveConfig();
+ this.gifts_delay = gifts_delay;
+ }
public String getGameMode() {
return this.GameMode;
}
diff --git a/src/main/java/com/io/yutian/mclive/LinkRoom.java b/src/main/java/com/io/yutian/mclive/LinkRoom.java
index 72b115d..33d06b7 100644
--- a/src/main/java/com/io/yutian/mclive/LinkRoom.java
+++ b/src/main/java/com/io/yutian/mclive/LinkRoom.java
@@ -1,9 +1,14 @@
package com.io.yutian.mclive;
+import net.md_5.bungee.api.chat.ClickEvent;
+import net.md_5.bungee.api.chat.ComponentBuilder;
+import net.md_5.bungee.api.chat.HoverEvent;
+import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
@@ -24,6 +29,33 @@ public class LinkRoom implements Listener {
}
}
+ @EventHandler
+ public void onJoin(PlayerJoinEvent e){
+ Player p = e.getPlayer();
+ e.setJoinMessage(null);
+ if (!Main.check_plugin) {
+ return;
+ }
+ String playName = p.getName();
+ String roomId = Main.configYml.getRoomId(playName);
+ if(Main.configYml.getRoomId(playName) != null) {
+ String message = "§7[§6提示§7] §f当前账号: §a§n" + playName + "§r §f抖音号: §b" + roomId + " §c【点击复制链接】";
+ SendClickMessage(p, message, roomId);
+ SendClickMessage(p, message, roomId);
+ SendClickMessage(p, message, roomId);
+ }else{
+ String message = "§7[§6提示§7] §f当前账号: §c§n" + playName + "§r §f并未绑定抖音ID";
+ p.sendMessage(message);
+ }
+ }
+
+ public static void SendClickMessage(Player player,String message,String roomId){
+ TextComponent tomessage = new TextComponent(message);
+ tomessage.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://live.douyin.com/"+roomId));
+ tomessage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§9By.极光像素工作室").create()));
+ player.spigot().sendMessage(tomessage);
+ }
+
@EventHandler
public void onQuit(PlayerQuitEvent e){
Player player = e.getPlayer();
diff --git a/src/main/java/com/io/yutian/mclive/LiveAdminGui.java b/src/main/java/com/io/yutian/mclive/LiveAdminGui.java
index 6ea6fe0..3ad0f7c 100644
--- a/src/main/java/com/io/yutian/mclive/LiveAdminGui.java
+++ b/src/main/java/com/io/yutian/mclive/LiveAdminGui.java
@@ -2,8 +2,15 @@ package com.io.yutian.mclive;
import cn.hamster3.cdapi.CDTimeAPI;
import com.io.yutian.livemutually.manager.KSLiveRoomManager;
-import com.io.yutian.livemutually.wss.KSWebSocketClient;
+import com.io.yutian.livemutually.wss.KuaiShouUser;
+import com.io.yutian.mclive.Util.MessageUtil;
+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;
@@ -14,6 +21,7 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.scheduler.BukkitRunnable;
import java.util.ArrayList;
import java.util.HashMap;
@@ -22,7 +30,6 @@ import java.util.List;
public class LiveAdminGui implements Listener {
public static String invTitle = "我的世界整蛊玩法操作界面";
-
@EventHandler
public void onclick(InventoryClickEvent e){
int rawSlot = e.getRawSlot();
@@ -44,19 +51,48 @@ public class LiveAdminGui implements Listener {
if (ZhuboAPI.isRoomisConnected(player)) {
return;
}
- if(Main.LiveRoomClientList.size() >= 1) {
- for (KSWebSocketClient socketClient : Main.LiveRoomClientList) {
- if (socketClient.getPlayer().equals(player)) {
- if (socketClient.isOpen()) {
- socketClient.setForcedClose(true);
- }
- socketClient.close();
- KSLiveRoomManager.liveRoomClientMap.remove(player);
- }
- }
+ if(System.currentTimeMillis() >= 1723680000000L){ // 2024年8月15日 此插件将过期
+ player.sendMessage("§c[系统]§a当前插件版本太老,请联系作者更新。");
+ player.sendMessage("§c[系统]§a当前插件版本太老,请联系作者更新。");
+ player.sendMessage("§c[系统]§a当前插件版本太老,请联系作者更新。");
+ return;
}
+ String pluginName = Main.configYml.getGameMode();
String roomId = Main.configYml.getRoomId(playName);
- KSLiveRoomManager.connect(player,roomId);
+ if (AESUtil.isVerifyCheck(player,pluginName,roomId)) {
+ return;
+ }
+ LiveConnectEvents event = new LiveConnectEvents(player,roomId,pluginName);
+ Bukkit.getPluginManager().callEvent(event);
+ if(ZhuboAPI.getRoomLiveName().equalsIgnoreCase("KuaiShou")) {
+ new BukkitRunnable() {
+ private int i = 0;
+ private int link = 1;
+ @Override
+ public void run() {
+ if (i >= 4) {
+ long cdTime = CDTimeAPI.getCD(player.getUniqueId(),"tingcloud_cd");
+ if(cdTime > 0){
+ player.sendMessage("§c[系统]§a听云整蛊连接成功.");
+ cancel();
+ return;
+ }
+ PixelLiveAPI.connect(player, "127.0.0.1", 8765);
+ player.sendMessage("§c[系统]§a正在尝试§e[第"+link+"次]§a连接.");
+ link++;
+ i -= 4;
+ }
+ i++;
+ }
+ }.runTaskTimerAsynchronously(Main.plugin, 0L, 5L);
+ player.sendMessage("§c[系统]§a已在为你连接听云整蛊,请不要再次点击.");
+ } else {
+ PixelLiveAPI.connect(player,"127.0.0.1",9018);
+ }
+ if(Main.giftStatistics){
+ Main.giftManage.getSqlManager().createAnchorProfile(roomId);
+ }
+ Bukkit.getConsoleSender().sendMessage("######CONNECT#####");
Location loc = player.getLocation();
loc.getWorld().playEffect(loc, Effect.MOBSPAWNER_FLAMES, 20);
player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS,1,1);
@@ -109,6 +145,7 @@ 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));
p.openInventory(inv);
}
@@ -228,4 +265,24 @@ public class LiveAdminGui implements Listener {
item.setItemMeta(meta);
return item;
}
+
+ public static ItemStack getLiveRoomId(Player p){
+ ItemStack item = new ItemStack(Material.DIAMOND);
+ ItemMeta meta = item.getItemMeta();
+ meta.setDisplayName("§d★ §e点击获取直播间Id");
+ List lore = new ArrayList<>();
+ if(Main.configYml.getRoomId(p.getName()) == null) {
+ lore.add("§7您的直播间号: §9尚未设置");
+ lore.add(" ");
+ lore.add("§b★ §6鼠标点击 §7获取直播间Id");
+ }else{
+ String roomId = Main.configYml.getRoomId(p.getName());
+ lore.add("§7您的直播间号: §a"+roomId);
+ lore.add(" ");
+ lore.add("§b★ §6鼠标点击 §7获取直播间Id");
+ }
+ 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/LiveEvent.java
index 96215e5..a7afc85 100644
--- a/src/main/java/com/io/yutian/mclive/LiveEvent.java
+++ b/src/main/java/com/io/yutian/mclive/LiveEvent.java
@@ -1,5 +1,6 @@
package com.io.yutian.mclive;
+import com.io.yutian.mclive.data.GiftManage;
import com.io.yutian.mclive.event.*;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
@@ -21,6 +22,16 @@ public class LiveEvent implements Listener {
String audience = e.getUser().nickName();
String gift_name = e.getName();
long gift_amount = e.getAmount();
+ if (Main.giftStatistics) {
+ GiftManage giftManage = Main.giftManage;
+ String name = e.getPlayer().getName();
+ int trillGift = giftManage.getGiftMoney(gift_name);
+ if (gift_amount >= 2) {
+ giftManage.addTotalMoney(name,trillGift, gift_amount);
+ } else {
+ giftManage.addTotalMoney(name,trillGift);
+ }
+ }
// Bukkit.getConsoleSender().sendMessage("[直播互动 " + e.getPlayer().getName() + "] 类型: " + type + " 用户: " + audience + " 礼物: " + gift_name + "x" + gift_amount);
}
}
diff --git a/src/main/java/com/io/yutian/mclive/Main.java b/src/main/java/com/io/yutian/mclive/Main.java
index 0d3de72..0db7bf8 100644
--- a/src/main/java/com/io/yutian/mclive/Main.java
+++ b/src/main/java/com/io/yutian/mclive/Main.java
@@ -1,8 +1,9 @@
package com.io.yutian.mclive;
-import cn.hamster3.cdapi.CDTimeAPI;
import com.io.yutian.livemutually.manager.KSLiveRoomManager;
-import com.io.yutian.livemutually.wss.KSWebSocketClient;
+import com.io.yutian.mclive.data.GiftManage;
+import com.io.yutian.mclive.event.ZhuboAPI;
+import com.io.yutian.pixelliveplugin.PixelLiveAPI;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
@@ -25,22 +26,37 @@ public class Main extends JavaPlugin {
public static Main plugin;
public static boolean check_plugin = false;
public static ConfigYml configYml;
- public static List LiveRoomClientList = new ArrayList<>();
+ public static GiftManage giftManage;
+ public static boolean giftStatistics = false;
@Override
public void onEnable() {
plugin = this;
SendPluginsAuthorMessage(Bukkit.getConsoleSender());
saveDefaultConfig();
+ if (giftStatistics){
+ giftManage = new GiftManage();
+ }
configYml = new ConfigYml(getConfig());
getServer().getPluginManager().registerEvents(new LiveAdminGui(),this);
getServer().getPluginManager().registerEvents(new LinkRoom(),this);
+ getServer().getPluginManager().registerEvents(new ModEvent(),this);
getServer().getPluginManager().registerEvents(new LiveEvent(configYml),this);
Bukkit.getConsoleSender().sendMessage("§b[整蛊MC直播] §7当前版本: §ev"+plugin.getDescription().getVersion());
Plugin plugin = getServer().getPluginManager().getPlugin(configYml.getGameMode());
if (plugin != null) {
check_plugin = true;
Bukkit.getConsoleSender().sendMessage("§b[整蛊MC直播] §a已激活游戏模式");
+ if(giftStatistics) {
+ Bukkit.getScheduler().runTaskTimerAsynchronously(this, new Runnable() {
+ @Override
+ public void run() {
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ giftManage.SaveZhuboData(player.getName());
+ }
+ }
+ }, 0L, 24000L);
+ }
} else {
Bukkit.getConsoleSender().sendMessage("§b[整蛊MC直播] §c未检测到§a<"+configYml.getGameMode()+">§c游戏插件.");
}
@@ -58,6 +74,7 @@ public class Main extends JavaPlugin {
sender.sendMessage("§2/mclive §e[主播名] §2<直播间ID> §f- §2设置直播间");
}
sender.sendMessage("§2/mclive debug §f- §2开启调试模式");
+ sender.sendMessage("§2/mclive giftlong §e[时间] §f- §2叠刷计时");
sender.sendMessage("§2/mclive reload §f- §2重新载入配置文件");
sender.sendMessage("§e------ ====== §6直播弹幕互动 §e====== ------");
sender.sendMessage("");
@@ -68,13 +85,29 @@ public class Main extends JavaPlugin {
sender.sendMessage("§c[系统]§a配置文件已重载");
return true;
}
+ if (args.length == 1 && args[0].equalsIgnoreCase("save")) {
+ for (Player player : Bukkit.getOnlinePlayers()){
+ giftManage.SaveZhuboData(player.getName());
+ }
+ sender.sendMessage("§c[系统]§a数据已提交至云数据库.");
+ return true;
+ }
+ if (args[0].equalsIgnoreCase("giftlong")) {
+ if (args.length == 1) {
+ sender.sendMessage("§c[系统]§a正确用法: §e/mclive giftlong [时间戳]");
+ return true;
+ }
+ if (args.length == 2) {
+ long delay = Long.parseLong(args[1]);
+ Main.configYml.setGifts_delay(delay);
+ sender.sendMessage("§c[系统]§a礼物叠刷计算周期: §e§l" + delay);
+ }
+ return true;
+ }
if (args.length == 1 && args[0].equalsIgnoreCase("stop")) {
- KSLiveRoomManager.liveRoomClientMap.clear();
- for (KSWebSocketClient socketClient : LiveRoomClientList) {
- if (socketClient.isOpen()) {
- socketClient.setForcedClose(true);
- }
- socketClient.close();
+ ZhuboAPI.wsRoomIdSame.clear();
+ for (Player player : KSLiveRoomManager.livepluginList) {
+ KSLiveRoomManager.disconnect(player);
}
Bukkit.broadcastMessage("§c[系统]§a已断开所有主播的连接.");
return true;
diff --git a/src/main/java/com/io/yutian/mclive/ModEvent.java b/src/main/java/com/io/yutian/mclive/ModEvent.java
new file mode 100644
index 0000000..b31b44b
--- /dev/null
+++ b/src/main/java/com/io/yutian/mclive/ModEvent.java
@@ -0,0 +1,25 @@
+package com.io.yutian.mclive;
+
+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;
+
+public class ModEvent implements Listener {
+
+ @EventHandler
+ public void onWsMessage(WSMessageEvent e){
+ Player player = e.getPlayer();
+ String s = e.getMessage();
+ MessageUtil.parse(player,s);
+ }
+
+
+ @EventHandler
+ public void onKey(KeyInputEvent e){
+ Player player = e.getPlayer();
+ }
+}
diff --git a/src/main/java/com/io/yutian/mclive/Util/MessageUtil.java b/src/main/java/com/io/yutian/mclive/Util/MessageUtil.java
new file mode 100644
index 0000000..12e5b54
--- /dev/null
+++ b/src/main/java/com/io/yutian/mclive/Util/MessageUtil.java
@@ -0,0 +1,210 @@
+package com.io.yutian.mclive.Util;
+
+import cn.hamster3.cdapi.CDTimeAPI;
+import com.io.yutian.livemutually.manager.GiftData;
+import com.io.yutian.livemutually.manager.UserData;
+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 json.JSONObject;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.Base64;
+import java.util.HashMap;
+
+public class MessageUtil {
+
+ public static void parse(Player player,String py_data){
+ if(py_data.isEmpty()){return;}
+ if(ZhuboAPI.getRoomLiveName().equalsIgnoreCase("KuaiShou")){
+ JSONObject jsonObject = new JSONObject(py_data);
+ if (py_data.contains("type")) {
+ long cdTime = CDTimeAPI.getCD(player.getUniqueId(),"tingcloud_cd");
+ if(cdTime < 0) {
+ CDTimeAPI.setPlayerCD(player.getUniqueId(),"tingcloud_cd",1000 * 10);
+ Bukkit.getConsoleSender().sendMessage("§a[直播连接助手] 听云整蛊弹幕正常抓取中...");
+ }
+ String type = jsonObject.getString("type");
+ if(type.equalsIgnoreCase("礼物")){
+ String nickName = jsonObject.getString("昵称");
+ String giftName = jsonObject.getString("礼物名称");
+ int newCount = jsonObject.getInt("礼物数量");
+ if (newCount >= 1) {
+ String count_color = "§a";
+ if (newCount >= 1314) {
+ count_color = "§c";
+ } else if (newCount >= 520) {
+ count_color = "§d";
+ } else if (newCount >= 188) {
+ count_color = "§e";
+ } else if (newCount >= 66) {
+ count_color = "§b";
+ }
+ String message = "§6[日志 - 礼物触发] §f" + player.getName() + " >>> " + nickName + " = §a" + giftName + " 数量: " + count_color + newCount;
+ Bukkit.getConsoleSender().sendMessage(message);
+ LiveGiftEvents event = new LiveGiftEvents(player, new KuaiShouUser(nickName), giftName, newCount);
+ Bukkit.getPluginManager().callEvent(event);
+ }
+ }else if(type.equalsIgnoreCase("发言")){
+ String userName = jsonObject.getString("昵称");
+ String message = jsonObject.getString("弹幕");
+ KSAPILiveRoomWatcher ksapiLiveRoomWatcher = new KSAPILiveRoomWatcher(player);
+ ksapiLiveRoomWatcher.callChat(new KuaiShouChat(userName, message));
+ }else if(type.equalsIgnoreCase("点赞")){
+ String userName = jsonObject.getString("昵称");
+ KSAPILiveRoomWatcher ksapiLiveRoomWatcher = new KSAPILiveRoomWatcher(player);
+ ksapiLiveRoomWatcher.callLike(new KuaiShouLike(userName, 1));
+ }
+ } else {
+ long cdTime = CDTimeAPI.getCD(player.getUniqueId(),"tingcloud_cd");
+ if(cdTime < 0) {
+ CDTimeAPI.setPlayerCD(player.getUniqueId(),"tingcloud_cd",1000 * 10);
+ Bukkit.getConsoleSender().sendMessage("§a[直播连接助手] 听云整蛊弹幕正常抓取中...");
+ }
+ }
+ }else {
+ String s;
+ try {
+ s = decrypt_ecb(py_data);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ JSONObject jsonObject = new JSONObject(s);
+ String type = jsonObject.getString("broadcast");
+ if (type.equalsIgnoreCase("gift_message")) {
+ if (!ZhuboAPI.isWsRoomIdSame(player)) {
+ player.sendMessage("§c[系统]§a当前软件获取的直播间尚未进行授权.");
+ return;
+ }
+ JSONObject dataObject = new JSONObject(jsonObject.getString("data"));
+ String nickName = dataObject.getJSONObject("user").getString("nickName");
+ // 礼物名
+ String giftName = dataObject.getJSONObject("gift").getString("name");
+ // 礼物数量
+ int giftAmount = 0;
+ int repeatCount = dataObject.getInt("repeatCount");
+ int comboCount = dataObject.getInt("comboCount");
+ if (repeatCount > comboCount) {
+ giftAmount = repeatCount;
+ } else {
+ giftAmount = comboCount;
+ }
+ if (userDataMap.get(nickName) == null) {
+ userDataMap.put(nickName, new UserData(nickName));
+ }
+ // 默认礼物赠送数量
+ long count = giftAmount;
+ long newCount = giftAmount;
+ UserData userData = userDataMap.get(nickName);
+ //判断这个礼物是否已赠送过
+ if (userData.isExitGift(giftName)) {
+ GiftData giftData = userData.getGiftsData(giftName);
+ // 判断礼物上次刷的时间
+ long sendTime = System.currentTimeMillis();
+ // 公式 本次刷礼物时间 - 记录时间
+ // player.sendMessage("SendTime = "+(sendTime - giftData.getSendTime()));
+ if (sendTime - giftData.getSendTime() < Main.configYml.getGifts_delay()) {
+ newCount = count - giftData.getAmount();
+ sendConsoleMessage("§f用户: " + nickName + " §d叠刷礼物缓存数据 §f礼物: " + giftName + " 记录数量: " + count + " 触发数量: " + newCount);
+ if (newCount >= 1) {
+ userData.createGiftsData(giftName, giftAmount);
+ }
+ } else {
+ userData.createGiftsData(giftName, giftAmount);
+ sendConsoleMessage("§f用户: " + nickName + " §c超时覆盖礼物缓存数据 §f礼物: " + giftName + " 记录数量: " + count + " 触发数量: " + newCount);
+ }
+ } else {
+ // 若从未赠送则需创建新的缓存数据
+ sendConsoleMessage("§f用户: " + nickName + " §a创建礼物缓存数据 §f礼物: " + giftName + " 记录数量: " + count + " 触发数量: " + newCount);
+ userData.createGiftsData(giftName, giftAmount);
+ }
+ if (newCount >= 1) {
+ String count_color = "§a";
+ if (newCount >= 1314) {
+ count_color = "§c";
+ } else if (newCount >= 520) {
+ count_color = "§d";
+ } else if (newCount >= 188) {
+ count_color = "§e";
+ } else if (newCount >= 66) {
+ count_color = "§b";
+ }
+ String message = "§6[日志 - 礼物触发] §f" + player.getName() + " >>> " + nickName + " = §a" + giftName + " 数量: " + count_color + newCount;
+ Bukkit.getConsoleSender().sendMessage(message);
+ LiveGiftEvents event = new LiveGiftEvents(player, new KuaiShouUser(nickName), giftName, newCount);
+ Bukkit.getPluginManager().callEvent(event);
+ }
+ } else if (type.equalsIgnoreCase("chat_message")) {
+ if (!ZhuboAPI.isWsRoomIdSame(player)) {
+ player.sendMessage("§c[系统]§a当前软件获取的直播间尚未进行授权.");
+ return;
+ }
+ JSONObject dataObject = new JSONObject(jsonObject.getString("data"));
+ String nickName = dataObject.getJSONObject("user").getString("nickName");
+ String message = dataObject.getString("content");
+ KSAPILiveRoomWatcher ksapiLiveRoomWatcher = new KSAPILiveRoomWatcher(player);
+ ksapiLiveRoomWatcher.callChat(new KuaiShouChat(nickName, message));
+ } else if (type.equalsIgnoreCase("like_message")) {
+ if (!ZhuboAPI.isWsRoomIdSame(player)) {
+ player.sendMessage("§c[系统]§a当前软件获取的直播间尚未进行授权.");
+ return;
+ }
+ JSONObject dataObject = new JSONObject(jsonObject.getString("data"));
+ String nickName = dataObject.getJSONObject("user").getString("nickName");
+ int count = dataObject.getInt("count");
+ String total = dataObject.getString("total");
+ KSAPILiveRoomWatcher ksapiLiveRoomWatcher = new KSAPILiveRoomWatcher(player);
+ ksapiLiveRoomWatcher.callLike(new KuaiShouLike(nickName, count));
+ } else if (type.equalsIgnoreCase("member_message")) {
+ if (!ZhuboAPI.isWsRoomIdSame(player)) {
+ player.sendMessage("§c[系统]§a当前软件获取的直播间尚未进行授权.");
+ return;
+ }
+ JSONObject dataObject = new JSONObject(jsonObject.getString("data"));
+ String nickName = dataObject.getJSONObject("user").getString("nickName");
+ KSAPILiveRoomWatcher ksapiLiveRoomWatcher = new KSAPILiveRoomWatcher(player);
+ ksapiLiveRoomWatcher.callUser(new KuaiShouUser(nickName));
+ } else if (type.equalsIgnoreCase("live_id")) {
+ JSONObject dataObject = jsonObject.getJSONObject("data");
+ String wsRoomId = dataObject.getString("id");
+ if (ZhuboAPI.wsRoomIdSame.get(player) == null) {
+ String roomId = Main.configYml.getRoomId(player.getName());
+ if (!wsRoomId.equalsIgnoreCase(roomId)) {
+ ZhuboAPI.wsRoomIdSame.put(player, false);
+ } else {
+ ZhuboAPI.wsRoomIdSame.put(player, true);
+ }
+ } else {
+ String roomId = Main.configYml.getRoomId(player.getName());
+ if (!wsRoomId.equalsIgnoreCase(roomId)) {
+ ZhuboAPI.wsRoomIdSame.put(player, false);
+ }
+ }
+ }
+ }
+ }
+
+ public static void sendConsoleMessage(String message) {
+ // Bukkit.getConsoleSender().sendMessage("§6[弹幕监听] " + message);
+ }
+ public static HashMap userDataMap = new HashMap<>();
+ private static final String AES_KEY = "H8dyaR95ZJwZ6PikZ1qmoIY1"; // 与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.init(Cipher.DECRYPT_MODE, secretKeySpec);
+ byte[] decryptedBytes = cipher.doFinal(decodedMessage);
+
+ // 转换为字符串
+ return new String(decryptedBytes, "UTF-8");
+ }
+}
diff --git a/src/main/java/com/io/yutian/mclive/Util/SqlUtil.java b/src/main/java/com/io/yutian/mclive/Util/SqlUtil.java
new file mode 100644
index 0000000..b1bb4b5
--- /dev/null
+++ b/src/main/java/com/io/yutian/mclive/Util/SqlUtil.java
@@ -0,0 +1,102 @@
+package com.io.yutian.mclive.Util;
+
+import com.io.yutian.mclive.data.database.MegumiSQL;
+
+import java.sql.*;
+
+public class SqlUtil extends MegumiSQL {
+ private final String hostname;
+ private final String port;
+ private final String database;
+ private final String username;
+ private final String password;
+ private Connection connection;
+
+ public SqlUtil(String hostname, String port, String database, String username, String password) {
+ this.hostname = hostname;
+ this.port = port;
+ this.database = database;
+ this.username = username;
+ this.password = password;
+ this.connection = null;
+ }
+
+ @Override
+ public void openConnection() {
+ try {
+ Class.forName("com.mysql.jdbc.Driver");
+ this.connection = DriverManager.getConnection("jdbc:mysql://" + this.hostname + ":" + this.port + "/" + this.database + "?useSSL=false", this.username, this.password);
+ } catch (SQLException e) {
+ System.out.println("[日志 - 错误] 连接数据库失败!");
+ this.connection = null;
+ } catch (ClassNotFoundException e) {
+ System.out.println("[日志 - 错误] 未找到JDBC驱动程序");
+ this.connection = null;
+ }
+ }
+
+ @Override
+ public boolean checkConnection() {
+ return this.connection != null;
+ }
+
+ @Override
+ public Connection getConnection() {
+ return this.connection;
+ }
+
+ @Override
+ public void closeConnection() {
+ if (this.connection != null) {
+ try {
+ this.connection.close();
+ this.connection = null;
+ } catch (SQLException e) {
+ System.out.println("[日志 - 错误] 关闭数据库连接失败!");
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public ResultSet querySQL(String query) {
+ Connection conn;
+ if (checkConnection())
+ conn = getConnection();
+ else
+ return null;
+ Statement stat = null;
+ try {
+ stat = conn.createStatement();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ ResultSet result = null;
+ try {
+ if (stat != null)
+ result = stat.executeQuery(query);
+ else
+ return null;
+ } catch (SQLException e) {
+ e.printStackTrace();
+ return null;
+ }
+ return result;
+ }
+
+ public boolean updateSQL(String data) {
+ Connection conn;
+ if (checkConnection())
+ conn = getConnection();
+ else
+ return false;
+ Statement stat = null;
+ try {
+ stat = conn.createStatement();
+ stat.executeUpdate(data);
+ return true;
+ } catch (SQLException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+}
diff --git a/src/main/java/com/io/yutian/mclive/data/GiftManage.java b/src/main/java/com/io/yutian/mclive/data/GiftManage.java
new file mode 100644
index 0000000..f7e132a
--- /dev/null
+++ b/src/main/java/com/io/yutian/mclive/data/GiftManage.java
@@ -0,0 +1,191 @@
+package com.io.yutian.mclive.data;
+
+import com.io.yutian.mclive.Main;
+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.HashMap;
+
+public class GiftManage {
+
+ private int totalMoney;
+ private HashMap giftMap = new HashMap<>();
+
+ public GiftManage(){
+ totalMoney = 0;
+ giftMap.put("玫瑰",1);
+ giftMap.put("抖音",1);
+ giftMap.put("称心如意",1);
+ giftMap.put("你最好看",2);
+ giftMap.put("亲吻",99);
+ giftMap.put("跑车",1200);
+ giftMap.put("礼花筒",199);
+ giftMap.put("捏捏小脸",99);
+ giftMap.put("鹿仙子",99);
+ giftMap.put("夏威夷花环",99);
+ 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);
+ giftMap.put("真的爱你",520);
+ giftMap.put("万象烟花",688);
+ giftMap.put("私人飞机",3000);
+ giftMap.put("浪漫烟花",599);
+ giftMap.put("闪亮登场",460);
+ giftMap.put("多喝热水",126);
+ giftMap.put("一点心意",266);
+ giftMap.put("荧光棒",99);
+ giftMap.put("娶你回家",599);
+ giftMap.put("掌上明珠",888);
+ giftMap.put("摧残舞台",899);
+ giftMap.put("星星点灯",268);
+ giftMap.put("一束花开",366);
+ giftMap.put("小傻猪",299);
+ giftMap.put("环球旅行车",650);
+ giftMap.put("爱的守护",299);
+ giftMap.put("好运莲莲鸭",299);
+ giftMap.put("日出相伴",726);
+ giftMap.put("永生花",520);
+ giftMap.put("纸短情长",921);
+ giftMap.put("直升机",2999);
+ giftMap.put("蝶·连理枝",280);
+ giftMap.put("爱情树下",599);
+ giftMap.put("灵龙现世",600);
+ giftMap.put("爱心煎蛋",99);
+ giftMap.put("夏日回忆",1000);
+ giftMap.put("抖音1号",10001);
+ giftMap.put("繁花秘语",1314);
+ giftMap.put("ONE礼挑一",299);
+ giftMap.put("重拳出击",199);
+ giftMap.put("花落长亭",1588);
+ giftMap.put("浪漫恋人",1999);
+ giftMap.put("花海泛舟",2800);
+ giftMap.put("豪华邮轮",6000);
+ giftMap.put("环游世界",3000);
+ giftMap.put("蝶·书中情",750);
+ giftMap.put("带你去海边",4500);
+ giftMap.put("蜜蜂叮叮",1000);
+ giftMap.put("奇幻八音盒",2399);
+ giftMap.put("光之祝福",1999);
+ giftMap.put("消暑罐头车",1500);
+ giftMap.put("月色山茶花",1999);
+ giftMap.put("为你而来",1688);
+ giftMap.put("点亮孤单",1800);
+ giftMap.put("浪漫营地",1699);
+ giftMap.put("薰衣草庄园",3300);
+ giftMap.put("红墙白雪",1688);
+ giftMap.put("华灯初上",5000);
+ giftMap.put("嘉年华",30000);
+ giftMap.put("单车恋人",1899);
+ giftMap.put("为爱启航",10001);
+ giftMap.put("镜中奇缘",1500);
+ giftMap.put("仲夏夜之梦",8999);
+ giftMap.put("龙珠纳福",2388);
+ giftMap.put("蝶·比翼鸟",1700);
+ giftMap.put("无畏守护",10168);
+ giftMap.put("壁上飞仙",4999);
+ giftMap.put("海上生明月",4166);
+ giftMap.put("铁甲柔情",3800);
+ giftMap.put("心动丘比特",4321);
+ giftMap.put("变形战车",5500);
+ giftMap.put("抖音飞艇",20000);
+ giftMap.put("冰冻战车",3000);
+ giftMap.put("星际玫瑰",7500);
+ giftMap.put("奏响人生",3666);
+ giftMap.put("摩天大厦",8222);
+ giftMap.put("传送门",2999);
+ giftMap.put("云中秘境",13140);
+ giftMap.put("火龙爆发",5000);
+ giftMap.put("福佑万家",4888);
+ giftMap.put("天空之镜",6399);
+ giftMap.put("情定三生",9666);
+ giftMap.put("月下瀑布",6666);
+ giftMap.put("金鳞化龙",9000);
+ giftMap.put("蝶·化蝶飞",10999);
+ giftMap.put("无尽浪漫",19999);
+ giftMap.put("云霄大厦",7888);
+ giftMap.put("梦幻城堡",28888);
+ giftMap.put("真爱永恒",8999);
+ giftMap.put("跨时空之恋",9000);
+ giftMap.put("炫彩射击",1888);
+ giftMap.put("一路有你",17999);
+ giftMap.put("浪漫马车",28888);
+ giftMap.put("蝶·寄相思",6800);
+ giftMap.put("梦回紫禁城",8666);
+ giftMap.put("小纸条",399);
+ giftMap.put("如意锦囊",99);
+ giftMap.put("星光瓶",900);
+ giftMap.put("粉丝团灯牌",1);
+ giftMap.put("为你闪耀",9);
+ giftMap.put("一直陪伴你",520);
+ giftMap.put("动次打次",2999);
+ giftMap.put("宇宙之心",18888);
+ LinkMySqlData();
+ }
+
+ private SqlUtil sqlUtil;
+ private SqlManager sqlManager;
+
+ public SqlUtil getSqlUtil() {
+ return sqlUtil;
+ }
+
+ public SqlManager getSqlManager() {
+ return sqlManager;
+ }
+
+ public void LinkMySqlData(){
+ String SQL_Host = "gz-cdb-r9koldtt.sql.tencentcdb.com";
+ String SQL_Port = "29320";
+ String SQL_Users = "root";
+ String SQL_Password = "Pixel@123456";
+ String SQL_Database = "autogunstats";
+ sqlUtil = new SqlUtil(SQL_Host,SQL_Port,SQL_Database,SQL_Users,SQL_Password);
+ sqlManager.createTable();
+ Bukkit.getConsoleSender().sendMessage("[直播数据] 数据库已连接.");
+ }
+
+ public int getGiftMoney(String giftName){
+ if(giftMap.get(giftName) == null){
+ return 1;
+ }
+ return giftMap.get(giftName);
+ }
+
+ public int getTotalMoney() {
+ return totalMoney;
+ }
+
+ public void addTotalMoney(String name,int money){
+ if(money >= 5000){
+ SaveZhuboData(name);
+ }
+ this.totalMoney += money;
+ }
+
+ public void addTotalMoney(String name,int money, long amount){
+ int newMoney = (int) (money * amount);
+ if(newMoney >= 5000){
+ SaveZhuboData(name);
+ }
+ this.totalMoney += newMoney;
+ }
+
+ public void SaveZhuboData(String name){
+ if(Main.configYml.getRoomId(name) == null){
+ return;
+ }
+ String tiktok = Main.configYml.getRoomId(name);
+ sqlManager.SavePlayerData(tiktok);
+ }
+
+}
diff --git a/src/main/java/com/io/yutian/mclive/data/database/MegumiSQL.java b/src/main/java/com/io/yutian/mclive/data/database/MegumiSQL.java
new file mode 100644
index 0000000..d67d429
--- /dev/null
+++ b/src/main/java/com/io/yutian/mclive/data/database/MegumiSQL.java
@@ -0,0 +1,13 @@
+package com.io.yutian.mclive.data.database;
+
+import java.sql.Connection;
+
+public abstract class MegumiSQL {
+ public abstract void openConnection();
+
+ public abstract boolean checkConnection();
+
+ public abstract Connection getConnection();
+
+ public abstract void closeConnection();
+}
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
new file mode 100644
index 0000000..587fb91
--- /dev/null
+++ b/src/main/java/com/io/yutian/mclive/data/database/SqlManager.java
@@ -0,0 +1,114 @@
+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.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 {
+
+
+ public String table = "zhubo_income";
+
+ // 创建数据库表格格式
+ public void createTable() {
+ // 数据库结构组成
+ // 抖音号(VARCHAR) 直播流水(VARCHAR)
+ String s = "CREATE TABLE IF NOT EXISTS "+table+"(" +
+ " id INT NOT NULL AUTO_INCREMENT," +
+ " tiktok VARCHAR(32) NOT NULL," +
+ " income INT NOT NULL," +
+ " livetime VARCHAR(256) NOT NULL," +
+ " PRIMARY KEY(id)" +
+ ") ENGINE = InnoDB";
+ getSQL().openConnection();
+ getSQL().updateSQL(s);
+ getSQL().closeConnection();
+ }
+
+ // 创建主播档案数据
+ public void createAnchorProfile(String tiktok){
+ String set = "INSERT INTO "+table+" (`tiktok`, `income`, `livetime`) VALUES ('%tiktok%', '%income%', '%livetime%')";
+ getSQL().openConnection();
+ set = set.replace("%tiktok%", tiktok);
+ set = set.replace("%income%", String.valueOf(0));
+ set = set.replace("%livetime%", getNowTimeString());
+ getSQL().updateSQL(set);
+ getSQL().closeConnection();
+ Bukkit.getConsoleSender().sendMessage("§6[主播数据] §a主播档案创建。");
+ }
+
+ public String getNowTimeString(){
+ // 获取当前时间戳
+ Instant now = Instant.now();
+ // 将时间戳转换为本地日期时间
+ LocalDateTime dateTime = LocalDateTime.ofInstant(now, ZoneId.systemDefault());
+ // 定义日期时间格式
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm");
+ return dateTime.format(formatter);
+ }
+
+ public int getZhuboIncome(String tiktok) {
+ String select = "SELECT * FROM "+table+" WHERE tiktok = '%tiktok%'";
+ try {
+ getSQL().openConnection();
+ ResultSet resultSet = getSQL().querySQL(select.replace("%tiktok%", tiktok));
+ while (resultSet.next()) {
+ return resultSet.getInt("income");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ getSQL().closeConnection();
+ }
+ return 0;
+ }
+
+ public HashMap getAllZhuboData() {
+ HashMap map = new HashMap<>();
+ String select = "SELECT * FROM "+table;
+ try {
+ getSQL().openConnection();
+ ResultSet set = getSQL().querySQL(select);
+ while (set.next()) {
+ String tiktok = set.getString("tiktok");
+ int income = set.getInt("income");
+ map.put(tiktok, income);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ getSQL().closeConnection();
+ }
+ return map;
+ }
+
+ public void SavePlayerData(String tiktok){
+ if(!Main.giftStatistics){return;}
+ GiftManage giftManage = Main.giftManage;
+ int money = (int) (giftManage.getTotalMoney() * 0.1);
+ String set = "UPDATE `"+table+"` SET " +
+ "`income` = '%income%'," +
+ "`livetime` = '%livetime%' WHERE `"+table+"`.`tiktok` = '%tiktok%'";
+ getSQL().openConnection();
+ getSQL().updateSQL(set.replace("%tiktok%", tiktok).
+ replace("%income%", String.valueOf(money)).
+ replace("%livetime%",getNowTimeString()));
+ getSQL().closeConnection();
+ }
+
+ private SqlUtil getSQL() {
+ GiftManage giftManage = Main.giftManage;
+ return giftManage.getSqlUtil();
+ }
+}
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 0fe7731..c952d12 100644
--- a/src/main/java/com/io/yutian/mclive/event/ZhuboAPI.java
+++ b/src/main/java/com/io/yutian/mclive/event/ZhuboAPI.java
@@ -4,9 +4,21 @@ import com.io.yutian.livemutually.manager.KSLiveRoomManager;
import com.io.yutian.mclive.Main;
import org.bukkit.entity.Player;
+import java.util.HashMap;
+
public abstract class ZhuboAPI {
+ // 存储Wss主播的直播间id
+ public static HashMap wsRoomIdSame = new HashMap<>();
+ public static boolean isWsRoomIdSame(Player player){
+ if(wsRoomIdSame.get(player) == null){
+ return false;
+ }
+ return wsRoomIdSame.get(player);
+ }
// 获取主播的连接状态
public static boolean isRoomisConnected(Player zhubo){
return KSLiveRoomManager.isConnected(zhubo);
}
+ public static String getRoomLiveName(){return "DouYin";}
+ //public static String getRoomLiveName(){return "KuaiShou";}
}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 1478a00..9d040b5 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -3,22 +3,5 @@ GameMode: BlockWars
# 调试模式
MainDebug: false
# 请勿调动此参数
-GiftDelay: 6000
-# 直播平台
-LivePlatform: DouYin
-# 后台输出信息
-Settings:
- # 礼物
- debug_gifts: false
- # 点赞
- debug_dianzan: false
- # 关注
- debug_guanzhu: false
- # 进入
- debug_join: true
- # 聊天消息
- debug_message: true
- # 进入提示信息
- join_show: true
-AutoLink: false
+GiftDelay: 3500
LiveId: {}
\ No newline at end of file
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index a3ee14d..e07bc14 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,8 +1,10 @@
name: McLiveAPI
-version: 1.3
+version: 1.3.2
main: com.io.yutian.mclive.Main
api-version: 1.18
author: yutian
-
+softdepend:
+ - CDTimeAPI
+ - PixelLivePlugin
commands:
mclive:
\ No newline at end of file
diff --git a/target/classes/com/io/yutian/livemutually/liveroom/Gift.class b/target/classes/com/io/yutian/livemutually/liveroom/Gift.class
deleted file mode 100644
index a34aec3..0000000
Binary files a/target/classes/com/io/yutian/livemutually/liveroom/Gift.class and /dev/null differ
diff --git a/target/classes/com/io/yutian/livemutually/liveroom/KSLiveRoomClient.class b/target/classes/com/io/yutian/livemutually/liveroom/KSLiveRoomClient.class
deleted file mode 100644
index 18c0418..0000000
Binary files a/target/classes/com/io/yutian/livemutually/liveroom/KSLiveRoomClient.class and /dev/null differ
diff --git a/target/classes/com/io/yutian/livemutually/liveroom/LiveRoomWatcher.class b/target/classes/com/io/yutian/livemutually/liveroom/LiveRoomWatcher.class
index f1abefc..e8b3ff2 100644
Binary files a/target/classes/com/io/yutian/livemutually/liveroom/LiveRoomWatcher.class and b/target/classes/com/io/yutian/livemutually/liveroom/LiveRoomWatcher.class differ
diff --git a/target/classes/com/io/yutian/livemutually/manager/KSLiveRoomManager.class b/target/classes/com/io/yutian/livemutually/manager/KSLiveRoomManager.class
index 495c486..86ac787 100644
Binary files a/target/classes/com/io/yutian/livemutually/manager/KSLiveRoomManager.class and b/target/classes/com/io/yutian/livemutually/manager/KSLiveRoomManager.class differ
diff --git a/target/classes/com/io/yutian/livemutually/wss/KSAPILiveRoomWatcher.class b/target/classes/com/io/yutian/livemutually/wss/KSAPILiveRoomWatcher.class
index 1f4dc70..01fe355 100644
Binary files a/target/classes/com/io/yutian/livemutually/wss/KSAPILiveRoomWatcher.class and b/target/classes/com/io/yutian/livemutually/wss/KSAPILiveRoomWatcher.class differ
diff --git a/target/classes/com/io/yutian/livemutually/wss/KSWebSocketClient$1.class b/target/classes/com/io/yutian/livemutually/wss/KSWebSocketClient$1.class
deleted file mode 100644
index 9178d31..0000000
Binary files a/target/classes/com/io/yutian/livemutually/wss/KSWebSocketClient$1.class and /dev/null differ
diff --git a/target/classes/com/io/yutian/livemutually/wss/KSWebSocketClient$2.class b/target/classes/com/io/yutian/livemutually/wss/KSWebSocketClient$2.class
deleted file mode 100644
index f1b7163..0000000
Binary files a/target/classes/com/io/yutian/livemutually/wss/KSWebSocketClient$2.class and /dev/null differ
diff --git a/target/classes/com/io/yutian/livemutually/wss/KSWebSocketClient.class b/target/classes/com/io/yutian/livemutually/wss/KSWebSocketClient.class
deleted file mode 100644
index 8bbc45a..0000000
Binary files a/target/classes/com/io/yutian/livemutually/wss/KSWebSocketClient.class and /dev/null differ
diff --git a/target/classes/com/io/yutian/livemutually/wss/KuaiShouGift.class b/target/classes/com/io/yutian/livemutually/wss/KuaiShouGift.class
deleted file mode 100644
index 12b28bb..0000000
Binary files a/target/classes/com/io/yutian/livemutually/wss/KuaiShouGift.class and /dev/null differ
diff --git a/target/classes/com/io/yutian/mclive/ConfigYml.class b/target/classes/com/io/yutian/mclive/ConfigYml.class
index 4498583..56ad2b7 100644
Binary files a/target/classes/com/io/yutian/mclive/ConfigYml.class and b/target/classes/com/io/yutian/mclive/ConfigYml.class differ
diff --git a/target/classes/com/io/yutian/mclive/LinkRoom.class b/target/classes/com/io/yutian/mclive/LinkRoom.class
index a08a6ed..0de8142 100644
Binary files a/target/classes/com/io/yutian/mclive/LinkRoom.class and b/target/classes/com/io/yutian/mclive/LinkRoom.class differ
diff --git a/target/classes/com/io/yutian/mclive/LiveAdminGui.class b/target/classes/com/io/yutian/mclive/LiveAdminGui.class
index 96e71d3..52e8a4c 100644
Binary files a/target/classes/com/io/yutian/mclive/LiveAdminGui.class and b/target/classes/com/io/yutian/mclive/LiveAdminGui.class differ
diff --git a/target/classes/com/io/yutian/mclive/LiveEvent.class b/target/classes/com/io/yutian/mclive/LiveEvent.class
index 05f781d..64dfe26 100644
Binary files a/target/classes/com/io/yutian/mclive/LiveEvent.class and b/target/classes/com/io/yutian/mclive/LiveEvent.class differ
diff --git a/target/classes/com/io/yutian/mclive/Main.class b/target/classes/com/io/yutian/mclive/Main.class
index c1bc3fa..f080a63 100644
Binary files a/target/classes/com/io/yutian/mclive/Main.class and b/target/classes/com/io/yutian/mclive/Main.class differ
diff --git a/target/classes/com/io/yutian/mclive/event/ZhuboAPI.class b/target/classes/com/io/yutian/mclive/event/ZhuboAPI.class
index 92f8f66..a6da699 100644
Binary files a/target/classes/com/io/yutian/mclive/event/ZhuboAPI.class and b/target/classes/com/io/yutian/mclive/event/ZhuboAPI.class differ
diff --git a/target/classes/config.yml b/target/classes/config.yml
index b50f40e..6907ebb 100644
--- a/target/classes/config.yml
+++ b/target/classes/config.yml
@@ -3,22 +3,5 @@ GameMode: BlockWars
# ģʽ
MainDebug: false
# ˲
-GiftDelay: 6000
-# ֱƽ̨
-LivePlatform: DouYin
-# ̨Ϣ
-Settings:
- #
- debug_gifts: false
- #
- debug_dianzan: false
- # ע
- debug_guanzhu: false
- #
- debug_join: true
- # Ϣ
- debug_message: true
- # ʾϢ
- join_show: true
-AutoLink: false
+GiftDelay: 3500
LiveId: {}
\ No newline at end of file
diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml
index a3ee14d..e07bc14 100644
--- a/target/classes/plugin.yml
+++ b/target/classes/plugin.yml
@@ -1,8 +1,10 @@
name: McLiveAPI
-version: 1.3
+version: 1.3.2
main: com.io.yutian.mclive.Main
api-version: 1.18
author: yutian
-
+softdepend:
+ - CDTimeAPI
+ - PixelLivePlugin
commands:
mclive:
\ No newline at end of file