Jannyboy11 / ScalaPluginLoader

PluginLoader for Bukkit that provides Scala runtime classes and enhanced APIs.
https://www.spigotmc.org/resources/scalaloader.59568/
GNU Lesser General Public License v3.0
26 stars 10 forks source link

Error occurs while executing method JavaPlugin.getProvidingPlugin() #11

Closed freeze-dolphin closed 3 years ago

freeze-dolphin commented 3 years ago

Logs

``` [18:48:31 INFO]: [io.freeze_dolphin.plain_shop.PlugGividado] [PlainShop] Enabling PlainShop v0.1.1 [18:48:32 WARN]: java.lang.ClassNotFoundException: io.freeze_dolphin.plain_shop.PlugGividado [18:48:32 WARN]: at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:155) [18:48:32 WARN]: at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:114) [18:48:32 WARN]: at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) [18:48:32 WARN]: at java.base/java.lang.Class.forName0(Native Method) [18:48:32 WARN]: at java.base/java.lang.Class.forName(Class.java:375) [18:48:32 WARN]: at redempt.redlib.RedLib.getCallingPlugin(RedLib.java:99) [18:48:32 WARN]: at redempt.redlib.commandmanager.CommandCollection.register(CommandCollection.java:33) [18:48:32 WARN]: at io.freeze_dolphin.plain_shop.PlugGividado.onEnable(PlugGividado.scala:32) [18:48:32 WARN]: at xyz.janboerman.scalaloader.plugin.ScalaPluginLoader.enablePlugin(ScalaPluginLoader.java:578) [18:48:32 WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) [18:48:32 WARN]: at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:518) [18:48:32 WARN]: at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:432) [18:48:32 WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:594) [18:48:32 WARN]: at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:298) [18:48:32 WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1069) [18:48:32 WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) [18:48:32 WARN]: at java.base/java.lang.Thread.run(Thread.java:831) [18:48:32 ERROR]: Error occurred (in the plugin loader) while enabling PlainShop v0.1.1 (Is it up to date?) java.lang.IllegalArgumentException: class io.freeze_dolphin.plain_shop.commands.CommandBus is not provided by class org.bukkit.plugin.java.PluginClassLoader at org.bukkit.plugin.java.JavaPlugin.getProvidingPlugin(JavaPlugin.java:421) ~[patched_1.16.5.jar:git-Paper-778] at redempt.redlib.commandmanager.Command.registerHook(Command.java:561) ~[?:?] at redempt.redlib.commandmanager.Command.registerHook(Command.java:551) ~[?:?] at redempt.redlib.commandmanager.Command.register(Command.java:526) ~[?:?] at redempt.redlib.commandmanager.CommandCollection.lambda$register$0(CommandCollection.java:36) ~[?:?] at java.util.ArrayList.forEach(ArrayList.java:1511) ~[?:?] at redempt.redlib.commandmanager.CommandCollection.register(CommandCollection.java:34) ~[?:?] at io.freeze_dolphin.plain_shop.PlugGividado.onEnable(PlugGividado.scala:32) ~[?:?] at xyz.janboerman.scalaloader.plugin.ScalaPluginLoader.enablePlugin(ScalaPluginLoader.java:578) ~[?:?] at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[patched_1.16.5.jar:git-Paper-778] at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:518) ~[patched_1.16.5.jar:git-Paper-778] at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:432) ~[patched_1.16.5.jar:git-Paper-778] at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:594) ~[patched_1.16.5.jar:git-Paper-778] at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:298) ~[patched_1.16.5.jar:git-Paper-778] at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1069) ~[patched_1.16.5.jar:git-Paper-778] at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-778] at java.lang.Thread.run(Thread.java:831) [?:?] ```

Codes

Here are my codes #### PlugGividado.scala ```scala package io.freeze_dolphin.plain_shop import io.freeze_dolphin.plain_shop.commands.CommandBus import io.freeze_dolphin.plain_shop.configs.ConfigBus import net.milkbowl.vault.economy.Economy import org.bukkit.plugin.Plugin import redempt.redlib.commandmanager.CommandParser import redempt.redlib.configmanager.ConfigManager import xyz.janboerman.scalaloader.plugin.ScalaPlugin import xyz.janboerman.scalaloader.plugin.description.{Scala, ScalaVersion} object PlugGividado { var pg: Plugin = _ var ec: Economy = _ var cg: ConfigManager = _ def getPrefix = "[PlainShop] " } @Scala(version = ScalaVersion.v2_13_6) class PlugGividado extends ScalaPlugin { override def onEnable(): Unit = { PlugGividado.pg = this if (!setupEconomy) { getLogger.severe(String.format("[%s] - Disabled due to no Vault dependency found!", getDescription.getName)) getServer.getPluginManager.disablePlugin(this) return } new CommandParser(getResource("command.rdcml")).parse.register(getDescription.getName, new CommandBus()) PlugGividado.cg = new ConfigManager(this).register(new ConfigBus).saveDefaults.load getLogger.info("Loaded successfully!") } import net.milkbowl.vault.economy.Economy private def setupEconomy: Boolean = { if (getServer.getPluginManager.getPlugin("Vault") == null) return false val rsp = getServer.getServicesManager.getRegistration(classOf[Economy]) if (rsp == null) return false PlugGividado.ec = rsp.getProvider PlugGividado.ec != null } def getEc: Economy = PlugGividado.ec def getCg: ConfigManager = PlugGividado.cg } ``` #### CommandBus.scala ```scala package io.freeze_dolphin.plain_shop.commands import io.freeze_dolphin.plain_shop.PlugGividado import io.freeze_dolphin.plain_shop.commands.threads._ import io.freeze_dolphin.plain_shop.guis.UIUtl.color import org.bukkit.command.CommandSender import redempt.redlib.commandmanager.CommandHook class CommandBus { @CommandHook("put") def put(sender: CommandSender, id: String, category: String, prize: Float): Unit = { val th = new PutThread(sender, id, category, prize) th.start() } @CommandHook("pul") def pul(sender: CommandSender, id: String, category: String): Unit = { val th = new PullThread(sender, id, category) th.start() } @CommandHook("crt") def crt(sender: CommandSender, id: String, title: String, perm: String): Unit = { val th = new CrtThread(sender, id, title, perm) th.start() } @CommandHook("del") def del(sender: CommandSender, id: String): Unit = { val th = new DelThread(sender, id) th.start() } @CommandHook("opn") def opn(sender: CommandSender, category: String): Unit = { val th = new OpenThread(sender, category) th.start() } @CommandHook("lst") def lst(sender: CommandSender, id: Boolean, category: String): Unit = { val th = new ListThread(sender, id, category) th.start() } @CommandHook("rld") def rld(sender: CommandSender): Unit = { new Runnable() { override def run(): Unit = { PlugGividado.cg = PlugGividado.cg.load() } }.run() sender.sendMessage(color(PlugGividado.getPrefix + "&bDone in reloading!")) } } ```
freeze-dolphin commented 3 years ago

Note that I am using RedLib to write commands

Jannyboy11 commented 3 years ago

The exception message is correct, classes in your scalaplugin are not provided by the PluginClassLoader from Bukkit, instead they are provided by the ScalaPluginClassLoader from ScalaLoader. RedLib is not aware of this possibility, and just assumes that every class of objects passed to its CommandCollection#register method is loaded from a JavaPlugin. If you wish to use RedLib to register your commands you'd need to find a different overload of #regsiter that allows you to pass the plugin instance explicitly. If such a method doesn't exist then somebody needs to PR this to RedLib, or you need to use a different way to create commands altogether.

Jannyboy11 commented 3 years ago

Closing this issue as this is not a bug in ScalaLoader, but feel free to comment on it still if you want to say anything regarding this issue. I do read comments on closed issues.