From 76de3aead14b432abffb87d7e5438d0147a787b7 Mon Sep 17 00:00:00 2001
From: xSquishyLiam <56977759+xSquishyLiam@users.noreply.github.com>
Date: Thu, 11 Dec 2025 22:56:44 +0000
Subject: [PATCH] added a check for client brand being null (tho weird)
---
.idea/workspace.xml | 2 +-
.../geysermodelengine/GeyserModelEngine.java | 9 ++++---
.../hooks/FloodgateAPIHook.java | 26 +++++++++++++++++++
.../geysermodelengine/util/BedrockUtils.java | 13 +++++-----
4 files changed, 38 insertions(+), 12 deletions(-)
create mode 100644 paper/src/main/java/re/imc/geysermodelengine/hooks/FloodgateAPIHook.java
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index df152d0..8797656 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -11,7 +11,7 @@
-
+
diff --git a/paper/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java b/paper/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java
index 608fa8f..95507ab 100644
--- a/paper/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java
+++ b/paper/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java
@@ -6,6 +6,7 @@ import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
+import re.imc.geysermodelengine.hooks.FloodgateAPIHook;
import re.imc.geysermodelengine.listener.ModelListener;
import re.imc.geysermodelengine.listener.MountPacketListener;
import re.imc.geysermodelengine.managers.ConfigManager;
@@ -59,11 +60,12 @@ public class GeyserModelEngine extends JavaPlugin {
private void loadHooks() {
PacketEvents.getAPI().init();
+ FloodgateAPIHook.loadHook(this);
// CommandAPI.onEnable();
}
private void loadBStats() {
- if (configManager.getConfig().getBoolean("metrics.bstats", true)) new Metrics(this, 26981);
+ if (this.configManager.getConfig().getBoolean("metrics.bstats", true)) new Metrics(this, 26981);
}
private void loadManagers() {
@@ -77,9 +79,8 @@ public class GeyserModelEngine extends JavaPlugin {
private void loadRunnables() {
this.schedulerPool = Executors.newScheduledThreadPool(configManager.getConfig().getInt("models.thread-pool-size", 4));
-
- schedulerPool.scheduleAtFixedRate(new UpdateTaskRunnable(this), 10, configManager.getConfig().getLong("models.entity-position-update-period", 35), TimeUnit.MILLISECONDS);
- schedulerPool.scheduleAtFixedRate(new BedrockMountControlRunnable(this), 1, 1, TimeUnit.MILLISECONDS);
+ this.schedulerPool.scheduleAtFixedRate(new UpdateTaskRunnable(this), 10, configManager.getConfig().getLong("models.entity-position-update-period", 35), TimeUnit.MILLISECONDS);
+ this.schedulerPool.scheduleAtFixedRate(new BedrockMountControlRunnable(this), 1, 1, TimeUnit.MILLISECONDS);
}
public ConfigManager getConfigManager() {
diff --git a/paper/src/main/java/re/imc/geysermodelengine/hooks/FloodgateAPIHook.java b/paper/src/main/java/re/imc/geysermodelengine/hooks/FloodgateAPIHook.java
new file mode 100644
index 0000000..fa0b0a4
--- /dev/null
+++ b/paper/src/main/java/re/imc/geysermodelengine/hooks/FloodgateAPIHook.java
@@ -0,0 +1,26 @@
+package re.imc.geysermodelengine.hooks;
+
+import org.bukkit.Bukkit;
+import org.geysermc.floodgate.api.FloodgateApi;
+import re.imc.geysermodelengine.GeyserModelEngine;
+
+public class FloodgateAPIHook {
+
+ private static FloodgateApi floodgateAPI;
+
+ public static void loadHook(GeyserModelEngine plugin) {
+ if (Bukkit.getPluginManager().getPlugin("floodgate") == null) {
+ plugin.getLogger().info("floodgate hook not enabled!");
+ return;
+ }
+
+ floodgateAPI = FloodgateApi.getInstance();
+
+ plugin.getLogger().info("Hooking into floodgate!");
+
+ }
+
+ public static FloodgateApi getAPI() {
+ return floodgateAPI;
+ }
+}
diff --git a/paper/src/main/java/re/imc/geysermodelengine/util/BedrockUtils.java b/paper/src/main/java/re/imc/geysermodelengine/util/BedrockUtils.java
index 5ba3e2d..5c38218 100644
--- a/paper/src/main/java/re/imc/geysermodelengine/util/BedrockUtils.java
+++ b/paper/src/main/java/re/imc/geysermodelengine/util/BedrockUtils.java
@@ -2,17 +2,16 @@ package re.imc.geysermodelengine.util;
import org.bukkit.entity.Player;
import org.geysermc.floodgate.api.FloodgateApi;
+import re.imc.geysermodelengine.hooks.FloodgateAPIHook;
public class BedrockUtils {
- private static FloodgateApi FLOODGATE_API;
+ private static final FloodgateApi floodgateAPIHook = FloodgateAPIHook.getAPI();
public static boolean isBedrockPlayer(Player player) {
- if (FLOODGATE_API != null) return FLOODGATE_API.isFloodgatePlayer(player.getUniqueId());
- return player.getClientBrandName().contains("Geyser");
- }
-
- public static FloodgateApi getFloodgateApi() {
- return FLOODGATE_API;
+ if (floodgateAPIHook != null) return floodgateAPIHook.isFloodgatePlayer(player.getUniqueId());
+ String clientBrand = player.getClientBrandName();
+ if (clientBrand == null) return false;
+ return clientBrand.contains("Geyser");
}
}