Skip to content

Commit 37f9ff9

Browse files
committed
geyser detection rewrite
1 parent 3902561 commit 37f9ff9

File tree

7 files changed

+31
-91
lines changed

7 files changed

+31
-91
lines changed

bukkit/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ repositories {
2424
maven("https://nexus.scarsz.me/content/repositories/releases") // Configuralize
2525
maven("https://repo.opencollab.dev/maven-snapshots/") // Floodgate
2626
maven("https://repo.opencollab.dev/maven-releases/") // Cumulus (for Floodgate)
27+
maven("https://repo.opencollab.dev/main/") // Geyser
2728
maven("https://repo.codemc.io/repository/maven-releases/") // PacketEvents
2829
maven("https://repo.codemc.io/repository/maven-snapshots/")
2930
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")

common/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ repositories {
2020
maven("https://nexus.scarsz.me/content/repositories/releases") // Configuralize
2121
maven("https://repo.opencollab.dev/maven-snapshots/") // Floodgate
2222
maven("https://repo.opencollab.dev/maven-releases/") // Cumulus (for Floodgate)
23+
maven("https://repo.opencollab.dev/main/") // Geyser
2324
maven("https://repo.codemc.io/repository/maven-releases/") // PacketEvents
2425
maven("https://repo.codemc.io/repository/maven-snapshots/")
2526
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
@@ -43,6 +44,7 @@ dependencies {
4344
api("ac.grim.grimac:GrimAPI:1.1.0.0")
4445

4546
compileOnly(libs.floodgate.api)
47+
compileOnly(libs.geyser.api)
4648
compileOnly(libs.via.version.api)
4749
compileOnly(libs.netty)
4850
}

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

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import ac.grim.grimac.GrimAPI;
44
import ac.grim.grimac.api.event.events.GrimJoinEvent;
55
import ac.grim.grimac.player.GrimPlayer;
6-
import ac.grim.grimac.utils.reflection.FloodgateUtil;
76
import ac.grim.grimac.utils.reflection.GeyserUtil;
87
import com.github.retrooper.packetevents.PacketEvents;
98
import com.github.retrooper.packetevents.netty.channel.ChannelHelper;
@@ -41,8 +40,7 @@ public boolean shouldCheck(@NonNull User user) {
4140

4241
if (user.getUUID() != null) {
4342
// Geyser players don't have Java movement
44-
// 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
45-
if (GeyserUtil.isGeyserPlayer(user.getUUID()) || FloodgateUtil.isFloodgatePlayer(user.getUUID())) {
43+
if (GeyserUtil.isBedrockPlayer(user.getUUID())) {
4644
exemptUsers.add(user);
4745
return false;
4846
}
@@ -53,13 +51,6 @@ public boolean shouldCheck(@NonNull User user) {
5351
exemptUsers.add(user);
5452
return false;
5553
}
56-
57-
// Geyser formatted player string
58-
// This will never happen for Java players, as the first character in the 3rd group is always 4 (xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx)
59-
if (user.getUUID().toString().startsWith("00000000-0000-0000-0009")) {
60-
exemptUsers.add(user);
61-
return false;
62-
}
6354
}
6455

6556
return true;

common/src/main/java/ac/grim/grimac/utils/reflection/FloodgateUtil.java

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 24 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,36 @@
11
package ac.grim.grimac.utils.reflection;
22

3-
import com.github.retrooper.packetevents.PacketEvents;
4-
import com.github.retrooper.packetevents.util.reflection.Reflection;
3+
import org.geysermc.api.Geyser;
4+
import org.geysermc.floodgate.api.FloodgateApi;
55

6-
import java.lang.reflect.InvocationTargetException;
7-
import java.lang.reflect.Method;
86
import java.util.UUID;
97

108
public class GeyserUtil {
11-
private static boolean CHECKED_FOR_GEYSER = false;
12-
private static boolean GEYSER_PRESENT = false;
13-
private static Class<?> GEYSER_CLASS;
14-
private static Class<?> GEYSER_API_CLASS;
15-
private static Method GEYSER_API_METHOD;
16-
private static Method CONNECTION_BY_UUID_METHOD;
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;
1713

18-
public static boolean isGeyserPlayer(UUID uuid) {
19-
if (!CHECKED_FOR_GEYSER) {
20-
try {
21-
ClassLoader classLoader = PacketEvents.getAPI().getPlugin().getClass().getClassLoader();
22-
GEYSER_CLASS = classLoader.loadClass("org.geysermc.api.Geyser");
23-
GEYSER_PRESENT = true;
24-
} catch (ClassNotFoundException e) {
25-
GEYSER_PRESENT = false;
26-
}
27-
CHECKED_FOR_GEYSER = true;
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;
2826
}
2927

30-
if (GEYSER_PRESENT) {
31-
if (GEYSER_API_CLASS == null) {
32-
try {
33-
ClassLoader classLoader = PacketEvents.getAPI().getPlugin().getClass().getClassLoader();
34-
GEYSER_API_CLASS = classLoader.loadClass("org.geysermc.api.GeyserApiBase");
35-
} catch (ClassNotFoundException e) {
36-
e.printStackTrace();
37-
}
38-
}
39-
if (GEYSER_API_METHOD == null) {
40-
GEYSER_API_METHOD = Reflection.getMethodExact(GEYSER_CLASS, "api", null);
41-
}
42-
if (CONNECTION_BY_UUID_METHOD == null) {
43-
CONNECTION_BY_UUID_METHOD = Reflection.getMethod(GEYSER_API_CLASS, "connectionByUuid", 0);
44-
}
45-
Object apiInstance = null;
46-
try {
47-
apiInstance = GEYSER_API_METHOD.invoke(null);
48-
} catch (IllegalAccessException | InvocationTargetException e) {
49-
e.printStackTrace();
50-
}
51-
Object connection = null;
52-
try {
53-
if (apiInstance != null) {
54-
connection = CONNECTION_BY_UUID_METHOD.invoke(apiInstance, uuid);
55-
}
56-
} catch (IllegalAccessException | InvocationTargetException e) {
57-
e.printStackTrace();
58-
}
59-
return connection != null;
28+
try {
29+
@SuppressWarnings("unused")
30+
Object obj = Geyser.class;
31+
geyser = true;
32+
} catch (NoClassDefFoundError e) {
33+
geyser = false;
6034
}
61-
return false;
6235
}
6336
}

fabric/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ allprojects {
4848
maven("https://nexus.scarsz.me/content/repositories/releases") // Configuralize
4949
maven("https://repo.opencollab.dev/maven-snapshots/") // Floodgate
5050
maven("https://repo.opencollab.dev/maven-releases/") // Cumulus (for Floodgate)
51+
maven("https://repo.opencollab.dev/main/") // Geyser
5152
maven("https://repo.codemc.io/repository/maven-releases/") // PacketEvents
5253
maven("https://repo.codemc.io/repository/maven-snapshots/")
5354
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")

libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ packetevents = "2.8.0-SNAPSHOT"
1111
fastutil = "8.5.15"
1212
jetbrains-annotations = "24.1.0"
1313
floodgate-api = "2.0-SNAPSHOT"
14+
geyser-api = "2.4.2-SNAPSHOT"
1415
via-version = "5.0.4-SNAPSHOT"
1516
netty = "4.1.85.Final"
1617
fabric-loader = "0.16.10"
@@ -28,6 +29,7 @@ fastutil = { group = "it.unimi.dsi", name = "fastutil", version.ref = "fastutil"
2829
netty = { group = "io.netty", name = "netty-all", version.ref = "netty" }
2930
via-version-api = { group = "com.viaversion", name = "viaversion-api", version.ref = "via-version" }
3031
floodgate-api = { group = "org.geysermc.floodgate", name = "api", version.ref = "floodgate-api"}
32+
geyser-api = { group = "org.geysermc.geyser", name = "api", version.ref = "geyser-api"}
3133
paper-api = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper-api" }
3234
placeholderapi = { group = "me.clip", name = "placeholderapi", version.ref = "placeholderapi" }
3335
cloud-core = { group = "org.incendo", name = "cloud-core", version.ref = "cloud" }

0 commit comments

Comments
 (0)