From 89e74813e25c2ac07f64f8b5e0fc3f9729cf14f2 Mon Sep 17 00:00:00 2001 From: mlus-Asuka <1319237806@qq.com> Date: Wed, 21 Dec 2022 19:42:56 +0800 Subject: [PATCH] Add chat message sync --- .../vip/fubuki/playersync/PlayerSync.java | 4 ++ .../vip/fubuki/playersync/sync/ChatSync.java | 40 +++++++++++++++++++ .../vip/fubuki/playersync/util/JDBCsetUp.java | 3 +- 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 src/main/java/vip/fubuki/playersync/sync/ChatSync.java diff --git a/src/main/java/vip/fubuki/playersync/PlayerSync.java b/src/main/java/vip/fubuki/playersync/PlayerSync.java index b7d3b16..b1f425e 100644 --- a/src/main/java/vip/fubuki/playersync/PlayerSync.java +++ b/src/main/java/vip/fubuki/playersync/PlayerSync.java @@ -13,6 +13,7 @@ import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.slf4j.Logger; import vip.fubuki.playersync.config.JdbcConfig; +import vip.fubuki.playersync.sync.ChatSync; import vip.fubuki.playersync.sync.VanillaSync; import vip.fubuki.playersync.util.JDBCsetUp; @@ -30,6 +31,8 @@ public class PlayerSync modEventBus.addListener(this::commonSetup); MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(new VanillaSync()); + MinecraftForge.EVENT_BUS.register(new ChatSync()); + } private void commonSetup(final FMLCommonSetupEvent event) {} @@ -38,6 +41,7 @@ public class PlayerSync public void onServerStarting(ServerStartingEvent event) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { JDBCsetUp.executeUpdate("CREATE DATABASE IF NOT EXISTS "+JdbcConfig.DATABASE_NAME.get(),true); JDBCsetUp.executeUpdate("CREATE TABLE IF NOT EXISTS player_data (uuid CHAR(36) NOT NULL,inventory BLOB,armor BLOB,advancements BLOB,enderchest BLOB,effects BLOB,xp int,food_level int,score int,health int,online boolean, PRIMARY KEY (uuid))"); + JDBCsetUp.executeUpdate("CREATE TABLE IF NOT EXISTS chat (player CHAR(36) NOT NULL,message TEXT,timestamp BIGINT)"); if(ModList.get().isLoaded("curios")) { JDBCsetUp.executeUpdate("CREATE TABLE IF NOT EXISTS curios (uuid CHAR(36) NOT NULL,curios_item BLOB, PRIMARY KEY (uuid))"); } diff --git a/src/main/java/vip/fubuki/playersync/sync/ChatSync.java b/src/main/java/vip/fubuki/playersync/sync/ChatSync.java new file mode 100644 index 0000000..355ed41 --- /dev/null +++ b/src/main/java/vip/fubuki/playersync/sync/ChatSync.java @@ -0,0 +1,40 @@ +package vip.fubuki.playersync.sync; + +import net.minecraft.network.chat.Component; +import net.minecraft.server.players.PlayerList; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import vip.fubuki.playersync.util.JDBCsetUp; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Objects; + +public class ChatSync { + int tick = 0; + long current = System.currentTimeMillis(); + @SubscribeEvent + public void onPlayerChat(net.minecraftforge.event.ServerChatEvent event) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { + ReadMessage(Objects.requireNonNull(event.getPlayer().getServer()).getPlayerList()); + JDBCsetUp.executeUpdate("INSERT INTO chat (player, message, timestamp) VALUES ('" + event.getUsername() + "', '" + event.getMessage() + "', '" + current + "')"); + } + + @SubscribeEvent + public void Tick(net.minecraftforge.event.TickEvent.ServerTickEvent event) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { + tick++; + if(tick == 20) { + ReadMessage(event.getServer().getPlayerList()); + } + } + + public void ReadMessage(PlayerList playerList) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { + ResultSet resultSet= JDBCsetUp.executeQuery("SELECT * FROM chat WHERE timestamp > " + current); + current = System.currentTimeMillis(); + tick = 0; + while(resultSet.next()) { + String player = resultSet.getString("player"); + String message = resultSet.getString("message"); + Component textComponents = Component.literal(player+": "+message); + playerList.broadcastSystemMessage(textComponents, true); + } + } +} diff --git a/src/main/java/vip/fubuki/playersync/util/JDBCsetUp.java b/src/main/java/vip/fubuki/playersync/util/JDBCsetUp.java index bcd5e1e..dcdbc96 100644 --- a/src/main/java/vip/fubuki/playersync/util/JDBCsetUp.java +++ b/src/main/java/vip/fubuki/playersync/util/JDBCsetUp.java @@ -28,8 +28,7 @@ public class JDBCsetUp { public static ResultSet executeQuery(String sql) throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException { Statement statement= getConnection(false).createStatement(); - ResultSet resultSet = statement.executeQuery(sql); - return resultSet; + return statement.executeQuery(sql); } public static void executeUpdate(String sql) throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException {