From fdd8fd0f059bba93f70b6a317c27f2549b380fb6 Mon Sep 17 00:00:00 2001 From: devmikka <64923699+DevMikka@users.noreply.github.com> Date: Sat, 8 Nov 2025 10:23:57 +0100 Subject: v1 --- .../mikka/cortex/help/loader/TestPluginLoader.java | 49 ++++++++++++++++++ .../kotlin/dev/mikka/cortex/help/TestPlugin.kt | 58 ++++++++++++++++++++++ .../dev/mikka/cortex/help/event/ClickEvents.kt | 46 +++++++++++++++++ .../help/luckperms/ActualLuckPermsManager.kt | 11 ++++ .../cortex/help/luckperms/LuckPermsManager.kt | 7 +++ .../cortex/help/luckperms/NoOpLuckPermsManager.kt | 7 +++ 6 files changed, 178 insertions(+) create mode 100644 src/main/java/dev/mikka/cortex/help/loader/TestPluginLoader.java create mode 100644 src/main/kotlin/dev/mikka/cortex/help/TestPlugin.kt create mode 100644 src/main/kotlin/dev/mikka/cortex/help/event/ClickEvents.kt create mode 100644 src/main/kotlin/dev/mikka/cortex/help/luckperms/ActualLuckPermsManager.kt create mode 100644 src/main/kotlin/dev/mikka/cortex/help/luckperms/LuckPermsManager.kt create mode 100644 src/main/kotlin/dev/mikka/cortex/help/luckperms/NoOpLuckPermsManager.kt (limited to 'src/main') diff --git a/src/main/java/dev/mikka/cortex/help/loader/TestPluginLoader.java b/src/main/java/dev/mikka/cortex/help/loader/TestPluginLoader.java new file mode 100644 index 0000000..cc47383 --- /dev/null +++ b/src/main/java/dev/mikka/cortex/help/loader/TestPluginLoader.java @@ -0,0 +1,49 @@ +package dev.mikka.cortex.help.loader; + +import com.google.gson.Gson; +import io.papermc.paper.plugin.loader.PluginClasspathBuilder; +import io.papermc.paper.plugin.loader.PluginLoader; +import io.papermc.paper.plugin.loader.library.impl.MavenLibraryResolver; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; +import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.repository.RemoteRepository; +import org.jetbrains.annotations.NotNull; + +@SuppressWarnings("ALL") +public class TestPluginLoader implements PluginLoader { + @Override + public void classloader(@NotNull PluginClasspathBuilder classpathBuilder) { + var resolver = new MavenLibraryResolver(); + + var pluginLibraries = load(); + pluginLibraries.asDependencies().forEach(resolver::addDependency); + pluginLibraries.asRepositories().forEach(resolver::addRepository); + + classpathBuilder.addLibrary(resolver); + } + + private PluginLibraries load() { + try (var in = getClass().getResourceAsStream("/paper-libraries.json")) { + return new Gson().fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), PluginLibraries.class); + } catch (IOException exception) { + throw new RuntimeException(exception); + } + } + + private record PluginLibraries(Map repositories, List dependencies) { + public Stream asDependencies() { + return dependencies.stream().map(d -> new Dependency(new DefaultArtifact(d), null)); + } + + public Stream asRepositories() { + return repositories.entrySet().stream() + .map(entry -> new RemoteRepository.Builder(entry.getKey(), "default", entry.getValue()).build()); + } + } +} diff --git a/src/main/kotlin/dev/mikka/cortex/help/TestPlugin.kt b/src/main/kotlin/dev/mikka/cortex/help/TestPlugin.kt new file mode 100644 index 0000000..e3e4269 --- /dev/null +++ b/src/main/kotlin/dev/mikka/cortex/help/TestPlugin.kt @@ -0,0 +1,58 @@ +package dev.mikka.cortex.help + +import com.comphenix.protocol.ProtocolLibrary +import com.comphenix.protocol.ProtocolManager +import com.github.retrooper.packetevents.PacketEvents +import com.github.retrooper.packetevents.PacketEventsAPI +import dev.mikka.cortex.help.event.ClickEvents +import dev.mikka.cortex.help.luckperms.ActualLuckPermsManager +import dev.mikka.cortex.help.luckperms.LuckPermsManager +import dev.mikka.cortex.help.luckperms.NoOpLuckPermsManager +import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder +import net.luckperms.api.LuckPerms +import org.bukkit.plugin.Plugin +import org.bukkit.plugin.java.JavaPlugin + +class TestPlugin : JavaPlugin() { + companion object { + val packetEvents: PacketEventsAPI<*> by lazy { PacketEvents.getAPI() } + val protocolManager: ProtocolManager by lazy { ProtocolLibrary.getProtocolManager() } + lateinit var instance: TestPlugin + lateinit var luckPerms: LuckPermsManager + lateinit var essentials: Plugin + } + + override fun onLoad() { + instance = this + PacketEvents.setAPI(SpigotPacketEventsBuilder.build(this)) + packetEvents.load() + } + + override fun onEnable() { + if (checkLuckPerms()) { + // This will throw when called unchecked! + luckPerms = ActualLuckPermsManager(server.servicesManager.getRegistration(LuckPerms::class.java)!!.provider) + slF4JLogger.info("LuckPerms is enabled! Using $luckPerms") + } else { + luckPerms = NoOpLuckPermsManager + slF4JLogger.info("LuckPerms is not enabled! Using $luckPerms") + } + + println(server.pluginManager.plugins.joinToString(", ") { plugin -> "${plugin.name} (${plugin.isEnabled})" }) + + println(checkEssentials()) + + if (checkEssentials()) { + essentials = server.pluginManager.getPlugin("Essentials")!! + slF4JLogger.info("EssentialsX is enabled! Plugin: $essentials (${essentials::class.java.name})") + } + + slF4JLogger.info("ProtocolLib: $protocolManager") + + server.pluginManager.registerEvents(ClickEvents, this) + } + + private fun checkLuckPerms(): Boolean = server.pluginManager.isPluginEnabled("LuckPerms") + + private fun checkEssentials(): Boolean = server.pluginManager.plugins.find { it.name == "Essentials" } != null +} diff --git a/src/main/kotlin/dev/mikka/cortex/help/event/ClickEvents.kt b/src/main/kotlin/dev/mikka/cortex/help/event/ClickEvents.kt new file mode 100644 index 0000000..3e750aa --- /dev/null +++ b/src/main/kotlin/dev/mikka/cortex/help/event/ClickEvents.kt @@ -0,0 +1,46 @@ +package dev.mikka.cortex.help.event + +import com.comphenix.protocol.PacketType +import com.comphenix.protocol.events.PacketContainer +import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerChangeGameState +import dev.mikka.cortex.help.TestPlugin +import org.bukkit.Material +import org.bukkit.event.EventHandler +import org.bukkit.event.Listener +import org.bukkit.event.block.Action +import org.bukkit.event.player.PlayerInteractEvent + +object ClickEvents : Listener { + @EventHandler + fun onPlayerInteract(event: PlayerInteractEvent) { + if (event.action != Action.LEFT_CLICK_AIR && event.action != Action.RIGHT_CLICK_AIR) { + return + } + + if (event.item?.type != Material.CLOCK) { + return + } + + // We have direct access to [PacketEventsAPI] + TestPlugin.packetEvents.playerManager.sendPacket( + event.player, + WrapperPlayServerChangeGameState(WrapperPlayServerChangeGameState.Reason.DEMO_EVENT, 0f), + ) + + TestPlugin.protocolManager.sendServerPacket( + event.player, + PacketContainer(PacketType.Play.Server.GAME_STATE_CHANGE).apply { + // God is ProtocolLib bullshit + structures.modify(0) { structure -> + structure.integers.write(0, 5) + structure + } + float.write(0, 101f) + }, + ) + + TestPlugin.luckPerms.printInstance() + + TestPlugin.essentials.slF4JLogger.info("Hello from ${TestPlugin.instance}") + } +} diff --git a/src/main/kotlin/dev/mikka/cortex/help/luckperms/ActualLuckPermsManager.kt b/src/main/kotlin/dev/mikka/cortex/help/luckperms/ActualLuckPermsManager.kt new file mode 100644 index 0000000..c9cebe2 --- /dev/null +++ b/src/main/kotlin/dev/mikka/cortex/help/luckperms/ActualLuckPermsManager.kt @@ -0,0 +1,11 @@ +package dev.mikka.cortex.help.luckperms + +import net.luckperms.api.LuckPerms + +class ActualLuckPermsManager(private val luckPerms: LuckPerms) : LuckPermsManager { + override fun isEnabled(): Boolean = true + + override fun printInstance() { + println("LuckPerms Instance: $luckPerms") + } +} diff --git a/src/main/kotlin/dev/mikka/cortex/help/luckperms/LuckPermsManager.kt b/src/main/kotlin/dev/mikka/cortex/help/luckperms/LuckPermsManager.kt new file mode 100644 index 0000000..d5984a8 --- /dev/null +++ b/src/main/kotlin/dev/mikka/cortex/help/luckperms/LuckPermsManager.kt @@ -0,0 +1,7 @@ +package dev.mikka.cortex.help.luckperms + +interface LuckPermsManager { + fun isEnabled(): Boolean + + fun printInstance() +} diff --git a/src/main/kotlin/dev/mikka/cortex/help/luckperms/NoOpLuckPermsManager.kt b/src/main/kotlin/dev/mikka/cortex/help/luckperms/NoOpLuckPermsManager.kt new file mode 100644 index 0000000..1faa09e --- /dev/null +++ b/src/main/kotlin/dev/mikka/cortex/help/luckperms/NoOpLuckPermsManager.kt @@ -0,0 +1,7 @@ +package dev.mikka.cortex.help.luckperms + +object NoOpLuckPermsManager : LuckPermsManager { + override fun isEnabled(): Boolean = false + + override fun printInstance() {} +} -- cgit v1.2.3-70-g09d2