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");