mirror of
https://github.com/CPTProgrammer/ChatPlus.git
synced 2026-09-22 00:23:36 +08:00
Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ed5e4a7ea7 | ||
|
|
642c890c58 | ||
|
|
7ac3c4a802 | ||
|
|
ef99035b2d |
@@ -3,7 +3,7 @@
|
||||
|
||||
It's a **server-side** mod and doesn't need to be installed on the client.
|
||||
|
||||
Current Minecraft version: 1.20.1
|
||||
Currently supported Minecraft versions: 1.20.1, 1.20.4
|
||||
|
||||
## Screenshot
|
||||

|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ yarn_mappings=1.20.4+build.3
|
||||
loader_version=0.15.6
|
||||
|
||||
# Mod Properties
|
||||
mod_version=0.20.2
|
||||
mod_version=0.20.3
|
||||
maven_group=cn.revaria.chatplus
|
||||
archives_base_name=chat-plus
|
||||
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
package cn.revaria.chatplus;
|
||||
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
|
||||
import net.fabricmc.fabric.api.message.v1.ServerMessageEvents;
|
||||
import net.minecraft.network.message.MessageType;
|
||||
import net.minecraft.network.message.SignedMessage;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -13,7 +8,7 @@ public class ChatPlus implements ModInitializer {
|
||||
// This logger is used to write text to the console and the log file.
|
||||
// It is considered best practice to use your mod id as the logger's name.
|
||||
// That way, it's clear which mod wrote info, warnings, and errors.
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger("chat-plus");
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger("Chat Plus");
|
||||
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
package cn.revaria.chatplus.mixin;
|
||||
|
||||
import net.minecraft.MinecraftVersion;
|
||||
import net.minecraft.SharedConstants;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.network.ClientConnection;
|
||||
import net.minecraft.network.message.LastSeenMessageList;
|
||||
import net.minecraft.network.message.MessageChain;
|
||||
import net.minecraft.network.message.MessageType;
|
||||
import net.minecraft.network.message.SignedMessage;
|
||||
import net.minecraft.network.message.MessageChainTaskQueue;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.network.message.*;
|
||||
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.filter.FilteredMessage;
|
||||
import net.minecraft.server.network.ConnectedClientData;
|
||||
import net.minecraft.server.network.ServerCommonNetworkHandler;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.network.ServerPlayNetworkHandler;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.text.MutableText;
|
||||
import net.minecraft.text.Text;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
@@ -24,6 +21,7 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayDeque;
|
||||
@@ -102,13 +100,34 @@ public abstract class MixinChat extends ServerCommonNetworkHandler {
|
||||
server.getPlayerManager().broadcast(signedMessage.withUnsignedContent(
|
||||
changedText
|
||||
), player, MessageType.params(MessageType.CHAT, player));
|
||||
// handleDecoratedMessage(signedMessage.withUnsignedContent(changedText));
|
||||
|
||||
// Compatible with mod "Discord Integration"
|
||||
try {
|
||||
Class<?> DiscordIntegrationMod = Class.forName("de.erdbeerbaerlp.dcintegration.fabric.DiscordIntegrationMod");
|
||||
Method handleChatMessage = DiscordIntegrationMod.getMethod("handleChatMessage", SignedMessage.class, ServerPlayerEntity.class);
|
||||
handleChatMessage.invoke(null, signedMessage.withUnsignedContent(changedText), player);
|
||||
} catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException |
|
||||
IllegalAccessException ignored) { }
|
||||
|
||||
// Compatible with mod "Dynmap"
|
||||
try {
|
||||
/*
|
||||
Warning: Using reflection can make the code harder to maintain, debug, and understand.
|
||||
Statement: DynmapMod.plugin.chathandler.handleChat()
|
||||
*/
|
||||
Class<?> DynmapMod = Class.forName("org.dynmap.fabric_" + MinecraftVersion.CURRENT.getName().replaceAll("\\.", "_") + ".DynmapMod");
|
||||
Field pluginField = DynmapMod.getField("plugin");
|
||||
Object plugin = pluginField.get(null);
|
||||
Class<?> pluginClass = plugin.getClass();
|
||||
Field chatHandlerField = pluginClass.getDeclaredField("chathandler");
|
||||
chatHandlerField.setAccessible(true);
|
||||
Object chatHandler = chatHandlerField.get(plugin);
|
||||
Class<?> chatHandlerClass = chatHandler.getClass();
|
||||
Method handleChat = chatHandlerClass.getMethod("handleChat", ServerPlayerEntity.class, String.class);
|
||||
handleChat.invoke(chatHandler, player, signedMessage.withUnsignedContent(changedText).getContent().getString());
|
||||
} catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | NullPointerException |
|
||||
IllegalAccessException | InvocationTargetException ignored) { }
|
||||
|
||||
} catch (MessageChain.MessageChainException e) {
|
||||
handleMessageChainException(e);
|
||||
}
|
||||
@@ -116,7 +135,7 @@ public abstract class MixinChat extends ServerCommonNetworkHandler {
|
||||
this.server.submit(() -> {
|
||||
SignedMessage signedMessage;
|
||||
try {
|
||||
signedMessage = this.getSignedMessage(packet, (LastSeenMessageList) optional.get());
|
||||
signedMessage = this.getSignedMessage(packet, optional.get());
|
||||
} catch (MessageChain.MessageChainException var6) {
|
||||
handleMessageChainException(var6);
|
||||
return;
|
||||
|
||||
@@ -8,8 +8,9 @@
|
||||
"Rev_Aria"
|
||||
],
|
||||
"contact": {
|
||||
"homepage": "https://fabricmc.net/",
|
||||
"sources": "https://github.com/FabricMC/fabric-example-mod"
|
||||
"homepage": "https://modrinth.com/mod/chatplus",
|
||||
"sources": "https://github.com/CPTProgrammer/ChatPlus/",
|
||||
"issues": "https://github.com/CPTProgrammer/ChatPlus/issues"
|
||||
},
|
||||
"license": "CC0-1.0",
|
||||
"icon": "assets/chat-plus/icon.png",
|
||||
@@ -28,7 +29,7 @@
|
||||
],
|
||||
"depends": {
|
||||
"fabricloader": ">=0.14.21",
|
||||
"minecraft": "~1.20.1",
|
||||
"minecraft": "~1.20.4",
|
||||
"java": ">=17",
|
||||
"fabric-api": "*"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user