mirror of
https://github.com/System-End/Discord-MC-Chat.git
synced 2026-04-20 00:25:18 +00:00
更改项目名称 + 添加 !info 功能 + 删除 !online 功能
This commit is contained in:
parent
bfd896a1d7
commit
f79070ecfb
24 changed files with 165 additions and 144 deletions
|
|
@ -1,4 +1,4 @@
|
|||
# mc-discord-chat-bridge
|
||||
# MCDiscordChat
|
||||
|
||||
服务器跨服聊天工具 - Java
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
plugins {
|
||||
id 'fabric-loom' version '0.6.22'
|
||||
id 'maven-publish'
|
||||
id 'fabric-loom' version '0.6.48'
|
||||
}
|
||||
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@ org.gradle.jvmargs=-Xmx1G
|
|||
# check these on https://fabricmc.net/use
|
||||
minecraft_version=1.16.4
|
||||
yarn_mappings=1.16.4+build.9
|
||||
loader_version=0.11.1
|
||||
loader_version=0.11.2
|
||||
# Mod Properties
|
||||
mod_version=1.16.4-1.3.1
|
||||
maven_group=io.gitee.xujiayao147
|
||||
archives_base_name=mc-discord-chat-bridge
|
||||
mod_version=1.16.4-1.4.0
|
||||
maven_group=top.xujiayao
|
||||
archives_base_name=MCDiscordChat
|
||||
# Dependencies
|
||||
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
|
||||
fabric_version=0.29.4+1.16
|
||||
fabric_version=0.31.0+1.16
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge;
|
||||
package top.xujiayao.mcDiscordChat;
|
||||
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.objects.Player;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.objects.Stats;
|
||||
import top.xujiayao.mcDiscordChat.objects.Player;
|
||||
import top.xujiayao.mcDiscordChat.objects.Stats;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -55,7 +55,7 @@ public class Config {
|
|||
public List<String> bannedMinecraft = new ArrayList<>();
|
||||
|
||||
// Name of the world folder
|
||||
public String worldName = "Lazy_Craft";
|
||||
public String worldName = "world";
|
||||
|
||||
// List of players { Player(String name, String uuid, String expiresOn) }
|
||||
public List<Player> playerList;
|
||||
|
|
@ -81,11 +81,11 @@ public class Config {
|
|||
|
||||
// Minecraft -> Discord\nJoin server\nAvailable placeholders:\n%playername% |
|
||||
// Player name
|
||||
public String joinServer = "**%playername% 加入了游戏**";
|
||||
public String joinServer = "**%playername% 加入了服务器**";
|
||||
|
||||
// Minecraft -> Discord\nLeft server\nAvailable placeholders:\n%playername% |
|
||||
// Player name
|
||||
public String leftServer = "**%playername% 离开了游戏**";
|
||||
public String leftServer = "**%playername% 离开了服务器**";
|
||||
|
||||
// Minecraft -> Discord\nDeath message\nAvailable placeholders:\n%playername% |
|
||||
// Player name\n%deathmessage% | Death message
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge;
|
||||
package top.xujiayao.mcDiscordChat;
|
||||
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.commands.ShrugCommand;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.listeners.DiscordEventListener;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.listeners.MinecraftEventListener;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.JDABuilder;
|
||||
import net.dv8tion.jda.api.entities.Activity;
|
||||
|
|
@ -13,6 +10,9 @@ import net.fabricmc.api.DedicatedServerModInitializer;
|
|||
import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
||||
import okhttp3.OkHttpClient;
|
||||
import top.xujiayao.mcDiscordChat.commands.ShrugCommand;
|
||||
import top.xujiayao.mcDiscordChat.listeners.DiscordEventListener;
|
||||
import top.xujiayao.mcDiscordChat.listeners.MinecraftEventListener;
|
||||
|
||||
/**
|
||||
* @author Xujiayao
|
||||
|
|
@ -46,10 +46,12 @@ public class Main implements DedicatedServerModInitializer {
|
|||
}
|
||||
|
||||
if (jda != null) {
|
||||
if (!config.botListeningStatus.isEmpty())
|
||||
if (!config.botListeningStatus.isEmpty()) {
|
||||
jda.getPresence().setActivity(Activity.listening(config.botListeningStatus));
|
||||
}
|
||||
|
||||
ServerLifecycleEvents.SERVER_STARTED.register((server) -> textChannel.sendMessage(config.texts.serverStarted).queue());
|
||||
|
||||
ServerLifecycleEvents.SERVER_STOPPING.register((server) -> {
|
||||
stop = true;
|
||||
textChannel.sendMessage(config.texts.serverStopped).queue();
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.commands;
|
||||
package top.xujiayao.mcDiscordChat.commands;
|
||||
|
||||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import net.minecraft.command.argument.MessageArgumentType;
|
||||
|
|
@ -15,24 +15,27 @@ import static net.minecraft.server.command.CommandManager.literal;
|
|||
public class ShrugCommand {
|
||||
|
||||
public static void register(CommandDispatcher<ServerCommandSource> dispatcher) {
|
||||
dispatcher
|
||||
.register(literal("shrug").then(argument("message", MessageArgumentType.message()).executes(context -> {
|
||||
if (context.getSource() != null) {
|
||||
ServerCommandSource source = context.getSource();
|
||||
if (source.getPlayer() != null) {
|
||||
source.getPlayer().networkHandler.onGameMessage(new ChatMessageC2SPacket(
|
||||
getMessage(context, "message").getString() + " ¯\\_(ツ)_/¯"));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
})));
|
||||
dispatcher.register(literal("shrug").then(argument("message", MessageArgumentType.message()).executes(context -> {
|
||||
if (context.getSource() != null) {
|
||||
ServerCommandSource source = context.getSource();
|
||||
|
||||
if (source.getPlayer() != null) {
|
||||
source.getPlayer().networkHandler.onGameMessage(new ChatMessageC2SPacket(getMessage(context, "message").getString() + " ¯\\_(ツ)_/¯"));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
})));
|
||||
|
||||
dispatcher.register(literal("shrug").executes(context -> {
|
||||
if (context.getSource() != null) {
|
||||
ServerCommandSource source = context.getSource();
|
||||
|
||||
if (source.getPlayer() != null) {
|
||||
source.getPlayer().networkHandler.onGameMessage(new ChatMessageC2SPacket("¯\\_(ツ)_/¯"));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}));
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.events;
|
||||
package top.xujiayao.mcDiscordChat.events;
|
||||
|
||||
import net.fabricmc.fabric.api.event.Event;
|
||||
import net.fabricmc.fabric.api.event.EventFactory;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.events;
|
||||
package top.xujiayao.mcDiscordChat.events;
|
||||
|
||||
import net.fabricmc.fabric.api.event.Event;
|
||||
import net.fabricmc.fabric.api.event.EventFactory;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.events;
|
||||
package top.xujiayao.mcDiscordChat.events;
|
||||
|
||||
import net.fabricmc.fabric.api.event.Event;
|
||||
import net.fabricmc.fabric.api.event.EventFactory;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.events;
|
||||
package top.xujiayao.mcDiscordChat.events;
|
||||
|
||||
import net.fabricmc.fabric.api.event.Event;
|
||||
import net.fabricmc.fabric.api.event.EventFactory;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.events;
|
||||
package top.xujiayao.mcDiscordChat.events;
|
||||
|
||||
import net.fabricmc.fabric.api.event.Event;
|
||||
import net.fabricmc.fabric.api.event.EventFactory;
|
||||
|
|
@ -1,12 +1,7 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.listeners;
|
||||
package top.xujiayao.mcDiscordChat.listeners;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.Main;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.objects.Player;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.objects.Stats;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.utils.MarkdownParser;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.utils.Utils;
|
||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
|
|
@ -16,6 +11,11 @@ import net.minecraft.text.LiteralText;
|
|||
import net.minecraft.text.TextColor;
|
||||
import net.minecraft.util.Formatting;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import top.xujiayao.mcDiscordChat.Main;
|
||||
import top.xujiayao.mcDiscordChat.objects.Player;
|
||||
import top.xujiayao.mcDiscordChat.objects.Stats;
|
||||
import top.xujiayao.mcDiscordChat.utils.MarkdownParser;
|
||||
import top.xujiayao.mcDiscordChat.utils.Utils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
|
|
@ -42,22 +42,24 @@ public class DiscordEventListener extends ListenerAdapter {
|
|||
return;
|
||||
}
|
||||
|
||||
if (e.getMessage().getContentRaw().startsWith("!online")) {
|
||||
List<ServerPlayerEntity> onlinePlayers = server.getPlayerManager().getPlayerList();
|
||||
if (onlinePlayers.size() == 0) {
|
||||
e.getChannel().sendMessage(
|
||||
"```\n=============== 在线玩家 (" + onlinePlayers.size() + ") ===============\n\n当前没有在线玩家!```")
|
||||
.queue();
|
||||
} else {
|
||||
StringBuilder playerList = new StringBuilder(
|
||||
"```\n=============== 在线玩家 (" + onlinePlayers.size() + ") ===============\n");
|
||||
for (ServerPlayerEntity player : onlinePlayers) {
|
||||
playerList.append("\n").append(player.getEntityName());
|
||||
}
|
||||
if (e.getMessage().getContentRaw().startsWith("!info")) {
|
||||
StringBuilder infoString = new StringBuilder("```\n=============== 运行状态 ===============\n\n");
|
||||
|
||||
playerList.append("```");
|
||||
e.getChannel().sendMessage(playerList.toString()).queue();
|
||||
List<ServerPlayerEntity> onlinePlayers = server.getPlayerManager().getPlayerList();
|
||||
infoString.append("在线玩家 (").append(onlinePlayers.size()).append("):");
|
||||
|
||||
if (onlinePlayers.size() == 0) {
|
||||
infoString.append("\n当前没有在线玩家!");
|
||||
} else {
|
||||
for (ServerPlayerEntity player : onlinePlayers) {
|
||||
infoString.append("\n").append(player.getEntityName());
|
||||
}
|
||||
}
|
||||
|
||||
infoString.append("\n\n服务器已用内存:\n").append((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024 / 1024).append(" MB");
|
||||
|
||||
infoString.append("\n```");
|
||||
e.getChannel().sendMessage(infoString.toString()).queue();
|
||||
} else if (e.getMessage().getContentRaw().startsWith("!scoreboard")) {
|
||||
BufferedReader reader = null;
|
||||
FileReader fileReader = null;
|
||||
|
|
@ -78,7 +80,7 @@ public class DiscordEventListener extends ListenerAdapter {
|
|||
|
||||
Main.config.playerList = gson.fromJson(jsonString, userListType);
|
||||
|
||||
Main.config.statsFileList = Utils.getFileList(new File(FabricLoader.getInstance().getGameDir().toAbsolutePath().toString() + "/" + Main.config.worldName + "/stats/"));
|
||||
Main.config.statsFileList = Utils.getFileList(new File(FabricLoader.getInstance().getGameDir().toAbsolutePath().toString().replace(".", "") + Main.config.worldName + "/stats/"));
|
||||
Main.config.statsList = new ArrayList<>();
|
||||
|
||||
for (File file : Main.config.statsFileList) {
|
||||
|
|
@ -141,29 +143,34 @@ public class DiscordEventListener extends ListenerAdapter {
|
|||
}
|
||||
}
|
||||
} else if (e.getMessage().getContentRaw().startsWith("!help")) {
|
||||
String help = "```\n" + "=============== 命令 ===============\n"
|
||||
String help = "```\n" + "=============== 帮助 ===============\n"
|
||||
+ "\n"
|
||||
+ "!online: 列出服务器在线玩家\n"
|
||||
+ "!info: 查询服务器运行状态\n"
|
||||
+ "!scoreboard <type> <id>: 查询该统计信息的玩家排行榜\n"
|
||||
+ "!ban <type> <id/name>: 将一名 Discord 用户或 Minecraft 玩家从黑名单中添加或移除(仅限管理员)\n"
|
||||
+ "!banlist: 列出黑名单```";
|
||||
e.getChannel().sendMessage(help).queue();
|
||||
|
||||
} else if (e.getMessage().getContentRaw().startsWith("!banlist")) {
|
||||
StringBuilder bannedList = new StringBuilder("```\n=============== 黑名单 ===============\n\nDiscord:");
|
||||
|
||||
if (Main.config.bannedDiscord.size() == 0) {
|
||||
bannedList.append("\n列表为空!");
|
||||
}
|
||||
|
||||
for (String id : Main.config.bannedDiscord) {
|
||||
bannedList.append("\n").append(id);
|
||||
}
|
||||
|
||||
bannedList.append("\n\nMinecraft:");
|
||||
|
||||
if (Main.config.bannedMinecraft.size() == 0) {
|
||||
bannedList.append("\n列表为空!");
|
||||
}
|
||||
|
||||
for (String name : Main.config.bannedMinecraft) {
|
||||
bannedList.append("\n").append(name);
|
||||
}
|
||||
|
||||
bannedList.append("```");
|
||||
e.getChannel().sendMessage(bannedList.toString()).queue();
|
||||
} else if (e.getMessage().getContentRaw().startsWith("!ban")) {
|
||||
|
|
@ -217,6 +224,7 @@ public class DiscordEventListener extends ListenerAdapter {
|
|||
private MinecraftServer getServer() {
|
||||
@SuppressWarnings("deprecation")
|
||||
Object gameInstance = FabricLoader.getInstance().getGameInstance();
|
||||
|
||||
if (gameInstance instanceof MinecraftServer) {
|
||||
return (MinecraftServer) gameInstance;
|
||||
} else {
|
||||
|
|
@ -1,17 +1,17 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.listeners;
|
||||
package top.xujiayao.mcDiscordChat.listeners;
|
||||
|
||||
import com.mashape.unirest.http.Unirest;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.Main;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.events.PlayerAdvancementCallback;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.events.PlayerDeathCallback;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.events.PlayerJoinCallback;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.events.PlayerLeaveCallback;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.events.ServerChatCallback;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.utils.MarkdownParser;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.utils.Utils;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Pair;
|
||||
import org.json.JSONObject;
|
||||
import top.xujiayao.mcDiscordChat.Main;
|
||||
import top.xujiayao.mcDiscordChat.events.PlayerAdvancementCallback;
|
||||
import top.xujiayao.mcDiscordChat.events.PlayerDeathCallback;
|
||||
import top.xujiayao.mcDiscordChat.events.PlayerJoinCallback;
|
||||
import top.xujiayao.mcDiscordChat.events.PlayerLeaveCallback;
|
||||
import top.xujiayao.mcDiscordChat.events.ServerChatCallback;
|
||||
import top.xujiayao.mcDiscordChat.utils.MarkdownParser;
|
||||
import top.xujiayao.mcDiscordChat.utils.Utils;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
|
|
@ -31,13 +31,15 @@ public class MinecraftEventListener {
|
|||
JSONObject body = new JSONObject();
|
||||
body.put("username", playerEntity.getEntityName());
|
||||
body.put("avatar_url", "https://mc-heads.net/avatar/" + playerEntity.getEntityName());
|
||||
|
||||
JSONObject allowed_mentions = new JSONObject();
|
||||
allowed_mentions.put("parse", new String[]{"users", "roles"});
|
||||
|
||||
body.put("allowed_mentions", allowed_mentions);
|
||||
body.put("content", convertedPair.getLeft().replace("_", "\\_"));
|
||||
|
||||
try {
|
||||
Unirest.post(Main.config.webhookURL).header("Content-Type", "application/json").body(body)
|
||||
.asJsonAsync();
|
||||
Unirest.post(Main.config.webhookURL).header("Content-Type", "application/json").body(body).asJsonAsync();
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
|
@ -47,6 +49,7 @@ public class MinecraftEventListener {
|
|||
JSONObject newComponent = new JSONObject(jsonString);
|
||||
newComponent.getJSONArray("with").put(1, MarkdownParser.parseMarkdown(convertedPair.getRight()));
|
||||
Text finalText = Text.Serializer.fromJson(newComponent.toString());
|
||||
|
||||
return Optional.ofNullable(finalText);
|
||||
}
|
||||
}
|
||||
|
|
@ -63,17 +66,14 @@ public class MinecraftEventListener {
|
|||
Main.textChannel.sendMessage(Main.config.texts.advancementGoal
|
||||
.replace("%playername%", playerEntity.getEntityName().replace("_", "\\_"))
|
||||
.replace("%advancement%", advancement.getDisplay().getTitle().getString())).queue();
|
||||
break;
|
||||
case TASK:
|
||||
Main.textChannel.sendMessage(Main.config.texts.advancementTask
|
||||
.replace("%playername%", playerEntity.getEntityName().replace("_", "\\_"))
|
||||
.replace("%advancement%", advancement.getDisplay().getTitle().getString())).queue();
|
||||
break;
|
||||
case CHALLENGE:
|
||||
Main.textChannel.sendMessage(Main.config.texts.advancementChallenge
|
||||
.replace("%playername%", playerEntity.getEntityName().replace("_", "\\_"))
|
||||
.replace("%advancement%", advancement.getDisplay().getTitle().getString())).queue();
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.mixins;
|
||||
package top.xujiayao.mcDiscordChat.mixins;
|
||||
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.events.PlayerAdvancementCallback;
|
||||
import net.minecraft.advancement.Advancement;
|
||||
import net.minecraft.advancement.PlayerAdvancementTracker;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
|
|
@ -9,6 +8,7 @@ import org.spongepowered.asm.mixin.Shadow;
|
|||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
import top.xujiayao.mcDiscordChat.events.PlayerAdvancementCallback;
|
||||
|
||||
/**
|
||||
* @author Xujiayao
|
||||
|
|
@ -1,7 +1,5 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.mixins;
|
||||
package top.xujiayao.mcDiscordChat.mixins;
|
||||
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.events.PlayerJoinCallback;
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.events.PlayerLeaveCallback;
|
||||
import net.minecraft.network.ClientConnection;
|
||||
import net.minecraft.server.PlayerManager;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
|
|
@ -9,6 +7,8 @@ import org.spongepowered.asm.mixin.Mixin;
|
|||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import top.xujiayao.mcDiscordChat.events.PlayerJoinCallback;
|
||||
import top.xujiayao.mcDiscordChat.events.PlayerLeaveCallback;
|
||||
|
||||
/**
|
||||
* @author Xujiayao
|
||||
|
|
@ -25,5 +25,4 @@ public class MixinPlayerManager {
|
|||
private void remove(ServerPlayerEntity player, CallbackInfo ci) {
|
||||
PlayerLeaveCallback.EVENT.invoker().onLeave(player);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.mixins;
|
||||
package top.xujiayao.mcDiscordChat.mixins;
|
||||
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.events.ServerChatCallback;
|
||||
import net.minecraft.network.MessageType;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
|
|
@ -15,6 +14,7 @@ import org.spongepowered.asm.mixin.Shadow;
|
|||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import top.xujiayao.mcDiscordChat.events.ServerChatCallback;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
|
|
@ -26,9 +26,11 @@ public abstract class MixinServerPlayNetworkHandler {
|
|||
|
||||
@Shadow
|
||||
public ServerPlayerEntity player;
|
||||
|
||||
@Final
|
||||
@Shadow
|
||||
private MinecraftServer server;
|
||||
|
||||
@Shadow
|
||||
private int messageCooldown;
|
||||
|
||||
|
|
@ -46,9 +48,9 @@ public abstract class MixinServerPlayNetworkHandler {
|
|||
String message = StringUtils.normalizeSpace(string);
|
||||
Text text = new TranslatableText("chat.type.text", this.player.getDisplayName(), message);
|
||||
Optional<Text> eventResult = ServerChatCallback.EVENT.invoker().onServerChat(this.player, message, text);
|
||||
|
||||
if (eventResult.isPresent()) {
|
||||
this.server.getPlayerManager().broadcastChatMessage(eventResult.get(), MessageType.CHAT,
|
||||
this.player.getUuid());
|
||||
this.server.getPlayerManager().broadcastChatMessage(eventResult.get(), MessageType.CHAT, this.player.getUuid());
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.mixins;
|
||||
package top.xujiayao.mcDiscordChat.mixins;
|
||||
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.events.PlayerDeathCallback;
|
||||
import net.minecraft.entity.damage.DamageSource;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import top.xujiayao.mcDiscordChat.events.PlayerDeathCallback;
|
||||
|
||||
/**
|
||||
* @author Xujiayao
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.objects;
|
||||
package top.xujiayao.mcDiscordChat.objects;
|
||||
|
||||
/**
|
||||
* @author Xujiayao
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.objects;
|
||||
package top.xujiayao.mcDiscordChat.objects;
|
||||
|
||||
public class Stats {
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.utils;
|
||||
package top.xujiayao.mcDiscordChat.utils;
|
||||
|
||||
import net.minecraft.util.Formatting;
|
||||
|
||||
|
|
@ -15,25 +15,25 @@ public class MarkdownParser {
|
|||
public static String parseMarkdown(String message) {
|
||||
String translated = message;
|
||||
|
||||
translated = replaceWith(translated, "(?<!\\\\)\\*\\*", Formatting.BOLD.toString(),
|
||||
Formatting.RESET.toString());
|
||||
translated = replaceWith(translated, "(?<!\\\\)\\*\\*", Formatting.BOLD.toString(), Formatting.RESET.toString());
|
||||
translated = replaceWith(translated, "(?<!\\\\)\\*", Formatting.ITALIC.toString(), Formatting.RESET.toString());
|
||||
translated = replaceWith(translated, "(?<!\\\\)__", Formatting.UNDERLINE.toString(),
|
||||
Formatting.RESET.toString());
|
||||
translated = replaceWith(translated, "(?<!\\\\)__", Formatting.UNDERLINE.toString(), Formatting.RESET.toString());
|
||||
translated = replaceWith(translated, "(?<!\\\\)_", Formatting.ITALIC.toString(), Formatting.RESET.toString());
|
||||
translated = replaceWith(translated, "(?<!\\\\)~~", Formatting.STRIKETHROUGH.toString(),
|
||||
Formatting.RESET.toString());
|
||||
translated = replaceWith(translated, "(?<!\\\\)~~", Formatting.STRIKETHROUGH.toString(), Formatting.RESET.toString());
|
||||
|
||||
translated = translated.replaceAll("\\*", "*").replaceAll("\\_", "_").replaceAll("\\~", "~");
|
||||
translated = translated.replaceAll(Formatting.ITALIC.toString() + "(ツ)" + Formatting.RESET.toString(), "_(ツ)_");
|
||||
|
||||
return translated;
|
||||
}
|
||||
|
||||
private static String replaceWith(String message, String quot, String pre, String suf) {
|
||||
String part = message;
|
||||
|
||||
for (String str : getMatches(message, quot + "(.+?)" + quot)) {
|
||||
part = part.replaceFirst(quot + Pattern.quote(str) + quot, pre + str + suf);
|
||||
}
|
||||
|
||||
return part;
|
||||
}
|
||||
|
||||
|
|
@ -41,10 +41,11 @@ public class MarkdownParser {
|
|||
Pattern pattern = Pattern.compile(regex);
|
||||
Matcher matcher = pattern.matcher(string);
|
||||
List<String> matches = new ArrayList<>();
|
||||
|
||||
while (matcher.find()) {
|
||||
matches.add(matcher.group(1));
|
||||
}
|
||||
|
||||
return matches;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
package io.gitee.xujiayao147.mcDiscordChatBridge.utils;
|
||||
package top.xujiayao.mcDiscordChat.utils;
|
||||
|
||||
import io.gitee.xujiayao147.mcDiscordChatBridge.Main;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.minecraft.util.Formatting;
|
||||
import net.minecraft.util.Pair;
|
||||
import top.xujiayao.mcDiscordChat.Main;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -19,7 +19,6 @@ import java.util.regex.Pattern;
|
|||
public class Utils {
|
||||
|
||||
public static List<File> getFileList(File file) {
|
||||
|
||||
List<File> result = new ArrayList<>();
|
||||
|
||||
File[] directoryList = file.listFiles(file1 -> file1.isFile() && file1.getName().contains("json"));
|
||||
|
|
@ -30,10 +29,12 @@ public class Utils {
|
|||
}
|
||||
|
||||
public static Pair<String, String> convertMentionsFromNames(String message) {
|
||||
if (!message.contains("@"))
|
||||
if (!message.contains("@")) {
|
||||
return new Pair<>(message, message);
|
||||
}
|
||||
|
||||
List<String> messageList = Arrays.asList(message.split("@[\\S]+"));
|
||||
|
||||
if (messageList.size() == 0) {
|
||||
messageList = new ArrayList<>();
|
||||
messageList.add("");
|
||||
|
|
@ -44,15 +45,18 @@ public class Utils {
|
|||
Matcher matcher = pattern.matcher(message);
|
||||
|
||||
int x = 0;
|
||||
|
||||
while (matcher.find()) {
|
||||
Member member = null;
|
||||
|
||||
for (Member m : Main.textChannel.getMembers()) {
|
||||
String name = matcher.group().substring(1);
|
||||
if (m.getUser().getName().equalsIgnoreCase(name)
|
||||
|| (m.getNickname() != null && m.getNickname().equalsIgnoreCase(name))) {
|
||||
|
||||
if (m.getUser().getName().equalsIgnoreCase(name) || (m.getNickname() != null && m.getNickname().equalsIgnoreCase(name))) {
|
||||
member = m;
|
||||
}
|
||||
}
|
||||
|
||||
if (member == null) {
|
||||
discordString.append(messageList.get(x)).append(matcher.group());
|
||||
mcString.append(messageList.get(x)).append(matcher.group());
|
||||
|
|
@ -61,12 +65,15 @@ public class Utils {
|
|||
mcString.append(messageList.get(x)).append(Formatting.YELLOW.toString()).append("@")
|
||||
.append(member.getEffectiveName()).append(Formatting.WHITE.toString());
|
||||
}
|
||||
|
||||
x++;
|
||||
}
|
||||
|
||||
if (x < messageList.size()) {
|
||||
discordString.append(messageList.get(x));
|
||||
mcString.append(messageList.get(x));
|
||||
}
|
||||
|
||||
return new Pair<>(discordString.toString(), mcString.toString());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,30 +1,30 @@
|
|||
{
|
||||
"schemaVersion": 1,
|
||||
"id": "mc-discord-chat-bridge",
|
||||
"version": "${version}",
|
||||
"name": "MC Discord Chat Bridge",
|
||||
"description": "A Discord <-> Minecraft chat bridge.",
|
||||
"authors": [
|
||||
"Xujiayao"
|
||||
],
|
||||
"contact": {
|
||||
"homepage": "https://xujiayao147.gitee.io/",
|
||||
"issues": "https://github.com/Xujiayao147/mc-discord-chat-bridge/issues",
|
||||
"sources": "https://github.com/Xujiayao147/mc-discord-chat-bridge"
|
||||
},
|
||||
"license": "MIT",
|
||||
"environment": "server",
|
||||
"entrypoints": {
|
||||
"server": [
|
||||
"io.gitee.xujiayao147.mcDiscordChatBridge.Main"
|
||||
]
|
||||
},
|
||||
"mixins": [
|
||||
"mc-discord-chat-bridge.mixins.json"
|
||||
],
|
||||
"depends": {
|
||||
"fabricloader": ">=0.8.7",
|
||||
"fabric": "*",
|
||||
"minecraft": "1.16.x"
|
||||
}
|
||||
"schemaVersion": 1,
|
||||
"id": "mcdiscordchat",
|
||||
"version": "${version}",
|
||||
"name": "MC Discord Chat Bridge",
|
||||
"description": "A Discord <-> Minecraft chat bridge.",
|
||||
"authors": [
|
||||
"Xujiayao"
|
||||
],
|
||||
"contact": {
|
||||
"homepage": "https://blog.xujiayao.top/",
|
||||
"issues": "https://github.com/Xujiayao147/MCDiscordChat/issues",
|
||||
"sources": "https://github.com/Xujiayao147/MCDiscordChat"
|
||||
},
|
||||
"license": "MIT",
|
||||
"environment": "server",
|
||||
"entrypoints": {
|
||||
"server": [
|
||||
"top.xujiayao.mcDiscordChat.Main"
|
||||
]
|
||||
},
|
||||
"mixins": [
|
||||
"mcDiscordChat.mixins.json"
|
||||
],
|
||||
"depends": {
|
||||
"fabricloader": ">=0.8.7",
|
||||
"fabric": "*",
|
||||
"minecraft": "1.16.x"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +0,0 @@
|
|||
{
|
||||
"required": true,
|
||||
"package": "io.gitee.xujiayao147.mcDiscordChatBridge.mixins",
|
||||
"compatibilityLevel": "JAVA_8",
|
||||
"mixins": [
|
||||
"MixinPlayerAdvancementTracker",
|
||||
"MixinPlayerManager",
|
||||
"MixinServerPlayerEntity",
|
||||
"MixinServerPlayNetworkHandler"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
}
|
||||
}
|
||||
14
src/main/resources/mcDiscordChat.mixins.json
Normal file
14
src/main/resources/mcDiscordChat.mixins.json
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"required": true,
|
||||
"package": "top.xujiayao.mcDiscordChat.mixins",
|
||||
"compatibilityLevel": "JAVA_8",
|
||||
"mixins": [
|
||||
"MixinPlayerAdvancementTracker",
|
||||
"MixinPlayerManager",
|
||||
"MixinServerPlayerEntity",
|
||||
"MixinServerPlayNetworkHandler"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue