diff --git a/.github/badges/branches.svg b/.github/badges/branches.svg index 3adf704..cff11b2 100644 --- a/.github/badges/branches.svg +++ b/.github/badges/branches.svg @@ -1 +1 @@ -branches50.9% \ No newline at end of file +branches54.3% \ No newline at end of file diff --git a/.github/badges/jacoco.svg b/.github/badges/jacoco.svg index 851c8aa..3d65b6f 100644 --- a/.github/badges/jacoco.svg +++ b/.github/badges/jacoco.svg @@ -1 +1 @@ -coverage79.3% \ No newline at end of file +coverage79.4% \ No newline at end of file diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 0726d29..5153538 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -11,12 +11,12 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - name: Set up JDK 18 - uses: actions/setup-java@v3 + - uses: actions/checkout@v5 + - name: Set up JDK 21 + uses: actions/setup-java@v5 with: distribution: temurin - java-version: 18 + java-version: 21 - name: Run Test Coverage run: ./gradlew jacocoTestReport - name: Generate JaCoCo Badge @@ -48,7 +48,7 @@ jobs: branch: dev - name: Upload JaCoCo coverage report - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: jacoco-report path: | diff --git a/.github/workflows/javadocs.yml b/.github/workflows/javadocs.yml index 44fec13..92bc646 100644 --- a/.github/workflows/javadocs.yml +++ b/.github/workflows/javadocs.yml @@ -10,16 +10,16 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - name: Set up JDK 18 - uses: actions/setup-java@v3 + - uses: actions/checkout@v5 + - name: Set up JDK 21 + uses: actions/setup-java@v5 with: distribution: adopt - java-version: 18 + java-version: 21 - name: Build Javadocs run: | echo "Building javadocs with gradle" - ./gradlew clean allJavadocs + ./gradlew clean javadoc echo "Moving to javadocs directory:" cd build/docs/javadoc echo "Creating .nojekyll to have Github pages deploy html as is:" diff --git a/.github/workflows/publish_to_nexus.yml b/.github/workflows/publish_to_nexus.yml index 6d72cd1..7f65d6d 100644 --- a/.github/workflows/publish_to_nexus.yml +++ b/.github/workflows/publish_to_nexus.yml @@ -5,9 +5,6 @@ on: push: branches: - main - - dev* - - feature/* - - fix/* jobs: publish-central: @@ -16,20 +13,20 @@ jobs: name: Publish to Maven Central steps: - - uses: actions/checkout@v3 - - name: Set up JDK 18 - uses: actions/setup-java@v3 + - uses: actions/checkout@v5 + - name: Set up JDK 21 + uses: actions/setup-java@v5 with: distribution: temurin - java-version: 18 + java-version: 21 - name: Build with Gradle run: ./gradlew --build-cache build - name: Test with Gradle run: ./gradlew test - name: Publish to Maven Central - run: ./gradlew publish -PforceSign=true + run: ./gradlew publishToMavenCentral --no-configuration-cache env: - ORG_GRADLE_PROJECT_sonatypeUsername: "${{ secrets.SONATYPE_USERNAME }}" - ORG_GRADLE_PROJECT_sonatypePassword: "${{ secrets.SONATYPE_PASSWORD }}" - ORG_GRADLE_PROJECT_rainbowdashlabsSigningKey: "${{ secrets.RAINBOWDASHLABS_SIGN_KEY }}" - ORG_GRADLE_PROJECT_rainbowdashlabsSigningPassword: "${{ secrets.RAINBOWDASHLABS_GPG_PASSWORD }}" + ORG_GRADLE_PROJECT_mavenCentralUsername: "${{ secrets.SONATYPE_USERNAME }}" + ORG_GRADLE_PROJECT_mavenCentralPassword: "${{ secrets.SONATYPE_PASSWORD }}" + ORG_GRADLE_PROJECT_signingInMemoryKey: "${{ secrets.RAINBOWDASHLABS_SIGN_KEY }}" + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: "${{ secrets.RAINBOWDASHLABS_GPG_PASSWORD }}" diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 18481aa..0295b97 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -7,12 +7,13 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - name: Set up JDK 18 - uses: actions/setup-java@v3 + - uses: actions/checkout@v5 + - name: Set up JDK 21 + uses: actions/setup-java@v5 with: distribution: temurin - java-version: 18 + java-version: 21 + architecture: x64 - name: Build with Gradle run: ./gradlew --build-cache build - name: Test with Gradle diff --git a/1.16-testing/build.gradle.kts b/1.16-testing/build.gradle.kts index eafe45d..ffe4af6 100644 --- a/1.16-testing/build.gradle.kts +++ b/1.16-testing/build.gradle.kts @@ -1,14 +1,10 @@ -repositories { - maven("https://eldonexus.de/repository/codemc-nms/") -} + dependencies { testImplementation(project(":core")) - implementation("com.destroystokyo.paper:paper-api:1.16.5-R0.1-20211218.081530-231") - testImplementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml") - testImplementation("com.fasterxml.jackson.dataformat:jackson-dataformat-toml") - testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.3") - testImplementation("org.assertj:assertj-core:3.24.2") + implementation("com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT") + testImplementation(libs.bundles.jackson) + testImplementation(testlibs.bundles.unittests) implementation(project(":testing")) - testImplementation("com.github.seeseemelk", "MockBukkit-v1.19", "2.29.0") + testImplementation("com.github.seeseemelk", "MockBukkit-v1.19", "3.1.0") } diff --git a/build.gradle.kts b/build.gradle.kts index 4efb9e5..eb35673 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,23 +1,21 @@ import com.diffplug.gradle.spotless.SpotlessPlugin +import com.vanniktech.maven.publish.JavaLibrary +import com.vanniktech.maven.publish.JavadocJar import de.chojo.PublishData -import net.kyori.indra.IndraExtension -import net.kyori.indra.IndraPlugin -import net.kyori.indra.IndraPublishingPlugin plugins { + id("io.freefair.aggregate-javadoc") version ("8.14.2") java `maven-publish` `java-library` alias(libs.plugins.spotless) alias(libs.plugins.publishdata) - alias(libs.plugins.indra.core) - alias(libs.plugins.indra.publishing) - alias(libs.plugins.indra.sonatype) jacoco + id("com.vanniktech.maven.publish") version "0.34.0" } publishData { useEldoNexusRepos(false) - publishingVersion = "1.2.0" + publishingVersion = "1.3.0" } version = publishData.getVersion() @@ -47,9 +45,9 @@ allprojects { } dependencies { - api("org.jetbrains", "annotations", "24.0.1") + api("org.jetbrains", "annotations", "26.0.2-1") - api(platform("com.fasterxml.jackson:jackson-bom:2.15.2")) + api(platform("com.fasterxml.jackson:jackson-bom:2.20.0")) api("com.fasterxml.jackson.core", "jackson-core") api("com.fasterxml.jackson.core:jackson-databind") @@ -59,10 +57,16 @@ allprojects { testImplementation("com.fasterxml.jackson.dataformat:jackson-dataformat-toml") // junit and stuff - testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.3") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.3") - testImplementation("org.mockito:mockito-core:5.3.1") - testImplementation("org.assertj:assertj-core:3.24.2") + testImplementation("org.junit.jupiter:junit-jupiter-api:6.0.0") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:6.0.0") + testImplementation("org.mockito:mockito-core:5.20.0") + testImplementation("org.assertj:assertj-core:3.27.6") + } + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(21)) + } } spotless { @@ -73,7 +77,7 @@ allprojects { } jacoco { - toolVersion = "0.8.10" + toolVersion = "0.8.13" } tasks { @@ -129,39 +133,6 @@ allprojects { } } -fun configureIndra(extension: IndraExtension) { - extension.javaVersions { - target(17) - testWith(17) - } - - extension.github("eldoriarpg", "jackson-bukkit") { - ci(true) - } - - extension.mitLicense() - - extension.signWithKeyFromPrefixedProperties("rainbowdashlabs") - - extension.configurePublications { - pom { - developers { - developer { - id.set("rainbowdashlabs") - name.set("Florian Fülling") - email.set("mail@chojo.dev") - url.set("https://github.com/rainbowdashlabs") - } - developer { - id.set("yannicklamprecht") - name.set("Yannick Lamprecht") - url.set("https://github.com/yannicklamprecht") - } - } - } - } - -} subprojects { apply { @@ -174,45 +145,125 @@ subprojects { if (project.name in publicProjects) { apply { plugin() - plugin() - plugin() plugin() } - indra { - configureIndra(this) + } + afterEvaluate { + apply { + plugin() } + + mavenPublishing { + publishToMavenCentral() + signAllPublications() + + coordinates( + groupId = "de.eldoria.jacksonbukkit", + artifactId = project.name, + version = publishData.getVersion() + ) + + pom { + name.set("jackson-bukkit") + description.set(project.description) + inceptionYear.set("2025") + url.set("https://github.com/eldoriarpg/jackson-bukkit") + licenses { + license { + name.set("LGPL-3.0") + url.set("https://opensource.org/license/lgpl-3-0") + } + } + + developers { + developer { + id.set("rainbowdashlabs") + name.set("Nora Fülling") + email.set("mail@chojo.dev") + url.set("https://github.com/rainbowdashlabs") + } + developer { + id.set("yannicklamprecht") + name.set("Yannick Lamprecht") + url.set("https://github.com/yannicklamprecht") + } + } + + scm { + url.set("https://github.com/eldoriarpg/jackson-bukkit") + connection.set("scm:git:git://github.com/eldoriarpg/jackson-bukkit.git") + developerConnection.set("scm:git:ssh://github.com/eldoriarpg/jackson-bukkit.git") + } + } + + configure( + JavaLibrary( + javadocJar = JavadocJar.Javadoc(), + sourcesJar = true + ) + ) + } + } } -indra { - configureIndra(this) -} +mavenPublishing { + publishToMavenCentral() + signAllPublications() + -indraSonatype { - useAlternateSonatypeOSSHost("s01") + coordinates(groupId = "de.eldoria.jacksonbukkit", artifactId = project.name, version = publishData.getVersion()) + + pom { + name.set("jackson-bukkit") + description.set(project.description) + inceptionYear.set("2025") + url.set("https://github.com/eldoriarpg/jackson-bukkit") + licenses { + license { + name.set("LGPL-3.0") + url.set("https://opensource.org/license/lgpl-3-0") + } + } + + developers { + developer { + id.set("rainbowdashlabs") + name.set("Nora Fülling") + email.set("mail@chojo.dev") + url.set("https://github.com/rainbowdashlabs") + } + developer { + id.set("yannicklamprecht") + name.set("Yannick Lamprecht") + url.set("https://github.com/yannicklamprecht") + } + } + + scm { + url.set("https://github.com/eldoriarpg/jackson-bukkit") + connection.set("scm:git:git://github.com/eldoriarpg/jackson-bukkit.git") + developerConnection.set("scm:git:ssh://github.com/eldoriarpg/jackson-bukkit.git") + } + } + + configure( + JavaLibrary( + javadocJar = JavadocJar.Javadoc(), + sourcesJar = true + ) + ) } fun applyJavaDocOptions(options: MinimalJavadocOptions) { val javaDocOptions = options as StandardJavadocDocletOptions javaDocOptions.links( - "https://javadoc.io/doc/com.google.code.findbugs/jsr305/latest/", - "https://javadoc.io/doc/org.jetbrains/annotations/latest/", - "https://docs.oracle.com/en/java/javase/${java.toolchain.languageVersion.get().asInt()}/docs/api/", - "https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-core/latest/", - "https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-annotations/latest", - "https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-databind/latest", - "https://jd.papermc.io/paper/1.19/" + "https://javadoc.io/doc/org.jetbrains/annotations/latest/", + "https://docs.oracle.com/en/java/javase/${java.toolchain.languageVersion.get().asInt()}/docs/api/" ) } -tasks { - register("allJavadocs") { - applyJavaDocOptions(options) - - destinationDir = file("${buildDir}/docs/javadoc") - val projects = project.rootProject.allprojects.filter { p -> publicProjects.contains(p.name) } - setSource(projects.map { p -> p.sourceSets.main.get().allJava }) - classpath = files(projects.map { p -> p.sourceSets.main.get().compileClasspath }) - } +tasks.javadoc.configure { + applyJavaDocOptions(options) } diff --git a/bukkit/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java b/bukkit/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java index 68973ac..3388f91 100644 --- a/bukkit/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java +++ b/bukkit/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java @@ -13,6 +13,8 @@ import de.eldoria.jacksonbukkit.deserializer.RGBColorDeserializer; import de.eldoria.jacksonbukkit.serializer.HexRGBColorSerializer; import de.eldoria.jacksonbukkit.serializer.LegacyItemStackSerializer; +import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer; +import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer.Format; import de.eldoria.jacksonbukkit.serializer.RGBColorSerializer; import org.bukkit.Color; import org.bukkit.FireworkEffect; @@ -59,8 +61,8 @@ public class JacksonBukkit extends JacksonBukkitModule { * @param hexColors true to serialize colors as hex by default */ @ApiStatus.Internal - public JacksonBukkit(boolean hexColors) { - super(hexColors); + public JacksonBukkit(boolean hexColors, Format namespacedKeyformat) { + super(hexColors, namespacedKeyformat); } @Override @@ -73,7 +75,7 @@ public String getModuleName() { */ @ApiStatus.Internal public JacksonBukkit() { - this(false); + this(false, Format.FULL); } @Override diff --git a/bukkit/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java b/bukkit/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java index 9b1a478..c8448e1 100644 --- a/bukkit/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java +++ b/bukkit/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java @@ -13,6 +13,6 @@ public class JacksonBukkitBuilder extends ModuleBuilder { @Override public JacksonBukkit build() { - return new JacksonBukkit(hexColors); + return new JacksonBukkit(hexColors, namespacedKeyFormat); } } diff --git a/core/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkitModule.java b/core/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkitModule.java index 031287e..ee8e931 100644 --- a/core/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkitModule.java +++ b/core/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkitModule.java @@ -71,14 +71,16 @@ public abstract class JacksonBukkitModule extends Module { * True when colors should be interpreted as hex strings. */ protected final boolean hexColors; + protected final NamespacedKeySerializer.Format namespacedKeyFormat; /** * Creates a new jackson bukkit module * * @param hexColors true to use hex colors */ - public JacksonBukkitModule(boolean hexColors) { + public JacksonBukkitModule(boolean hexColors, NamespacedKeySerializer.Format namespacedKeyFormat) { this.hexColors = hexColors; + this.namespacedKeyFormat = namespacedKeyFormat; } @Override @@ -109,7 +111,7 @@ public void setupModule(SetupContext context) { protected final void addSerializer(SimpleSerializers serializers) { serializers.addSerializer(Vector.class, new VectorSerializer()); serializers.addSerializer(BlockVector.class, new BlockVectorSerializer()); - serializers.addSerializer(NamespacedKey.class, new NamespacedKeySerializer()); + serializers.addSerializer(NamespacedKey.class, new NamespacedKeySerializer(namespacedKeyFormat)); serializers.addSerializer(PotionEffect.class, new PotionEffectSerializer()); serializers.addSerializer(PotionEffectType.class, new PotionEffectTypeSerializer()); serializers.addSerializer(FireworkEffect.class, new FireworkEffectSerializer()); diff --git a/core/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java b/core/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java index f55d083..346803a 100644 --- a/core/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java +++ b/core/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java @@ -6,6 +6,7 @@ package de.eldoria.jacksonbukkit.builder; import de.eldoria.jacksonbukkit.JacksonBukkitModule; +import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer; /** * Base class for module builder. @@ -18,6 +19,7 @@ public abstract class ModuleBuilder { * Whether hex colors should be serialized as hex or not. */ protected boolean hexColors = false; + protected NamespacedKeySerializer.Format namespacedKeyFormat = NamespacedKeySerializer.Format.OBJECT; /** * Serialize {@link org.bukkit.Color} as hex string. @@ -40,6 +42,16 @@ public T colorAsHex(boolean hexColors) { return (T) this; } + /** + * Define the format used for serializing namespaced keys. Every format can be deserialized, independent of this setting. + * + * @return builder instance + */ + public T withNamespacedKeyFormat(NamespacedKeySerializer.Format format) { + this.namespacedKeyFormat = format; + return (T) this; + } + /** * Build the module * diff --git a/core/src/main/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializer.java b/core/src/main/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializer.java index 0946170..dfbdb58 100644 --- a/core/src/main/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializer.java +++ b/core/src/main/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializer.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; import de.eldoria.jacksonbukkit.entities.NamespacedKeyWrapper; import org.bukkit.NamespacedKey; @@ -19,6 +20,18 @@ public class NamespacedKeyDeserializer extends JsonDeserializer { @Override public NamespacedKey deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - return ctxt.readValue(p, NamespacedKeyWrapper.class).toBukkitNamespacedKey(); + JsonNode jsonNode = ctxt.readTree(p); + if (jsonNode.isObject()) { + return ctxt.readTreeAsValue(jsonNode, NamespacedKeyWrapper.class).toBukkitNamespacedKey(); + } + if (jsonNode.isTextual()) { + String text = jsonNode.asText(); + if (text.contains(":")) { + return NamespacedKey.fromString(text); + } else { + return NamespacedKey.minecraft(text); + } + } + throw new IllegalArgumentException("Cannot deserialize " + jsonNode.getNodeType().name()); } } diff --git a/core/src/main/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializer.java b/core/src/main/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializer.java index ab87299..d3e1e3b 100644 --- a/core/src/main/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializer.java +++ b/core/src/main/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializer.java @@ -17,8 +17,40 @@ * Class for serialization of {@link NamespacedKey}. */ public class NamespacedKeySerializer extends JsonSerializer { + + private final Format format; + + public NamespacedKeySerializer(Format format) { + this.format = format; + } + @Override public void serialize(NamespacedKey value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeObject(NamespacedKeyWrapper.of(value)); + switch (format) { + case OBJECT -> gen.writeObject(NamespacedKeyWrapper.of(value)); + case FULL -> gen.writeString(value.toString()); + case SHORT -> { + if (value.getNamespace().equals("minecraft")) { + gen.writeString(value.getKey()); + } else { + gen.writeString(value.toString()); + } + } + } + } + + public enum Format { + /* + Deserialize using a wrapper object {"namespace": "minecraft", "key": "stone"}. + */ + OBJECT, + /* + Deserialize using the full key. E.g. (minecraft:stone) + */ + FULL, + /* + Deserialize using the key name. E.g., stone if the namespace is minecraft. Otherwise, the full key. + */ + SHORT } } diff --git a/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/FireworkEffectDeserializerTest.java b/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/FireworkEffectDeserializerTest.java index 3c0959a..eac0103 100644 --- a/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/FireworkEffectDeserializerTest.java +++ b/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/FireworkEffectDeserializerTest.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.databind.Module; import de.eldoria.jacksonbukkit.JacksonBukkit; import de.eldoria.jacksonbukkit.CoreSerializationTest; +import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer; import de.eldoria.jacksonbukkit.templates.FireworkEffectTemplate; import org.bukkit.FireworkEffect; import org.junit.jupiter.api.Assertions; @@ -20,7 +21,7 @@ class FireworkEffectDeserializerTest implements CoreSerializationTest { @Override public Module buildModule() { - return new JacksonBukkit(false); + return new JacksonBukkit(false, NamespacedKeySerializer.Format.FULL); } @Test diff --git a/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/HexRGBColorDeserializerTest.java b/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/HexRGBColorDeserializerTest.java index ed021b4..f952f38 100644 --- a/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/HexRGBColorDeserializerTest.java +++ b/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/HexRGBColorDeserializerTest.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.databind.Module; import de.eldoria.jacksonbukkit.JacksonBukkit; import de.eldoria.jacksonbukkit.CoreSerializationTest; +import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer; import de.eldoria.jacksonbukkit.templates.RGBColorTemplate; import org.bukkit.Color; import org.junit.jupiter.api.Disabled; @@ -19,7 +20,7 @@ class HexRGBColorDeserializerTest implements CoreSerializationTest { @Override public Module buildModule() { - return new JacksonBukkit(true); + return new JacksonBukkit(true, NamespacedKeySerializer.Format.FULL); } @Test diff --git a/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializerTest.java b/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializerTest.java index 212d73f..0a2e182 100644 --- a/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializerTest.java +++ b/core/src/test/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializerTest.java @@ -21,16 +21,22 @@ class NamespacedKeyDeserializerTest implements CoreSerializationTest { void deserializeToJson() throws JsonProcessingException { assertEquals(NamespacedKeyTemplate.SINGLE, fromJson("namespaced_key", NamespacedKey.class)); assertEquals(NamespacedKeyTemplate.LIST, fromJsonList("namespaced_key_list", NamespacedKey.class)); + assertEquals(NamespacedKeyTemplate.SINGLE, json().readValue("\"key:name\"", NamespacedKey.class)); + assertEquals(NamespacedKeyTemplate.SINGLE_MINECRAFT, json().readValue("\"name\"", NamespacedKey.class)); + assertEquals(NamespacedKeyTemplate.SINGLE_MINECRAFT, json().readValue("\"minecraft:name\"", NamespacedKey.class)); } @Test - void deserializeToYaml() throws JsonProcessingException { + void deserializeObjectToYaml() throws JsonProcessingException { assertEquals(NamespacedKeyTemplate.SINGLE, fromYaml("namespaced_key", NamespacedKey.class)); assertEquals(NamespacedKeyTemplate.LIST, fromYamlList("namespaced_key_list", NamespacedKey.class)); + assertEquals(NamespacedKeyTemplate.SINGLE_MINECRAFT, yaml().readValue("--- \"minecraft:name\"", NamespacedKey.class)); + assertEquals(NamespacedKeyTemplate.SINGLE_MINECRAFT, yaml().readValue("--- \"name\"", NamespacedKey.class)); + assertEquals(NamespacedKeyTemplate.SINGLE, yaml().readValue("--- \"key:name\"", NamespacedKey.class)); } @Test - void deserializeToToml() throws JsonProcessingException { + void deserializeObjectToToml() throws JsonProcessingException { assertEquals(NamespacedKeyTemplate.SINGLE, fromToml("namespaced_key", NamespacedKey.class)); } } diff --git a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/EnchantmentSerializerTest.java b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/EnchantmentSerializerTest.java index 3abf4fc..86c337a 100644 --- a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/EnchantmentSerializerTest.java +++ b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/EnchantmentSerializerTest.java @@ -6,17 +6,20 @@ package de.eldoria.jacksonbukkit.serializer; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.Module; import de.eldoria.jacksonbukkit.CoreSerializationTest; +import de.eldoria.jacksonbukkit.JacksonBukkit; import de.eldoria.jacksonbukkit.templates.EnchantmentTemplate; -import de.eldoria.jacksonbukkit.templates.FireworkEffectTemplate; -import org.bukkit.enchantments.Enchantment; import org.junit.jupiter.api.Test; -import java.util.List; - import static org.junit.jupiter.api.Assertions.assertEquals; class EnchantmentSerializerTest implements CoreSerializationTest { + @Override + public Module buildModule() { + return new JacksonBukkit(false, NamespacedKeySerializer.Format.OBJECT); + } + @Test void serializeToJson() throws JsonProcessingException { assertEquals(json("enchantment"), toJson(EnchantmentTemplate.SINGLE)); diff --git a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/FireworkEffectSerializerTest.java b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/FireworkEffectSerializerTest.java index 69cf536..759fa2c 100644 --- a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/FireworkEffectSerializerTest.java +++ b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/FireworkEffectSerializerTest.java @@ -18,7 +18,7 @@ class FireworkEffectSerializerTest implements CoreSerializationTest { @Override public Module buildModule() { - return new JacksonBukkit(false); + return new JacksonBukkit(false, NamespacedKeySerializer.Format.FULL); } @Test diff --git a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/HexRGBColorSerializerTest.java b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/HexRGBColorSerializerTest.java index e0b17e8..51f5801 100644 --- a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/HexRGBColorSerializerTest.java +++ b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/HexRGBColorSerializerTest.java @@ -18,7 +18,7 @@ class HexRGBColorSerializerTest implements CoreSerializationTest { @Override public Module buildModule() { - return new JacksonBukkit(true); + return new JacksonBukkit(true, NamespacedKeySerializer.Format.FULL); } @Test diff --git a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializerTest.java b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializerTest.java index fa8258c..df88afb 100644 --- a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializerTest.java +++ b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializerTest.java @@ -6,30 +6,78 @@ package de.eldoria.jacksonbukkit.serializer; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.Module; import de.eldoria.jacksonbukkit.CoreSerializationTest; +import de.eldoria.jacksonbukkit.JacksonBukkit; import de.eldoria.jacksonbukkit.templates.NamespacedKeyTemplate; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.assertEquals; class NamespacedKeySerializerTest implements CoreSerializationTest { + NamespacedKeySerializer.Format format = NamespacedKeySerializer.Format.OBJECT; + @Override + public Module buildModule() { + return new JacksonBukkit(false, format); + } @Test - void serializeToJson() throws JsonProcessingException { + void serializeToJsonObject() throws JsonProcessingException { + format = NamespacedKeySerializer.Format.OBJECT; assertEquals(json("namespaced_key"), toJson(NamespacedKeyTemplate.SINGLE)); assertEquals(json("namespaced_key_list"), toJson(NamespacedKeyTemplate.LIST)); } @Test - void serializeToYaml() throws JsonProcessingException { + void serializeToYamlObject() throws JsonProcessingException { + format = NamespacedKeySerializer.Format.OBJECT; assertEquals(yaml("namespaced_key"), toYaml(NamespacedKeyTemplate.SINGLE)); assertEquals(yaml("namespaced_key_list"), toYaml(NamespacedKeyTemplate.LIST)); } @Test - void serializeToToml() throws JsonProcessingException { + void serializeToTomlObject() throws JsonProcessingException { + format = NamespacedKeySerializer.Format.OBJECT; assertEquals(toml("namespaced_key"), toToml(NamespacedKeyTemplate.SINGLE)); } + @Test + void serializeToJsonShort() throws JsonProcessingException { + format = NamespacedKeySerializer.Format.SHORT; + assertEquals("\"key:name\"", toJson(NamespacedKeyTemplate.SINGLE).strip()); + assertEquals("\"name\"", toJson(NamespacedKeyTemplate.SINGLE_MINECRAFT).strip()); + } + + @Test + void serializeToYamlShort() throws JsonProcessingException { + format = NamespacedKeySerializer.Format.SHORT; + assertEquals("--- \"key:name\"", toYaml(NamespacedKeyTemplate.SINGLE).strip()); + assertEquals("--- \"name\"", toYaml(NamespacedKeyTemplate.SINGLE_MINECRAFT).strip()); + } + + @Test + void serializeToTomlShort() throws JsonProcessingException { + format = NamespacedKeySerializer.Format.SHORT; + assertEquals("= 'key:name'", toToml(NamespacedKeyTemplate.SINGLE).strip()); + assertEquals("= 'name'", toToml(NamespacedKeyTemplate.SINGLE_MINECRAFT).strip()); + } + @Test + void serializeToJsonFull() throws JsonProcessingException { + format = NamespacedKeySerializer.Format.FULL; + assertEquals("\"key:name\"", toJson(NamespacedKeyTemplate.SINGLE).strip()); + assertEquals("\"minecraft:name\"", toJson(NamespacedKeyTemplate.SINGLE_MINECRAFT).strip()); + } + + @Test + void serializeToYamlFull() throws JsonProcessingException { + format = NamespacedKeySerializer.Format.FULL; + assertEquals("--- \"key:name\"", toYaml(NamespacedKeyTemplate.SINGLE).strip()); + assertEquals("--- \"minecraft:name\"", toYaml(NamespacedKeyTemplate.SINGLE_MINECRAFT).strip()); + } + + @Test + void serializeToTomlFull() throws JsonProcessingException { + format = NamespacedKeySerializer.Format.FULL; + assertEquals("= 'key:name'", toToml(NamespacedKeyTemplate.SINGLE).strip()); + assertEquals("= 'minecraft:name'", toToml(NamespacedKeyTemplate.SINGLE_MINECRAFT).strip()); + } } diff --git a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/PotionEffectSerializerTest.java b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/PotionEffectSerializerTest.java index 3f4a30e..d1eb0fb 100644 --- a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/PotionEffectSerializerTest.java +++ b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/PotionEffectSerializerTest.java @@ -7,7 +7,9 @@ import be.seeseemelk.mockbukkit.MockBukkit; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.Module; import de.eldoria.jacksonbukkit.CoreSerializationTest; +import de.eldoria.jacksonbukkit.JacksonBukkit; import de.eldoria.jacksonbukkit.templates.PotionEffectTemplate; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; @@ -19,6 +21,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals; class PotionEffectSerializerTest implements CoreSerializationTest { + @Override + public Module buildModule() { + return new JacksonBukkit(false, NamespacedKeySerializer.Format.OBJECT); + } + @BeforeAll static void setup() { MockBukkit.mock(); diff --git a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/ShapedRecipeSerializerTest.java b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/ShapedRecipeSerializerTest.java index c47c45b..0a71ff9 100644 --- a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/ShapedRecipeSerializerTest.java +++ b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/ShapedRecipeSerializerTest.java @@ -7,16 +7,22 @@ import be.seeseemelk.mockbukkit.MockBukkit; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.Module; import de.eldoria.jacksonbukkit.CoreSerializationTest; -import de.eldoria.jacksonbukkit.templates.RGBColorTemplate; +import de.eldoria.jacksonbukkit.JacksonBukkit; import de.eldoria.jacksonbukkit.templates.ShapedRecipeTemplate; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; class ShapedRecipeSerializerTest implements CoreSerializationTest { + @Override + public Module buildModule() { + return new JacksonBukkit(false, NamespacedKeySerializer.Format.OBJECT); + } + @BeforeAll static void beforeAll() { MockBukkit.mock(); diff --git a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/ShapelessRecipeSerializerTest.java b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/ShapelessRecipeSerializerTest.java index dc93c38..8cbd982 100644 --- a/core/src/test/java/de/eldoria/jacksonbukkit/serializer/ShapelessRecipeSerializerTest.java +++ b/core/src/test/java/de/eldoria/jacksonbukkit/serializer/ShapelessRecipeSerializerTest.java @@ -7,7 +7,9 @@ import be.seeseemelk.mockbukkit.MockBukkit; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.Module; import de.eldoria.jacksonbukkit.CoreSerializationTest; +import de.eldoria.jacksonbukkit.JacksonBukkit; import de.eldoria.jacksonbukkit.templates.ShapelessRecipeTemplate; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -16,6 +18,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals; class ShapelessRecipeSerializerTest implements CoreSerializationTest { + @Override + public Module buildModule() { + return new JacksonBukkit(false, NamespacedKeySerializer.Format.OBJECT); + } + @BeforeAll static void beforeAll() { MockBukkit.mock(); diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index c1962a7..8bdaf60 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37aef8d..2e11132 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index aeb74cb..adff685 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -83,7 +85,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -111,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -130,10 +132,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -141,7 +146,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -149,7 +154,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -166,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -198,16 +202,15 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 6689b85..e509b2d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,22 +59,21 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/paper/build.gradle.kts b/paper/build.gradle.kts index 9b8c8ab..6843633 100644 --- a/paper/build.gradle.kts +++ b/paper/build.gradle.kts @@ -4,6 +4,6 @@ dependencies { api(project(":core")) compileOnly("io.papermc.paper", "paper-api", "1.20-R0.1-SNAPSHOT") testImplementation("io.papermc.paper", "paper-api", "1.19.4-R0.1-SNAPSHOT") - testImplementation("com.github.seeseemelk", "MockBukkit-v1.19", "2.29.0") + testImplementation("com.github.seeseemelk", "MockBukkit-v1.19", "3.1.0") testImplementation(project(":testing")) } diff --git a/paper/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java b/paper/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java index bccff88..5c08960 100644 --- a/paper/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java +++ b/paper/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java @@ -16,6 +16,8 @@ import de.eldoria.jacksonbukkit.deserializer.RGBAColorDeserializer; import de.eldoria.jacksonbukkit.serializer.HexPaperColorSerializer; import de.eldoria.jacksonbukkit.serializer.LegacyItemStackSerializer; +import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer; +import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer.Format; import de.eldoria.jacksonbukkit.serializer.PaperColorSerializer; import de.eldoria.jacksonbukkit.serializer.PaperItemStackSerializer; import net.kyori.adventure.text.Component; @@ -73,8 +75,9 @@ public class JacksonPaper extends JacksonBukkitModule { public JacksonPaper(boolean hexColors, boolean legacyItemStackSerialization, @Nullable JsonDeserializer componentDeserializer, - @Nullable JsonSerializer componentSerializer) { - super(hexColors); + @Nullable JsonSerializer componentSerializer, + Format namespacedKeyformat) { + super(hexColors, namespacedKeyformat); this.legacyItemStackSerialization = legacyItemStackSerialization; this.componentDeserializer = componentDeserializer; this.componentSerializer = componentSerializer; @@ -85,7 +88,7 @@ public JacksonPaper(boolean hexColors, */ @ApiStatus.Internal public JacksonPaper() { - super(false); + super(false, Format.FULL); legacyItemStackSerialization = false; componentDeserializer = null; componentSerializer = null; diff --git a/paper/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java b/paper/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java index dda19f1..dbe1f21 100644 --- a/paper/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java +++ b/paper/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java @@ -12,6 +12,8 @@ import de.eldoria.jacksonbukkit.deserializer.ComponentMiniMessageDeserializer; import de.eldoria.jacksonbukkit.serializer.ComponentGsonSerializer; import de.eldoria.jacksonbukkit.serializer.ComponentMiniMessageSerializer; +import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer; +import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer.Format; import de.eldoria.jacksonbukkit.util.PaperFeatures; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -76,6 +78,6 @@ public JacksonPaperBuilder withMiniMessages() { @Override public JacksonPaper build() { - return new JacksonPaper(hexColors, legacyItemStackSerialization, componentJsonDeserializer, componentJsonSerializer); + return new JacksonPaper(hexColors, legacyItemStackSerialization, componentJsonDeserializer, componentJsonSerializer, namespacedKeyFormat); } } diff --git a/paper/src/test/java/de/eldoria/jacksonbukkit/deserializer/ComponentGsonDeserializerTest.java b/paper/src/test/java/de/eldoria/jacksonbukkit/deserializer/ComponentGsonDeserializerTest.java index dd89f9f..7f700f1 100644 --- a/paper/src/test/java/de/eldoria/jacksonbukkit/deserializer/ComponentGsonDeserializerTest.java +++ b/paper/src/test/java/de/eldoria/jacksonbukkit/deserializer/ComponentGsonDeserializerTest.java @@ -10,6 +10,7 @@ import de.eldoria.jacksonbukkit.JacksonPaper; import de.eldoria.jacksonbukkit.PaperSerializationTest; import de.eldoria.jacksonbukkit.serializer.ComponentGsonSerializer; +import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer; import de.eldoria.jacksonbukkit.templates.ComponentTemplate; import net.kyori.adventure.text.Component; import org.junit.jupiter.api.Test; @@ -23,7 +24,8 @@ public Module buildModule() { return new JacksonPaper(false, false, new ComponentGsonDeserializer(), - new ComponentGsonSerializer()); + new ComponentGsonSerializer(), + NamespacedKeySerializer.Format.OBJECT); } @Test diff --git a/paper/src/test/java/de/eldoria/jacksonbukkit/serializer/ComponentGsonSerializerTest.java b/paper/src/test/java/de/eldoria/jacksonbukkit/serializer/ComponentGsonSerializerTest.java index 4ac15bf..34da600 100644 --- a/paper/src/test/java/de/eldoria/jacksonbukkit/serializer/ComponentGsonSerializerTest.java +++ b/paper/src/test/java/de/eldoria/jacksonbukkit/serializer/ComponentGsonSerializerTest.java @@ -22,7 +22,8 @@ public Module buildModule() { return new JacksonPaper(false, false, new ComponentGsonDeserializer(), - new ComponentGsonSerializer()); + new ComponentGsonSerializer(), + NamespacedKeySerializer.Format.OBJECT); } @Test diff --git a/settings.gradle.kts b/settings.gradle.kts index 3cdd587..0fd28da 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,7 +16,7 @@ pluginManagement { } plugins { - id("org.gradle.toolchains.foojay-resolver-convention") version ("0.6.0") + id("org.gradle.toolchains.foojay-resolver-convention") version ("1.0.0") } @@ -24,15 +24,15 @@ dependencyResolutionManagement { versionCatalogs { create("libs") { // plugins - plugin("spotless", "com.diffplug.spotless").version("6.20.0") + plugin("spotless", "com.diffplug.spotless").version("8.0.0") plugin("publishdata", "de.chojo.publishdata").version("1.2.5") - version("indra", "3.1.2") + version("indra", "3.2.0") plugin("indra-core", "net.kyori.indra").versionRef("indra") plugin("indra-publishing", "net.kyori.indra.publishing").versionRef("indra") plugin("indra-sonatype", "net.kyori.indra.publishing.sonatype").versionRef("indra") - version("jackson", "2.14.2") + version("jackson", "2.20.0") library("jackson-core", "com.fasterxml.jackson.core", "jackson-core").versionRef("jackson") library("jackson-databind", "com.fasterxml.jackson.core", "jackson-databind").versionRef("jackson") bundle("jackson", listOf("jackson-core", "jackson-databind")) @@ -40,23 +40,24 @@ dependencyResolutionManagement { } create("testlibs") { - version("jackson", "2.14.2") + version("jackson", "2.20.0") // jackson testing library("jackson-databind", "com.fasterxml.jackson.core", "jackson-databind").versionRef("jackson") library("jackson-dataformat-yaml", "com.fasterxml.jackson.dataformat", "jackson-dataformat-yaml").versionRef("jackson") library("jackson-dataformat-toml", "com.fasterxml.jackson.dataformat", "jackson-dataformat-toml").versionRef("jackson") bundle("jackson", listOf("jackson-databind", "jackson-dataformat-yaml", "jackson-dataformat-toml")) - version("junit", "5.9.3") + version("junit", "6.0.0") library("junit-jupiter-core", "org.junit.jupiter", "junit-jupiter").versionRef("junit") library("junit-jupiter-engine", "org.junit.jupiter", "junit-jupiter-engine").versionRef("junit") + library("junit-platform-launcher", "org.junit.platform", "junit-platform-launcher").version("6.0.0") library("junit-jupiter-api", "org.junit.jupiter", "junit-jupiter-api").versionRef("junit") library("junit-params", "org.junit.jupiter", "junit-jupiter-params").versionRef("junit") - library("mockito", "org.junit.jupiter", "junit-jupiter-params").version("5.2.0") - library("assertj-core", "org.junit.jupiter", "junit-jupiter-params").version("3.24.2") + library("mockito", "org.junit.jupiter", "junit-jupiter-params").version("6.0.0") + library("assertj-core", "org.assertj", "assertj-core").version("3.27.6") - bundle("unittests", listOf("junit-jupiter-core", "junit-jupiter-engine", "junit-jupiter-api", "junit-params", "mockito", "assertj-core")) + bundle("unittests", listOf("junit-jupiter-core", "junit-jupiter-engine", "junit-jupiter-api","junit-platform-launcher", "junit-params", "mockito", "assertj-core")) } } } diff --git a/testing/build.gradle.kts b/testing/build.gradle.kts index d7fc81a..116d13b 100644 --- a/testing/build.gradle.kts +++ b/testing/build.gradle.kts @@ -2,8 +2,9 @@ dependencies { implementation("io.papermc.paper", "paper-api", "1.19.4-R0.1-SNAPSHOT") implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml") implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-toml") - implementation("org.junit.jupiter:junit-jupiter-api:5.9.3") - implementation("org.assertj:assertj-core:3.24.2") + implementation(libs.bundles.jackson) + implementation(testlibs.bundles.unittests) + testImplementation(testlibs.bundles.unittests) } java{ diff --git a/testing/src/main/java/de/eldoria/jacksonbukkit/templates/NamespacedKeyTemplate.java b/testing/src/main/java/de/eldoria/jacksonbukkit/templates/NamespacedKeyTemplate.java index 9a7e38c..8fa5b50 100644 --- a/testing/src/main/java/de/eldoria/jacksonbukkit/templates/NamespacedKeyTemplate.java +++ b/testing/src/main/java/de/eldoria/jacksonbukkit/templates/NamespacedKeyTemplate.java @@ -11,6 +11,8 @@ public class NamespacedKeyTemplate { public static final NamespacedKey SINGLE = new NamespacedKey("key", "name"); + public static final NamespacedKey SINGLE_MINECRAFT = new NamespacedKey("minecraft", "name"); public static final List LIST = List.of(SINGLE, SINGLE, SINGLE); + public static final List LIST_MINECRAFT = List.of(SINGLE_MINECRAFT, SINGLE_MINECRAFT, SINGLE_MINECRAFT); }