Skip to content

Commit e4b3589

Browse files
committed
Separate ActionBar from Chat packets
1 parent f082eef commit e4b3589

File tree

14 files changed

+213
-39
lines changed

14 files changed

+213
-39
lines changed

src/main/java/me/rothes/protocolstringreplacer/packetlisteners/PacketListenerManager.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@
88
import me.rothes.protocolstringreplacer.packetlisteners.client.SettingsLocale;
99
import me.rothes.protocolstringreplacer.packetlisteners.client.itemstack.SetCreativeSlot;
1010
import me.rothes.protocolstringreplacer.packetlisteners.client.itemstack.WindowClick;
11-
import me.rothes.protocolstringreplacer.packetlisteners.server.ActionBar;
11+
import me.rothes.protocolstringreplacer.packetlisteners.server.actionbar.ChatActionBar;
12+
import me.rothes.protocolstringreplacer.packetlisteners.server.actionbar.SetActionBar;
1213
import me.rothes.protocolstringreplacer.packetlisteners.server.KickDisconnect;
14+
import me.rothes.protocolstringreplacer.packetlisteners.server.actionbar.SystemChatActionBar;
15+
import me.rothes.protocolstringreplacer.packetlisteners.server.actionbar.TitleActionBar;
1316
import me.rothes.protocolstringreplacer.packetlisteners.server.chat.ChatPreview;
1417
import me.rothes.protocolstringreplacer.packetlisteners.server.chat.DisguisedChat;
1518
import me.rothes.protocolstringreplacer.packetlisteners.server.chat.SystemChat;
@@ -71,11 +74,12 @@ public void addListeners() {
7174
if (ProtocolStringReplacer.getInstance().getServerMajorVersion() >= 17) {
7275
listeners.add(new SetTitleText());
7376
listeners.add(new SetSubtitleText());
74-
listeners.add(new ActionBar());
77+
listeners.add(new SetActionBar());
7578

7679
listeners.add(new PlayerCombatKill());
7780
} else {
7881
listeners.add(new Title());
82+
listeners.add(new TitleActionBar());
7983

8084
listeners.add(new CombatEvent());
8185
}
@@ -107,6 +111,7 @@ public void addListeners() {
107111

108112
if (ProtocolStringReplacer.getInstance().getServerMajorVersion() >= 19) {
109113
listeners.add(new SystemChat());
114+
listeners.add(new SystemChatActionBar());
110115
if (ProtocolStringReplacer.getInstance().getServerMajorVersion() != 19 || ProtocolStringReplacer.getInstance().getServerMinorVersion() >= 3) {
111116
listeners.add(new DisguisedChat());
112117
}
@@ -129,6 +134,7 @@ public void addListeners() {
129134
listeners.add(new KickDisconnect());
130135
listeners.add(new TabComplete());
131136
listeners.add(new Chat());
137+
listeners.add(new ChatActionBar());
132138
listeners.add(new SetSlot());
133139
listeners.add(new OpenWindow());
134140
listeners.add(new EntityMetadata());
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package me.rothes.protocolstringreplacer.packetlisteners.server.actionbar;
2+
3+
import com.comphenix.protocol.PacketType;
4+
import com.comphenix.protocol.events.PacketContainer;
5+
import com.comphenix.protocol.events.PacketEvent;
6+
import com.comphenix.protocol.reflect.StructureModifier;
7+
import com.comphenix.protocol.wrappers.EnumWrappers;
8+
import com.comphenix.protocol.wrappers.WrappedChatComponent;
9+
import me.rothes.protocolstringreplacer.api.user.PsrUser;
10+
import me.rothes.protocolstringreplacer.packetlisteners.server.AbstractServerComponentsPacketListener;
11+
import me.rothes.protocolstringreplacer.replacer.ListenType;
12+
import org.jetbrains.annotations.NotNull;
13+
14+
public class ChatActionBar extends AbstractServerComponentsPacketListener {
15+
16+
public ChatActionBar() {
17+
super(PacketType.Play.Server.CHAT, ListenType.ACTIONBAR);
18+
}
19+
20+
@Override
21+
protected void process(@NotNull PacketEvent packetEvent) {
22+
PacketContainer packet = packetEvent.getPacket();
23+
24+
if (packet.getChatTypes().read(0) != EnumWrappers.ChatType.GAME_INFO
25+
&& (packet.getBytes().size() < 1 || packet.getBytes().read(0) != 2)) {
26+
// Not a ActionBar Message.
27+
return;
28+
}
29+
30+
PsrUser user = getEventUser(packetEvent);
31+
if (user == null) {
32+
return;
33+
}
34+
35+
StructureModifier<WrappedChatComponent> componentModifier = packet.getChatComponents();
36+
WrappedChatComponent wrappedChatComponent = componentModifier.read(0);
37+
String replaced;
38+
39+
if (wrappedChatComponent != null) {
40+
String json = wrappedChatComponent.getJson();
41+
replaced = getReplacedJson(packetEvent, user, listenType, json, filter);
42+
} else {
43+
StructureModifier<Object> modifier = packet.getModifier();
44+
replaced = processSpigotComponent(modifier, packetEvent, user);
45+
if (replaced == null) {
46+
replaced = processPaperComponent(modifier, packetEvent, user);
47+
}
48+
}
49+
50+
if (replaced != null) {
51+
componentModifier.write(0, WrappedChatComponent.fromJson(replaced));
52+
}
53+
}
54+
55+
}

src/main/java/me/rothes/protocolstringreplacer/packetlisteners/server/ActionBar.java renamed to src/main/java/me/rothes/protocolstringreplacer/packetlisteners/server/actionbar/SetActionBar.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
1-
package me.rothes.protocolstringreplacer.packetlisteners.server;
1+
package me.rothes.protocolstringreplacer.packetlisteners.server.actionbar;
22

33
import com.comphenix.protocol.PacketType;
44
import com.comphenix.protocol.events.PacketContainer;
55
import com.comphenix.protocol.events.PacketEvent;
66
import com.comphenix.protocol.reflect.StructureModifier;
77
import com.comphenix.protocol.wrappers.WrappedChatComponent;
88
import me.rothes.protocolstringreplacer.api.user.PsrUser;
9+
import me.rothes.protocolstringreplacer.packetlisteners.server.AbstractServerComponentsPacketListener;
910
import me.rothes.protocolstringreplacer.replacer.ListenType;
11+
import org.jetbrains.annotations.NotNull;
1012

11-
public final class ActionBar extends AbstractServerComponentsPacketListener {
13+
public final class SetActionBar extends AbstractServerComponentsPacketListener {
1214

13-
public ActionBar() {
14-
super(PacketType.Play.Server.SET_ACTION_BAR_TEXT, ListenType.CHAT);
15+
public SetActionBar() {
16+
super(PacketType.Play.Server.SET_ACTION_BAR_TEXT, ListenType.ACTIONBAR);
1517
}
1618

17-
protected void process(PacketEvent packetEvent) {
19+
protected void process(@NotNull PacketEvent packetEvent) {
1820
PsrUser user = getEventUser(packetEvent);
1921
if (user == null) {
2022
return;
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package me.rothes.protocolstringreplacer.packetlisteners.server.actionbar;
2+
3+
import com.comphenix.protocol.PacketType;
4+
import com.comphenix.protocol.events.PacketContainer;
5+
import com.comphenix.protocol.events.PacketEvent;
6+
import com.comphenix.protocol.reflect.StructureModifier;
7+
import com.comphenix.protocol.wrappers.EnumWrappers;
8+
import me.rothes.protocolstringreplacer.api.user.PsrUser;
9+
import me.rothes.protocolstringreplacer.packetlisteners.server.AbstractServerComponentsPacketListener;
10+
import me.rothes.protocolstringreplacer.replacer.ListenType;
11+
12+
public class SystemChatActionBar extends AbstractServerComponentsPacketListener {
13+
14+
public SystemChatActionBar() {
15+
super(PacketType.Play.Server.SYSTEM_CHAT, ListenType.ACTIONBAR);
16+
}
17+
18+
protected void process(PacketEvent packetEvent) {
19+
PacketContainer packet = packetEvent.getPacket();
20+
21+
StructureModifier<Boolean> booleans = packet.getBooleans();
22+
if (booleans.size() == 1) {
23+
if (!booleans.read(0)) {
24+
return;
25+
}
26+
} else if (packet.getIntegers().read(0) != EnumWrappers.ChatType.GAME_INFO.getId()) {
27+
return;
28+
}
29+
30+
PsrUser user = getEventUser(packetEvent);
31+
if (user == null) {
32+
return;
33+
}
34+
35+
String replaced;
36+
37+
StructureModifier<String> stringModifier = packet.getStrings();
38+
String read = stringModifier.read(0);
39+
if (read != null) {
40+
replaced = getReplacedJson(packetEvent, user, listenType, read, filter);
41+
} else {
42+
replaced = processPaperComponent(packet.getModifier(), packetEvent, user);
43+
}
44+
45+
if (replaced != null) {
46+
stringModifier.write(0, replaced);
47+
}
48+
}
49+
50+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package me.rothes.protocolstringreplacer.packetlisteners.server.actionbar;
2+
3+
import com.comphenix.protocol.PacketType;
4+
import com.comphenix.protocol.events.PacketEvent;
5+
import com.comphenix.protocol.wrappers.EnumWrappers;
6+
import me.rothes.protocolstringreplacer.packetlisteners.server.title.AbstractTitleListener;
7+
import me.rothes.protocolstringreplacer.replacer.ListenType;
8+
9+
public class TitleActionBar extends AbstractTitleListener {
10+
11+
public TitleActionBar() {
12+
super(PacketType.Play.Server.TITLE, ListenType.ACTIONBAR);
13+
}
14+
15+
@Override
16+
protected void process(PacketEvent packetEvent) {
17+
if (packetEvent.getPacket().getTitleActions().read(0) != EnumWrappers.TitleAction.ACTIONBAR) {
18+
return;
19+
}
20+
super.process(packetEvent);
21+
}
22+
23+
}

src/main/java/me/rothes/protocolstringreplacer/packetlisteners/server/chat/Chat.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.comphenix.protocol.events.PacketContainer;
55
import com.comphenix.protocol.events.PacketEvent;
66
import com.comphenix.protocol.reflect.StructureModifier;
7+
import com.comphenix.protocol.wrappers.EnumWrappers;
78
import com.comphenix.protocol.wrappers.WrappedChatComponent;
89
import me.rothes.protocolstringreplacer.ProtocolStringReplacer;
910
import me.rothes.protocolstringreplacer.packetlisteners.server.AbstractServerComponentsPacketListener;
@@ -42,6 +43,7 @@ public Chat() {
4243

4344
protected void process(PacketEvent packetEvent) {
4445
PacketContainer packet = packetEvent.getPacket();
46+
4547
Optional<Boolean> isFiltered = packet.getMeta("psr_filtered_packet");
4648
if (!(isFiltered.isPresent() && isFiltered.get())) {
4749
PsrUser user = getEventUser(packetEvent);
@@ -54,6 +56,12 @@ protected void process(PacketEvent packetEvent) {
5456
return;
5557
}
5658

59+
if (packet.getChatTypes().read(0) == EnumWrappers.ChatType.GAME_INFO
60+
|| (packet.getBytes().size() >= 1 && packet.getBytes().read(0) == 2)) {
61+
// ActionBar Message.
62+
return;
63+
}
64+
5765
if (version != Version.R8_0_TO_R18_2) {
5866
// on 1.19+ we can no longer modify the message, they have added the final modifier.
5967
return;

src/main/java/me/rothes/protocolstringreplacer/packetlisteners/server/chat/SystemChat.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.comphenix.protocol.events.PacketContainer;
55
import com.comphenix.protocol.events.PacketEvent;
66
import com.comphenix.protocol.reflect.StructureModifier;
7+
import com.comphenix.protocol.wrappers.EnumWrappers;
78
import me.rothes.protocolstringreplacer.api.user.PsrUser;
89
import me.rothes.protocolstringreplacer.packetlisteners.server.AbstractServerComponentsPacketListener;
910
import me.rothes.protocolstringreplacer.replacer.ListenType;
@@ -22,6 +23,16 @@ protected void process(@NotNull PacketEvent packetEvent) {
2223
PacketContainer packet = packetEvent.getPacket();
2324
Optional<Boolean> isFiltered = packet.getMeta("psr_filtered_packet");
2425
if (!(isFiltered.isPresent() && isFiltered.get())) {
26+
27+
StructureModifier<Boolean> booleans = packet.getBooleans();
28+
if (booleans.size() == 1) {
29+
if (booleans.read(0)) {
30+
return;
31+
}
32+
} else if (packet.getIntegers().read(0) == EnumWrappers.ChatType.GAME_INFO.getId()) {
33+
return;
34+
}
35+
2536
PsrUser user = getEventUser(packetEvent);
2637
if (user == null) {
2738
return;

src/main/java/me/rothes/protocolstringreplacer/packetlisteners/server/title/AbstractTitleListener.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@
1212
public abstract class AbstractTitleListener extends AbstractServerComponentsPacketListener {
1313

1414
protected AbstractTitleListener(PacketType packetType) {
15-
super(packetType, ListenType.TITLE);
15+
this(packetType, ListenType.TITLE);
16+
}
17+
18+
protected AbstractTitleListener(PacketType packetType, ListenType listenType) {
19+
super(packetType, listenType);
1620
}
1721

1822
protected void process(PacketEvent packetEvent) {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
11
package me.rothes.protocolstringreplacer.packetlisteners.server.title;
22

33
import com.comphenix.protocol.PacketType;
4+
import com.comphenix.protocol.events.PacketEvent;
5+
import com.comphenix.protocol.wrappers.EnumWrappers;
46

57
public final class Title extends AbstractTitleListener {
68

79
public Title() {
810
super(PacketType.Play.Server.TITLE);
911
}
1012

13+
@Override
14+
protected void process(PacketEvent packetEvent) {
15+
if (packetEvent.getPacket().getTitleActions().read(0) == EnumWrappers.TitleAction.ACTIONBAR) {
16+
return;
17+
}
18+
super.process(packetEvent);
19+
}
20+
1121
}

src/main/java/me/rothes/protocolstringreplacer/replacer/ListenType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ public enum ListenType {
1414
SCOREBOARD("ScoreBoard", true),
1515
CONSOLE("Console", false),
1616
KICK_DISCONNECT("Kick-Disconnect", true), // Is it important capture-able now? lol
17-
COMBAT_KILL("Combat-Kill", true);
17+
COMBAT_KILL("Combat-Kill", true),
18+
ACTIONBAR("ActionBar", true);
1819

1920
private String name;
2021
private boolean capturable;

0 commit comments

Comments
 (0)