Skip to content

Commit c39ad58

Browse files
committed
Fix reading client settings throws error on 1.20.2
1 parent 3c3ee03 commit c39ad58

File tree

3 files changed

+64
-3
lines changed

3 files changed

+64
-3
lines changed

pom.xml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,16 @@
133133
<version>2.12.0</version>
134134
<scope>compile</scope>
135135
</dependency>
136+
<!-- <dependency>-->
137+
<!-- <groupId>com.comphenix.protocol</groupId>-->
138+
<!-- <artifactId>ProtocolLib</artifactId>-->
139+
<!-- <version>5.1.0</version>-->
140+
<!-- <scope>provided</scope>-->
141+
<!-- </dependency>-->
136142
<dependency>
137-
<groupId>com.comphenix.protocol</groupId>
143+
<groupId>com.github.dmulloy2</groupId>
138144
<artifactId>ProtocolLib</artifactId>
139-
<version>5.0.0</version>
145+
<version>master-SNAPSHOT</version>
140146
<scope>provided</scope>
141147
</dependency>
142148
<dependency>

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import me.rothes.protocolstringreplacer.PsrLocalization;
77
import me.rothes.protocolstringreplacer.packetlisteners.client.CloseWindow;
88
import me.rothes.protocolstringreplacer.packetlisteners.client.SettingsLocale;
9+
import me.rothes.protocolstringreplacer.packetlisteners.client.SettingsLocaleUpper20;
910
import me.rothes.protocolstringreplacer.packetlisteners.client.itemstack.SetCreativeSlot;
1011
import me.rothes.protocolstringreplacer.packetlisteners.client.itemstack.WindowClick;
1112
import me.rothes.protocolstringreplacer.packetlisteners.server.actionbar.ChatActionBar;
@@ -143,7 +144,12 @@ public void addListeners() {
143144
listeners.add(new WindowClick());
144145
listeners.add(new SetCreativeSlot());
145146
listeners.add(new CloseWindow());
146-
listeners.add(new SettingsLocale());
147+
if ((ProtocolStringReplacer.getInstance().getServerMajorVersion() == 20 && ProtocolStringReplacer.getInstance().getServerMinorVersion() >= 2)
148+
|| ProtocolStringReplacer.getInstance().getServerMajorVersion() > 20) {
149+
listeners.add(new SettingsLocaleUpper20());
150+
} else {
151+
listeners.add(new SettingsLocale());
152+
}
147153

148154
for (AbstractPacketListener listener : listeners) {
149155
try {
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package me.rothes.protocolstringreplacer.packetlisteners.client;
2+
3+
import com.comphenix.protocol.PacketType;
4+
import com.comphenix.protocol.events.PacketEvent;
5+
import me.rothes.protocolstringreplacer.api.user.PsrUser;
6+
import org.jetbrains.annotations.NotNull;
7+
8+
import java.lang.reflect.Field;
9+
import java.util.Locale;
10+
11+
public class SettingsLocaleUpper20 extends AbstractClientPacketListener {
12+
13+
private Field language;
14+
15+
public SettingsLocaleUpper20() {
16+
super(PacketType.Play.Client.SETTINGS);
17+
}
18+
19+
@Override
20+
protected void process(@NotNull PacketEvent packetEvent) {
21+
PsrUser user = getEventUser(packetEvent);
22+
if (user == null) {
23+
return;
24+
}
25+
Object record = packetEvent.getPacket().getModifier().read(0);
26+
String read;
27+
try {
28+
read = (String) field().get(record);
29+
} catch (IllegalAccessException e) {
30+
throw new RuntimeException(e);
31+
}
32+
user.setClientLocale(read.toLowerCase(Locale.ROOT).replace('-', '_'));
33+
}
34+
35+
private Field field() {
36+
if (language == null) {
37+
language = PacketType.Play.Client.SETTINGS.getPacketClass().getDeclaredFields()[0].getType().getDeclaredFields()[0];
38+
language.setAccessible(true);
39+
}
40+
return language;
41+
}
42+
43+
@Override
44+
protected boolean canWrite(@NotNull PacketEvent packetEvent) {
45+
// We just read it.
46+
return true;
47+
}
48+
49+
}

0 commit comments

Comments
 (0)