#build-tooling-help

1 messages · Page 13 of 1

crude kernel
#

so not sure about that one

strange stirrup
#

I’ve heard mixed things about 2.0 so far but

#

if it’s working for u then it’s good

ocean berry
#

could it perhaps be some cache or something?

what's your project structure like? is it a multi-module setup?

what does your settings.gradle.kts and gradle.properties look like?

crude kernel
ocean berry
livid lance
#

forgive my misunderstandings, but I've been trying to get the following to work with no avail.

I have a utility plugin built using paperweight, and I'm trying to depend on it with a plugin using maven.

the utility dependency is published on github packages, but including it as a dependency on the latter plugin results in this error:

Could not find artifact co.killionrevival:killioncommons:jar:1.1.6-SNAPSHOT in killioncommonsgithub (https://maven.pkg.github.com/KillionRevival/*)

my .m2 settings xml is correct, I can definitely reach the github repository. I want to bring in killioncommons-1.1.6-20240802.173526-1-dev-all.jar, is maven not picking up on that with my dependency of

 <dependency>
            <groupId>co.killionrevival</groupId>
            <artifactId>killioncommons</artifactId>
            <version>1.1.6-SNAPSHOT</version>
 </dependency>

(is it looking for killioncommons-1.1.6-SNAPSHOT.jar?)

what else is needed to bring in that dependency? I felt like it was some combination of how I set up the gradle buildscript for the utility plugin, but I can't figure out how to get it to resolve.

strange stirrup
#

does the link it send work in your browser

#

but you probably need to change the jar it’s publishing

livid lance
#

mvn.pkg.github.com?

strange stirrup
#

if you want -dev-all

#

Yeah

livid lance
#

that specific link doesn't work but it's from settings.xml:

        <repository>
          <id>killioncommonsgithub</id>
          <url>https://maven.pkg.github.com/KillionRevival/*</url>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
strange stirrup
#

did you add your GitHub api key to maven too

livid lance
#

yes, that's also in the settings.xml

#

also, depending on this works fine for gradle projects. I'm only having an issue bringing it down with Maven

strange stirrup
#

I feel like

#

the * in the url is wrong

strange stirrup
livid lance
strange stirrup
#

would be nice if they mentioned that in the main maven page

#

try it anyway

livid lance
#

I have

strange stirrup
#

other than that tho idk you’ll have to wait for someone else

#

I haven’t used maven in 8 years

smoky violet
#

maven and github packages... two things I don't want to touch lol

grand niche
#

rule of thumb, are you authenticated to the maven repo?

#

ah that was asked already

livid lance
fluid onyx
#

Hello, I posted a library on jitpack with a both compile and runtime dependency in it. But when I use this Jitpack library in my plugin with implementation its dependency is only in runtime. Using setTransitive didnt help. What should I do?

grand niche
#

do you have an example build script of your library? my guess is that you're not using the api* configurations that expose the dependencies for consumers

fluid onyx
# grand niche do you have an example build script of your library? my guess is that you're not...

👍
repositories {
mavenCentral()
maven {
url "https://repo.opencollab.dev/maven-releases/"
}
maven {
url "https://repo.opencollab.dev/maven-snapshots/"
}
maven {
url "https://jitpack.io"
}
}

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

publishing {
publications {
maven(MavenPublication) {
groupId = group
artifactId = project.name
version = version

        from components.java
    }
}

}

dependencies {
compileOnly "org.jetbrains:annotations:24.1.0"
compileOnly "org.projectlombok:lombok:1.18.32"
annotationProcessor "org.projectlombok:lombok:1.18.32"
implementation "com.github.AlexProgrammerDE:MCProtocolLib:576b311" /* THE dependency */
}

grand niche
#

yea you have to use the api configuration there if you want to use MCPL from the plugin

grand niche
#

do note that you need the java-library and not the base java plugin in gradle for those

fluid onyx
#

yes and thank you

#

just waiting now for jitpack to finish its work

#

yes it worked thank you very much you are a life saver 👍

#

its quite strange that jitpack didnt mention this in the doc though

grand niche
#

jitpack just deals with the publishing side of things, this is a gradle module metadata thing

fluid onyx
#

haha, looks like I was searching in the wrong place

main wadi
#

Hello, I need help compiling my plugin. As it supports 1.18-1.21, I'd like to compile it using Java 17. However, I also use NMS (paperweight plugin) and the 1.21 module is build using Java 21.
v1_21_R1 build.gradle.kts:

plugins {
    id("io.papermc.paperweight.userdev") version "1.7.1"
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

dependencies {
    paperweight.paperDevBundle("1.21-R0.1-SNAPSHOT")
}

plugin build.gradle.kts:

plugins {
    id("com.github.johnrengelman.shadow") version("8.1.1")
}

repositories {
    maven("https://repo.oraxen.com/releases")
}

dependencies {
    implementation(project(":nms:v1_21_R1"))
    // More NMS versions and other dependencies...
}

tasks {
    shadowJar {
        minimize()
        // Shade adventure to support Spigot
        relocate("net.kyori", "net.kyori")
        archiveFileName.set("${project.parent?.name}-${project.version}.jar")
    }
}

I am migrating from maven to Gradle, and the maven toolchain plugin worked. How can I compile the v1_21_R1 module with Java 21 and the plugin module with Java 17?

#

I am trying to build the plugin using the task "jar" but I get the error Unsupported class file major version 65

#

Note that, for example, in a 1.18 server using Java 17, the v1_21_R1 module would never be used so it wouldn't matter that it's compiled using Java 21

#

Hence why it worked in maven

#

Now I need to figure out how to do the same thing using Gradle

distant mango
#
    relocate("net.kyori", "net.kyori")
strange stirrup
#

mmm I have noticed this

#

I’m not sure of a good solution other than making the whole project Java 21 and then the 17 modules specifically 17 with toolchain and options.release

main wadi
strange stirrup
#

well no you’d just make every other module 17

#

but it is annoying

main wadi
main wadi
strange stirrup
#

there’s a thing

#

it’s like uhhh disable auto target jvm

#

might help

#

I’m sleepy

#

if u don’t figure it out by tmrw I’ll take another look

main wadi
#

Ok, I'll try it

#

I'll let you know if I figure it out

#

Thanks

distant mango
#

iirc it’s on the java extension

craggy ferry
#

I'm trying to make a gradle script for my NMS implementations using userdev

apply plugin: 'java'
apply plugin: 'io.papermc.paperweight.userdev'

ext {
    minecraftVersion = project.hasProperty('minecraftVersion') ? project.minecraftVersion : '1.17.1-R0.1-SNAPSHOT'
}

repositories {
    mavenLocal()
    mavenCentral()
    gradlePluginPortal()
    maven {
        url = "https://repo.papermc.io/repository/maven-public/"
    }
}

dependencies {
    paperweight.paperDevBundle(minecraftVersion)
}

tasks.withType(JavaCompile).configureEach {
    sourceCompatibility = '1.8'
    targetCompatibility = '1.8'
    options.encoding = 'UTF-8'
}

but it ends up failing to build
https://paste.itsme.to/ipirawutix.yaml

here is my script implementation:

plugins {
    id 'io.papermc.paperweight.userdev' version '1.7.1'
}

ext {
    minecraftVersion = '1.17.1-R0.1-SNAPSHOT'
}

apply from: rootProject.file("version/script/remapped.gradle")
paperweight.reobfArtifactConfiguration = io.papermc.paperweight.userdev.ReobfArtifactConfiguration.Companion.REOBF_PRODUCTION```
craggy ferry
#

tried converting to kts

#

didnt help

#

if anything its worse

main wadi
# distant mango iirc it’s on the java extension

Hmm I wasn't able to figure it out... I tried adding this in the root build.gradle.kts

// Tried "subprojects" too
allprojects {
    apply(plugin = "java")

    java {
        disableAutoTargetJvm()
        toolchain {
            languageVersion.set(JavaLanguageVersion.of(17))
        }
    }
}

I tried setting that java block in the plugin build.gradle.kts block too, I've tried all combinations of setting disableAutoTargetJvm() in only specific modules or everywhere and I keep getting the Unsupported class file major version 65 error no matter what I do

unkempt geode
#

you have your java version set to 17 there

#

so it cant support java 21 classes

main wadi
#

Isn't there a workaround?

#

Because maven toolchain worked perfectly

final jewel
#

if you want a specific module to generate some specific bytecode, you can just set the release flag in its compileJava task

main wadi
final jewel
#

you need to do the inverse, set the toolchain to 21 and the release flag to 17 in all your java 17 modules, as javac wouldn't be able to release/generate bytecode for a version that it doesn't yet know about

#

you could make that work by setting the toolchain to 21 there as well though, if you only want a single module with java 21 and the rest with 17

main wadi
#

So basically I set the project's java version to 21 but compile everything but 1.20.5-1.21 NMS with 17?

final jewel
#

sure, whichever way works best for you

#

in reality one shouldn't have to care about this kind of bs since the JVM is supposed to be backwards compatible but welp, the ecosystem is kinda fucked in that regard lol

main wadi
#

For some reason shadowJar keeps throwing errors... Execution failed for task ':plugin:shadowJar'. > Unsupported class file major version 65
parent build.gradle.kts:

allprojects {
    apply(plugin = "java")

    java {
        toolchain {
            languageVersion = JavaLanguageVersion.of(21)
            targetCompatibility = JavaVersion.VERSION_17
        }
    }

    tasks {
        compileJava {
            options.release = 17
        }
    }
}

plugin:

plugins {
    id("com.github.johnrengelman.shadow") version("8.1.1")
}

// Repos and dependencies.

tasks {
    shadowJar {
        minimize()
        relocate("net.kyori", "net.kyori")
        archiveFileName.set("${project.parent?.name}-${project.version}.jar")
        destinationDirectory.set(file("../build/libs"))
    }
}

v1_21_R1

plugins {
    id("io.papermc.paperweight.userdev") version "1.7.1"
}

dependencies {
    implementation(project(":nms:nms_common"))
    paperweight.paperDevBundle("1.21-R0.1-SNAPSHOT")
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
        targetCompatibility = JavaVersion.VERSION_21
    }
}

tasks {
    compileJava {
        options.release = 21
    }
}
grand niche
#

you need to use goooler's shadow fork for java 21

distant mango
#

and then switch back to another fork later when they finally publish that

grand niche
#

it is published but to sonatype snapshots lol

main wadi
#

It finally compiled

#

Thank you

#

New issue because I'm stupid

#

How do I make minimize only minimize adventure? My NMS classes are not being shaded because they are not used at compile time. If I remove the minimize method it works but everything is fully shaded and the final JAR is much heavier

#

I've tried:

minimize {
    include("me/abcdef/myplugin/**")
}

But that only shades the contents inside the "plugin" module

distant mango
#

adventure isn't that big?

#

make sure that you're not shading shit like paper or something in

main wadi
#

Yeah but not minimizing makes the Jar go from 3MB tops to like 6MB

#

Which isn't that much but I'd like to prevent it if possible

final jewel
#

are you also supporting spigot? Because if not, then there's no reason to shade adventure

#

also, you do not need to set targetCompatibility if you set the release flag

main wadi
#

Even though I don't think many servers use it nowadays

final jewel
#

you do not want to minimize adventure then

main wadi
#

Doesn't minimizing just not include the classes you don't use?

glass sable
#

it can't detect it properly in all cases

final jewel
#

yes, however I don't believe the minification algorithm is that smart to follow the transitive dependencies of your classpath

glass sable
#

I mean if your plugin works completely without issues after minimizing then it's fine

final jewel
#

are you IRC phoenix or just a nicknamed person

glass sable
#

click the profile

main wadi
#

Mi issue is that minimizing also removes my NMS modules

#

Since I access them using Reflection at runtime

glass sable
#

minimize the module that you shade adventure in, not the full plugin

main wadi
#

It's used in multiple modules including the plugin module

glass sable
#

"plugin" in this case being the module that builds your full jar, not the module that contains your code

#

sorry that wasn't clear

#

there might be ways to exclude specific classes from the minimization via some setting I guess

#

but I personally think modules are easier to handle

final jewel
#

just exclude them from the minimize task

glass sable
#

ah, that's pretty straight forward, I don't really know gradle all that much xD

final jewel
#

don't worry, nobody really does lol

glass sable
#

lol

main wadi
#

And lastly

#

How can I publish my javadoc jar using maven publish?

#
tasks {
    register<Jar>("javadocJar") {
        dependsOn(javadoc)

        archiveClassifier.set("javadoc")
        description = "Creates a Javadoc Jar"
        from(javadoc.get().destinationDir)
    }

    jar {
        dependsOn("javadocJar")
        finalizedBy(publishToMavenLocal)
    }
}

publishing {
    publications {
        val mavenJava by creating(MavenPublication::class) {
            groupId = "me.abcdef"
            artifactId = "myplugin-api"
            version = "1.2"

            from(components["java"])
            artifact(tasks.named("javadocJar"))
        }
    }
}
#

But for some reason the javadoc jar isn't published

distant mango
#

fyi you can just do
java {
withSourcesJar()
withJavadocJar()
} iirc instead of manually creating the tasks

#

and that finalizedBy shoulnd't be needed

main wadi
frozen knot
#

Hello,
Have you got paperspigot 1.20.1 Build 197 ? Or 196 is last version ?

distant mango
#

it’s no longer called “paperspigot”and we do not support 1.20.1

grand niche
#

nor is this the right channel for that

main wadi
#

This is probably more an IDE stuff but is it possible to disable this folders from generating? (resources & test module). I tried removing them but every time I add a submodule they are regenerated

#

I'm using Intellij

bronze ember
#

IJ just wants you to write tests ^^

#

What build tool do you use? Prolly need to disable the source set or something

final jewel
#

who writes test for a bukkit plugin lol

final jewel
#

you need to configure the template generator for it to stop doing that, since creating a module includes it

main wadi
#

And there's no setting to do that

final jewel
#

nvm that, apparently it depends on the source sets defined as Mini said

main wadi
#

Eh where do I disable that then

final jewel
#

it's kinda annoying, I would honestly just ignore them

#

otherwise, just click create directory instead and then it'll ask which source set to gen

main wadi
#

Hmm not as easy as creating new module but will do

#

Thank you very much for your help

main wadi
#

#paper-dev message
How can I make sure it uses the right JAR? (non -dev)
My v1_19_R3 module:

plugins {
    id("io.papermc.paperweight.userdev") version "1.7.1"
}

dependencies {
    paperweight.paperDevBundle("1.19.4-R0.1-SNAPSHOT")
}

tasks {
    assemble {
        dependsOn(reobfJar)
    }
}

My plugin module:

dependencies {
    implementation(project(":nms:v1_19_R3"))
    // + Other dependencies and NMS modules
}

tasks {
    shadowJar {
        minimize {
            exclude(project(":nms:v1_19_R3"))
            // + Other NMS modules
        }
        relocate("net.kyori", "net.kyori")
        archiveFileName.set("${project.parent?.name}-${project.version}.jar")
    }

    assemble {
        dependsOn(shadowJar)
    }
}

It generates both a v1_19_R3.jar and a v1_19_R3-dev.jar. How can I guarantee it uses the non-dev one?

static urchin
#

you'd want to depend on the reobfuscated configuration of the respective nms modules.

#

that impl(project()) will just use the non reobfed source code

main wadi
static urchin
#

project("...", "reobf")

main wadi
#

Thank you very much!

#

I have to do the same for 1.20.5-1.21 if I want to maintain Spigot support, right?

static urchin
#

yea, but side node, paper's internals can look different in places to spigots

#

there is little to no guarantee your paper internal code will work on spigot

main wadi
static urchin
#

archiveFileName.set("${project.parent?.name}-${project.version}.jar") is also kind of a no no, renaming the output is generally not a smart idea

#

you can look into a gradle copy task to copy the output file to a more appropriate name

static urchin
#

gradle isn't smart enough in some cases to track that rename

main wadi
#

Thank you very much

main wadi
static urchin
#

paperweight configures it as a gradle configuration

#

how those work exactly would be quite the deep dive 😅

main wadi
#

I'm more interested in knowing how you knew I had to use "reobf". Where does it say it?

#

So that next time I'm not this annoying 😅

static urchin
#

oh, well I knew you had to use it because I know paperweight xD

#

I dont think we have that specifically documented anywhere

main wadi
#

Ah xd

#

Well, now everything is working as it should

#

Thank you very much ❤️

static urchin
#

maybe worth to expand our docs page for a multi-module setup

#

¯_(ツ)_/¯

#

but also we aren't that big on supporting legacy versions here so, maybe overkill KEKW

lament scarab
#

it's something we commonly have to guide people with

#

would save us some work

static urchin
#

I expect a docs PR from you in the next hour cat

lament scarab
#

i'm dizzy, i'm fighting the urge to go bed

main wadi
#

Well it'd affect up to 1.20.4 which right now isn't that old, maybe adding a small section in the paperweight-userdev page is enough

#

But that's up to you

strange stirrup
#

jmp left a issue open saying how to do it

static urchin
#

Yea, maybe one of our trusted docs team members is feeling creative

strange stirrup
#

not the most direct place for it but

static urchin
#

Yea but these days it would have to be even more annoying with java version missmatch etc

strange stirrup
#

just supporting latest is the move i think

#

😸🫶

static bramble
#

I have import this

  <dependency>
        <groupId>net.kyori</groupId>
        <artifactId>adventure-api</artifactId>
        <version>4.17.0</version>
    </dependency>
    <dependency>
        <groupId>net.kyori</groupId>
        <artifactId>adventure-text-minimessage</artifactId>
        <version>4.17.0</version>
    </dependency>
    <dependency>
        <groupId>net.kyori</groupId>
        <artifactId>adventure-platform-bungeecord</artifactId>
        <version>4.3.3</version>
    </dependency>

but I get an error

#

in the Bungeecord

distant mango
#

share the error

novel coyote
#

can anyone help me why i'm getting this error

final jewel
proud maple
#

upgrade the version of the maven shade plugin

frail pine
#

hi, ive been struggling all night to buid a plugin but no luck so far

#

i am currently getting this error

#

* What went wrong:
Execution failed for task ':api:compileJava'.
> java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'```
#

i guess more information is needed, what else do i need to provide?

grand niche
#

do you use lombok?

frail pine
#

no

frail pine
grand niche
#

lombok is a library/annotation processor

#

this usually happens when it's too old of a version for the jdk you're using

frail pine
#

sorry im new to all of this. i just found a nice plugin but it is not built and i have to do it on my own. I have gradle 8.9 and jdk22 and use the terminal to do it, havent downloaded anything else

grand niche
#

you will have to bump lombok's version or try with an older jdk

frail pine
#

i managed to build it!!!

#

is protocollib available for 1.21?

frail pine
#

Ok shorted this as well

#

Still doesn't work but it seems it is related to the plugin itself

balmy pier
#

Hi, I have a question. I have a library project, and then a plugin that shades that library into its jar file. However, I have an issue. My library plugin also uses stuff from another library, which means that instead of only shading my library project into my plugin, I have to shade in my library project and this other dependency. Is there a way to make it so that in my library project, it automatically will shade this other dependency into the jar file if the plugin depends on this library? I am using gradle.

lament scarab
#

generally boils down to how you declare it

#

"api" will generally expose it to consumers, iirc

balmy pier
#

If I shade it in manually though, that stuff goes away

balmy pier
#

Hi, I am here once again. According to this documentation:
https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation
using the api configuration on a dependency of a library with the java-library plugin should put that dependency into the classpath of a consumer of the library. However, that simply just does not work for me. In my consumer project, I use the implementation configuration to include my library, whilst my library has the api configuration to include its dependencies. However, the dependencies are simply not inside of the consumer's shaded jar file that shades in the library. Does anyone know why this is? Do I have to take any additional steps to get this working?

Library Project:

dependencies {
    api("my-library-dependency")
}

Consumer Project:

dependencies {
    implementation("my-library")
}

tasks.withType<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar> {
    dependencies {
        include(dependency("my-library"))
    }
}
final jewel
#

but well, time to debug I guess

#

check the runtimeClasspath to see if the transitive dependency is listed there with .\gradlew dependencies --configuration runtimeClasspath or in your IDE's dependency tree

#

if it isn't there, then we can assume the library isn't being properly exposed

fading vapor
#

how to clear paperweight-userdev caches?

balmy pier
final jewel
#

there's a task for it

fading vapor
final jewel
#

all I can assume right now is that shadow is not taking all dependencies of the runtimeClasspath, but unless you provided a certain include/exclude pattern, that's quite unlikely

#

it makes even less sense considering you tried to explicitly include it, meaning it'd have been included no matter the classpath it was in

fading vapor
#

how does that even make sense

raven barn
#

it doesnt lol

#

literally in a project with the same config rn

#

make sure your build file is valid

balmy pier
fading vapor
#

I had a few deprecation warning for version 9

final jewel
#

then your transitive dep is definitely in a different classpath

raven barn
#

does it show errors?

raven barn
fading vapor
balmy pier
raven barn
#

send your build file

fading vapor
#
plugins {
    `java-library`
    id("com.github.johnrengelman.shadow") version "8.1.1"
    id("io.papermc.paperweight.userdev") version "1.7.1"
}

repositories {
    maven("https://repo.papermc.io/repository/maven-public/")
    maven("https://repo.dmulloy2.net/repository/public/")
    maven("https://repo.viaversion.com")
    maven("https://repo1.maven.org/maven2/")
    maven("https://repo.maven.apache.org/maven2/")
}

dependencies {
    api("net.tectonic:tectonic-core:1.0.0")
    api("com.zaxxer:HikariCP:5.1.0")
    implementation("mysql:mysql-connector-java:8.0.28")
    compileOnly("com.comphenix.protocol:ProtocolLib:5.1.0")
    compileOnly("com.viaversion:viaversion-api:4.9.2")
    paperweight.paperDevBundle("1.21-R0.1-SNAPSHOT")
}

tasks {
    compileJava {
        options.encoding = Charsets.UTF_8.name()
    }
}


group = "net.tectonic"
version = "2.1.4"
description = "Excavators"
java.sourceCompatibility = JavaVersion.VERSION_21
raven barn
#

there is the problem

fading vapor
#

where

raven barn
#

id("com.github.johnrengelman.shadow") version "8.1.1"

fading vapor
#

oh?

final jewel
#

you need to use gradleup's shadow now

fading vapor
#

the heck

#

does papwerwight install it itself?

raven barn
#

either drop it if you dont need it or use gradleup shadow

raven barn
fading vapor
#

I mean I only reobfJar now

lament scarab
#

then you don't need the shadow plugin

fading vapor
#

alright thanks

lament scarab
#

unless you're shadowing artifacts, you don't need it

balmy pier
final jewel
coarse summit
final jewel
#

nowhere in the shadow documentation does it say that it excludes transitive dependencies of a direct dependency in the runtime classpath

fading vapor
lament scarab
#

then you need the shadow plugin

fading vapor
#

but I dont use the archive that the shadow task produces since it goes directly to reobfjar

lament scarab
#

paperweight won't bundle that for you

fading vapor
#

alright

lament scarab
#

it just automatically hooks the task if it detects it

fading vapor
#

Gradleup's docs still use the old dependancy?

balmy pier
lament scarab
#

search on the gradle plugins hub

raven barn
#

well that is already outdated

#

the gradleup is still on osstype i think

final jewel
#

Goooler's shadow was a temporary fork, the same maintainer is now officially working on the GradleUp organization which hosts various plugins but the GradleUp shadow is still not available in the plugin portal yet

balmy pier
#

Okay, so I stick with this for now?

final jewel
#

sure, just remember to upgrade later when the gradleup version does land in the plugin portal

balmy pier
#

Sure, but if that's not the issue, I'm not sure what is

final jewel
#

well, it wouldn't hurt to upgrade and see if it just magically works

balmy pier
#

Alright, one second

fading vapor
#

Am I and MC 1.20.1 just not meant to be?

#
plugins {
    `java-library`
    id("io.github.goooler.shadow") version "8.1.8"
    id("io.papermc.paperweight.userdev") version "1.7.1"
}

repositories {
    maven("https://repo.papermc.io/repository/maven-public/")
    maven("https://repo.dmulloy2.net/repository/public/")
    maven("https://repo.viaversion.com")
    maven("https://repo1.maven.org/maven2/")
    maven("https://repo.maven.apache.org/maven2/")
}

dependencies {
    api("net.tectonic:tectonic-core:1.0.0")
    api("com.zaxxer:HikariCP:5.1.0")
    implementation("mysql:mysql-connector-java:8.0.28")
    compileOnly("com.comphenix.protocol:ProtocolLib:5.1.0")
    compileOnly("com.viaversion:viaversion-api:4.9.2")
    paperweight.paperDevBundle("1.21-R0.1-SNAPSHOT")
}

tasks {
    compileJava {
        options.encoding = Charsets.UTF_8.name()
    }
}


group = "net.tectonic"
version = "2.1.4"
description = "Excavators"
java.sourceCompatibility = JavaVersion.VERSION_21
raven barn
#

dont use 1.20.1

fading vapor
#

1.21 *

final jewel
# balmy pier Alright, one second
buildscript {
    repositories {
        mavenCentral()
        maven {
            url 'https://oss.sonatype.org/content/repositories/snapshots/'
        }
    }
    dependencies {
        classpath 'com.gradleup.shadow:shadow-gradle-plugin:8.3.0-SNAPSHOT'
    }
}

apply plugin: 'com.gradleup.shadow'

this is how you have to use it right now

lament scarab
#

well, for userdev you wanna align the jdk version for that version

#

so, for 1.21, use java 21

fading vapor
#

that I do

raven barn
fading vapor
#

still throwing errors tho

lament scarab
#

run a build manualy from the cli and see what it says

raven barn
#

source compat is outdated

final jewel
#

why are you setting source compatibility anyway

fading vapor
#

not sure

smoky violet
fading vapor
#

Gradle is a mess to me tbh, most docs are alien language to me

smoky violet
#

just add the repo to the plugin resolution repos

fading vapor
#

I know my way around Javadocs and such, but kotlin docs are just a mess

final jewel
raven barn
fading vapor
#

Gradle's guide is also just unorganized

fading vapor
raven barn
#

good

fading vapor
#

the XML spanned above 100 lines

final jewel
#

for most projects anyway

fading vapor
#

no paperweight tho

#

thats what made me switch

smoky violet
#

the simplified mechanism was added for a reason

raven barn
balmy pier
fading vapor
#

used maven, nothing made sense,
switched to gradle, nothing makes sense still

raven barn
balmy pier
raven barn
#

i am dumb

#

wait

fading vapor
#
buildscript {
  repositories {
    maven {
      url = uri("https://plugins.gradle.org/m2/](https://oss.sonatype.org/content/repositories/snapshots/")
    }
  }
  dependencies {
    classpath("com.gradleup.shadow:shadow-gradle-plugin:8.3.0-SNAPSHOT")
  }
}

apply(plugin = "com.gradleup.shadow")
#

thats how gooler's shadow does it

#

I'm guessing just switch it around

raven barn
#

no they are using groovy he needs kotlin tho

fading vapor
#

edited to match gradleup

fading vapor
smoky violet
#

configure sonatype and gradlePluginPortal as your plugin resolution repos. then just apply the plugin normally

#

I don't know why shadow's docs are still pushing legacy application that hasn't been standard since like gradle 4

#

that mechanism is still useful for arbitrary libraries, but not for plugins with a properly published marker

balmy pier
fading vapor
#

on top of that, paperweight-userdev is throwing erros that it can't apply patches

smoky violet
#

clone the paperweight-test-plugin and build it from the command line

#

it's likely going to work

#

then see what you have different

final jewel
smoky violet
#

I wish they would make maven('...') valid in groovy

final jewel
#

is it allowed in the kotlin dsl?

smoky violet
#

yes

fading vapor
#

test plugin throws same error

final jewel
#

nice

smoky violet
#

thats from your ide

fading vapor
#

no

#

would a log file be more helpful?

smoky violet
#

is that a fresh clone?

fading vapor
smoky violet
#

because it builds for me and in CI

fading vapor
smoky violet
#

clear the caches and try again

#

your other build may have populated the cache with garbage

fading vapor
#

paperweight?

smoky violet
#

yes

fading vapor
#

umm

#

there are no tasks lol

#

gotta look up how to do it via cmd

#

brb

balmy pier
smoky violet
#

cleanAllPaperweightUserdevCaches

fading vapor
fading vapor
#

god dang it

smoky violet
#

that dep won't be resolved when you request cleanAllPaperweightUserdevCaches

#

is this running from the ide?

fading vapor
#

ye

#

I noticed it didn't set the SDK but even after setting, it doesn't work

smoky violet
#

stop using the ide gradle integration when you are debugging build issues

#

just a general piece of advice form someone with lots of experience

fading vapor
#

I am using the terminal

smoky violet
#

just invoke ./gradlew

fading vapor
#

same problem occurs

smoky violet
#

try deleting ~/.gradle/caches/paperweight-userdev manually

#

it looks like something broke with the logic to not resolve the bundle when cleaning

fading vapor
#

my global gradle folder?

smoky violet
#

yes by ~/.gradle I mean GRADLE_USER_HOME

fading vapor
#

I forgor where that is on windows tbh

#

found it

smoky violet
#

could you also send me a paste of the output of ./gradlew cleanAllPaperweightUserdevCaches --stacktrace?

#

locally I reproduced it but it was due to run-paper trying to get the server jar

fading vapor
#

does git bash work?

#

I don't want to do it via IDE

#

but the command prompt sucks

#

maybe powershell?

smoky violet
#

are you on windows?

fading vapor
#

yes

smoky violet
#

yeah git bash should work

#

should use the Windows Terminal app though

fading vapor
#

its windows 10

final jewel
#

windows terminal was released in windows 10

smoky violet
#

earlier I meant running through the IDE gradle integration is bad though, the ide terminal is ok

#

it has problems but not the same ones

fading vapor
#

git bash doesn't like me

#

I have so many terminals but none work

#

sometimes I hate windows

#

only reason I'm staying is because linux doesnt have good support for games

final jewel
#

if not then that's the issue, you gotta cd to it

fading vapor
#

I am inside my dir yes

#

dw I'm installing windows terminal

#

maybe it'll work from there

#

I dont want my IDE to poison my cache again

#

there we go

brave widgetBOT
smoky violet
fading vapor
#

omg no way

#

it did it

#

test plugin

smoky violet
fading vapor
#

lets run reobfjar

smoky violet
#

yeah I should probably remove that demo code

fading vapor
#

build successful nonetheless

smoky violet
#

it doesn't work anymore since the new brig api replaced it's purpose

fading vapor
#

the one bundled with paper?

smoky violet
#

yeah that demo code was a semi-supported way of using brig before we exposed it to api

fading vapor
#

thank you very much @smoky violet, you are the king 👑,
I'm keen to try out the brigadier

balmy pier
# balmy pier Hi, I am here once again. According to this documentation: https://docs.gradle.o...

I have fixed this issue. I simply had to remove the dependencies block inside of the shadowJar task in order to make it automatically bundle everything from the runtime classpath provided in the dependencies block into the JAR. This will not work if you would like to exclude certain things from the runtime classpath, but this is the solution that I found. Otherwise, if you would like to customize what is included in your JAR, you must declare it explicitly.

https://stackoverflow.com/questions/78840254/how-come-my-java-gradle-project-that-uses-a-library-is-not-including-the-library

magic vortex
brave widgetBOT
fading vapor
#

adventure and minimessage are bundled with paper

distant mango
#

you need java 21

magic vortex
#

Oh, there it goes, thanks!

coarse summit
grand niche
#

are you using the file with the -all suffix?

coarse summit
#

wdym

grand niche
#

shadow produces a different JAR file

coarse summit
#

oh, no I havent

#

how would I do that lmao

grand niche
#

just get the -all suffixed file from the build directory?

#

i.e. build/libs/<project name>-<version>-all.jar

coarse summit
#

I dont think theres a file called that

grand niche
#

you'll need to run the shadowJar task first

coarse summit
#

OHH

#

tysm*

gray sparrow
#

Hello, i'm using Velocity and in a previous version, i used a plugin which uses the class com.velocitypowered.proxy.protocol.packet.chat.ComponentHolder.
I was getting it with this line in my build.gradle :

compileOnly "com.velocitypowered:velocity-proxy:3.3.0-SNAPSHOT"

However, it seems that this dependency doesn't exist anymore :

#

Is there an other way to access this class ?

distant mango
#

its internals

#

you'd need to compile and publish the proxyy module yourself

last forum
#

Hey ,I’m working with the paperweight-test-plugin, but since the provided version is for Minecraft 1.20.5 and I’m using 1.20.4, I edited the build.gradle.kts to make it compatible with my server.

However, I'm encountering an issue with the following code:

ServerPlayer serverPlayer = craftPlayer.getHandle();
When I call getHandle(), I receive an error. You can view the code here: (https://pastebin.com/G3bDzQMM)

Code and Error Details:
(https://pastebin.com/G3bDzQMM)

thanks in advance!

dusky kiln
lament scarab
#

generally down to using the wrong version of java for that version of the dev bundle

#

make sure to use whatever version of java was the standard version back then

#

you may need to delete the cache folder manually

dusky kiln
#

what if project uses multiple paper versions?

dusky kiln
lament scarab
#

then set the java version per submodule

#

java toolchains go brr, basically

dusky kiln
#

alright, I'll try

#

thanks

crude kernel
#

Hey, I just pushed out an update for my fork but I don't actually understand how I can update my plugin to use my fork. I ran gradle cleanAllPaperweightUserdevCaches but I'm still getting the error that the constructor I just made public is private. How do I do this?

distant mango
#

send your build config

lament scarab
#

-U

#

pass that to gradle, it will refetch the dependencies

crude kernel
#

thanks

crude kernel
#

why is this happening? just trying to build my fork (happening while building the server) ```
Caused by: io.papermc.paperweight.PaperweightException: Failed to read upstream data.
at io.papermc.paperweight.util.data.UpstreamDataKt.readUpstreamData(UpstreamData.kt:61)
...
Caused by: io.papermc.paperweight.PaperweightException: Upstream data file does not exist.

steady latch
#
> Could not resolve io.papermc.paper:paper-api:1.20.5-R0.1-SNAPSHOT.
         > Could not parse POM https://repo.papermc.io/repository/maven-public/io/papermc/paper/paper-api/1.20.5-R0.1-SNAPSHOT/paper-api-1.20.5-R0.1-20240429.035133-20.pom
            > Could not find net.kyori:adventure-bom:4.17.0-SNAPSHOT.

using userdev... After checking 4.17.0-SNAPSHOT doesn't exist anymore

static urchin
#

.5 is a dead version

#

compile against .6

steady latch
#

ok

bronze ember
#

we dont keep old snapshots of 3rd party projects around forever

split wedge
#

is there a way to point gradle to use the resources folder when debugging?

final jewel
#

there is no code in the resources folder, so there's nothing to debug

split wedge
#

i have a bunch of property files

#

but when running debug, the application doesnt read them properly

#

I have to build the jar and move them into specific folders in order for it to run

final jewel
#

that doesn't sound right

#

how are you debugging your application?

split wedge
#

debug button in intellij

#

trying to run a jda bot inside paper

#

(not the jar itself, just a plugin)

final jewel
#

did you setup the debugger properly? You have to attach the debugger to the minecraft server for it to work properly, since your plugin doesn't own the process

split wedge
#

Since my plugin is not even started yet, I just figured I could debug a main method until its done

#

nvm, now I just get finished with non-zero exit value 1

#

if i build the jar and manually move the files, it works

median pulsar
#

Is it possible to make userdev pin on a specific version of paper for reproducible builds?

bronze ember
#

just specify a concret snapshot id

#

not just 1.21-R0.1-SNAPSHOT

median pulsar
#

thanks

shy trench
#

yo i have a spigot Linux server on ubuntu and i want to turn it into a paper server i couldnt find build tools for version 1.20.2 also

lament scarab
#

paper doesn't use buildtools

echo kilnBOT
#

To download old versions of Paper, go to the build explorer: https://papermc.io/downloads/all. Note that old versions are completely unsupported and contain numerous bugs/exploits.

shy trench
lament scarab
#

you download the jar from our website and run it

shy trench
#

alright tysm

#

is there a way to uninstall a whole server with like a command or somthing?

lament scarab
#

it's a folder

#

you just delete it?

shy trench
#

it was not in 1 forlder i got it to work anyway i jud didnt read cause im braindead tysm anyway

fading vapor
#
tasks {
    compileJava {
        options.encoding = Charsets.UTF_8.name()
    }
    processResources {
        filesMatching("plugin.yml") {
            expand(mapOf("version" to version))
        }
    }
}

shouldn't this set my project version to the same one as plugin.yml?

final jewel
fading vapor
#

I dont use brigadier

#

all commands are registered with plugin.yml

#

first glance of this tells me it doesn't suppor the old way

distant mango
#

plugin.yml pr paper-plugin

fading vapor
#

plugin.yml

distant mango
#

what are you trying to do

#

set the version or register commands

final jewel
fading vapor
#

taking the version from plugin.yml and setting the same version to the gradle project

distant mango
#

why not the other way around

fading vapor
#

Isn't that the point of processResources

#

and expand

distant mango
#

Generally the other way around, setting "version" in plugin.yml to whatever version you have set in your project

#

Not sure if it's even possible the otherway around with that task like that

fading vapor
#

it doesnt do that tho

#

I've opened up the jar and its a differnt version than the project

final jewel
#

expand will replace the word ${version} with the version variable defined in your build.gradle.kts

distant mango
#

version: ${version} should work

fading vapor
#

I give up

final jewel
#

again, just use resource-factory

fading vapor
#

2 hours of reading docs for nothing

fading vapor
distant mango
#

lol

final jewel
fading vapor
#

I'll do it the caveman way until someone decides to whip up an actual guide

final jewel
#

people try to cheat their way out of it

fading vapor
distant mango
fading vapor
#

Kotlin DSL is far from close to Java

final jewel
#

the tutorial covers pretty much all the bases

fading vapor
fading vapor
#

i know enough to distungiush between dependancy configurations

final jewel
#

I mean, it has a very clear diagram about the architecture, and a page for each file in it, it doesn't get more clear than that

fading vapor
#

what bothers me is the 10 different ways to achieve the same thing

final jewel
fading vapor
#

now you get it

#

this is what makes it so hard for me

#

I'm keen to learn but there really aren't many Minecraft gradle guides out there if there are any

final jewel
#

there aren't many since very few people go out of the standard build configuration, which is declaring dependencies and maybe shading some

#

paperweight is already a huge hurdle for most, but there's a guide specifically for that one so it isn't as painful

fading vapor
#

true that

final jewel
#

the issue with that is that the one time people try to make use of gradle's features, they just shit all over their build configuration and never try again

fading vapor
#

ye, cause there is no room for error

#

you have to do it in a very specific way

#

i've been trying for months to do anything custom

#

no success so far

final jewel
#

the general gist is to have a good understanding of the build lifecycle, once you know when things run where, you can take advantage of the task dependency mechanism to write your own tasks. For everything else, you can pretty much just use standard Java/Kotlin features within your tasks and you're fine, eventually you'll learn how to take advantage of the various Gradle APIs

fading vapor
#

hmm, okay thanks :D

#

btw, does resource factory not support Java 21?

distant mango
#

it should , why?

fading vapor
#

nvm, I was doing it wrong

#

so how do I get my commands in there now

distant mango
#

use your IDE it has suggestions

fading vapor
#

I'm looking trough the available properties and functions and none seem to have anything to do with commands

final jewel
#
bukkitPluginYaml {
    
    commands {
        "commandName" {
            description = "This is a description of the command."
            aliases.addAll("alias1", "alias2")
            permission = "myplugin.command.permission"
            permissionMessage = "You don't have permission to execute this command!"
            usage = "/commandName [args]"
        }

        "anotherCommand" {
            description = "Description for another command."
        }
    }
}
#

something like that I believe

fading vapor
#

what the heck

#

how big is build settings file going to be

#

I've got about 150 commands

final jewel
#

and you are still using the plugin.yml to register things? Lol

#

I'd have switched to a command framework when I got over 10

fading vapor
final jewel
#

just use chatgpt to generate it for you

#

then fix if it gets anything wrong

fading vapor
#

never used it

final jewel
#

I use LLMs a lot, but just because I know when it starts hallucinating

fading vapor
#

is teh AI even capable of doing sush tasks, I thought they suck at doing aynthing with libraries

final jewel
#

just feed the whole plugin/src/main/kotlin/xyz/jpenilla/resourcefactory/bukkit/BukkitPluginYaml.kt into it and your whole plugin.yml and tell it to convert lol

#

if given enough context, it's capable of doing it properly

#

hopefully it won't go over token limit for free users

bleak frigate
#

How can ı fix this?
Please tag me

final jewel
bleak frigate
#

I solved it

#

Thanks for help

golden cloud
#

What is the recommended way to pre-remap plugins for container setups? Is there any flag to cleanly pre-populate the .paper-remapped directory?

fading vapor
#

when using mojang mappings for paperweight, which artifact to use? -all or -reobf

lament scarab
#

all

sinful summit
#

I just switched from bukkitPluginYaml to paperPluginYaml, and i'm getting this error while building

final jewel
#

show the paperPluginYaml block

sinful summit
#

from what i can understand it says i don't have the main fifeld set

#

but i have

#

and here's the entire thing if yuou need it

final jewel
#

you are using the bukkit convention

#

you need the paper one

sinful summit
#

i never understood how kotlin build scripts work

final jewel
#

just change xyz.jpenilla.resource-factory-bukkit-convention to xyz.jpenilla.resource-factory-paper-convention in the plugins block

sinful summit
#

oh

final jewel
#

also, last version is 1.1.2

sinful summit
#

alr ty i'll test

#

same error

#

do i need to reload gradle or something

#

to install the new plugin

final jewel
#

I mean, building should do

#

remove the import to paperPluginYaml

sinful summit
#

oh

#

i think that's done it

#

why does that fix it

final jewel
#

because that's the import for the factory, which is to be used within the sourceSet

#

you want to use the convention and that doesn't need to be imported

sinful summit
#

okay

#

i don't understand that

#

but ty for helping

final jewel
sinful summit
#

yeah but now im importing nothing at all

final jewel
#

yeah because the convention implicitly imports it

sinful summit
#

oh

final jewel
#

you can explicitly import it if you want, it is xyz.jpenilla.resourcefactory.paper.PaperConvention

jade ferry
#

I'm trying to use some nms packages in a "utils" plugin, so I am using the paperweight plugin, and everything is working fine on my end but when I sent it to jitpack it doesn't generate the obfuscated jar, it only generates the dev, sources, and javadocs jars (and just to reiterate, it generates the reobfuscated jar when I run ./gradlew clean assemble publishToMavenLocal on my local machine). Anyone know what might be going on?

lucid carbon
#

how do i create a custom maven repo on a own server to have private access on it?

green bison
#

use something like reposilite if you want to host a mvn repo, but first ask yourself if you actually need it + the burden of maintaining a mvn repo

final jewel
#

I mean, a private repo is barely a burden

verbal skiff
#

it's available as an OCI image, super easy to host

final jewel
#

reposlite is pretty nice too, they got a docker image and their documentation is pretty complete

jade ferry
lucid carbon
quick oyster
lucid carbon
glass sable
#

with maven you can see which repo a dependency gets pulled from but gradle doesn't seem to log that (as far as I can tell), is there a way to turn that on?

floral whale
#

Hey! I have this copy task that depends on a final task defined by the subproject, by default it's shadowJar but it can also be reobfJar etc.

        assemble {
            dependsOn(named("copyToBin"))
        }

        register<Copy>("copyToBin") {
            from(project.getFinalTask()) // How could the final task be defined?
            into(rootProject.layout.buildDirectory.dir("libs"))
            rename {
                "${rootProject.name}-${project.name.replaceFirstChar {
                    if (it.isLowerCase()) it.titlecase(Locale.getDefault())
                    else it.toString()
                }}-${project.version}.jar"
            }
        }
verbal skiff
#

im not aware of any such terminology in gradle

floral whale
verbal skiff
#

i dont know what you mean

floral whale
#

So the copy task depends on that specific task

verbal skiff
#

it doesnt work like that, you have to pick one

#

or both

#

or make two tasks that each depend on a different sub project task

floral whale
#

This worked #paper-dev message

But it made a shadowJar and reobfJar in the subproject as you can use from() multiple times

floral whale
floral whale
verbal skiff
#

im not really sure what you want

#

you want a task in the root project that builds everything?

#

and copies all the binares somewhere?

floral whale
verbal skiff
#

well the way tasks work, is with dependencies

#

so if you run the task in the root project that depends on a task in a subproject, you add a dependency on the subproject's task in the root project's task

floral whale
verbal skiff
#

you run the task in the root project

#

and then it checks whether the sub proejct tasks need to be run

#

if yes, it does that

#

then you can use the output of that task in the first one

floral whale
#

Before I need to make sure reobfjar runs before it tries to copy

verbal skiff
#

you add dependsOn(...) in the root project's task

floral whale
verbal skiff
#

okay so dependsOn(":sub-project:reobfjar")

#

you add a dependency on the task of the subproject

floral whale
#

Ohhh you're saying make this a task in the root project and not in the root subprojects {} section? That's where it is rn

verbal skiff
#

uh

#

you were saying root project the whole time

#

subprojects {} is not the root project, its configuring every sub project

floral whale
#

Right now it's basically

subprojects {
        assemble {
            dependsOn(named("copyToBin"))
        }

        register<Copy>("copyToBin") {
            from(named("getFinalTask"))
            into(rootProject.layout.buildDirectory.dir("libs"))
            rename {
                "${rootProject.name}-${project.name.replaceFirstChar {
                    if (it.isLowerCase()) it.titlecase(Locale.getDefault())
                    else it.toString()
                }}-${project.version}.jar"
            }
        }
    }
floral whale
verbal skiff
#

get rid of your assemble {} block

#

not necessary

#

and then depend on reobf or shadow jar in your copy task

floral whale
#

Yeah I just had it for when I used dependsOn(reobfJar)

floral whale
verbal skiff
#

the stuff in your subprojects {} block has nothing to do with the root project

#

literally

#

its basically copy-pasted to the subproject scripts

floral whale
#

So dependsOn(subproject:reobfJar) does probably work but I want to avoid it and define it in the subproject itself if that makes sense

verbal skiff
#

you are also missing the tasks {} block

floral whale
verbal skiff
#
subprojects {
    tasks {
        register<Copy>("copyToBin") {
            from(project.task("reobfJar"))
            into(rootProject.layout.buildDirectory.dir("libs"))
floral whale
verbal skiff
#

what do you want to do in that case?

#

just no copy?

floral whale
#

Would this work?

            var task = named("reobfJar")
            if(!task.isPresent) task = named("shadowJar")
            from(task)
verbal skiff
#
subprojects {
    tasks {
        project.tasks.findByName("reobfJar")?.let { reobfJar ->
            register<Copy>("copyToBin") {
                from(reobfJar)
                into(rootProject.layout.buildDirectory.dir("libs"))
                rename {
                    "${rootProject.name}-${project.name.replaceFirstChar {
                        if (it.isLowerCase()) it.titlecase(Locale.getDefault())
                        else it.toString()
                    }}-${project.version}.jar"
                }
            }
        }
    }
}
#

you can try this

#

or yeah something like that

floral whale
#

That only runs if reobfJar exists tho

verbal skiff
#
subprojects {
    tasks {
        (project.tasks.findByName("reobfJar")
            ?: project.tasks.findByName("shadowJar"))
            ?.let { reobfJar ->
            register<Copy>("copyToBin") {
                from(reobfJar)
                into(rootProject.layout.buildDirectory.dir("libs"))
                rename {
                    "${rootProject.name}-${project.name.replaceFirstChar {
                        if (it.isLowerCase()) it.titlecase(Locale.getDefault())
                        else it.toString()
                    }}-${project.version}.jar"
                }
            }
        }
    }
}
#

uh

#

brackets sec

floral whale
floral whale
verbal skiff
#

try from(reobfJar.outputs)

floral whale
#

Same thing

#

subprojects section:

        build {
            dependsOn(shadowJar)
        }

        (project.tasks.findByName("reobfJar") ?: project.tasks.findByName("shadowJar"))
            ?.let { task ->
                register<Copy>("copyToBin") {
                    from(task)
                    into(rootProject.layout.buildDirectory.dir("libs"))
                    rename {
                        "${rootProject.name}-${project.name.replaceFirstChar {
                            if (it.isLowerCase()) it.titlecase(Locale.getDefault())
                            else it.toString()
                        }}-${project.version}.jar"
                    }
                }
            }

Sub project script:

    assemble {
        dependsOn(reobfJar)
    }
#

Doesn't copy anything

verbal skiff
#

the build or assemble blocks are irrelevant

#

can you try adding the dependsOn in the register copyToBin block?

#

i forgot how to write the copy task exactly

#

theres something missing

floral whale
#

Doesn't work

#

If that's how you meant

verbal skiff
#

and if you do from(task.outputs)?

#

with the depends the way it is

#

from(reobfJar.flatMap { it.outputFile })

#

or this

floral whale
#

Can't use flatMap

verbal skiff
floral whale
#

Yeah, in the sub project build libs

#

Only first print is sent

verbal skiff
#

wait

#

what task are you executing?

floral whale
#

So it never actually enters the task

#

build

verbal skiff
#

lmfao

floral whale
#

on root

verbal skiff
#

you need to run the task you are registering

#

./gradlew :sub-project:copyToBin

#

give that a go

floral whale
#

The dependsOn should run that tho no?

verbal skiff
#

no

floral whale
#

Since the jars are built in sub build libs

verbal skiff
#

dependsOn means that the task in the backets is run when you run copyToBin

#

not the other way around

floral whale
#

This ./gradlew ;bukkit;copyToBin (I used : not ; but it makes emojies lol) only built the shadowjar and not the reobfjar

#

But it did copy the shadowjar correctly

#

Yeah so this works, except it uses shadowJar and not reobfjar

verbal skiff
#

which means it cant find it

floral whale
#

It's there tho

verbal skiff
#

try the task :bukkit:reobfJar in the console

floral whale
#

That works

#

So kinda weird

verbal skiff
#

okay I think it's grabbing the project symbol from the root project

#

the subprojects block should provide a lambda argument right?

#

can you try using that

#

you can print out the project to see which one it's grabbing

floral whale
verbal skiff
#

use it instead of "project"

#

in the project.tasks part

#

in the subprojects block

floral whale
#

Like this? subprojects.let { sub ->

Still new to kotlin

verbal skiff
#

yes

#

uh

#

wait

#

no

#

subprojects { sub ->

#

sub should be of type Project

floral whale
#

Doesn't support lambda ig

verbal skiff
#

then try with .configureEach

floral whale
#

on subprojects?

verbal skiff
#

yeah

floral whale
#

Doesnt exist

verbal skiff
#

lol well i'm on my phone right now

#

is there any method that looks like it may work

floral whale
#

foreach?

cinder ember
#

how do you auto copy the build jar into your plugin folder

#

gradle kts

floral whale
#

Doesn't contain reobfjar for some reason

#

I'm baffled

crude kernel
#

@cinder ember

cinder ember
#
tasks.register("copyJars", Copy::class) {
  // Include the jar(s) we want to copy
  // from(tasks.shadowJar) // If using shadow (and not paperweight-userdev)
  // from(tasks.reobfJar) // If using paperweight-userdev
   from(tasks.jar) // Not using shadow or paperweight-userdev

  // If you want to rename a jar in the destination dir:
  from(tasks.jar) {
      rename { "TestPlugin.jar" } // Rename the jar in the destination directory
  }


  // Pick a destination directory -
  // into(layout.projectDirectory.dir("directory/relative/to/projectDirectory"))
   into(file("C:/Users/User/Desktop"))
}

doesnt work

granite valve
#

use symlinks instead of copying to directories

#

symlinks are better for this imo, because it doesn't polute your build script with computer-specific information

cinder ember
#

whats symlinks?

brave widgetBOT
granite valve
#

actually no clue if windows has an equivalent

cinder ember
#

i just want something easy and simple

lament scarab
#

windows has symlinks

cinder ember
#

this is just for myself

floral whale
#

Does anyone know what's the difference between project.tasks.names in a subprojects section and running ./gradlew :sub-project:tasks in console? The console command lists way more tasks

static urchin
#

mklink \D peeposhivering

floral whale
verbal skiff
#

as in: not during configuration

#

you can hack around this by putting the whole damn thing in a doLast {} block

#

the thing that starts with (project.tasks

floral whale
#

doLast?

#

This maybe?

#

AYEEE

#

It works!

#

Finally

#

Thank you so much for the help and patience lol @verbal skiff

verbal skiff
#

ah yes that's the one

#

and no problem

#

now I remember: doFirst and doLast are only within the task block

floral whale
verbal skiff
#

afterEvaluate is for in the project scope

floral whale
#

Yup

#

Great, now I can finally sleep lol

verbal skiff
#

gg

crude kernel
#

https://pastes.dev/QU3UuN2Q8d why am I getting this error? ```
Execution failed for task ':compileKotlin'.

Could not resolve all files for configuration ':compileClasspath'.
Could not download palm-api-1.21.1-R0.1-SNAPSHOT.jar (net.mire.palm:palm-api:1.21.1-R0.1-SNAPSHOT:20240814.114411-1)
Could not get resource 'https://maven.radsteve.net/palm/net/mire/palm/palm-api/1.21.1-R0.1-SNAPSHOT/palm-api-1.21.1-R0.1-20240814.114411-1.jar'.
Could not GET 'https://maven.radsteve.net/palm/net/mire/palm/palm-api/1.21.1-R0.1-SNAPSHOT/palm-api-1.21.1-R0.1-20240814.114411-1.jar'. Received status code 401 from server: Unauthorized

static urchin
#

I mean, are you sure the env variables are correctly passed to gradle by whatever you use to set them up

crude kernel
#

yup, tried printing them

static urchin
#

does reposilite use username and password auth?

crude kernel
#

yeah

static urchin
#

ah, yea their wiki calls it token and secret

#

✨ creative ✨

crude kernel
#

very

static urchin
#

does reposilite use header or basic auth?

crude kernel
#

basic

#

funny thing is that i can push in a diff project with the exact same setup

static urchin
crude kernel
#

gonna try a build -U

#

still nope, i don't get this

#

looks like gradle is fucking with me

#

because reposilite just says that there's no token provided

static urchin
#

maybe try defining basic auth

crude kernel
#

still same result

static urchin
#

no idea then, sorry. If you printed the creds out from a gradle task, and they are there, its rough

distant mango
#
Reposilite

Lightweight and easy-to-use repository manager for Maven based artifacts in JVM ecosystem. This is simple, extensible and scalable self-hosted solution to replace managers like Nexus, Archiva or Artifactory, with reduced resources consumption.

#

oh you already linked lol

crude kernel
#

literally what lynx just sent

distant mango
#

send your updated file

crude kernel
grand niche
#

do you even need to create the basic authentication?

#

I've never done that and it worked just fine

crude kernel
#

doesn't work with or without it kek

static urchin
#

Yea no I don't think it would be needed

#

but like, nothing else seems to work kekwhyper

crude kernel
#

thing is, i can do that in the browser with those creds and it works, the reposilite console says that the token is null

final jewel
#

what happens if you pass them as properties instead

crude kernel
final jewel
crude kernel
#

yes

#

the console just says that you need to provide creds and none were provided

final jewel
#

to the specific route?

crude kernel
#

yea

final jewel
#

regen the token and try again ig

#

what if you just try a http request with curl

crude kernel
#

have done three times

crude kernel
final jewel
#

so it has to be gradle

crude kernel
#

yeah

#

istg if it's a fucking gradle bug

final jewel
#

run with -d and check what the output says

#

or just send it here and remove any sensitive info

crude kernel
final jewel
#

2024-08-14T16:19:14.728+0200 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.modulecache.ResolvedArtifactCaches] Reusing in-memory cache for repo 'rad-palm' [842af58dc1cc817bf04bb3efdba4723d]. wonder if cache is fucking with you

crude kernel
#

omw to delete ~/.gradle/caches concern

shy trench
#

yo i got a paper 1.21 server i wnna downgrade it to 1.20.4 need help

crude kernel
#

wrong channel, and also, downgrading is not supported

shy trench
#

das sad

#

if i change the server file will it just break?

main mica
crude kernel
static urchin
crude kernel
#

such a fucking gradle moment

static urchin
#

don't celebrate too early COPIUM

crude kernel
#

ffs

main mica
crude kernel
final jewel
#

and just to be on the safe side, don't use the environment variables, do it wit the gradle.properties from the gradle user home

crude kernel
#

i'll try to revert that for now and try again from there

static urchin
#

Yea would be interesting to know if the old "working" commit still actually builds

crude kernel
#

if it doesn't imma go die

#

yeah it works, gonna try to update

static urchin
crude kernel
#

it fucking breaks now ??????

static urchin
crude kernel
#

i also tried removing and re-pushing the artifact from the repo so it's not cached, but it's still the same fucking thing -.-

main mica
#

Did something with the update process change between 1.21 and 1.21.1?
My usual process was deleting caches and -server/-api, changing the hash and version in gradle.properties and then running applyPatches. When issues with a patch appear, run the apatch script and then, git add ., git commit --amend and git am --continue.
However now suddenly apatch always seems to be on one commit to early. e.g. if applyPatches fails at 0003, apatch will try to fix 0002, which already was applied successfully.

I am a bit confused, especially because that worked fine in 1.21 and nothing seems to have changed, and I am just running the same commands in the same order from my console history, lol

#

log: https://pastes.dev/CuSGs8DV9i. Note how the "misc qol" patch fails, but after apatch we are suddenly at "branding changes", one patch too early

lament scarab
#

No

main mica
#

hmm

lament scarab
#

You’re just in a standard git am session

main mica
#

yeah, but why is that suddenly on the wrong commit lol

lament scarab
#

Because the commit failed to be created from the patch

#

And, append applies to the last commit

#

Git tells you what command to run once you fix it

main mica
#

yes, but how do I fix it? I tried what MM suggested here and rebuilding without filtering before updating: #paper-dev message
same issue though

#

Do I just have to apply the patch with IJ? lol

#

yeah that doesn't help, patch is applied but I am still getting a "No changes - did you forget to use 'git add'?" when trying to continue with am

static urchin
#

did you forget to git add run

main mica
#

no, I did

#

nothing to commit, working tree clean

#

and the only conflicts that patch even has are two literally two lines, I am confused

#

oh well

#

I am stupid. I committed too early while in am OMEGALUL
yeah it works now, ty

vale oasis
#
paperweight-core v1.7.1 (running on 'Windows 11')
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<==-----------> 16% EXECUT─░NG [53s]
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> Task :paper:patchCraftBukkit FAILED
> Task :getPaperUpstreamData FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':paper:patchCraftBukkit'.

While compiling how can ı fix?
its folia

distant mango
#

scroll up

vale oasis
#
> ./gradlew.bat applyPatches
<---<-<-<-<-<-<-<-<-<-<-
> Configure project :oot project
paperweight-patcher v1.7.1 (running on 'Windows 11')
<=<<<<<<<<<<<<<<<<<<
> Configure project :paper
paperweight-core v1.7.1 (running on 'Windows 11')
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<==-----------> 16% EXECUT─░NG [53s]
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> Task :paper:patchCraftBukkit FAILED
> Task :getPaperUpstreamData FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':paper:patchCraftBukkit'.
> io.papermc.paperweight.PaperweightException: Command finished with 128 exit code: git -c commit.gpgsign=false -c core.safecrlf=false apply --ignore-whitespace --directory=src/main/java C:\Users\tuna2\Desktop\PhantomiaServer\Folia\.gradle\caches\paperweight\upstreams\paper\.gradle\caches\paperweight\taskCache\patchCraftBukkitPatches.zip--1911188698\net\minecraft\world\level\storage\loot\predicates\LootItemConditionRandomChanceWithLooting.patch

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.7/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BU─░LD FAILED in 1m 26s
2 actionable tasks: 2 executed
distant mango
#

try a shorter path

vale oasis
#

how

distant mango
#

clone folia directly in C:

vale oasis
#

thanks

gritty parcel
#

is there any nice way to speed up paperweight downloading minecraft in github actions? It's adding about a minute to my build action and if there's any way to cache it or somehow skip that step, please let me know and mention me!

static urchin
#

github action does have caching for gradle, see the setup-java action

#

gradle/actions/setup-gradle also iirc does caching

gritty parcel
#

hmm i'm using setup-java but i'll see about setup-gradle

static urchin
#

setup-java you need to configure to cache

#

setup-gradle iirc does it with default config

gritty parcel
#

ah adding setup-gradle worked like a charm! thank you very much

golden cloud
#

What is the recommended way to prepare plugin remapping for container setups? Is there any flag to cleanly pre-populate the .paper-remapped directory?

quaint raven
#

Both plugins should relocate kotlin

raven barn
#

they are probably not in your jar

#

send your build file

raven barn
#

the build file not your jar

#

build.gradle.kts or build.gradle or whatever you are using

echo kilnBOT
#

Please send large files/logs to a pastebin

lament scarab
#

Well

#

on the surface, all one can guess is that your relocations are setup improperly

#

can't really say too much with the info provided

#

are you sure that you shaded koin?

#

if so, inspect the class that it's upset about the relocation on with javap

lament scarab
#

Not sure what you mean by that

lament scarab
#

No idea what you mean by everything is fine with the files

#

as I said, you'd need to use javap to look at the class that is blowing up

#

The thing thinks a method is missing

#

now, that would generally either down to shading the wrong version of koin or kotlin, or, the relocation wasn't handled properly

#

you can use javap to inspect the methods of the class that apparently doesn't have said method

covert prawn
#

So I've got an issue when testing runReobfBundler vs runDevServer. Currently its missing a class on the runReobfBundler but it isn't missing it in runDevServer. Any reason why this would be the case? I am using the test plugin to check using Class.forName as well. Additionally, it works on mojmap but not on reobf.

floral whale
#

Should gradle.properties generally be in gitignore? If so, where should project version be defined?

raven barn
#

no dont ignore it

#

just dont store sensitive information in it

#

thats what env vars are for

floral whale
#

Ah yeah makes sense, ty!

verbal skiff
#

any reason you are making that a getter?

#

and not just a normal val

left sapphire
static urchin
#

scuffed git version maybe?

#

or something broke during a PR merge yesterday

#

lemme check, nah, rebuilds without changes for me

left sapphire
#

using git 2.42.0

static urchin
#

What does the diff to the patches look like?

left sapphire
#

A bunch of random stuff like this

         public void sendMessage(@NotNull net.md_5.bungee.api.ChatMessageType position, @Nullable java.util.UUID sender, @NotNull net.md_5.bungee.api.chat.BaseComponent... components) {
             throw new UnsupportedOperationException("Not supported yet.");
+
+        }
         }
+
+        // Paper start
+        /**
@@ -3502,7 +3502,7 @@ index 5bcec42a91859002409cab9756999e5adc4c867f..3594b0eb4068c83c93efe948a8ef4ba2
+        @Deprecated
+        public int getPing() {
+            throw new UnsupportedOperationException( "Not supported yet." );
         }
+        }
+        // Paper end
     }

@@ -3708,7 +3708,8 @@ index 44badfedcc3fdc26bdc293b85d8c781d6f659faa..12946bd55fcf7c40d39081779a7fa300
     public CustomTimingsHandler(@NotNull String name) {
-        this(name, null);
-    }
-
+        Timing timing;

-    public CustomTimingsHandler(@NotNull String name, @Nullable CustomTimingsHandler parent) {
-        this.name = name;
-        this.parent = parent;
@@ -3731,7 +3732,16 @@ index 44badfedcc3fdc26bdc293b85d8c781d6f659faa..12946bd55fcf7c40d39081779a7fa300
-            long avg = time / count;
-
-            printStream.println("    " + timings.name + " Time: " + time + " Count: " + count + " Avg: " + avg + " Violations: " + timings.violations);
-        }
+        new AuthorNagException("Deprecated use of CustomTimingsHandler. Please Switch to Timings.of ASAP").printStackTrace();
+        try {
+            final Method ofSafe = TimingsManager.class.getDeclaredMethod("getHandler", String.class, String.class, Timing.class);
+            ofSafe.setAccessible(true);
+            timing = (Timing) ofSafe.invoke(null,"Minecraft", "(Deprecated API) " + name, null);
+        } catch (Exception e) {
+            e.printStackTrace();
+            Bukkit.getLogger().log(Level.SEVERE, "This handler could not be registered");
+            timing = Timings.NULL_HANDLER;
         }
#

Another in patches/api/0315-Extend-VehicleCollisionEvent-move-HandlerList-up.patch

index 316f625aa595d2ada16529b16d09f013fc4daeac..d0a437bd8aeec18f800893f51ece06deb0c8972c 100644
--- a/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java
+++ b/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java
@@ -9,13 +9,31 @@ import org.jetbrains.annotations.NotNull;
@@ -9,14 +9,32 @@ import org.jetbrains.annotations.NotNull;
  * Raised when a vehicle collides with a block.
  */
 public class VehicleBlockCollisionEvent extends VehicleCollisionEvent {
@@ -27,8 +27,8 @@ index 316f625aa595d2ada16529b16d09f013fc4daeac..d0a437bd8aeec18f800893f51ece06de
         super(vehicle);
         this.block = block;
+        this.velocity = velocity;
+    }
+
     }
 
+    /**
+     * Gets velocity at which the vehicle collided with the block
+     *
@@ -37,11 +37,12 @@ index 316f625aa595d2ada16529b16d09f013fc4daeac..d0a437bd8aeec18f800893f51ece06de
+    @NotNull
+    public org.bukkit.util.Vector getVelocity() {
+        return velocity;
     }
+    }
+    // Paper end
 
+
     /**
      * Gets the block the vehicle collided with
      *
@@ -26,15 +44,4 @@ public class VehicleBlockCollisionEvent extends VehicleCollisionEvent {
     public Block getBlock() {
         return block;
static urchin
#

HMM looks not what I hoped it would be xD

#

I guess try using git 2.46.0?

left sapphire
#

I would have to do a full system upgrade for that... will take a bit of time

static urchin
#

ah

#

I mean, try in a docker container or something

#

any fun git config changes on your end?

left sapphire
#
[user]
        email = okx@okx.sh
        name = okx-code
[core]
        autocrlf = input
        editor = nvim
        excludesFile = ~/.gitignore
[rebase]
        autosquash = true
        updateRefs = true
[merge]
        conflictstyle = zdiff3
[diff]
        algorithm = histogram
[push]
        autoSetupRemote = true
[rerere]
        enabled = true
#

oh

#

it might be the diff algorithm

static urchin
#

eh

#

should not be

left sapphire
#

hm

#

disabling my git config does fix it

static urchin
left sapphire
#

It is indeed diff.algorithm that breaks

static urchin
#

interesting

left sapphire
#

setting it to default gets 0 patches

static urchin
#

nice, I must have not set my local quick test in the right repo then skully

#

glad ya figured that out

left sapphire
#

Can I make a PR to add a warning for this in CONTRIBUTING.md in case someone else runs into a similar issue

static urchin
#

Yea sure, go ahead and throw a [ci skip] pr at our CONTRIBUTING

left sapphire
#

Alright

left sapphire
static urchin
#

or that 👍 yea

bronze ember
#

have you checked that these are the only two areas where this applies?

#

might be worth searching other usages of diff and format patches maybe

left sapphire
#

Yes I searched for other usages and couldn't find any, also tested this with the bad git config, and it was all fine

#

actually you're right I missed one

bronze ember
#

in unused code

#

😄

#

but cool

left sapphire
#

ah well

raw vessel
#

Hey, I'm trying to use Paperweight in my project which has 2 subprojects. I need to index paperweight for 1.20.4 on that 2 subprojects. I've included in my build logic the following code:

dependencies {
  implementation("io.papermc.paperweight:paperweight-userdev:1.7.2")
}

Then in my subprojects I added this configuration (their names are api & plugin):

plugins {
  id("project.common-conventions") // this is on my custom build logic
  id("io.papermc.paperweight.userdev")
}

dependencies {
  paperweight.devBundle("org.fenixteam", "1.20.4-R0.1-SNAPSHOT", "paper-dev-bundle")
}

tasks {
  assemble {
    dependsOn(reobfJar)
  }
}

And I got this error in the api subproject:


FAILURE: Build failed with an exception.

* Where:
Build file '/Users/pixeldev/Workspace/fenix-team/world-bossbar/api/build.gradle.kts' line: 1

* What went wrong:
Plugin [id: 'io.papermc.paperweight.userdev'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Included Builds (No included builds contain this plugin)
- Plugin Repositories (plugin dependency must include a version number for this source)

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

CONFIGURE FAILED in 728ms

NOTE: I'm using gradle wrapper 8.10 and Java 17

smoky violet
#

it's basically going to come down to figuring out why it's not on the classpath for that project; probably would want to work backwards from what's different than the source-remap branch of the test-plugin's setup

#

hard to say much without seeing the repo

raw vessel
#

This is my root settings.gradle.kts file

pluginManagement {
  includeBuild("build-logic")
}

rootProject.name = "world-bossbar"

sequenceOf("api", "plugin").forEach {
  include("${rootProject.name}-$it")
  project(":${rootProject.name}-$it").projectDir = file(it)
}

sequenceOf("gson").forEach {
  include("${rootProject.name}-infrastructure-$it")
  project(":${rootProject.name}-infrastructure-$it").projectDir = file("infrastructure/$it")
}

#

This is the build.gradle.kts file into build-logic

plugins {
  `kotlin-dsl`
}

dependencies {
  implementation(libs.build.indra)
  implementation(libs.build.spotless)
  implementation("io.papermc.paperweight:paperweight-userdev:1.7.2")
  compileOnly(files(libs::class.java.protectionDomain.codeSource.location))
}

java {
  sourceCompatibility = JavaVersion.VERSION_17
  targetCompatibility = JavaVersion.VERSION_17
}

repositories {
  maven(url = "https://repo.stellardrift.ca/repository/internal/") {
    name = "stellardriftReleases"
    mavenContent { releasesOnly() }
  }
  maven(url = "https://repo.stellardrift.ca/repository/snapshots/") {
    name = "stellardriftSnapshots"
    mavenContent { snapshotsOnly() }
  }
  mavenCentral()
  gradlePluginPortal()
}

kotlin {
  target {
    compilations.configureEach {
      kotlinOptions {
        jvmTarget = "17"
      }
    }
  }
}
#

This is the settings.gradle.kts file into build-logic

rootProject.name = "world-bossbar-build-logic"

dependencyResolutionManagement {
  versionCatalogs {
    register("libs") {
      from(files("../gradle/libs.versions.toml"))
    }
  }
}
#

My subprojects have this build.gradle.kts file

plugins {
  id("project.common-conventions") // this is on my custom build logic
  id("io.papermc.paperweight.userdev")
}

dependencies {
  paperweight.devBundle("org.fenixteam", "1.20.4-R0.1-SNAPSHOT", "paper-dev-bundle")
}

tasks {
  assemble {
    dependsOn(reobfJar)
  }
}
#

I don't know what else is needed for this, I thought I've sent it all

smoky violet
#

you should be able to get a scan once you remove the erroring userdev references

raw vessel
#

Which is the exact command for it?

smoky violet
#

you add --scan to a run

#

shouldn't need to specify a task to get the info you are looking for about the dependency relationships in your build

raw vessel
#
2:30:01 PM: Executing '--scan'...

> Task :build-logic:checkKotlinGradlePluginConfigurationErrors
> Task :build-logic:generateExternalPluginSpecBuilders UP-TO-DATE
> Task :build-logic:extractPrecompiledScriptPluginPlugins UP-TO-DATE
> Task :build-logic:compilePluginsBlocks UP-TO-DATE
> Task :build-logic:generatePrecompiledScriptPluginAccessors UP-TO-DATE
> Task :build-logic:generateScriptPluginAdapters UP-TO-DATE
> Task :build-logic:compileKotlin UP-TO-DATE
> Task :build-logic:compileJava NO-SOURCE
> Task :build-logic:pluginDescriptors UP-TO-DATE
> Task :build-logic:processResources UP-TO-DATE
> Task :build-logic:classes UP-TO-DATE
> Task :build-logic:jar UP-TO-DATE

> Task :help

Welcome to Gradle 8.10.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see more detail about a task, run gradle help --task <task>

To see a list of command-line options, run gradle --help

For more detail on using Gradle, see https://docs.gradle.org/8.10/userguide/command_line_interface.html

For troubleshooting, visit https://help.gradle.org

BUILD SUCCESSFUL in 439ms
11 actionable tasks: 2 executed, 9 up-to-date

Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Use defined at https://gradle.com/help/legal-terms-of-use. Do you accept these terms? [yes, no] 
#

Y ran gradlew --scan

#

Oh, I've read it

#

Do you want me to share the link?

smoky violet
#

@raw vessel try creating an empty tester-plugin.gradle.kts in your build logic and applying it to the root project

raw vessel
smoky violet
#

try adding back the paperweight use as well

#

I know it seems weird but I have a hunch it will solve your problem