NichtStudioCode / InvUI

A spigot library for creating custom inventory-based GUIs.
MIT License
242 stars 19 forks source link

ClassNotFoundException in PaperMC 1.19.4 #30

Closed skuralll closed 1 year ago

skuralll commented 1 year ago

I encountered the following errors.

[09:35:15 WARN]: java.lang.ClassNotFoundException: xyz.xenondevs.inventoryaccess.r13.InventoryUtilsImpl
[09:35:15 WARN]:    at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:183)
[09:35:15 WARN]:    at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:150)
[09:35:15 WARN]:    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
[09:35:15 WARN]:    at java.base/java.lang.Class.forName0(Native Method)
[09:35:15 WARN]:    at java.base/java.lang.Class.forName(Unknown Source)
[09:35:15 WARN]:    at DepositVault.jar//xyz.xenondevs.inventoryaccess.util.ReflectionUtils.getImplClass(ReflectionUtils.java:28)
[09:35:15 WARN]:    at DepositVault.jar//xyz.xenondevs.inventoryaccess.InventoryAccess.<clinit>(InventoryAccess.java:20)
[09:35:15 WARN]:    at DepositVault.jar//xyz.xenondevs.invui.window.AbstractWindow.openInventory(AbstractWindow.java:306)
[09:35:15 WARN]:    at DepositVault.jar//xyz.xenondevs.invui.window.AbstractWindow.open(AbstractWindow.java:302)
[09:35:15 WARN]:    at DepositVault.jar//com.skuralll.depositvault.ui.GUI.open(GUI.java:31)
[09:35:15 WARN]:    at DepositVault.jar//com.skuralll.depositvault.listener.PlayerEventListener.onPlayerInteract(PlayerEventListener.java:113)
[09:35:15 WARN]:    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor29.execute(Unknown Source)
[09:35:15 WARN]:    at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77)
[09:35:15 WARN]:    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:81)
[09:35:15 WARN]:    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70)
[09:35:15 WARN]:    at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54)
[09:35:15 WARN]:    at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126)
[09:35:15 WARN]:    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:615)
[09:35:15 WARN]:    at org.bukkit.craftbukkit.v1_19_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:562)
[09:35:15 WARN]:    at net.minecraft.server.level.PlayerInteractManager.a(PlayerInteractManager.java:536)
[09:35:15 WARN]:    at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:1958)
[09:35:15 WARN]:    at net.minecraft.network.protocol.game.PacketPlayInUseItem.a(PacketPlayInUseItem.java:37)
[09:35:15 WARN]:    at net.minecraft.network.protocol.game.PacketPlayInUseItem.a(PacketPlayInUseItem.java:9)
[09:35:15 WARN]:    at net.minecraft.network.protocol.PlayerConnectionUtils.lambda$ensureRunningOnSameThread$0(PlayerConnectionUtils.java:51)
[09:35:15 WARN]:    at net.minecraft.server.TickTask.run(TickTask.java:18)
[09:35:15 WARN]:    at net.minecraft.util.thread.IAsyncTaskHandler.d(IAsyncTaskHandler.java:153)
[09:35:15 WARN]:    at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.d(IAsyncTaskHandlerReentrant.java:24)
[09:35:15 WARN]:    at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1342)
[09:35:15 WARN]:    at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197)
[09:35:15 WARN]:    at net.minecraft.util.thread.IAsyncTaskHandler.x(IAsyncTaskHandler.java:126)
[09:35:15 WARN]:    at net.minecraft.server.MinecraftServer.bi(MinecraftServer.java:1319)
[09:35:15 WARN]:    at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1312)
[09:35:15 WARN]:    at net.minecraft.util.thread.IAsyncTaskHandler.c(IAsyncTaskHandler.java:136)
[09:35:15 WARN]:    at net.minecraft.server.MinecraftServer.i_(MinecraftServer.java:1290)
[09:35:15 WARN]:    at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1178)
[09:35:15 WARN]:    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:320)
[09:35:15 WARN]:    at java.base/java.lang.Thread.run(Unknown Source)

I use Java to create my plugins and have written gradle as per the documentation. No error is output at compile time, but the above error is output when actually trying to open the UI in the server.

My server's version is Paper version git-Paper-509 (MC: 1.19.4) (Implementing API version 1.19.4-R0.1-SNAPSHOT) (Git: e338793)

Thank you for your help

NichtStudioCode commented 1 year ago

A ClassNotFoundException means that the class loader cannot find a class.

This is most likely caused by you not adding InvUI's classes to the classpath (either through some sort of library loading mechanism or by creating a fat jar using maven shade or gradle shadow)

skuralll commented 1 year ago

Thanks for the reply. I have already created a fat jar using the shadow plugin, do I need to add anything further to the build.gradle? The current build.gradle is as follows. The shadowJar task is used to generate the Jar.

plugins {
    id 'java'
    id "com.github.johnrengelman.shadow" version "7.1.2"
}

group = 'com.skuralll'
version = '1.0'

repositories {
    mavenCentral()
    maven {
        name = "papermc-repo"
        url = "https://repo.papermc.io/repository/maven-public/"
    }
    maven {
        name = "sonatype"
        url = "https://oss.sonatype.org/content/groups/public/"
    }
    maven { url 'https://jitpack.io' }
    maven { url 'https://repo.xenondevs.xyz/releases' }
}

dependencies {
    compileOnly "io.papermc.paper:paper-api:1.19.4-R0.1-SNAPSHOT"
    compileOnly "com.github.MilkBowl:VaultAPI:1.7"
    implementation "xyz.xenondevs.invui:invui:1.0"
}

def targetJavaVersion = 17
java {
    def javaVersion = JavaVersion.toVersion(targetJavaVersion)
    sourceCompatibility = javaVersion
    targetCompatibility = javaVersion
    if (JavaVersion.current() < javaVersion) {
        toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion)
    }
}

tasks.withType(JavaCompile).configureEach {
    if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) {
        options.release = targetJavaVersion
    }
}

processResources {
    def props = [version: version]
    inputs.properties props
    filteringCharset 'UTF-8'
    filesMatching('plugin.yml') {
        expand props
    }
}

shadowJar {
    archiveName("DepositVault.jar")
    minimize()
}
skuralll commented 1 year ago

Sorry, self-resolved. I removed minimize() in the shadowJar task and it works fine. Thank you very much.