Skip to content

Commit 54a9926

Browse files
committed
fix: better proxy support and allows disabling worldId (fixes #22)
1 parent f5c22c3 commit 54a9926

File tree

3 files changed

+32
-27
lines changed

3 files changed

+32
-27
lines changed

common/src/main/java/com/funniray/minimap/common/JavaMinimapPlugin.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import com.funniray.minimap.common.api.MinimapPlayer;
44
import com.funniray.minimap.common.api.MinimapWorld;
55
import com.funniray.minimap.common.jm.JMHandler;
6+
import com.funniray.minimap.common.jm.data.JMConfig;
67
import com.funniray.minimap.common.jm.data.JMVersion;
8+
import com.funniray.minimap.common.jm.data.JMWorldConfig;
79
import com.funniray.minimap.common.voxel.VoxelHandler;
810
import com.funniray.minimap.common.worldinfo.WorldInfoHandler;
911
import com.funniray.minimap.common.xaeros.XaerosHandler;
@@ -78,12 +80,16 @@ public void handlePlayerJoined(MinimapPlayer player) {
7880
xaerosHandler.sendXaerosHandshake(player);
7981
xaerosHandler.sendXaerosConfig(player);
8082
voxelHandler.sendSettings(player);
83+
worldInfoHandler.sendPacket(player);
84+
if (jmHandler.isLegacy(player)) {
85+
jmHandler.handlePerm(player, new byte[0], "journeymap:common", 2);
86+
} else {
87+
jmHandler.handlePerm(player, new byte[0], "journeymap:perm_req", 0);
88+
}
8189
}
8290

8391
@Override
84-
public void handlePlayerLeft(MinimapPlayer player) {
85-
jmHandler.playerLeft(player);
86-
}
92+
public void handlePlayerLeft(MinimapPlayer player) {}
8793

8894
public void saveConfig() {
8995
try {
@@ -95,6 +101,15 @@ public void saveConfig() {
95101
}
96102
}
97103

104+
public JMConfig getEffectiveJMConfig(MinimapPlayer player) {
105+
JMWorldConfig worldConfig = this.getConfig().getWorldConfig(player.getLocation().getWorld().getName()).journeymapConfig;
106+
JMConfig config = this.getConfig().globalJourneymapConfig;
107+
if (worldConfig != null) {
108+
return worldConfig.applyToConfig(config);
109+
}
110+
return config;
111+
}
112+
98113
public MinimapConfig getConfig() {
99114
return config;
100115
}

common/src/main/java/com/funniray/minimap/common/jm/JMHandler.java

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,17 @@
1010
import com.funniray.minimap.common.jm.data.JMWorldConfig;
1111
import com.funniray.minimap.common.jm.data.ServerPropType;
1212
import com.funniray.minimap.common.network.NetworkUtils;
13+
import com.funniray.minimap.common.version.Version;
1314
import com.google.common.io.ByteArrayDataInput;
1415
import com.google.common.io.ByteArrayDataOutput;
1516
import com.google.common.io.ByteStreams;
1617
import com.google.gson.Gson;
1718
import net.kyori.adventure.text.minimessage.MiniMessage;
1819

19-
import java.awt.print.Pageable;
2020
import java.util.*;
2121

2222
public class JMHandler implements MessageHandler {
2323
private final JavaMinimapPlugin plugin;
24-
// JM for 1.21 and above no longer has a leading 0 byte at the start of packets.
25-
// We need to note who is on a modern version and not send them (or parse) leading 0 bytes
26-
private final Map<UUID, Boolean> modernList = new HashMap<>();
2724

2825
public JMHandler(JavaMinimapPlugin plugin) {
2926
this.plugin = plugin;
@@ -42,7 +39,7 @@ public void handleTeleport(MinimapPlayer player, byte[] message, String replyCha
4239
player.sendMessage(MiniMessage.miniMessage().deserialize("<red>You don't have permission to teleport."));
4340
return;
4441
}
45-
String teleport = getEffectiveConfig(player).teleportEnabled;
42+
String teleport = plugin.getEffectiveJMConfig(player).teleportEnabled;
4643
if (teleport.equalsIgnoreCase("none") || (teleport.equalsIgnoreCase("ops") && !player.hasPermission("minimap.jm.admin"))) {
4744
player.sendMessage(MiniMessage.miniMessage().deserialize("<red>Teleport packet was sent, but teleporting isn't enabled."));
4845
return;
@@ -144,7 +141,6 @@ public void handleAdminSave(MinimapPlayer player, byte[] message, String replyCh
144141
}
145142

146143
public void handleVersion(MinimapPlayer player, byte[] message, String replyChannel) {
147-
modernList.put(player.getUniqueId(), message.length > 0 && message[0] != 0);
148144
Gson gson = new Gson();
149145
JMVersion serverVersion = new JMVersion();
150146
ByteArrayDataInput in = ByteStreams.newDataInput(message);
@@ -163,18 +159,8 @@ public void handleVersion(MinimapPlayer player, byte[] message, String replyChan
163159
player.sendPluginMessage(out.toByteArray(), replyChannel);
164160
}
165161

166-
public JMConfig getEffectiveConfig(MinimapPlayer player) {
167-
JMWorldConfig worldConfig = plugin.getConfig().getWorldConfig(player.getLocation().getWorld().getName()).journeymapConfig;
168-
JMConfig config = plugin.getConfig().globalJourneymapConfig;
169-
if (worldConfig != null) {
170-
return worldConfig.applyToConfig(config);
171-
}
172-
return config;
173-
}
174-
175162
public void handlePerm(MinimapPlayer player, byte[] message, String replyChannel, int replyByte) {
176-
modernList.putIfAbsent(player.getUniqueId(), message.length > 0 && message[0] == 42);
177-
JMConfig config = getEffectiveConfig(player);
163+
JMConfig config = plugin.getEffectiveJMConfig(player);
178164

179165
Gson gson = new Gson();
180166
String payload = gson.toJson(config);
@@ -187,14 +173,12 @@ public void handlePerm(MinimapPlayer player, byte[] message, String replyChannel
187173
player.sendPluginMessage(out.toByteArray(), replyChannel);
188174
}
189175

190-
private boolean modern(MinimapPlayer player) {
191-
Boolean modern = modernList.get(player.getUniqueId());
192-
if (modern == null) return false;
193-
return modern;
176+
public boolean modern(MinimapPlayer player) {
177+
return player.getVersion().greaterThanEqual(new Version(1,21,0));
194178
}
195179

196-
public void playerLeft(MinimapPlayer player) {
197-
modernList.remove(player.getUniqueId());
180+
public boolean isLegacy(MinimapPlayer player) {
181+
return !player.getVersion().greaterThanEqual(new Version(1, 18, 0));
198182
}
199183

200184
@Override

common/src/main/java/com/funniray/minimap/common/worldinfo/WorldInfoHandler.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
import com.funniray.minimap.common.JavaMinimapPlugin;
44
import com.funniray.minimap.common.api.MessageHandler;
55
import com.funniray.minimap.common.api.MinimapPlayer;
6+
import com.funniray.minimap.common.jm.data.JMConfig;
67
import com.funniray.minimap.common.network.NetworkUtils;
78
import com.funniray.minimap.common.version.Version;
89
import com.google.common.io.ByteArrayDataOutput;
910
import com.google.common.io.ByteStreams;
1011

11-
import java.util.UUID;
1212

1313
public class WorldInfoHandler implements MessageHandler {
1414
private final JavaMinimapPlugin plugin;
@@ -23,11 +23,17 @@ public void sendPacket(MinimapPlayer player) {
2323
String worldId;
2424
// The entire server gets it's own worldId on 1.13
2525
// worldId on 1.12 and before is per-dimension, as bukkit reuses dimension IDs
26+
JMConfig config = plugin.getEffectiveJMConfig(player);
2627
if (player.getVersion().greaterThanEqual(new Version(1,13,0))) {
2728
worldId = plugin.getConfig().worldId;
2829
} else {
2930
worldId = plugin.getConfig().getWorldConfig(player.getLocation().getWorld().getName()).worldId;
3031
}
32+
33+
if (worldId == null || !config.useWorldId.equalsIgnoreCase("true")) {
34+
return;
35+
}
36+
3137
ByteArrayDataOutput out = ByteStreams.newDataOutput();
3238
out.writeByte(0);
3339
out.writeByte(42);

0 commit comments

Comments
 (0)