0

我对 Toothpick 还很陌生,今天我决定在我目前正在进行的一个小项目中对其进行测试。但是当我尝试编译时,kapt抛出了一个异常但我真的不明白它的意思,我已经尝试在谷歌上查找它,但似乎没有人使用 Toothpick 遇到这个问题(还),所以这是我最后的手段。提前致谢。

Stacktrace(使用详细模式): https ://paste.helpch.at/uqusanaheh.cs

gradle.build.kts(我使用的是 Gradle 7.2 版本)

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm") version "1.5.30"
    kotlin("kapt") version "1.5.30"
    id("com.github.johnrengelman.shadow") version "7.0.0"
}

group = "com.github.secretx33"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
    maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
    maven("https://oss.sonatype.org/content/groups/public/")
    maven("https://repo.codemc.org/repository/maven-public/")
    maven("https://papermc.io/repo/repository/maven-public/")
    maven("https://plugins.gradle.org/m2/")
    maven("https://jitpack.io")
    maven("https://maven.enginehub.org/repo/")
    maven("https://repo.mattstudios.me/artifactory/public")
}

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
    // API dependency
    compileOnly("com.destroystokyo.paper:paper-api:1.12.2-R0.1-SNAPSHOT")
    compileOnly(fileTree("libs"))
    // DI
    val toothpick_version = "3.1.0"
    implementation("com.github.stephanenicolas.toothpick:ktp:$toothpick_version")
    kapt("com.github.stephanenicolas.toothpick:toothpick-compiler:$toothpick_version")
    compileOnly("com.comphenix.protocol:ProtocolLib:4.7.0")
    implementation("net.kyori:adventure-api:4.9.1")
    implementation("net.kyori:adventure-platform-bukkit:4.0.0")
    implementation("net.kyori:adventure-text-serializer-plain:4.9.0")
}

tasks.test {
    useJUnitPlatform()
}

// Disables the normal jar task
tasks.jar { enabled = false }

// And enables shadowJar task
artifacts.archives(tasks.shadowJar)

tasks.shadowJar {
    archiveFileName.set(rootProject.name + ".jar")
    val dependencyPackage = "${rootProject.group}.dependencies.${rootProject.name.toLowerCase()}"
    relocate("kotlin", "${dependencyPackage}.kotlin")
    relocate("kotlinx", "${dependencyPackage}.kotlinx")
    relocate("org.jetbrains", "${dependencyPackage}.jetbrains")
    relocate("org.intellij", "${dependencyPackage}.jetbrains.intellij")
    exclude("ScopeJVMKt.class")
    exclude("DebugProbesKt.bin")
    exclude("META-INF/**")
}

tasks.withType<JavaCompile> {
    sourceCompatibility = "1.8"
    targetCompatibility = "1.8"
    options.encoding = "UTF-8"
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict", "-Xjvm-default=all")
        jvmTarget = "1.8"
    }
}

tasks.processResources {
    val main_class = "${project.group}.${project.name.toLowerCase()}.${project.name}"
    expand("name" to project.name, "version" to project.version, "mainClass" to main_class)
}

主类(GTFix)

package com.github.secretx33.gtfix

import com.comphenix.protocol.ProtocolLibrary
import com.comphenix.protocol.events.PacketAdapter
import com.github.secretx33.gtfix.command.Commands
import com.github.secretx33.gtfix.eventlistener.CommandTabBlockerListener
import com.github.secretx33.gtfix.eventlistener.DisableOffhandSlotListener
import com.github.secretx33.gtfix.packetlistener.ChatPacketListener
import org.bukkit.Bukkit
import org.bukkit.event.Listener
import org.bukkit.plugin.Plugin
import org.bukkit.plugin.java.JavaPlugin
import toothpick.Scope
import toothpick.configuration.Configuration
import toothpick.ktp.KTP
import toothpick.ktp.binding.bind
import toothpick.ktp.binding.module
import java.util.logging.Logger
import kotlin.reflect.KClass

class GTFix : JavaPlugin() {

    private val mod = module {
        bind<Plugin>().toInstance(this@GTFix)
        bind<JavaPlugin>().toInstance(this@GTFix)
        bind<Logger>().toInstance(this@GTFix.logger)
    }

    override fun onEnable() {
        KTP.setConfiguration(Configuration.forDevelopment().preventMultipleRootScopes())
        val scope = KTP.openScope("GTFix").installModules(mod)
        registerPacketListeners(scope, ChatPacketListener::class)
        registerListeners(scope, CommandTabBlockerListener::class, DisableOffhandSlotListener::class)
        Commands(scope)
    }

    override fun onDisable() {
        KTP.closeScope("GTFix")
    }

    private fun registerPacketListeners(scope: Scope, vararg listeners: KClass<out PacketAdapter>) {
        listeners.map { scope.getInstance(it.java) }
            .forEach { ProtocolLibrary.getProtocolManager().addPacketListener(it) }
    }

    private fun registerListeners(scope: Scope, vararg listeners: KClass<out Listener>) {
        listeners.map { scope.getInstance(it.java) }
            .forEach { Bukkit.getPluginManager().registerEvents(it, this) }
    }
}
4

0 回答 0