心血来潮用scala写插件
好像是一用和数组有关的东西就会报错
报错内容:
复制代码
代码:
复制代码
电脑已安装scala运行库:
之前试过用TabooLib的前置下载功能(@Dependency 注解),也这样报错
就把去掉对TabooLib的依赖了
试过把scala运行库解压了塞插件里,一样报错
好像是一用和数组有关的东西就会报错
报错内容:
- [10:23:16] [Server thread/INFO]: Freeze_Dolphin issued server command: /plainshop opn flower
 
- [10:23:18] [Server thread/WARN]: java.lang.reflect.InvocationTargetException
 
- [10:23:18] [Server thread/WARN]:         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 
- [10:23:18] [Server thread/WARN]:         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
 
- [10:23:18] [Server thread/WARN]:         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 
- [10:23:18] [Server thread/WARN]:         at java.base/java.lang.reflect.Method.invoke(Method.java:567)
 
- [10:23:18] [Server thread/WARN]:         at redempt.redlib.commandmanager.Command.execute(Command.java:817)
 
- [10:23:18] [Server thread/WARN]:         at redempt.redlib.commandmanager.Command.execute(Command.java:843)
 
- [10:23:18] [Server thread/WARN]:         at redempt.redlib.commandmanager.Command$1.execute(Command.java:502)
 
- [10:23:18] [Server thread/WARN]:         at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159)
 
- [10:23:18] [Server thread/WARN]:         at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:826)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.PlayerConnection.handleCommand(PlayerConnection.java:2185)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.PlayerConnection.c(PlayerConnection.java:2000)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1953)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:49)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:7)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:35)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1266)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1259)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1220)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1134)
 
- [10:23:18] [Server thread/WARN]:         at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291)
 
- [10:23:18] [Server thread/WARN]:         at java.base/java.lang.Thread.run(Thread.java:831)
 
- [10:23:18] [Server thread/WARN]: Caused by: java.lang.NoSuchMethodError: 'java.lang.Object scala.Predef$.refArrayOps(java.lang.Object[])'
 
- [10:23:18] [Server thread/WARN]:         at io.freeze_dolphin.plain_shop.guis.UIUtl$.create(UIUtl.scala:39)
 
- [10:23:18] [Server thread/WARN]:         at io.freeze_dolphin.plain_shop.commands.threads.OpenThread.start(OpenThread.scala:19)
 
- [10:23:18] [Server thread/WARN]:         at io.freeze_dolphin.plain_shop.commands.CommandBus.opn(CommandBus.scala:38)
 
- [10:23:18] [Server thread/WARN]: ... 26 more
代码:
- package io.freeze_dolphin.plain_shop.guis
 
 
- import io.freeze_dolphin.plain_shop.PlugGividado
 
- import io.freeze_dolphin.plain_shop.configs.StorageUtl
 
- import java.io.{File, FilenameFilter}
 
- import org.bukkit.ChatColor
 
- import org.bukkit.configuration.file.YamlConfiguration
 
- import redempt.redlib.inventorygui.{InventoryGUI, ItemButton}
 
- import redempt.redlib.itemutils.ItemBuilder
 
 
- object UIUtl {
 
 
-     private val eco = PlugGividado.ec
 
 
-     def create(yml: YamlConfiguration): InventoryGUI = {
 
-         import org.bukkit.Bukkit
 
-         import redempt.redlib.inventorygui.InventoryGUI
 
 
-         val id = yml.getString("id")
 
-         val title = yml.getString("title")
 
-         val icon = yml.getItemStack("icon")
 
-         val border = yml.getItemStack("border")
 
 
-         val gui = new InventoryGUI(Bukkit.createInventory(null, 54, color(title)))
 
 
-         gui.addButton(ItemButton.create(icon, evt => {
 
-             evt.setCancelled(true)
 
-         }), 0, 0)
 
 
-         gui.fill(1, 0, 8, 0, border)
 
-         gui.fill(0, 1, 5, 1, border)
 
-         gui.fill(8, 1, 8, 5, border)
 
-         gui.fill(1, 5, 7, 5, border)
 
 
-         gui.update()
 
 
-         val detect = StorageUtl.isCategoryExisted(id)
 
-         if (detect._1) {
 
-             for (f <- new File(PlugGividado.pg.getDataFolder.getPath + File.separator + "storage" + File.separator + id).listFiles(new FilenameFilter {
 
-                 override def accept(dir: File, name: String): Boolean = {
 
-                     name.endsWith(".yml")
 
-                 }
 
-             })
 
-                  ) {
 
-                 val yml = YamlConfiguration.loadConfiguration(f)
 
-                 val item = yml.getItemStack("item")
 
-                 val prize = yml.getDouble("prize").floatValue()
 
-                 val itm = new ItemBuilder(yml.getItemStack("item"))
 
-                         .addLore(color("&f"))
 
-                         .addLore(color(s"&7[&6>&7] &e&l价格&e: &f$prize"))
 
-                         .addLore(color("&7[&a+&7] &e左键 &f购买 1 个&f"))
 
-                         .addLore(color("&7[&a&l+&7] &eShift &7+ &e左键 &f购买 10 个&f"))
 
-                 gui.addButton(ItemButton.create(itm, evt => {
 
-                     if (evt.isCancelled) ()
 
-                     if (evt.isLeftClick) {
 
-                         if (!evt.isShiftClick) {
 
-                             val plr = Bukkit.getPlayer(evt.getWhoClicked.getUniqueId)
 
-                             val r = eco.withdrawPlayer(plr, prize)
 
-                             if (r.transactionSuccess()) {
 
-                                 plr.sendMessage(color(PlugGividado.cg.getConfig.getString("msg_shop_success")))
 
-                                 if (plr.getInventory.firstEmpty() == -1) {
 
-                                     plr.sendMessage(color(PlugGividado.cg.getConfig.getString("msg_shop_full_inv")))
 
-                                     plr.getWorld.dropItem(plr.getLocation, item)
 
-                                 } else plr.getInventory.addItem(item)
 
-                             } else plr.sendMessage(color(PlugGividado.cg.getConfig.getString("msg_shop_failure")))
 
-                         } else {
 
-                             val plr = Bukkit.getPlayer(evt.getWhoClicked.getUniqueId)
 
-                             val r = eco.withdrawPlayer(plr, prize * 10)
 
-                             if (r.transactionSuccess()) {
 
-                                 plr.sendMessage(color(PlugGividado.cg.getConfig.getString("msg_shop_success")))
 
 
-                                 var invWarn = false
 
-                                 for (_ <- 1 to 10) {
 
-                                     if (plr.getInventory.firstEmpty() == -1) {
 
-                                         invWarn = true
 
-                                         plr.getWorld.dropItem(plr.getLocation, item)
 
-                                     } else plr.getInventory.addItem(item)
 
-                                 }
 
-                                 if (invWarn) plr.sendMessage(color(PlugGividado.cg.getConfig.getString("msg_shop_full_inv")))
 
-                             } else plr.sendMessage(color(PlugGividado.cg.getConfig.getString("msg_shop_failure")))
 
-                         }
 
-                     }
 
-                     ()
 
-                 }), gui.getInventory.firstEmpty())
 
-                 gui.update()
 
-             }
 
-             gui.update()
 
-             return gui
 
-         }
 
-         throw new IllegalArgumentException("Invalid yaml configuration!")
 
-     }
 
 
-     def color(str: String): String = {
 
-         ChatColor.translateAlternateColorCodes('&', str)
 
-     }
 
 
- }
 
电脑已安装scala运行库:
之前试过用TabooLib的前置下载功能(@Dependency 注解),也这样报错
就把去掉对TabooLib的依赖了
试过把scala运行库解压了塞插件里,一样报错
名副其实 发表于 2021-7-10 11:15
https://www.spigotmc.org/resources/scalaloader.59568/
这个或许对你有参考性作用
我把主类全部重构就为了试一下这个
结果发现它不能以Java插件为前置,于是弃了,本来以为还蛮好的=。=
名副其实 发表于 2021-7-10 11:15
https://www.spigotmc.org/resources/scalaloader.59568/
这个或许对你有参考性作用
这两天一直在github发issue让这个作者改进
现在真的能用了!
感谢让我知道这个插件的存在!