Skip to content

Commit 42b5c72

Browse files
committed
geyser detection rewrite
1 parent 900cbed commit 42b5c72

File tree

4 files changed

+41
-43
lines changed

4 files changed

+41
-43
lines changed

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ repositories {
5252
maven("https://nexus.scarsz.me/content/repositories/releases") // Configuralize
5353
maven("https://repo.opencollab.dev/maven-snapshots/") // Floodgate
5454
maven("https://repo.opencollab.dev/maven-releases/") // Cumulus (for Floodgate)
55+
maven("https://repo.opencollab.dev/main/") // Geyser
5556
maven("https://repo.codemc.io/repository/maven-releases/") // PacketEvents
5657
maven("https://repo.codemc.io/repository/maven-snapshots/")
5758
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
@@ -78,6 +79,7 @@ dependencies {
7879

7980
implementation("org.jetbrains:annotations:24.1.0")
8081
compileOnly("org.geysermc.floodgate:api:2.0-SNAPSHOT")
82+
compileOnly("org.geysermc.geyser:api:2.4.2-SNAPSHOT")
8183
compileOnly("com.viaversion:viaversion-api:5.0.4-SNAPSHOT")
8284
compileOnly("me.clip:placeholderapi:2.11.6")
8385
compileOnly("io.netty:netty-all:4.1.85.Final")

src/main/java/ac/grim/grimac/utils/anticheat/PlayerDataManager.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22

33
import ac.grim.grimac.api.events.GrimJoinEvent;
44
import ac.grim.grimac.player.GrimPlayer;
5-
import ac.grim.grimac.utils.floodgate.FloodgateUtil;
5+
import ac.grim.grimac.utils.geyser.GeyserUtil;
66
import com.github.retrooper.packetevents.PacketEvents;
77
import com.github.retrooper.packetevents.manager.server.ServerVersion;
88
import com.github.retrooper.packetevents.netty.channel.ChannelHelper;
99
import com.github.retrooper.packetevents.protocol.player.User;
10-
import io.github.retrooper.packetevents.util.GeyserUtil;
1110
import org.bukkit.Bukkit;
1211
import org.bukkit.entity.Player;
1312

@@ -25,8 +24,7 @@ public GrimPlayer getPlayer(final Player player) {
2524
if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_18) && MultiLibUtil.isExternalPlayer(player)) return null;
2625

2726
// Is it safe to interact with this, or is this internal PacketEvents code?
28-
User user = PacketEvents.getAPI().getPlayerManager().getUser(player);
29-
return playerDataMap.get(user);
27+
return playerDataMap.get(PacketEvents.getAPI().getPlayerManager().getUser(player));
3028
}
3129

3230
public boolean shouldCheck(User user) {
@@ -35,8 +33,7 @@ public boolean shouldCheck(User user) {
3533

3634
if (user.getUUID() != null) {
3735
// Geyser players don't have Java movement
38-
// Floodgate is the authentication system for Geyser on servers that use Geyser as a proxy instead of installing it as a plugin directly on the server
39-
if (GeyserUtil.isGeyserPlayer(user.getUUID()) || FloodgateUtil.isFloodgatePlayer(user.getUUID())) {
36+
if (GeyserUtil.isBedrockPlayer(user.getUUID())) {
4037
exemptUsers.add(user);
4138
return false;
4239
}
@@ -47,13 +44,6 @@ public boolean shouldCheck(User user) {
4744
exemptUsers.add(user);
4845
return false;
4946
}
50-
51-
// Geyser formatted player string
52-
// This will never happen for Java players, as the first character in the 3rd group is always 4 (xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx)
53-
if (user.getUUID().toString().startsWith("00000000-0000-0000-0009")) {
54-
exemptUsers.add(user);
55-
return false;
56-
}
5747
}
5848

5949
return true;

src/main/java/ac/grim/grimac/utils/floodgate/FloodgateUtil.java

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package ac.grim.grimac.utils.geyser;
2+
3+
import org.geysermc.api.Geyser;
4+
import org.geysermc.floodgate.api.FloodgateApi;
5+
6+
import java.util.UUID;
7+
8+
public class GeyserUtil {
9+
// Floodgate is the authentication system for Geyser on servers that use Geyser
10+
// as a proxy instead of installing it as a plugin directly on the server
11+
private static boolean floodgate;
12+
private static boolean geyser;
13+
14+
public static boolean isBedrockPlayer(UUID uuid) {
15+
return floodgate && FloodgateApi.getInstance().isFloodgatePlayer(uuid)
16+
|| geyser && Geyser.api().isBedrockPlayer(uuid);
17+
}
18+
19+
static {
20+
try {
21+
@SuppressWarnings("unused")
22+
Object obj = FloodgateApi.class;
23+
floodgate = true;
24+
} catch (NoClassDefFoundError e) {
25+
floodgate = false;
26+
}
27+
28+
try {
29+
@SuppressWarnings("unused")
30+
Object obj = Geyser.class;
31+
geyser = true;
32+
} catch (NoClassDefFoundError e) {
33+
geyser = false;
34+
}
35+
}
36+
}

0 commit comments

Comments
 (0)