我目前正在为 Spigot 1.8.8 开发 Minecraft OITC 插件! ~全部使用 IntelliJ 以 Kotlin 编写
虽然从 ItemDrops 的简单事件处理程序开始,但我遇到了一个问题:
Could not pass event PlayerDropItemEvent to RarityOITC v1.0-SNAPSHOT
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
一段时间后我认为我的代码可能没问题:
我的主课:
package me.ysheiny.rarityoitc
import me.ysheiny.rarityoitc.handlers.PlayerHandler
import org.bukkit.plugin.java.JavaPlugin
class RarityOITC : JavaPlugin() {
val prefix = "[&bRarity&dOITC&f]"
override fun onEnable() {
// Plugin startup logic
logger.info("Plugin Enabled!")
PlayerHandler(this)
}
override fun onDisable() {
// Plugin shutdown logic
logger.info("Plugin Disabled!")
}
}
我的播放器处理程序:
package me.ysheiny.rarityoitc.handlers
import me.ysheiny.rarityoitc.RarityOITC
import org.bukkit.Bukkit
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerDropItemEvent
class PlayerHandler(plugin: RarityOITC?) : Listener {
init {
Bukkit.getPluginManager().registerEvents(this, plugin)
}
@EventHandler
fun onPlayerDropItem(event: PlayerDropItemEvent)
{
event.isCancelled = true
}
}
我做了一些研究,发现构建 Kotlin 运行时存在异常。 我的项目是用 Maven 构建的,这些是我的依赖项:
<dependencies>
<dependency>
<groupId>com.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/spigot-1.8.8.jar</systemPath>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-runtime</artifactId>
<version>1.2.71</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/kotlin-runtime-1.2.71.jar</systemPath>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test</artifactId>
<version>${kotlin.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
因为旧版本,我使用 1.8.8 的本地 spigot 依赖项。 否则我也一直在尝试手动添加 Kotlin 运行时,但版本太旧了:
Kotlin: API version 1.2 is no longer supported; please, use version 1.3 or greater.
我不知道该怎么办。 有人可以帮我解决这个问题吗?
我以某种方式找到了解决方案!
好吧,问题是:我想我只是忘记更新控制在 jar 中构建依赖项的 Artifact。所以信息在 pom.xml 中,但没有应用于实际构建。
所以对于像我这样有问题的每个人。搜索解决方案并始终记得更新项目结构中的工件。
我的依赖项现在看起来像这样:
<dependency>
<groupId>com.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/spigot-1.8.8.jar</systemPath>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test</artifactId>
<version>${kotlin.version}</version>
<scope>test</scope>
</dependency>
我认为
kotlin-runtime
不是真正的问题。只需按照Tenfour04的推荐将
kotlin-stdlib-jdk8
更改为kotlin-stdlib
。