diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..753c9ee
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+/target/
+.classpath
+.DS_Store
+.project
+.settings/org.eclipse.core.resources.prefs
+*.prefs
diff --git a/libs/ProtocolSupport.jar b/libs/ProtocolSupport.jar
new file mode 100644
index 0000000..1b779c2
Binary files /dev/null and b/libs/ProtocolSupport.jar differ
diff --git a/pom.xml b/pom.xml
index 17ee3c8..4a49bc9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,14 +25,18 @@
true
-
- repo-public
- https://repo.codemc.org/repository/maven-public/
-
jitpack.io
https://jitpack.io
+
+ viaversion-repo
+ https://repo.viaversion.com
+
+
+ repo-public
+ https://repo.codemc.org/repository/maven-public/
+
@@ -91,11 +95,23 @@
bungeecord-api
1.18-R0.1-20220408.230221-26
+
+ com.viaversion
+ viaversion-api
+ LATEST
+
net.md-5
bungeecord-event
1.18-R0.1-20220408.230147-26
+
+ protocolsupport
+ protocolsupport
+ 1.0
+ system
+ ${basedir}/libs/ProtocolSupport.jar
+
@@ -168,8 +184,15 @@
-
-
+
+
diff --git a/src/me/asofold/bpl/cncp/ClientVersion/ClientVersionListener.java b/src/me/asofold/bpl/cncp/ClientVersion/ClientVersionListener.java
new file mode 100644
index 0000000..0b3c256
--- /dev/null
+++ b/src/me/asofold/bpl/cncp/ClientVersion/ClientVersionListener.java
@@ -0,0 +1,47 @@
+package me.asofold.bpl.cncp.ClientVersion;
+
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.plugin.Plugin;
+
+import com.viaversion.viaversion.api.Via;
+import protocolsupport.api.ProtocolSupportAPI;
+
+import fr.neatmonster.nocheatplus.players.DataManager;
+import fr.neatmonster.nocheatplus.players.IPlayerData;
+import me.asofold.bpl.cncp.CompatNoCheatPlus;
+import me.asofold.bpl.cncp.config.Settings;
+
+public class ClientVersionListener implements Listener {
+
+ private Plugin ViaVersion = Bukkit.getPluginManager().getPlugin("ViaVersion");
+ private Plugin ProtocolSupport = Bukkit.getPluginManager().getPlugin("ProtocolSupport");
+
+ @SuppressWarnings("unchecked")
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPlayerJoin(PlayerJoinEvent event) {
+ final Player player = event.getPlayer();
+ Bukkit.getScheduler()
+ .runTaskLater(CompatNoCheatPlus.getInstance(), new Runnable() {
+ @Override
+ public void run() {
+ final IPlayerData pData = DataManager.getPlayerData(player);
+ if (pData != null) {
+ if (ViaVersion != null && ViaVersion.isEnabled()) {
+ // Give precedence to ViaVersion
+ pData.setClientVersionID(Via.getAPI().getPlayerVersion(player));
+ }
+ else if (ProtocolSupport != null && ProtocolSupport.isEnabled()) {
+ // Fallback to PS
+ pData.setClientVersionID(ProtocolSupportAPI.getProtocolVersion(player).getId());
+ }
+ // (Client version stays unknown (-1))
+ }
+ }
+ }, 20); // Wait 20 ticks before setting client data
+ }
+}
diff --git a/src/me/asofold/bpl/cncp/CompatNoCheatPlus.java b/src/me/asofold/bpl/cncp/CompatNoCheatPlus.java
index 36ea9a5..0064fd3 100644
--- a/src/me/asofold/bpl/cncp/CompatNoCheatPlus.java
+++ b/src/me/asofold/bpl/cncp/CompatNoCheatPlus.java
@@ -28,6 +28,7 @@ import fr.neatmonster.nocheatplus.components.registry.feature.IDisableListener;
import fr.neatmonster.nocheatplus.hooks.NCPHook;
import fr.neatmonster.nocheatplus.hooks.NCPHookManager;
import me.asofold.bpl.cncp.bedrock.BedrockPlayerListener;
+import me.asofold.bpl.cncp.ClientVersion.ClientVersionListener;
import me.asofold.bpl.cncp.config.Settings;
import me.asofold.bpl.cncp.config.compatlayer.CompatConfig;
import me.asofold.bpl.cncp.config.compatlayer.NewConfig;
@@ -171,25 +172,25 @@ public class CompatNoCheatPlus extends JavaPlugin implements Listener {
builtinHooks.clear();
// Might-fail hooks:
// Set speed
- try{
+ try {
builtinHooks.add(new me.asofold.bpl.cncp.hooks.generic.HookSetSpeed());
}
- catch (Throwable t){}
+ catch (Throwable t) {}
// Citizens 2
- try{
+ try {
builtinHooks.add(new me.asofold.bpl.cncp.hooks.citizens2.HookCitizens2());
}
- catch (Throwable t){}
+ catch (Throwable t) {}
// mcMMO
- try{
+ try {
builtinHooks.add(new me.asofold.bpl.cncp.hooks.mcmmo.HookmcMMO());
}
- catch (Throwable t){}
+ catch (Throwable t) {}
// GravityTubes
try {
builtinHooks.add(new me.asofold.bpl.cncp.hooks.GravityTubes.HookGravityTubes());
}
- catch(Throwable t){}
+ catch (Throwable t) {}
// CMI
try {
builtinHooks.add(new me.asofold.bpl.cncp.hooks.CMI.HookCMI());
@@ -247,6 +248,7 @@ public class CompatNoCheatPlus extends JavaPlugin implements Listener {
final PluginManager pm = getServer().getPluginManager();
pm.registerEvents(this, this);
pm.registerEvents(new BedrockPlayerListener(), this);
+ pm.registerEvents(new ClientVersionListener(), this);
getServer().getMessenger().registerIncomingPluginChannel(this, "cncp:geyser", new BedrockPlayerListener());
try {
bungee = getServer().spigot().getConfig().getBoolean("settings.bungeecord");