更改项目名称 + 添加 !info 功能 + 删除 !online 功能

This commit is contained in:
Xujiayao147 2021-02-26 22:17:52 +08:00
parent bfd896a1d7
commit f79070ecfb
24 changed files with 165 additions and 144 deletions

View file

@ -1,4 +1,4 @@
# mc-discord-chat-bridge
# MCDiscordChat
服务器跨服聊天工具 - Java

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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();

View file

@ -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;
}));
}

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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 {

View file

@ -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;
}
}
});

View file

@ -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

View file

@ -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);
}
}

View file

@ -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();
}
}

View file

@ -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

View file

@ -1,4 +1,4 @@
package io.gitee.xujiayao147.mcDiscordChatBridge.objects;
package top.xujiayao.mcDiscordChat.objects;
/**
* @author Xujiayao

View file

@ -1,4 +1,4 @@
package io.gitee.xujiayao147.mcDiscordChatBridge.objects;
package top.xujiayao.mcDiscordChat.objects;
public class Stats {

View file

@ -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;
}
}

View file

@ -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());
}
}

View file

@ -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"
}
}

View file

@ -1,14 +0,0 @@
{
"required": true,
"package": "io.gitee.xujiayao147.mcDiscordChatBridge.mixins",
"compatibilityLevel": "JAVA_8",
"mixins": [
"MixinPlayerAdvancementTracker",
"MixinPlayerManager",
"MixinServerPlayerEntity",
"MixinServerPlayNetworkHandler"
],
"injectors": {
"defaultRequire": 1
}
}

View file

@ -0,0 +1,14 @@
{
"required": true,
"package": "top.xujiayao.mcDiscordChat.mixins",
"compatibilityLevel": "JAVA_8",
"mixins": [
"MixinPlayerAdvancementTracker",
"MixinPlayerManager",
"MixinServerPlayerEntity",
"MixinServerPlayNetworkHandler"
],
"injectors": {
"defaultRequire": 1
}
}