From 32cdb1c4d038016d680b13d58cb3ed4d11ff2628 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20F=C3=BClling?= <46890129+RainbowDashLabs@users.noreply.github.com> Date: Fri, 17 Mar 2023 02:08:12 +0100 Subject: [PATCH 1/7] Change workflow versions --- .github/workflows/javadocs.yml | 2 +- .github/workflows/publish_to_nexus.yml | 2 +- .github/workflows/verify.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/javadocs.yml b/.github/workflows/javadocs.yml index c39ec93..b3c5aca 100644 --- a/.github/workflows/javadocs.yml +++ b/.github/workflows/javadocs.yml @@ -25,7 +25,7 @@ jobs: echo "Creating .nojekyll to have Github pages deploy html as is:" touch .nojekyll - name: Deploy - uses: JamesIves/github-pages-deploy-action@v4.4.0 + uses: JamesIves/github-pages-deploy-action@v4 with: branch: gh-pages # The branch the action should deploy to. folder: build/docs/javadoc # The folder the action should deploy. diff --git a/.github/workflows/publish_to_nexus.yml b/.github/workflows/publish_to_nexus.yml index 03a5a21..6bbe872 100644 --- a/.github/workflows/publish_to_nexus.yml +++ b/.github/workflows/publish_to_nexus.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3.0.2 + - uses: actions/checkout@v3 - name: Set up JDK 18 uses: actions/setup-java@v3 with: diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 4b6bc63..18481aa 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3.0.2 + - uses: actions/checkout@v3 - name: Set up JDK 18 uses: actions/setup-java@v3 with: From b8a52f12c61c20d72e333a646d4582dee82e4cbf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 02:53:30 +0100 Subject: [PATCH 2/7] Update plugin com.diffplug.spotless to v6.17.0 (#7) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 5a82bb9..e3321ca 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { java `maven-publish` `java-library` - id("com.diffplug.spotless") version "6.16.0" + id("com.diffplug.spotless") version "6.17.0" id("de.chojo.publishdata") version "1.2.4" id("io.papermc.paperweight.userdev") version "1.5.3" } From 858e06dd8367980bbec054443c72324253df2650 Mon Sep 17 00:00:00 2001 From: Lilly Tempest <46890129+rainbowdashlabs@users.noreply.github.com> Date: Fri, 17 Mar 2023 14:18:10 +0100 Subject: [PATCH 3/7] Add serialization for ItemStack supporting spigot server (#8) * Add bukkit item stack serializer * Disable tests * Add license header --- .../eldoria/jacksonbukkit/JacksonBukkit.java | 26 +++-- .../eldoria/jacksonbukkit/JacksonPaper.java | 94 +++++++++++++++++++ .../BukkitItemStackDeserializer.java | 28 ++++++ ...r.java => PaperItemStackDeserializer.java} | 3 +- .../serializer/BukkitItemStackSerializer.java | 21 +++++ ...zer.java => PaperItemStackSerializer.java} | 2 +- .../jacksonbukkit/SerializationTest.java | 41 +++++--- ...a => BukkitItemStackDeserializerTest.java} | 19 ++-- .../PaperItemStackDeserializerTest.java | 56 +++++++++++ .../BukkitItemStackSerializerTest.java | 47 ++++++++++ ...java => PaperItemStackSerializerTest.java} | 15 ++- ...item_stack.json => item_stack_bukkit.json} | 0 ..._list.json => item_stack_bukkit_list.json} | 0 .../item_stack_paper.json} | 0 .../item_stack_paper_list.json} | 0 .../item_stack_bukkit.toml} | 0 src/test/resources/toml/item_stack_paper.toml | 0 .../resources/yaml/item_stack_bukkit.yaml | 0 .../yaml/item_stack_bukkit_list.yaml | 0 src/test/resources/yaml/item_stack_paper.yaml | 0 .../resources/yaml/item_stack_paper_list.yaml | 0 21 files changed, 319 insertions(+), 33 deletions(-) create mode 100644 src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java create mode 100644 src/main/java/de/eldoria/jacksonbukkit/deserializer/BukkitItemStackDeserializer.java rename src/main/java/de/eldoria/jacksonbukkit/deserializer/{ItemStackDeserializer.java => PaperItemStackDeserializer.java} (84%) create mode 100644 src/main/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializer.java rename src/main/java/de/eldoria/jacksonbukkit/serializer/{ItemStackSerializer.java => PaperItemStackSerializer.java} (89%) rename src/test/java/de/eldoria/jacksonbukkit/deserializer/{ItemStackDeserializerTest.java => BukkitItemStackDeserializerTest.java} (77%) create mode 100644 src/test/java/de/eldoria/jacksonbukkit/deserializer/PaperItemStackDeserializerTest.java create mode 100644 src/test/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializerTest.java rename src/test/java/de/eldoria/jacksonbukkit/serializer/{ItemStackSerializerTest.java => PaperItemStackSerializerTest.java} (78%) rename src/test/resources/json/{item_stack.json => item_stack_bukkit.json} (100%) rename src/test/resources/json/{item_stack_list.json => item_stack_bukkit_list.json} (100%) rename src/test/resources/{toml/item_stack.toml => json/item_stack_paper.json} (100%) rename src/test/resources/{yaml/item_stack.yaml => json/item_stack_paper_list.json} (100%) rename src/test/resources/{yaml/item_stack_list.yaml => toml/item_stack_bukkit.toml} (100%) create mode 100644 src/test/resources/toml/item_stack_paper.toml create mode 100644 src/test/resources/yaml/item_stack_bukkit.yaml create mode 100644 src/test/resources/yaml/item_stack_bukkit_list.yaml create mode 100644 src/test/resources/yaml/item_stack_paper.yaml create mode 100644 src/test/resources/yaml/item_stack_paper_list.yaml diff --git a/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java b/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java index 2bf3a43..68a729d 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java +++ b/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java @@ -12,12 +12,13 @@ import de.eldoria.jacksonbukkit.deserializer.AttributeModifierDeserializer; import de.eldoria.jacksonbukkit.deserializer.BlockVectorDeserializer; import de.eldoria.jacksonbukkit.deserializer.BoundingBoxDeserializer; +import de.eldoria.jacksonbukkit.deserializer.BukkitItemStackDeserializer; import de.eldoria.jacksonbukkit.deserializer.ColorDeserializer; import de.eldoria.jacksonbukkit.deserializer.FireworkEffectDeserializer; import de.eldoria.jacksonbukkit.deserializer.InventoryDeserializer; -import de.eldoria.jacksonbukkit.deserializer.ItemStackDeserializer; import de.eldoria.jacksonbukkit.deserializer.LocationDeserializer; import de.eldoria.jacksonbukkit.deserializer.NamespacedKeyDeserializer; +import de.eldoria.jacksonbukkit.deserializer.PaperItemStackDeserializer; import de.eldoria.jacksonbukkit.deserializer.PatternDeserializer; import de.eldoria.jacksonbukkit.deserializer.PlayerDeserializer; import de.eldoria.jacksonbukkit.deserializer.PotionEffectDeserializer; @@ -26,12 +27,13 @@ import de.eldoria.jacksonbukkit.serializer.AttributeModifierSerializer; import de.eldoria.jacksonbukkit.serializer.BlockVectorSerializer; import de.eldoria.jacksonbukkit.serializer.BoundingBoxSerializer; +import de.eldoria.jacksonbukkit.serializer.BukkitItemStackSerializer; import de.eldoria.jacksonbukkit.serializer.ColorSerializer; import de.eldoria.jacksonbukkit.serializer.FireworkEffectSerializer; import de.eldoria.jacksonbukkit.serializer.InventorySerializer; -import de.eldoria.jacksonbukkit.serializer.ItemStackSerializer; import de.eldoria.jacksonbukkit.serializer.LocationSerializer; import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer; +import de.eldoria.jacksonbukkit.serializer.PaperItemStackSerializer; import de.eldoria.jacksonbukkit.serializer.PatternSerializer; import de.eldoria.jacksonbukkit.serializer.PlayerSerializer; import de.eldoria.jacksonbukkit.serializer.PotionEffectSerializer; @@ -89,10 +91,20 @@ public Version version() { @Override public void setupModule(SetupContext context) { SimpleSerializers serializers = new SimpleSerializers(); + addSerializer(serializers); + + SimpleDeserializers deserializers = new SimpleDeserializers(); + addDeserializer(deserializers); + + context.addSerializers(serializers); + context.addDeserializers(deserializers); + } + + protected void addSerializer(SimpleSerializers serializers) { serializers.addSerializer(Vector.class, new VectorSerializer()); serializers.addSerializer(BlockVector.class, new BlockVectorSerializer()); serializers.addSerializer(Color.class, new ColorSerializer()); - serializers.addSerializer(ItemStack.class, new ItemStackSerializer()); + serializers.addSerializer(ItemStack.class, new BukkitItemStackSerializer()); serializers.addSerializer(NamespacedKey.class, new NamespacedKeySerializer()); serializers.addSerializer(PotionEffect.class, new PotionEffectSerializer()); serializers.addSerializer(FireworkEffect.class, new FireworkEffectSerializer()); @@ -102,12 +114,13 @@ public void setupModule(SetupContext context) { serializers.addSerializer(Location.class, new LocationSerializer()); serializers.addSerializer(OfflinePlayer.class, new PlayerSerializer()); serializers.addSerializer(InventoryWrapper.class, new InventorySerializer()); + } - SimpleDeserializers deserializers = new SimpleDeserializers(); + protected void addDeserializer(SimpleDeserializers deserializers) { deserializers.addDeserializer(Vector.class, new VectorDeserializer()); deserializers.addDeserializer(BlockVector.class, new BlockVectorDeserializer()); deserializers.addDeserializer(Color.class, new ColorDeserializer()); - deserializers.addDeserializer(ItemStack.class, new ItemStackDeserializer()); + deserializers.addDeserializer(ItemStack.class, new BukkitItemStackDeserializer()); deserializers.addDeserializer(NamespacedKey.class, new NamespacedKeyDeserializer()); deserializers.addDeserializer(PotionEffect.class, new PotionEffectDeserializer()); deserializers.addDeserializer(FireworkEffect.class, new FireworkEffectDeserializer()); @@ -117,8 +130,5 @@ public void setupModule(SetupContext context) { deserializers.addDeserializer(Location.class, new LocationDeserializer()); deserializers.addDeserializer(OfflinePlayer.class, new PlayerDeserializer()); deserializers.addDeserializer(InventoryWrapper.class, new InventoryDeserializer()); - - context.addSerializers(serializers); - context.addDeserializers(deserializers); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java b/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java new file mode 100644 index 0000000..0b9b9d9 --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java @@ -0,0 +1,94 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit; + +import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.databind.module.SimpleDeserializers; +import com.fasterxml.jackson.databind.module.SimpleSerializers; +import de.eldoria.jacksonbukkit.deserializer.AttributeModifierDeserializer; +import de.eldoria.jacksonbukkit.deserializer.BlockVectorDeserializer; +import de.eldoria.jacksonbukkit.deserializer.BoundingBoxDeserializer; +import de.eldoria.jacksonbukkit.deserializer.ColorDeserializer; +import de.eldoria.jacksonbukkit.deserializer.FireworkEffectDeserializer; +import de.eldoria.jacksonbukkit.deserializer.InventoryDeserializer; +import de.eldoria.jacksonbukkit.deserializer.LocationDeserializer; +import de.eldoria.jacksonbukkit.deserializer.NamespacedKeyDeserializer; +import de.eldoria.jacksonbukkit.deserializer.PaperItemStackDeserializer; +import de.eldoria.jacksonbukkit.deserializer.PatternDeserializer; +import de.eldoria.jacksonbukkit.deserializer.PlayerDeserializer; +import de.eldoria.jacksonbukkit.deserializer.PotionEffectDeserializer; +import de.eldoria.jacksonbukkit.deserializer.VectorDeserializer; +import de.eldoria.jacksonbukkit.entities.InventoryWrapper; +import de.eldoria.jacksonbukkit.serializer.AttributeModifierSerializer; +import de.eldoria.jacksonbukkit.serializer.BlockVectorSerializer; +import de.eldoria.jacksonbukkit.serializer.BoundingBoxSerializer; +import de.eldoria.jacksonbukkit.serializer.ColorSerializer; +import de.eldoria.jacksonbukkit.serializer.FireworkEffectSerializer; +import de.eldoria.jacksonbukkit.serializer.InventorySerializer; +import de.eldoria.jacksonbukkit.serializer.LocationSerializer; +import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer; +import de.eldoria.jacksonbukkit.serializer.PaperItemStackSerializer; +import de.eldoria.jacksonbukkit.serializer.PatternSerializer; +import de.eldoria.jacksonbukkit.serializer.PlayerSerializer; +import de.eldoria.jacksonbukkit.serializer.PotionEffectSerializer; +import de.eldoria.jacksonbukkit.serializer.VectorSerializer; +import org.bukkit.Color; +import org.bukkit.FireworkEffect; +import org.bukkit.Location; +import org.bukkit.NamespacedKey; +import org.bukkit.OfflinePlayer; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.block.banner.Pattern; +import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.util.BlockVector; +import org.bukkit.util.BoundingBox; +import org.bukkit.util.Vector; + +/** + * Class adding support for classes implementing {@link ConfigurationSerializable}. + * + * + *

+ * It also provides some additional serialization for: + *

+ *

+ */ +public class JacksonPaper extends JacksonBukkit { + @Override + public String getModuleName() { + return "JacksonPaper"; + } + + @Override + protected void addDeserializer(SimpleDeserializers deserializers) { + super.addDeserializer(deserializers); + deserializers.addDeserializer(ItemStack.class, new PaperItemStackDeserializer()); + } + + @Override + protected void addSerializer(SimpleSerializers serializers) { + super.addSerializer(serializers); + serializers.addSerializer(ItemStack.class, new PaperItemStackSerializer()); + } +} diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/BukkitItemStackDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/BukkitItemStackDeserializer.java new file mode 100644 index 0000000..89c9744 --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/BukkitItemStackDeserializer.java @@ -0,0 +1,28 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.deserializer; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.type.MapType; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.configuration.serialization.ConfigurationSerialization; +import org.bukkit.inventory.ItemStack; + +import java.io.IOException; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +public class BukkitItemStackDeserializer extends JsonDeserializer { + @Override + public ItemStack deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + MapType type = ctxt.getTypeFactory().constructMapType(HashMap.class, String.class, Object.class); + return ItemStack.deserialize(ctxt.readValue(p, type)); + } +} diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/ItemStackDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/PaperItemStackDeserializer.java similarity index 84% rename from src/main/java/de/eldoria/jacksonbukkit/deserializer/ItemStackDeserializer.java rename to src/main/java/de/eldoria/jacksonbukkit/deserializer/PaperItemStackDeserializer.java index 183454b..b21f066 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/ItemStackDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/PaperItemStackDeserializer.java @@ -5,7 +5,6 @@ */ package de.eldoria.jacksonbukkit.deserializer; -import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -14,7 +13,7 @@ import java.io.IOException; import java.util.Base64; -public class ItemStackDeserializer extends JsonDeserializer { +public class PaperItemStackDeserializer extends JsonDeserializer { @Override public ItemStack deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { byte[] decode = Base64.getDecoder().decode(ctxt.readValue(p, String.class)); diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializer.java new file mode 100644 index 0000000..c046801 --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializer.java @@ -0,0 +1,21 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import org.bukkit.inventory.ItemStack; + +import java.io.IOException; +import java.util.Base64; + +public class BukkitItemStackSerializer extends JsonSerializer { + @Override + public void serialize(ItemStack value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeObject(value.serialize()); + } +} diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/ItemStackSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/PaperItemStackSerializer.java similarity index 89% rename from src/main/java/de/eldoria/jacksonbukkit/serializer/ItemStackSerializer.java rename to src/main/java/de/eldoria/jacksonbukkit/serializer/PaperItemStackSerializer.java index 163ae64..07c3ca8 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/ItemStackSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/PaperItemStackSerializer.java @@ -13,7 +13,7 @@ import java.io.IOException; import java.util.Base64; -public class ItemStackSerializer extends JsonSerializer { +public class PaperItemStackSerializer extends JsonSerializer { @Override public void serialize(ItemStack value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(Base64.getEncoder().encodeToString(value.serializeAsBytes())); diff --git a/src/test/java/de/eldoria/jacksonbukkit/SerializationTest.java b/src/test/java/de/eldoria/jacksonbukkit/SerializationTest.java index 3d780f2..84dc996 100644 --- a/src/test/java/de/eldoria/jacksonbukkit/SerializationTest.java +++ b/src/test/java/de/eldoria/jacksonbukkit/SerializationTest.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; +import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.databind.type.CollectionType; @@ -18,27 +19,39 @@ import java.util.List; public interface SerializationTest { - ObjectMapper JSON = JsonMapper.builder() - .defaultPrettyPrinter(new DefaultPrettyPrinter()) - .addModule(new JacksonBukkit()) - .build(); - ObjectMapper YAML = YAMLMapper.builder() - .addModule(new JacksonBukkit()) - .build(); - ObjectMapper TOML = TomlMapper.builder() - .addModule(new JacksonBukkit()) - .build(); - default ObjectMapper json() { - return JSON; + return buildJson(); } default ObjectMapper yaml() { - return YAML; + return buildYaml(); } default ObjectMapper toml() { - return TOML; + return buildToml(); + } + + default Module buildModule() { + return new JacksonBukkit(); + } + + default ObjectMapper buildJson() { + return JsonMapper.builder() + .defaultPrettyPrinter(new DefaultPrettyPrinter()) + .addModule(buildModule()) + .build(); + } + + default ObjectMapper buildYaml() { + return YAMLMapper.builder() + .addModule(buildModule()) + .build(); + } + + default ObjectMapper buildToml() { + return TomlMapper.builder() + .addModule(buildModule()) + .build(); } default String toJson(Object object) throws JsonProcessingException { diff --git a/src/test/java/de/eldoria/jacksonbukkit/deserializer/ItemStackDeserializerTest.java b/src/test/java/de/eldoria/jacksonbukkit/deserializer/BukkitItemStackDeserializerTest.java similarity index 77% rename from src/test/java/de/eldoria/jacksonbukkit/deserializer/ItemStackDeserializerTest.java rename to src/test/java/de/eldoria/jacksonbukkit/deserializer/BukkitItemStackDeserializerTest.java index 662f9b6..73b98de 100644 --- a/src/test/java/de/eldoria/jacksonbukkit/deserializer/ItemStackDeserializerTest.java +++ b/src/test/java/de/eldoria/jacksonbukkit/deserializer/BukkitItemStackDeserializerTest.java @@ -10,6 +10,7 @@ import de.eldoria.jacksonbukkit.SerializationTest; import de.eldoria.jacksonbukkit.templates.ItemStackTemplate; import org.bukkit.inventory.ItemStack; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -17,27 +18,31 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @Disabled -class ItemStackDeserializerTest implements SerializationTest { - +class BukkitItemStackDeserializerTest implements SerializationTest { @BeforeAll static void setup() { MockBukkit.mock(); } + @AfterAll + static void tearDown() { + MockBukkit.unmock(); + } + @Test void deserializeToJson() throws JsonProcessingException { - assertEquals(ItemStackTemplate.SINGLE, fromJson("item_stack", ItemStack.class)); - assertEquals(ItemStackTemplate.LIST, fromJsonList("item_stack_list", ItemStack.class)); + assertEquals(ItemStackTemplate.SINGLE, fromJson("item_stack_bukkit", ItemStack.class)); + assertEquals(ItemStackTemplate.LIST, fromJsonList("item_stack_bukkit_list", ItemStack.class)); } @Test void deserializeToYaml() throws JsonProcessingException { - assertEquals(ItemStackTemplate.SINGLE, fromYaml("item_stack", ItemStack.class)); - assertEquals(ItemStackTemplate.LIST, fromYamlList("item_stack_list", ItemStack.class)); + assertEquals(ItemStackTemplate.SINGLE, fromYaml("item_stack_bukkit", ItemStack.class)); + assertEquals(ItemStackTemplate.LIST, fromYamlList("item_stack_bukkit_list", ItemStack.class)); } @Test void deserializeToToml() throws JsonProcessingException { - assertEquals(ItemStackTemplate.SINGLE, fromToml("item_stack", ItemStack.class)); + assertEquals(ItemStackTemplate.SINGLE, fromToml("item_stack_bukkit", ItemStack.class)); } } diff --git a/src/test/java/de/eldoria/jacksonbukkit/deserializer/PaperItemStackDeserializerTest.java b/src/test/java/de/eldoria/jacksonbukkit/deserializer/PaperItemStackDeserializerTest.java new file mode 100644 index 0000000..e833982 --- /dev/null +++ b/src/test/java/de/eldoria/jacksonbukkit/deserializer/PaperItemStackDeserializerTest.java @@ -0,0 +1,56 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.deserializer; + +import be.seeseemelk.mockbukkit.MockBukkit; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.Module; +import de.eldoria.jacksonbukkit.JacksonPaper; +import de.eldoria.jacksonbukkit.SerializationTest; +import de.eldoria.jacksonbukkit.templates.ItemStackTemplate; +import org.bukkit.inventory.ItemStack; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@Disabled +class PaperItemStackDeserializerTest implements SerializationTest { + + @BeforeAll + static void setup() { + MockBukkit.mock(); + } + + @AfterAll + static void tearDown() { + MockBukkit.unmock(); + } + + @Override + public Module buildModule() { + return new JacksonPaper(); + } + + @Test + void deserializeToJson() throws JsonProcessingException { + assertEquals(ItemStackTemplate.SINGLE, fromJson("item_stack_paper", ItemStack.class)); + assertEquals(ItemStackTemplate.LIST, fromJsonList("item_stack_paper_list", ItemStack.class)); + } + + @Test + void deserializeToYaml() throws JsonProcessingException { + assertEquals(ItemStackTemplate.SINGLE, fromYaml("item_stack_paper", ItemStack.class)); + assertEquals(ItemStackTemplate.LIST, fromYamlList("item_stack_paper_list", ItemStack.class)); + } + + @Test + void deserializeToToml() throws JsonProcessingException { + assertEquals(ItemStackTemplate.SINGLE, fromToml("item_stack_paper", ItemStack.class)); + } +} diff --git a/src/test/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializerTest.java b/src/test/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializerTest.java new file mode 100644 index 0000000..bb934ef --- /dev/null +++ b/src/test/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializerTest.java @@ -0,0 +1,47 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.serializer; + +import be.seeseemelk.mockbukkit.MockBukkit; +import com.fasterxml.jackson.core.JsonProcessingException; +import de.eldoria.jacksonbukkit.SerializationTest; +import de.eldoria.jacksonbukkit.templates.ItemStackTemplate; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@Disabled +class BukkitItemStackSerializerTest implements SerializationTest { + @BeforeAll + static void setup() { + MockBukkit.mock(); + } + + @AfterAll + static void tearDown() { + MockBukkit.unmock(); + } + + @Test + void serializeToJson() throws JsonProcessingException { + assertEquals(json("item_stack_bukkit"), toJson(ItemStackTemplate.SINGLE)); + assertEquals(json("item_stack_bukkit_list"), toJson(ItemStackTemplate.LIST)); + } + + @Test + void serializeToYaml() throws JsonProcessingException { + assertEquals(yaml("item_stack_bukkit"), toYaml(ItemStackTemplate.SINGLE)); + assertEquals(yaml("item_stack_bukkit_list"), toYaml(ItemStackTemplate.LIST)); + } + + @Test + void serializeToToml() throws JsonProcessingException { + assertEquals(toml("item_stack_bukkit"), toToml(ItemStackTemplate.SINGLE)); + } +} diff --git a/src/test/java/de/eldoria/jacksonbukkit/serializer/ItemStackSerializerTest.java b/src/test/java/de/eldoria/jacksonbukkit/serializer/PaperItemStackSerializerTest.java similarity index 78% rename from src/test/java/de/eldoria/jacksonbukkit/serializer/ItemStackSerializerTest.java rename to src/test/java/de/eldoria/jacksonbukkit/serializer/PaperItemStackSerializerTest.java index 6b3a6b0..6adc063 100644 --- a/src/test/java/de/eldoria/jacksonbukkit/serializer/ItemStackSerializerTest.java +++ b/src/test/java/de/eldoria/jacksonbukkit/serializer/PaperItemStackSerializerTest.java @@ -7,8 +7,11 @@ import be.seeseemelk.mockbukkit.MockBukkit; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.Module; +import de.eldoria.jacksonbukkit.JacksonPaper; import de.eldoria.jacksonbukkit.SerializationTest; import de.eldoria.jacksonbukkit.templates.ItemStackTemplate; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -16,13 +19,23 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @Disabled -class ItemStackSerializerTest implements SerializationTest { +class PaperItemStackSerializerTest implements SerializationTest { // Mockbukkit does not support serialization to bytes @BeforeAll static void setup() { MockBukkit.mock(); } + @AfterAll + static void tearDown() { + MockBukkit.unmock(); + } + + @Override + public Module buildModule() { + return new JacksonPaper(); + } + @Test void serializeToJson() throws JsonProcessingException { assertEquals(json("item_stack"), toJson(ItemStackTemplate.SINGLE)); diff --git a/src/test/resources/json/item_stack.json b/src/test/resources/json/item_stack_bukkit.json similarity index 100% rename from src/test/resources/json/item_stack.json rename to src/test/resources/json/item_stack_bukkit.json diff --git a/src/test/resources/json/item_stack_list.json b/src/test/resources/json/item_stack_bukkit_list.json similarity index 100% rename from src/test/resources/json/item_stack_list.json rename to src/test/resources/json/item_stack_bukkit_list.json diff --git a/src/test/resources/toml/item_stack.toml b/src/test/resources/json/item_stack_paper.json similarity index 100% rename from src/test/resources/toml/item_stack.toml rename to src/test/resources/json/item_stack_paper.json diff --git a/src/test/resources/yaml/item_stack.yaml b/src/test/resources/json/item_stack_paper_list.json similarity index 100% rename from src/test/resources/yaml/item_stack.yaml rename to src/test/resources/json/item_stack_paper_list.json diff --git a/src/test/resources/yaml/item_stack_list.yaml b/src/test/resources/toml/item_stack_bukkit.toml similarity index 100% rename from src/test/resources/yaml/item_stack_list.yaml rename to src/test/resources/toml/item_stack_bukkit.toml diff --git a/src/test/resources/toml/item_stack_paper.toml b/src/test/resources/toml/item_stack_paper.toml new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/yaml/item_stack_bukkit.yaml b/src/test/resources/yaml/item_stack_bukkit.yaml new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/yaml/item_stack_bukkit_list.yaml b/src/test/resources/yaml/item_stack_bukkit_list.yaml new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/yaml/item_stack_paper.yaml b/src/test/resources/yaml/item_stack_paper.yaml new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/yaml/item_stack_paper_list.yaml b/src/test/resources/yaml/item_stack_paper_list.yaml new file mode 100644 index 0000000..e69de29 From 506f273749d603564a4e3b22f8931ffcf89ebf2e Mon Sep 17 00:00:00 2001 From: Lilly Tempest <46890129+rainbowdashlabs@users.noreply.github.com> Date: Fri, 17 Mar 2023 15:00:21 +0100 Subject: [PATCH 4/7] Allow to de/serialize colors as HEX (#9) * Allow serialization via hex * Add license header * Make configurable via builder * Allow legacy serialization on paper module * Add license header --- .../eldoria/jacksonbukkit/JacksonBukkit.java | 51 +++++++++++++++++-- .../eldoria/jacksonbukkit/JacksonPaper.java | 45 +++++++--------- .../builder/JacksonBukkitBuilder.java | 15 ++++++ .../builder/JacksonPaperBuilder.java | 31 +++++++++++ .../jacksonbukkit/builder/ModuleBuilder.java | 40 +++++++++++++++ .../deserializer/HexColorDeserializer.java | 22 ++++++++ .../jacksonbukkit/entities/ColorWrapper.java | 21 ++++++++ .../serializer/HexColorSerializer.java | 21 ++++++++ .../HexColorDeserializerTest.java | 43 ++++++++++++++++ .../serializer/HexColorSerializerTest.java | 43 ++++++++++++++++ src/test/resources/json/color_hex.json | 1 + src/test/resources/json/color_hex_list.json | 1 + src/test/resources/yaml/color_hex.yaml | 1 + src/test/resources/yaml/color_hex_list.yaml | 3 ++ 14 files changed, 307 insertions(+), 31 deletions(-) create mode 100644 src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java create mode 100644 src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java create mode 100644 src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java create mode 100644 src/main/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializer.java create mode 100644 src/main/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializer.java create mode 100644 src/test/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializerTest.java create mode 100644 src/test/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializerTest.java create mode 100644 src/test/resources/json/color_hex.json create mode 100644 src/test/resources/json/color_hex_list.json create mode 100644 src/test/resources/yaml/color_hex.yaml create mode 100644 src/test/resources/yaml/color_hex_list.yaml diff --git a/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java b/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java index 68a729d..2414c17 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java +++ b/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java @@ -9,16 +9,18 @@ import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.module.SimpleDeserializers; import com.fasterxml.jackson.databind.module.SimpleSerializers; +import de.eldoria.jacksonbukkit.builder.JacksonBukkitBuilder; +import de.eldoria.jacksonbukkit.builder.JacksonPaperBuilder; import de.eldoria.jacksonbukkit.deserializer.AttributeModifierDeserializer; import de.eldoria.jacksonbukkit.deserializer.BlockVectorDeserializer; import de.eldoria.jacksonbukkit.deserializer.BoundingBoxDeserializer; import de.eldoria.jacksonbukkit.deserializer.BukkitItemStackDeserializer; import de.eldoria.jacksonbukkit.deserializer.ColorDeserializer; import de.eldoria.jacksonbukkit.deserializer.FireworkEffectDeserializer; +import de.eldoria.jacksonbukkit.deserializer.HexColorDeserializer; import de.eldoria.jacksonbukkit.deserializer.InventoryDeserializer; import de.eldoria.jacksonbukkit.deserializer.LocationDeserializer; import de.eldoria.jacksonbukkit.deserializer.NamespacedKeyDeserializer; -import de.eldoria.jacksonbukkit.deserializer.PaperItemStackDeserializer; import de.eldoria.jacksonbukkit.deserializer.PatternDeserializer; import de.eldoria.jacksonbukkit.deserializer.PlayerDeserializer; import de.eldoria.jacksonbukkit.deserializer.PotionEffectDeserializer; @@ -30,10 +32,10 @@ import de.eldoria.jacksonbukkit.serializer.BukkitItemStackSerializer; import de.eldoria.jacksonbukkit.serializer.ColorSerializer; import de.eldoria.jacksonbukkit.serializer.FireworkEffectSerializer; +import de.eldoria.jacksonbukkit.serializer.HexColorSerializer; import de.eldoria.jacksonbukkit.serializer.InventorySerializer; import de.eldoria.jacksonbukkit.serializer.LocationSerializer; import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer; -import de.eldoria.jacksonbukkit.serializer.PaperItemStackSerializer; import de.eldoria.jacksonbukkit.serializer.PatternSerializer; import de.eldoria.jacksonbukkit.serializer.PlayerSerializer; import de.eldoria.jacksonbukkit.serializer.PotionEffectSerializer; @@ -78,6 +80,47 @@ *

*/ public class JacksonBukkit extends Module { + private final boolean hexColors; + + public JacksonBukkit(boolean hexColors) { + this.hexColors = hexColors; + } + + public JacksonBukkit() { + hexColors = false; + } + + /** + * Create a new builder for a {@link JacksonBukkit} module for use with spigot. + *

+ * If you are using paper you should use the {@link #paper()} builder. + * + * @return builder instance + */ + public static JacksonBukkitBuilder bukkit() { + return new JacksonBukkitBuilder(); + } + + /** + * Create a new builder for a {@link JacksonBukkit} module for use with spigot. + *

+ * If you are using paper you should use the {@link #paper()} builder. + * + * @return builder instance + */ + public static JacksonBukkitBuilder spigot() { + return new JacksonBukkitBuilder(); + } + + /** + * Create a new builder for a {@link JacksonPaper} module for use with paper. + * + * @return builder instance + */ + public static JacksonPaperBuilder paper() { + return new JacksonPaperBuilder(); + } + @Override public String getModuleName() { return "JacksonBukkit"; @@ -103,7 +146,7 @@ public void setupModule(SetupContext context) { protected void addSerializer(SimpleSerializers serializers) { serializers.addSerializer(Vector.class, new VectorSerializer()); serializers.addSerializer(BlockVector.class, new BlockVectorSerializer()); - serializers.addSerializer(Color.class, new ColorSerializer()); + serializers.addSerializer(Color.class, hexColors ? new HexColorSerializer() : new ColorSerializer()); serializers.addSerializer(ItemStack.class, new BukkitItemStackSerializer()); serializers.addSerializer(NamespacedKey.class, new NamespacedKeySerializer()); serializers.addSerializer(PotionEffect.class, new PotionEffectSerializer()); @@ -119,7 +162,7 @@ protected void addSerializer(SimpleSerializers serializers) { protected void addDeserializer(SimpleDeserializers deserializers) { deserializers.addDeserializer(Vector.class, new VectorDeserializer()); deserializers.addDeserializer(BlockVector.class, new BlockVectorDeserializer()); - deserializers.addDeserializer(Color.class, new ColorDeserializer()); + deserializers.addDeserializer(Color.class, hexColors ? new HexColorDeserializer() : new ColorDeserializer()); deserializers.addDeserializer(ItemStack.class, new BukkitItemStackDeserializer()); deserializers.addDeserializer(NamespacedKey.class, new NamespacedKeyDeserializer()); deserializers.addDeserializer(PotionEffect.class, new PotionEffectDeserializer()); diff --git a/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java b/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java index 0b9b9d9..727cc42 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java @@ -5,36 +5,11 @@ */ package de.eldoria.jacksonbukkit; -import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.module.SimpleDeserializers; import com.fasterxml.jackson.databind.module.SimpleSerializers; -import de.eldoria.jacksonbukkit.deserializer.AttributeModifierDeserializer; -import de.eldoria.jacksonbukkit.deserializer.BlockVectorDeserializer; -import de.eldoria.jacksonbukkit.deserializer.BoundingBoxDeserializer; -import de.eldoria.jacksonbukkit.deserializer.ColorDeserializer; -import de.eldoria.jacksonbukkit.deserializer.FireworkEffectDeserializer; -import de.eldoria.jacksonbukkit.deserializer.InventoryDeserializer; -import de.eldoria.jacksonbukkit.deserializer.LocationDeserializer; -import de.eldoria.jacksonbukkit.deserializer.NamespacedKeyDeserializer; import de.eldoria.jacksonbukkit.deserializer.PaperItemStackDeserializer; -import de.eldoria.jacksonbukkit.deserializer.PatternDeserializer; -import de.eldoria.jacksonbukkit.deserializer.PlayerDeserializer; -import de.eldoria.jacksonbukkit.deserializer.PotionEffectDeserializer; -import de.eldoria.jacksonbukkit.deserializer.VectorDeserializer; import de.eldoria.jacksonbukkit.entities.InventoryWrapper; -import de.eldoria.jacksonbukkit.serializer.AttributeModifierSerializer; -import de.eldoria.jacksonbukkit.serializer.BlockVectorSerializer; -import de.eldoria.jacksonbukkit.serializer.BoundingBoxSerializer; -import de.eldoria.jacksonbukkit.serializer.ColorSerializer; -import de.eldoria.jacksonbukkit.serializer.FireworkEffectSerializer; -import de.eldoria.jacksonbukkit.serializer.InventorySerializer; -import de.eldoria.jacksonbukkit.serializer.LocationSerializer; -import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer; import de.eldoria.jacksonbukkit.serializer.PaperItemStackSerializer; -import de.eldoria.jacksonbukkit.serializer.PatternSerializer; -import de.eldoria.jacksonbukkit.serializer.PlayerSerializer; -import de.eldoria.jacksonbukkit.serializer.PotionEffectSerializer; -import de.eldoria.jacksonbukkit.serializer.VectorSerializer; import org.bukkit.Color; import org.bukkit.FireworkEffect; import org.bukkit.Location; @@ -75,6 +50,18 @@ *

*/ public class JacksonPaper extends JacksonBukkit { + private final boolean legacyItemStackSerialization; + + public JacksonPaper(boolean hexColors, boolean legacyItemStackSerialization) { + super(hexColors); + this.legacyItemStackSerialization = legacyItemStackSerialization; + } + + public JacksonPaper() { + super(); + legacyItemStackSerialization = false; + } + @Override public String getModuleName() { return "JacksonPaper"; @@ -83,12 +70,16 @@ public String getModuleName() { @Override protected void addDeserializer(SimpleDeserializers deserializers) { super.addDeserializer(deserializers); - deserializers.addDeserializer(ItemStack.class, new PaperItemStackDeserializer()); + if (!legacyItemStackSerialization) { + deserializers.addDeserializer(ItemStack.class, new PaperItemStackDeserializer()); + } } @Override protected void addSerializer(SimpleSerializers serializers) { super.addSerializer(serializers); - serializers.addSerializer(ItemStack.class, new PaperItemStackSerializer()); + if (!legacyItemStackSerialization) { + serializers.addSerializer(ItemStack.class, new PaperItemStackSerializer()); + } } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java b/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java new file mode 100644 index 0000000..c7be070 --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java @@ -0,0 +1,15 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.builder; + +import de.eldoria.jacksonbukkit.JacksonBukkit; + +public class JacksonBukkitBuilder extends ModuleBuilder { + @Override + public JacksonBukkit build() { + return new JacksonBukkit(hexColors); + } +} diff --git a/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java b/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java new file mode 100644 index 0000000..487ba4e --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java @@ -0,0 +1,31 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.builder; + +import de.eldoria.jacksonbukkit.JacksonBukkit; +import de.eldoria.jacksonbukkit.JacksonPaper; +import org.bukkit.configuration.serialization.ConfigurationSerializable; + +public class JacksonPaperBuilder extends ModuleBuilder { + private boolean legacyItemStackSerialization = false; + + /** + * Use legacy serializer which serializes the item stack as a map via {@link ConfigurationSerializable}. + *

+ * This does not work if the plugin is a {@code PaperPlugin} + * + * @return builder instance + */ + public JacksonPaperBuilder useLegacyItemStackSerialization() { + legacyItemStackSerialization = true; + return this; + } + + @Override + public JacksonBukkit build() { + return new JacksonPaper(hexColors, legacyItemStackSerialization); + } +} diff --git a/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java b/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java new file mode 100644 index 0000000..e8854eb --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java @@ -0,0 +1,40 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.builder; + +import de.eldoria.jacksonbukkit.JacksonBukkit; + +public abstract class ModuleBuilder { + protected boolean hexColors = false; + + /** + * Serialize {@link org.bukkit.Color} as hex string. + * + * @return builder instance + */ + public T colorAsHex() { + hexColors = true; + return (T) this; + } + + /** + * Serialize {@link org.bukkit.Color} as hex string. + * + * @param hexColors true to serialize colors as hex. + * @return builder instance + */ + public T colorAsHex(boolean hexColors) { + this.hexColors = hexColors; + return (T) this; + } + + /** + * Build the module + * + * @return new module instance + */ + public abstract V build(); +} diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializer.java new file mode 100644 index 0000000..f331ec3 --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializer.java @@ -0,0 +1,22 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.deserializer; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import de.eldoria.jacksonbukkit.entities.ColorWrapper; +import org.bukkit.Color; + +import java.io.IOException; + +public class HexColorDeserializer extends JsonDeserializer { + + @Override + public Color deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + return ColorWrapper.of(ctxt.readValue(p, String.class)).toBukkitColor(); + } +} diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/ColorWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/ColorWrapper.java index 2657e0b..4d161af 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/ColorWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/ColorWrapper.java @@ -13,6 +13,27 @@ public static ColorWrapper of(Color color) { return new ColorWrapper(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()); } + public static ColorWrapper of(String hex) { + + int red = Integer.parseInt(hex.substring(0, 2), 16); + int green = Integer.parseInt(hex.substring(2, 4), 16); + int blue = Integer.parseInt(hex.substring(4, 6), 16); + int alpha = 255; + if (hex.length() == 8) { + alpha = Integer.parseInt(hex.substring(6, 8), 16); + } + + return new ColorWrapper(red, green, blue, alpha); + } + + public String asHex() { + return "%02X%02X%02X%02X".formatted(red, green, blue, alpha); + } + + private String pad(String s) { + return (s.length() == 1) ? "0" + s : s; + } + public Color toBukkitColor() { return Color.fromARGB(alpha, red, green, blue); } diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializer.java new file mode 100644 index 0000000..a642266 --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializer.java @@ -0,0 +1,21 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import de.eldoria.jacksonbukkit.entities.ColorWrapper; +import org.bukkit.Color; + +import java.io.IOException; + +public class HexColorSerializer extends JsonSerializer { + @Override + public void serialize(Color value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeString(ColorWrapper.of(value).asHex()); + } +} diff --git a/src/test/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializerTest.java b/src/test/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializerTest.java new file mode 100644 index 0000000..c9936c7 --- /dev/null +++ b/src/test/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializerTest.java @@ -0,0 +1,43 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.deserializer; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.Module; +import de.eldoria.jacksonbukkit.JacksonBukkit; +import de.eldoria.jacksonbukkit.SerializationTest; +import de.eldoria.jacksonbukkit.templates.ColorTemplate; +import org.bukkit.Color; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class HexColorDeserializerTest implements SerializationTest { + @Override + public Module buildModule() { + return new JacksonBukkit(true); + } + + @Test + void deserializeFromJson() throws JsonProcessingException { + assertEquals(ColorTemplate.SINGLE, fromJson("color_hex", Color.class)); + assertEquals(ColorTemplate.LIST, fromJsonList("color_hex_list", Color.class)); + } + + @Test + void deserializeFromYaml() throws JsonProcessingException { + assertEquals(ColorTemplate.SINGLE, fromYaml("color_hex", Color.class)); + assertEquals(ColorTemplate.LIST, fromYamlList("color_hex_list", Color.class)); + } + + // toml can't c: + @Test + @Disabled + void deserializeFromToml() throws JsonProcessingException { + assertEquals(ColorTemplate.SINGLE, fromToml("color_hex", Color.class)); + } +} diff --git a/src/test/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializerTest.java b/src/test/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializerTest.java new file mode 100644 index 0000000..b9a2cec --- /dev/null +++ b/src/test/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializerTest.java @@ -0,0 +1,43 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.serializer; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.Module; +import de.eldoria.jacksonbukkit.JacksonBukkit; +import de.eldoria.jacksonbukkit.SerializationTest; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import static de.eldoria.jacksonbukkit.templates.ColorTemplate.LIST; +import static de.eldoria.jacksonbukkit.templates.ColorTemplate.SINGLE; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class HexColorSerializerTest implements SerializationTest { + @Override + public Module buildModule() { + return new JacksonBukkit(true); + } + + @Test + void serializeToJson() throws JsonProcessingException { + assertEquals(json("color_hex"), toJson(SINGLE)); + assertEquals(json("color_hex_list"), toJson(LIST)); + } + + @Test + void serializeToYaml() throws JsonProcessingException { + assertEquals(yaml("color_hex"), toYaml(SINGLE)); + assertEquals(yaml("color_hex_list"), toYaml(LIST)); + } + + // toml can't c: + @Test + @Disabled + void serializeToml() throws JsonProcessingException { + assertEquals(toml("color_hex"), toToml(SINGLE)); + } +} diff --git a/src/test/resources/json/color_hex.json b/src/test/resources/json/color_hex.json new file mode 100644 index 0000000..674ad28 --- /dev/null +++ b/src/test/resources/json/color_hex.json @@ -0,0 +1 @@ +"FF3C00FF" diff --git a/src/test/resources/json/color_hex_list.json b/src/test/resources/json/color_hex_list.json new file mode 100644 index 0000000..ddcf124 --- /dev/null +++ b/src/test/resources/json/color_hex_list.json @@ -0,0 +1 @@ +[ "FF3C00FF", "14C846D7" ] diff --git a/src/test/resources/yaml/color_hex.yaml b/src/test/resources/yaml/color_hex.yaml new file mode 100644 index 0000000..8272d4c --- /dev/null +++ b/src/test/resources/yaml/color_hex.yaml @@ -0,0 +1 @@ +--- "FF3C00FF" diff --git a/src/test/resources/yaml/color_hex_list.yaml b/src/test/resources/yaml/color_hex_list.yaml new file mode 100644 index 0000000..cf2fa15 --- /dev/null +++ b/src/test/resources/yaml/color_hex_list.yaml @@ -0,0 +1,3 @@ +--- +- "FF3C00FF" +- "14C846D7" From b6824b387e9d8664f26757e31184a35fe6a863a2 Mon Sep 17 00:00:00 2001 From: Lilly Tempest <46890129+rainbowdashlabs@users.noreply.github.com> Date: Fri, 17 Mar 2023 15:18:12 +0100 Subject: [PATCH 5/7] Chore/docs (#10) * Cleanup and documentation * Update readme --- Readme.md | 49 ++++++++++++++++--- .../builder/JacksonBukkitBuilder.java | 3 ++ .../builder/JacksonPaperBuilder.java | 3 ++ .../jacksonbukkit/builder/ModuleBuilder.java | 6 +++ .../jacksonbukkit/builder/package-info.java | 5 ++ .../AttributeModifierDeserializer.java | 3 ++ .../deserializer/BlockVectorDeserializer.java | 4 +- .../deserializer/BoundingBoxDeserializer.java | 7 ++- .../BukkitItemStackDeserializer.java | 8 ++- .../deserializer/ColorDeserializer.java | 3 ++ .../FireworkEffectDeserializer.java | 4 +- .../deserializer/HexColorDeserializer.java | 3 ++ .../deserializer/InventoryDeserializer.java | 3 ++ .../deserializer/LocationDeserializer.java | 6 ++- .../NamespacedKeyDeserializer.java | 6 ++- .../PaperItemStackDeserializer.java | 3 ++ .../deserializer/PatternDeserializer.java | 6 ++- .../deserializer/PlayerDeserializer.java | 4 +- .../PotionEffectDeserializer.java | 6 ++- .../deserializer/VectorDeserializer.java | 4 +- .../deserializer/package-info.java | 5 ++ .../entities/AttributeModifierWrapper.java | 15 ++++++ .../jacksonbukkit/entities/BoundingBox.java | 24 --------- .../entities/BoundingBoxWrapper.java | 41 ++++++++++++++++ .../jacksonbukkit/entities/ColorWrapper.java | 27 ++++++++++ .../entities/FireworkEffectWrapper.java | 28 ++++++++++- .../entities/InventoryWrapper.java | 9 ++++ .../entities/LocationWrapper.java | 18 ++++++- .../entities/NamespacedKeyWrapper.java | 20 +++++++- .../entities/PatternWrapper.java | 14 +++++- .../entities/PotionEffectWrapper.java | 28 ++++++++++- .../jacksonbukkit/entities/VectorWrapper.java | 23 +++++++-- .../jacksonbukkit/entities/package-info.java | 5 ++ .../eldoria/jacksonbukkit/package-info.java | 5 ++ .../AttributeModifierSerializer.java | 3 ++ .../serializer/BlockVectorSerializer.java | 3 ++ .../serializer/BoundingBoxSerializer.java | 6 ++- .../serializer/BukkitItemStackSerializer.java | 4 +- .../serializer/ColorSerializer.java | 3 ++ .../serializer/FireworkEffectSerializer.java | 12 ++--- .../serializer/HexColorSerializer.java | 3 ++ .../serializer/InventorySerializer.java | 3 ++ .../serializer/LocationSerializer.java | 5 +- .../serializer/NamespacedKeySerializer.java | 5 +- .../serializer/PaperItemStackSerializer.java | 3 ++ .../serializer/PatternSerializer.java | 5 +- .../serializer/PlayerSerializer.java | 3 ++ .../serializer/PotionEffectSerializer.java | 12 ++--- .../serializer/VectorSerializer.java | 3 ++ .../serializer/package-info.java | 4 ++ 50 files changed, 393 insertions(+), 82 deletions(-) create mode 100644 src/main/java/de/eldoria/jacksonbukkit/builder/package-info.java create mode 100644 src/main/java/de/eldoria/jacksonbukkit/deserializer/package-info.java delete mode 100644 src/main/java/de/eldoria/jacksonbukkit/entities/BoundingBox.java create mode 100644 src/main/java/de/eldoria/jacksonbukkit/entities/BoundingBoxWrapper.java create mode 100644 src/main/java/de/eldoria/jacksonbukkit/entities/package-info.java create mode 100644 src/main/java/de/eldoria/jacksonbukkit/package-info.java create mode 100644 src/main/java/de/eldoria/jacksonbukkit/serializer/package-info.java diff --git a/Readme.md b/Readme.md index 3ac5d4f..ede32f0 100644 --- a/Readme.md +++ b/Readme.md @@ -35,25 +35,58 @@ dependencies { ``` -## Usage +## Module Creation -Simply add the JacksonBukkit module to the builder of your choice. +You can either create the `JacksonBukkit` and `JacksonPaper` module directly or use the builder for easy modification. +Usage of the builder is recommended. +Builder for spigot and paper can both be accessed via the `JacksonBukkit` class. + +### Creating a Spigot/Bukkit Module ```java - ObjectMapper JSON = JsonMapper.builder() - .addModule(new JacksonBukkit()) - .build(); + ObjectMapper JSON=JsonMapper.builder() + .addModule(JacksonBukkit.spigot().build()) + .build(); +``` + +### Creating a Paper Module +```java + ObjectMapper JSON=JsonMapper.builder() + .addModule(JacksonBukkit.paper().build()) + .build(); ``` +### Difference between Paper and Bukkit module + +Paper serializes `ItemStack`s to a Base64 encoded byte array instead of using spigots serialization. +This will only work on paper servers and not on spigot servers. +The builder allows to use spigots serialization on paper servers as well, but this is not recommended. + +When creating a paper plugin the `JacksonBukkit` module is no longer able to serialize `ItemStacks`. +you need to use `JacksonPaper` in that case and make sure that you are not using legacy serialization. + +### More customization + +There are some more customizations + +#### Color + +Colors will be read and written to an object containing a value for red, green, blue and alpha by default. +By calling `ModuleBuilder#colorAsHex()` you can enable hex codes. +This will attempt to read each color as a HEX string with RGBA or RGB format. +It will also write colors as ARGB. + +**Warning:** As of now you can use either way, but not both at the same time. Mixing up format will cause errors. + ## Supported Classes We support all classes implementing `ConfigurationSerializable`. To be precise we support the following classes: - Vector - BlockVector -- Color -- ItemStack (Serialized as Base64 encoded bytes as recommended by [paper](https://jd.papermc.io/paper/1.19/org/bukkit/inventory/ItemStack.html#serializeAsBytes())) +- Color (Can be serialized as object or as hex string) +- ItemStack (Serialized as map for `JacksonBukkit`. Serialized as Base64 encoded bytes for `JacksonPaper`) - PotionEffect - FireworkEffect - Pattern @@ -65,4 +98,4 @@ We support all classes implementing `ConfigurationSerializable`. To be precise w - NamespacedKey - OfflinePlayer -- Inventory via InventoryWrapper class +- Inventory via `InventoryWrapper` class diff --git a/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java b/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java index c7be070..9b1a478 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java +++ b/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonBukkitBuilder.java @@ -7,6 +7,9 @@ import de.eldoria.jacksonbukkit.JacksonBukkit; +/** + * Class to build a {@link JacksonBukkit} module. + */ public class JacksonBukkitBuilder extends ModuleBuilder { @Override public JacksonBukkit build() { diff --git a/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java b/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java index 487ba4e..e6a27d4 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java +++ b/src/main/java/de/eldoria/jacksonbukkit/builder/JacksonPaperBuilder.java @@ -9,6 +9,9 @@ import de.eldoria.jacksonbukkit.JacksonPaper; import org.bukkit.configuration.serialization.ConfigurationSerializable; +/** + * Class to build a {@link JacksonPaper} module. + */ public class JacksonPaperBuilder extends ModuleBuilder { private boolean legacyItemStackSerialization = false; diff --git a/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java b/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java index e8854eb..0f935e0 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java +++ b/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java @@ -7,6 +7,12 @@ import de.eldoria.jacksonbukkit.JacksonBukkit; +/** + * Base class for module builder. + * + * @param type of builder + * @param type of created module + */ public abstract class ModuleBuilder { protected boolean hexColors = false; diff --git a/src/main/java/de/eldoria/jacksonbukkit/builder/package-info.java b/src/main/java/de/eldoria/jacksonbukkit/builder/package-info.java new file mode 100644 index 0000000..9e203a9 --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/builder/package-info.java @@ -0,0 +1,5 @@ +/** + * Package containing {@link de.eldoria.jacksonbukkit.builder.ModuleBuilder} to build the {@link com.fasterxml.jackson.databind.Module}s + */ + +package de.eldoria.jacksonbukkit.builder; diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/AttributeModifierDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/AttributeModifierDeserializer.java index d9c981f..fb4beff 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/AttributeModifierDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/AttributeModifierDeserializer.java @@ -13,6 +13,9 @@ import java.io.IOException; +/** + * Class for deserialization of {@link AttributeModifier}. + */ public class AttributeModifierDeserializer extends JsonDeserializer { @Override public AttributeModifier deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/BlockVectorDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/BlockVectorDeserializer.java index 34e3bea..402e26b 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/BlockVectorDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/BlockVectorDeserializer.java @@ -5,7 +5,6 @@ */ package de.eldoria.jacksonbukkit.deserializer; -import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -14,6 +13,9 @@ import java.io.IOException; +/** + * Class for deserialization of {@link BlockVector}. + */ public class BlockVectorDeserializer extends JsonDeserializer { @Override public BlockVector deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/BoundingBoxDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/BoundingBoxDeserializer.java index d880d7e..e7859e4 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/BoundingBoxDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/BoundingBoxDeserializer.java @@ -5,17 +5,20 @@ */ package de.eldoria.jacksonbukkit.deserializer; -import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; +import de.eldoria.jacksonbukkit.entities.BoundingBoxWrapper; import org.bukkit.util.BoundingBox; import java.io.IOException; +/** + * Class for deserialization of {@link BoundingBox}. + */ public class BoundingBoxDeserializer extends JsonDeserializer { @Override public BoundingBox deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - return ctxt.readValue(p, de.eldoria.jacksonbukkit.entities.BoundingBox.class).toBukkitBoundingBox(); + return ctxt.readValue(p, BoundingBoxWrapper.class).toBukkitBoundingBox(); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/BukkitItemStackDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/BukkitItemStackDeserializer.java index 89c9744..23120ab 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/BukkitItemStackDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/BukkitItemStackDeserializer.java @@ -9,16 +9,14 @@ import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.type.MapType; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.inventory.ItemStack; import java.io.IOException; -import java.util.Base64; import java.util.HashMap; -import java.util.Map; +/** + * Class for deserialization of {@link ItemStack} as a map. + */ public class BukkitItemStackDeserializer extends JsonDeserializer { @Override public ItemStack deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/ColorDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/ColorDeserializer.java index 0165642..af59c84 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/ColorDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/ColorDeserializer.java @@ -13,6 +13,9 @@ import java.io.IOException; +/** + * Class for deserialization of {@link Color} as object. + */ public class ColorDeserializer extends JsonDeserializer { @Override diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/FireworkEffectDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/FireworkEffectDeserializer.java index e9c0e17..9e9195a 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/FireworkEffectDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/FireworkEffectDeserializer.java @@ -5,7 +5,6 @@ */ package de.eldoria.jacksonbukkit.deserializer; -import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -14,6 +13,9 @@ import java.io.IOException; +/** + * Class for deserialization of {@link FireworkEffect}. + */ public class FireworkEffectDeserializer extends JsonDeserializer { @Override public FireworkEffect deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializer.java index f331ec3..43ab040 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/HexColorDeserializer.java @@ -13,6 +13,9 @@ import java.io.IOException; +/** + * Class for deserialization of {@link Color} as hexadecimal string. + */ public class HexColorDeserializer extends JsonDeserializer { @Override diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/InventoryDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/InventoryDeserializer.java index 2e9f395..3d80627 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/InventoryDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/InventoryDeserializer.java @@ -12,6 +12,9 @@ import java.io.IOException; +/** + * Class for deserialization of {@link InventoryWrapper}. + */ public class InventoryDeserializer extends JsonDeserializer { @Override public InventoryWrapper deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/LocationDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/LocationDeserializer.java index 3ca378c..b690996 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/LocationDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/LocationDeserializer.java @@ -5,7 +5,6 @@ */ package de.eldoria.jacksonbukkit.deserializer; -import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -14,9 +13,12 @@ import java.io.IOException; +/** + * Class for deserialization of {@link Location}. + */ public class LocationDeserializer extends JsonDeserializer { @Override public Location deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - return ctxt.readValue(p, LocationWrapper.class).toLocation(); + return ctxt.readValue(p, LocationWrapper.class).toBukkitLocation(); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializer.java index 58aecfe..0946170 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/NamespacedKeyDeserializer.java @@ -5,7 +5,6 @@ */ package de.eldoria.jacksonbukkit.deserializer; -import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -14,9 +13,12 @@ import java.io.IOException; +/** + * Class for deserialization of {@link NamespacedKey}. + */ public class NamespacedKeyDeserializer extends JsonDeserializer { @Override public NamespacedKey deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - return ctxt.readValue(p, NamespacedKeyWrapper.class).toKey(); + return ctxt.readValue(p, NamespacedKeyWrapper.class).toBukkitNamespacedKey(); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/PaperItemStackDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/PaperItemStackDeserializer.java index b21f066..797e834 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/PaperItemStackDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/PaperItemStackDeserializer.java @@ -13,6 +13,9 @@ import java.io.IOException; import java.util.Base64; +/** + * Class for deserialization of {@link ItemStack} as {@code byte[]}. + */ public class PaperItemStackDeserializer extends JsonDeserializer { @Override public ItemStack deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/PatternDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/PatternDeserializer.java index ffcd80f..41cbb5d 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/PatternDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/PatternDeserializer.java @@ -5,7 +5,6 @@ */ package de.eldoria.jacksonbukkit.deserializer; -import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -14,9 +13,12 @@ import java.io.IOException; +/** + * Class for deserialization of {@link Pattern}. + */ public class PatternDeserializer extends JsonDeserializer { @Override public Pattern deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - return ctxt.readValue(p, PatternWrapper.class).toPattern(); + return ctxt.readValue(p, PatternWrapper.class).toBukkitPattern(); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/PlayerDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/PlayerDeserializer.java index f5f141d..d6d2c97 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/PlayerDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/PlayerDeserializer.java @@ -5,7 +5,6 @@ */ package de.eldoria.jacksonbukkit.deserializer; -import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -15,6 +14,9 @@ import java.io.IOException; import java.util.UUID; +/** + * Class for deserialization of {@link OfflinePlayer}. + */ public class PlayerDeserializer extends JsonDeserializer { @Override public OfflinePlayer deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/PotionEffectDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/PotionEffectDeserializer.java index 50bbbf7..b955b4d 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/PotionEffectDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/PotionEffectDeserializer.java @@ -5,7 +5,6 @@ */ package de.eldoria.jacksonbukkit.deserializer; -import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -14,9 +13,12 @@ import java.io.IOException; +/** + * Class for deserialization of {@link PotionEffect}. + */ public class PotionEffectDeserializer extends JsonDeserializer { @Override public PotionEffect deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - return ctxt.readValue(p, PotionEffectWrapper.class).toPotionEffect(); + return ctxt.readValue(p, PotionEffectWrapper.class).toBukkitPotionEffect(); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/VectorDeserializer.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/VectorDeserializer.java index 4c1fdfb..8de4257 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/deserializer/VectorDeserializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/VectorDeserializer.java @@ -5,7 +5,6 @@ */ package de.eldoria.jacksonbukkit.deserializer; -import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; @@ -14,6 +13,9 @@ import java.io.IOException; +/** + * Class for deserialization of {@link VectorDeserializer}. + */ public class VectorDeserializer extends JsonDeserializer { @Override public Vector deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/deserializer/package-info.java b/src/main/java/de/eldoria/jacksonbukkit/deserializer/package-info.java new file mode 100644 index 0000000..0cbb48d --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/deserializer/package-info.java @@ -0,0 +1,5 @@ +/** + * Package containing deserializer. + */ + +package de.eldoria.jacksonbukkit.deserializer; diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/AttributeModifierWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/AttributeModifierWrapper.java index f9797d4..a3aab55 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/AttributeModifierWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/AttributeModifierWrapper.java @@ -10,9 +10,19 @@ import java.util.UUID; + +/** + * Class for wrapping an {@link AttributeModifier}. + */ public record AttributeModifierWrapper(UUID uuid, String name, double amount, AttributeModifier.Operation operation, EquipmentSlot equipmentSlot) { + /** + * Create a new {@link AttributeModifierWrapper} based on an {@link AttributeModifier}. + * + * @param attributeModifier attribute modifier instance + * @return new {@link AttributeModifierWrapper} instance + */ public static AttributeModifierWrapper of(AttributeModifier attributeModifier) { return new AttributeModifierWrapper( attributeModifier.getUniqueId(), @@ -22,6 +32,11 @@ public static AttributeModifierWrapper of(AttributeModifier attributeModifier) { attributeModifier.getSlot()); } + /** + * Constructs a new {@link AttributeModifier} based on wrapper values. + * + * @return new {@link AttributeModifier} instance + */ public AttributeModifier toBukkitAttributeModifier() { return new AttributeModifier( uuid, diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/BoundingBox.java b/src/main/java/de/eldoria/jacksonbukkit/entities/BoundingBox.java deleted file mode 100644 index 7110ebb..0000000 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/BoundingBox.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-License-Identifier: MIT - * - * Copyright (C) EldoriaRPG Team and Contributor - */ -package de.eldoria.jacksonbukkit.entities; - -public record BoundingBox(VectorWrapper corner1, VectorWrapper corner2) { - - public static BoundingBox of(org.bukkit.util.BoundingBox boundingBox) { - return new BoundingBox( - VectorWrapper.of(boundingBox.getMin()), - VectorWrapper.of(boundingBox.getMax()) - ); - } - - public org.bukkit.util.BoundingBox toBukkitBoundingBox() { - return org.bukkit.util.BoundingBox.of( - corner1.toBukkitVector(), - corner2.toBukkitVector() - ); - } - -} diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/BoundingBoxWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/BoundingBoxWrapper.java new file mode 100644 index 0000000..82fa7c2 --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/BoundingBoxWrapper.java @@ -0,0 +1,41 @@ +/* + * SPDX-License-Identifier: MIT + * + * Copyright (C) EldoriaRPG Team and Contributor + */ +package de.eldoria.jacksonbukkit.entities; + +import org.bukkit.util.BoundingBox; +import org.bukkit.util.Vector; + +/** + * Class for wrapping a {@link BoundingBox}. + */ +public record BoundingBoxWrapper(Vector corner1, Vector corner2) { + + /** + * Create a new {@link BoundingBoxWrapper} based on a {@link BoundingBox}. + * + * @param boundingBox bounding box instance + * @return new {@link BoundingBoxWrapper} instance + */ + public static BoundingBoxWrapper of(BoundingBox boundingBox) { + return new BoundingBoxWrapper( + boundingBox.getMin(), + boundingBox.getMax() + ); + } + + /** + * Constructs a new {@link BoundingBox} based on wrapper values. + * + * @return new {@link BoundingBox} instance + */ + public BoundingBox toBukkitBoundingBox() { + return BoundingBox.of( + corner1, + corner2 + ); + } + +} diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/ColorWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/ColorWrapper.java index 4d161af..9f5ccca 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/ColorWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/ColorWrapper.java @@ -7,12 +7,29 @@ import org.bukkit.Color; +/** + * Class for wrapping a {@link Color}. + *

+ * It also allows transformation to hex code and parsing of hex code. + */ public record ColorWrapper(int red, int green, int blue, int alpha) { + /** + * Create a new {@link ColorWrapper} based on a {@link Color}. + * + * @param color color instance + * @return new {@link ColorWrapper} instance + */ public static ColorWrapper of(Color color) { return new ColorWrapper(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()); } + /** + * Create a new {@link ColorWrapper} based on a hex string with RGBA or RGB. + * + * @param hex color as hex string + * @return new {@link ColorWrapper} instance + */ public static ColorWrapper of(String hex) { int red = Integer.parseInt(hex.substring(0, 2), 16); @@ -26,6 +43,11 @@ public static ColorWrapper of(String hex) { return new ColorWrapper(red, green, blue, alpha); } + /** + * Get the string as hex string with RGBA. + * + * @return hex color as RGBA + */ public String asHex() { return "%02X%02X%02X%02X".formatted(red, green, blue, alpha); } @@ -34,6 +56,11 @@ private String pad(String s) { return (s.length() == 1) ? "0" + s : s; } + /** + * Constructs a new color instance based on wrapper values. + * + * @return new color instance + */ public Color toBukkitColor() { return Color.fromARGB(alpha, red, green, blue); } diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/FireworkEffectWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/FireworkEffectWrapper.java index 86ae5be..d9f84c6 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/FireworkEffectWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/FireworkEffectWrapper.java @@ -5,12 +5,36 @@ */ package de.eldoria.jacksonbukkit.entities; +import org.bukkit.Color; import org.bukkit.FireworkEffect; import java.util.List; -public record FireworkEffectWrapper(FireworkEffect.Type type, List colors, - List fadeColors, boolean flicker, boolean trail) { +/** + * Class for wrapping a {@link FireworkEffect}. + */ +public record FireworkEffectWrapper(FireworkEffect.Type type, List colors, List fadeColors, + boolean flicker, boolean trail) { + /** + * Create a new {@link FireworkEffectWrapper} based on a {@link FireworkEffect}. + * + * @param fireworkEffect firework effect instance + * @return new {@link FireworkEffectWrapper} instance + */ + public static FireworkEffectWrapper of(FireworkEffect fireworkEffect) { + FireworkEffect.Type type = fireworkEffect.getType(); + List colors = fireworkEffect.getColors(); + List fadeColors = fireworkEffect.getFadeColors(); + boolean flicker = fireworkEffect.hasFlicker(); + boolean trail = fireworkEffect.hasTrail(); + return new FireworkEffectWrapper(type, colors, fadeColors, flicker, trail); + } + + /** + * Constructs a new {@link FireworkEffect} based on wrapper values. + * + * @return new {@link FireworkEffect} instance + */ public FireworkEffect toFireworkEffect() { return FireworkEffect.builder().with(type).withColor(colors).withFade(fadeColors).flicker(flicker).trail(trail).build(); } diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/InventoryWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/InventoryWrapper.java index ae8c288..5f8ed94 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/InventoryWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/InventoryWrapper.java @@ -9,8 +9,17 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +/** + * Class for wrapping an {@link Inventory}. + */ public record InventoryWrapper(InventoryType inventoryType, ItemStack[] contents) { + /** + * Create a new {@link InventoryWrapper} based on a {@link Inventory}. + * + * @param inventory inventory instance + * @return new {@link InventoryWrapper} instance + */ public static InventoryWrapper of(Inventory inventory) { return new InventoryWrapper(inventory.getType(), inventory.getContents()); } diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/LocationWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/LocationWrapper.java index a4b5b9e..ca6945a 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/LocationWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/LocationWrapper.java @@ -12,17 +12,31 @@ import java.util.UUID; +/** + * Class for wrapping a {@link Location}. + */ public record LocationWrapper(@Nullable UUID uid, @Nullable String name, double xCoord, double yCoord, double zCoord, float yaw, float pitch) { - public static LocationWrapper fromLocation(Location loc) { + /** + * Create a new {@link LocationWrapper} based on a {@link Location}. + * + * @param loc location instance + * @return new {@link LocationWrapper} instance + */ + public static LocationWrapper of(Location loc) { if (loc.getWorld() == null) { return new LocationWrapper(null, null, loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch()); } return new LocationWrapper(loc.getWorld().getUID(), loc.getWorld().getName(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch()); } - public Location toLocation() { + /** + * Constructs a new {@link Location} based on wrapper values. + * + * @return new {@link Location} instance + */ + public Location toBukkitLocation() { if (uid != null && name != null) { World world = Bukkit.getWorld(uid); if (world == null) { diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/NamespacedKeyWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/NamespacedKeyWrapper.java index 53142ee..d7bcf2b 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/NamespacedKeyWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/NamespacedKeyWrapper.java @@ -7,8 +7,26 @@ import org.bukkit.NamespacedKey; +/** + * Class for wrapping a {@link NamespacedKey}. + */ public record NamespacedKeyWrapper(String namespace, String key) { - public NamespacedKey toKey() { + /** + * Create a new {@link NamespacedKeyWrapper} based on a {@link NamespacedKey}. + * + * @param key namespaced key instance + * @return new {@link NamespacedKeyWrapper} instance + */ + public static NamespacedKeyWrapper of(NamespacedKey key) { + return new NamespacedKeyWrapper(key.namespace(), key.getKey()); + } + + /** + * Constructs a new {@link NamespacedKey} based on wrapper values. + * + * @return new {@link NamespacedKey} instance + */ + public NamespacedKey toBukkitNamespacedKey() { return new NamespacedKey(namespace, key); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/PatternWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/PatternWrapper.java index 532d0f9..fb2340c 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/PatternWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/PatternWrapper.java @@ -9,8 +9,20 @@ import org.bukkit.block.banner.Pattern; import org.bukkit.block.banner.PatternType; +/** + * Class for wrapping a {@link Pattern}. + */ public record PatternWrapper(DyeColor color, PatternType pattern) { - public Pattern toPattern() { + public static PatternWrapper of(Pattern pattern) { + return new PatternWrapper(pattern.getColor(), pattern.getPattern()); + } + + /** + * Constructs a new {@link Pattern} based on wrapper values. + * + * @return new {@link Pattern} instance + */ + public Pattern toBukkitPattern() { return new Pattern(color, pattern); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/PotionEffectWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/PotionEffectWrapper.java index 48df65f..2848bf9 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/PotionEffectWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/PotionEffectWrapper.java @@ -9,9 +9,35 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; +/** + * Class for wrapping a {@link PotionEffect}. + */ public record PotionEffectWrapper(int amplifier, int duration, NamespacedKey type, boolean ambient, boolean particles, boolean icon) { - public PotionEffect toPotionEffect() { + + /** + * Create a new {@link PotionEffectWrapper} based on a {@link PotionEffect}. + * + * @param effect potion effect instance + * @return new {@link PotionEffectWrapper} instance + */ + public static PotionEffectWrapper of(PotionEffect effect) { + int amplifier = effect.getAmplifier(); + int duration = effect.getDuration(); + PotionEffectType type = effect.getType(); + boolean ambient = effect.isAmbient(); + boolean icon = effect.hasIcon(); + boolean particles = effect.hasParticles(); + return new PotionEffectWrapper(amplifier, duration, type.getKey(), ambient, particles, icon); + + } + + /** + * Constructs a new {@link PotionEffect} based on wrapper values. + * + * @return new {@link PotionEffect} instance + */ + public PotionEffect toBukkitPotionEffect() { return new PotionEffect(PotionEffectType.getByKey(type), duration, amplifier, ambient, particles, icon); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/VectorWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/VectorWrapper.java index 0576a3e..d09c5b7 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/VectorWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/VectorWrapper.java @@ -6,16 +6,33 @@ package de.eldoria.jacksonbukkit.entities; import org.bukkit.util.BlockVector; +import org.bukkit.util.Vector; +/** + * Class for wrapping a {@link Vector}. + *

+ * Allows creation of a {@link Vector} or {@link BlockVector}. + */ public record VectorWrapper(double xCoord, double yCoord, double zCoord) { - public static VectorWrapper of(org.bukkit.util.Vector vector) { + /** + * Create a new {@link VectorWrapper} based on a {@link Vector}. + * + * @param vector vector instance + * @return new {@link VectorWrapper} instance + */ + public static VectorWrapper of(Vector vector) { return new VectorWrapper(vector.getX(), vector.getY(), vector.getZ()); } - public org.bukkit.util.Vector toBukkitVector() { - return new org.bukkit.util.Vector(xCoord, yCoord, zCoord); + public Vector toBukkitVector() { + return new Vector(xCoord, yCoord, zCoord); } + /** + * Constructs a new {@link BlockVector} based on wrapper values. + * + * @return new {@link BlockVector} instance + */ public BlockVector toBukkitBlockVector() { return new BlockVector(xCoord, yCoord, zCoord); } diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/package-info.java b/src/main/java/de/eldoria/jacksonbukkit/entities/package-info.java new file mode 100644 index 0000000..05ac9be --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/package-info.java @@ -0,0 +1,5 @@ +/** + * Package containing wrapper classes for serialization and deserialization + */ + +package de.eldoria.jacksonbukkit.entities; diff --git a/src/main/java/de/eldoria/jacksonbukkit/package-info.java b/src/main/java/de/eldoria/jacksonbukkit/package-info.java new file mode 100644 index 0000000..13087aa --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/package-info.java @@ -0,0 +1,5 @@ +/** + * Main package containing the {@link com.fasterxml.jackson.databind.Module} implementations. + */ + +package de.eldoria.jacksonbukkit; diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/AttributeModifierSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/AttributeModifierSerializer.java index 9627b42..69d3724 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/AttributeModifierSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/AttributeModifierSerializer.java @@ -13,6 +13,9 @@ import java.io.IOException; +/** + * Class for serialization of {@link AttributeModifier}. + */ public class AttributeModifierSerializer extends JsonSerializer { @Override public void serialize(AttributeModifier value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/BlockVectorSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/BlockVectorSerializer.java index e6c8a19..2e0d7dd 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/BlockVectorSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/BlockVectorSerializer.java @@ -13,6 +13,9 @@ import java.io.IOException; +/** + * Class for serialization of {@link BlockVector}. + */ public class BlockVectorSerializer extends JsonSerializer { @Override public void serialize(BlockVector value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/BoundingBoxSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/BoundingBoxSerializer.java index e4a5d1f..6dccc6f 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/BoundingBoxSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/BoundingBoxSerializer.java @@ -8,13 +8,17 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; +import de.eldoria.jacksonbukkit.entities.BoundingBoxWrapper; import org.bukkit.util.BoundingBox; import java.io.IOException; +/** + * Class for serialization of {@link BoundingBox}. + */ public class BoundingBoxSerializer extends JsonSerializer { @Override public void serialize(BoundingBox value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeObject(de.eldoria.jacksonbukkit.entities.BoundingBox.of(value)); + gen.writeObject(BoundingBoxWrapper.of(value)); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializer.java index c046801..bfabf07 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/BukkitItemStackSerializer.java @@ -11,8 +11,10 @@ import org.bukkit.inventory.ItemStack; import java.io.IOException; -import java.util.Base64; +/** + * Class for serialization of {@link ItemStack}. + */ public class BukkitItemStackSerializer extends JsonSerializer { @Override public void serialize(ItemStack value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/ColorSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/ColorSerializer.java index cedb642..7b98787 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/ColorSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/ColorSerializer.java @@ -13,6 +13,9 @@ import java.io.IOException; +/** + * Class for serialization of {@link Color}. + */ public class ColorSerializer extends JsonSerializer { @Override public void serialize(Color value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/FireworkEffectSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/FireworkEffectSerializer.java index ede76f5..d994099 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/FireworkEffectSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/FireworkEffectSerializer.java @@ -9,20 +9,16 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import de.eldoria.jacksonbukkit.entities.FireworkEffectWrapper; -import org.bukkit.Color; import org.bukkit.FireworkEffect; import java.io.IOException; -import java.util.List; +/** + * Class for serialization of {@link FireworkEffect}. + */ public class FireworkEffectSerializer extends JsonSerializer { @Override public void serialize(FireworkEffect value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - FireworkEffect.Type type = value.getType(); - List colors = value.getColors(); - List fadeColors = value.getFadeColors(); - boolean flicker = value.hasFlicker(); - boolean trail = value.hasTrail(); - gen.writeObject(new FireworkEffectWrapper(type, colors, fadeColors, flicker, trail)); + gen.writeObject(FireworkEffectWrapper.of(value)); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializer.java index a642266..a9194f3 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/HexColorSerializer.java @@ -13,6 +13,9 @@ import java.io.IOException; +/** + * Class for serialization of {@link Color}. + */ public class HexColorSerializer extends JsonSerializer { @Override public void serialize(Color value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/InventorySerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/InventorySerializer.java index be95d61..f063503 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/InventorySerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/InventorySerializer.java @@ -12,6 +12,9 @@ import java.io.IOException; +/** + * Class for serialization of {@link InventoryWrapper}. + */ public class InventorySerializer extends JsonSerializer { @Override public void serialize(InventoryWrapper value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/LocationSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/LocationSerializer.java index 046325b..878ab96 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/LocationSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/LocationSerializer.java @@ -13,9 +13,12 @@ import java.io.IOException; +/** + * Class for serialization of {@link Location}. + */ public class LocationSerializer extends JsonSerializer { @Override public void serialize(Location value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeObject(LocationWrapper.fromLocation(value)); + gen.writeObject(LocationWrapper.of(value)); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializer.java index 5e34cda..ab87299 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/NamespacedKeySerializer.java @@ -13,9 +13,12 @@ import java.io.IOException; +/** + * Class for serialization of {@link NamespacedKey}. + */ public class NamespacedKeySerializer extends JsonSerializer { @Override public void serialize(NamespacedKey value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeObject(new NamespacedKeyWrapper(value.namespace(), value.getKey())); + gen.writeObject(NamespacedKeyWrapper.of(value)); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/PaperItemStackSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/PaperItemStackSerializer.java index 07c3ca8..16658d9 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/PaperItemStackSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/PaperItemStackSerializer.java @@ -13,6 +13,9 @@ import java.io.IOException; import java.util.Base64; +/** + * Class for serialization of {@link ItemStack} as {@code byte[]}. + */ public class PaperItemStackSerializer extends JsonSerializer { @Override public void serialize(ItemStack value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/PatternSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/PatternSerializer.java index f1ab982..52ba4d8 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/PatternSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/PatternSerializer.java @@ -13,9 +13,12 @@ import java.io.IOException; +/** + * Class for serialization of {@link Pattern}. + */ public class PatternSerializer extends JsonSerializer { @Override public void serialize(Pattern value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeObject(new PatternWrapper(value.getColor(), value.getPattern())); + gen.writeObject(PatternWrapper.of(value)); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/PlayerSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/PlayerSerializer.java index 1acf46e..72f4f47 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/PlayerSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/PlayerSerializer.java @@ -12,6 +12,9 @@ import java.io.IOException; +/** + * Class for serialization of {@link OfflinePlayer}. + */ public class PlayerSerializer extends JsonSerializer { @Override public void serialize(OfflinePlayer value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/PotionEffectSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/PotionEffectSerializer.java index 36431ac..754e4da 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/PotionEffectSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/PotionEffectSerializer.java @@ -10,19 +10,15 @@ import com.fasterxml.jackson.databind.SerializerProvider; import de.eldoria.jacksonbukkit.entities.PotionEffectWrapper; import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; import java.io.IOException; +/** + * Class for serialization of {@link PotionEffect}. + */ public class PotionEffectSerializer extends JsonSerializer { @Override public void serialize(PotionEffect value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - int amplifier = value.getAmplifier(); - int duration = value.getDuration(); - PotionEffectType type = value.getType(); - boolean ambient = value.isAmbient(); - boolean icon = value.hasIcon(); - boolean particles = value.hasParticles(); - gen.writeObject(new PotionEffectWrapper(amplifier, duration, type.getKey(), ambient, particles, icon)); + gen.writeObject(PotionEffectWrapper.of(value)); } } diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/VectorSerializer.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/VectorSerializer.java index 23ef879..4966487 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/serializer/VectorSerializer.java +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/VectorSerializer.java @@ -13,6 +13,9 @@ import java.io.IOException; +/** + * Class for serialization of {@link Vector}. + */ public class VectorSerializer extends JsonSerializer { @Override public void serialize(Vector value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/src/main/java/de/eldoria/jacksonbukkit/serializer/package-info.java b/src/main/java/de/eldoria/jacksonbukkit/serializer/package-info.java new file mode 100644 index 0000000..74c0e97 --- /dev/null +++ b/src/main/java/de/eldoria/jacksonbukkit/serializer/package-info.java @@ -0,0 +1,4 @@ +/** + * Package containing serializers. + */ +package de.eldoria.jacksonbukkit.serializer; From af0b387875b152915246f49a60383245e1470a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20F=C3=BClling?= <46890129+RainbowDashLabs@users.noreply.github.com> Date: Fri, 17 Mar 2023 15:19:04 +0100 Subject: [PATCH 6/7] Bump version --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index e3321ca..ecd5f32 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } group = "de.eldoria" -version = "1.0.1" +version = "1.0.2" repositories { mavenCentral() From cfd19c55c70dfb8dc5317fcff836722ec3fd60bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20F=C3=BClling?= <46890129+RainbowDashLabs@users.noreply.github.com> Date: Fri, 17 Mar 2023 15:24:28 +0100 Subject: [PATCH 7/7] Update docs --- Readme.md | 2 +- .../eldoria/jacksonbukkit/JacksonBukkit.java | 19 ++++++++++++++++++- .../eldoria/jacksonbukkit/JacksonPaper.java | 10 +++++++++- .../jacksonbukkit/builder/ModuleBuilder.java | 3 +++ .../entities/PatternWrapper.java | 7 +++++++ .../jacksonbukkit/entities/VectorWrapper.java | 5 +++++ 6 files changed, 43 insertions(+), 3 deletions(-) diff --git a/Readme.md b/Readme.md index ede32f0..c8964fc 100644 --- a/Readme.md +++ b/Readme.md @@ -75,7 +75,7 @@ There are some more customizations Colors will be read and written to an object containing a value for red, green, blue and alpha by default. By calling `ModuleBuilder#colorAsHex()` you can enable hex codes. This will attempt to read each color as a HEX string with RGBA or RGB format. -It will also write colors as ARGB. +It will also write colors as RGBA. **Warning:** As of now you can use either way, but not both at the same time. Mixing up format will cause errors. diff --git a/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java b/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java index 2414c17..be059e9 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java +++ b/src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java @@ -77,15 +77,22 @@ *

  • {@link OfflinePlayer} *
  • {@link Inventory} via {@link InventoryWrapper} * - *

    */ public class JacksonBukkit extends Module { private final boolean hexColors; + /** + * Create a new JacksonBukkit module. + * + * @param hexColors true to serialize colors as hex by default + */ public JacksonBukkit(boolean hexColors) { this.hexColors = hexColors; } + /** + * Create a new JacksonPaper module. + */ public JacksonBukkit() { hexColors = false; } @@ -143,6 +150,11 @@ public void setupModule(SetupContext context) { context.addDeserializers(deserializers); } + /** + * Add serializer to the serializers + * + * @param serializers serializers + */ protected void addSerializer(SimpleSerializers serializers) { serializers.addSerializer(Vector.class, new VectorSerializer()); serializers.addSerializer(BlockVector.class, new BlockVectorSerializer()); @@ -159,6 +171,11 @@ protected void addSerializer(SimpleSerializers serializers) { serializers.addSerializer(InventoryWrapper.class, new InventorySerializer()); } + /** + * Add deserializer to the deserializers + * + * @param deserializers deserializers + */ protected void addDeserializer(SimpleDeserializers deserializers) { deserializers.addDeserializer(Vector.class, new VectorDeserializer()); deserializers.addDeserializer(BlockVector.class, new BlockVectorDeserializer()); diff --git a/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java b/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java index 727cc42..57ce6ef 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java @@ -47,16 +47,24 @@ *

  • {@link OfflinePlayer} *
  • {@link Inventory} via {@link InventoryWrapper} * - *

    */ public class JacksonPaper extends JacksonBukkit { private final boolean legacyItemStackSerialization; + /** + * Create a new JacksonPaper module. + * + * @param hexColors true to serialize colors as hex by default + * @param legacyItemStackSerialization true to use spigot based serialization + */ public JacksonPaper(boolean hexColors, boolean legacyItemStackSerialization) { super(hexColors); this.legacyItemStackSerialization = legacyItemStackSerialization; } + /** + * Create a new JacksonPaper module. + */ public JacksonPaper() { super(); legacyItemStackSerialization = false; diff --git a/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java b/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java index 0f935e0..16ed981 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java +++ b/src/main/java/de/eldoria/jacksonbukkit/builder/ModuleBuilder.java @@ -14,6 +14,9 @@ * @param type of created module */ public abstract class ModuleBuilder { + /** + * Whether hex colors should be serialized as hex or not. + */ protected boolean hexColors = false; /** diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/PatternWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/PatternWrapper.java index fb2340c..bbf8302 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/PatternWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/PatternWrapper.java @@ -8,11 +8,18 @@ import org.bukkit.DyeColor; import org.bukkit.block.banner.Pattern; import org.bukkit.block.banner.PatternType; +import org.bukkit.potion.PotionEffect; /** * Class for wrapping a {@link Pattern}. */ public record PatternWrapper(DyeColor color, PatternType pattern) { + /** + * Create a new {@link PatternWrapper} based on a {@link Pattern}. + * + * @param pattern pattern instance + * @return new {@link PatternWrapper} instance + */ public static PatternWrapper of(Pattern pattern) { return new PatternWrapper(pattern.getColor(), pattern.getPattern()); } diff --git a/src/main/java/de/eldoria/jacksonbukkit/entities/VectorWrapper.java b/src/main/java/de/eldoria/jacksonbukkit/entities/VectorWrapper.java index d09c5b7..1d938bd 100644 --- a/src/main/java/de/eldoria/jacksonbukkit/entities/VectorWrapper.java +++ b/src/main/java/de/eldoria/jacksonbukkit/entities/VectorWrapper.java @@ -24,6 +24,11 @@ public static VectorWrapper of(Vector vector) { return new VectorWrapper(vector.getX(), vector.getY(), vector.getZ()); } + /** + * Constructs a new {@link Vector} based on wrapper values. + * + * @return new {@link Vector} instance + */ public Vector toBukkitVector() { return new Vector(xCoord, yCoord, zCoord); }