Skip to content

Commit 7b85c4f

Browse files
committed
add rule: unescapeChatMessage
1 parent c4cc839 commit 7b85c4f

File tree

6 files changed

+74
-4
lines changed

6 files changed

+74
-4
lines changed

src/main/java/io/github/optijava/opt_carpet_addition/OptCarpetSettings.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ public class OptCarpetSettings {
115115
public static boolean disabledEntityTick = false;
116116

117117
@Rule(
118-
desc = "Disable error stack trace when update suppression(It makes server managers more comfortable)",
119-
category = {RuleCategory.EXPERIMENTAL, RuleCategory.BUGFIX}
118+
desc = "Unescape chat message. \\u4e2d -> 中",
119+
category = {RuleCategory.FEATURE, RuleCategory.CLIENT}
120120
)
121-
public static boolean disabledUpdateSuppressionErrorStackTrace = false;
121+
public static boolean unescapeChatMessage = false;
122122
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.github.optijava.opt_carpet_addition.mixins.unescapeChatMessage;
2+
3+
import io.github.optijava.opt_carpet_addition.OptCarpetSettings;
4+
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
5+
import org.apache.commons.lang3.StringEscapeUtils;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Inject;
9+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
10+
11+
@Mixin(ChatMessageC2SPacket.class)
12+
public class ChatMessageC2SPacket_Mixin {
13+
14+
/**
15+
* Mixin ChatMessageC2SPacket.<init>
16+
*
17+
* @author OptiJava
18+
* @reason rule: unescapeChatMessage
19+
*/
20+
@Inject(method = "<init>", at = @At("TAIL"))
21+
public void injectInit(CallbackInfo ci) {
22+
if (OptCarpetSettings.unescapeChatMessage) {
23+
try {
24+
((ChatMessageC2SPacket) (Object) this).chatMessage = StringEscapeUtils.unescapeJava(((ChatMessageC2SPacket) (Object) this).chatMessage);
25+
} catch (Exception ignore) {
26+
}
27+
}
28+
}
29+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.github.optijava.opt_carpet_addition.mixins.unescapeChatMessage;
2+
3+
import io.github.optijava.opt_carpet_addition.OptCarpetSettings;
4+
import net.minecraft.client.gui.screen.Screen;
5+
import org.apache.commons.lang3.StringEscapeUtils;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.ModifyArg;
9+
10+
@Mixin(Screen.class)
11+
public class Screen_Mixin {
12+
13+
/**
14+
* Mixin Screen.sendMessage(Ljava/lang/String;)V
15+
*
16+
* @author OptiJava
17+
* @reason rule: unescapeChatMessage
18+
*/
19+
@ModifyArg(method = "sendMessage(Ljava/lang/String;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;sendMessage(Ljava/lang/String;Z)V"), index = 0)
20+
public String injectSendMessage(String message) {
21+
if (OptCarpetSettings.unescapeChatMessage) {
22+
try {
23+
return StringEscapeUtils.unescapeJava(message);
24+
} catch (Exception e) {
25+
return message;
26+
}
27+
} else {
28+
return message;
29+
}
30+
}
31+
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
accessWidener v1 named
22
accessible class net/minecraft/entity/mob/EndermanEntity$PickUpBlockGoal
3-
accessible class net/minecraft/entity/mob/EndermanEntity$PlaceBlockGoal
3+
accessible class net/minecraft/entity/mob/EndermanEntity$PlaceBlockGoal
4+
accessible field net/minecraft/network/packet/c2s/play/ChatMessageC2SPacket chatMessage Ljava/lang/String;

src/main/resources/opt-carpet-addition.mixins.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
"disabledUpdateSuppressionErrorStackTrace.ThreadExecutor_Mixin"
1313
],
1414
"client": [
15+
"unescapeChatMessage.ChatMessageC2SPacket_Mixin",
16+
"unescapeChatMessage.Screen_Mixin"
1517
],
1618
"injectors": {
1719
"defaultRequire": 1
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.github.optijava.opt_carpet_addition;
2+
3+
public class Main {
4+
public static void main(String[] args) {
5+
6+
}
7+
}

0 commit comments

Comments
 (0)