Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add serializer for spigot color #15

Merged
merged 2 commits into from
Mar 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 14 additions & 7 deletions src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@
import de.eldoria.jacksonbukkit.deserializer.AttributeModifierDeserializer;
import de.eldoria.jacksonbukkit.deserializer.BlockVectorDeserializer;
import de.eldoria.jacksonbukkit.deserializer.BoundingBoxDeserializer;
import de.eldoria.jacksonbukkit.deserializer.BukkitColorDeserializer;
import de.eldoria.jacksonbukkit.deserializer.BukkitItemStackDeserializer;
import de.eldoria.jacksonbukkit.deserializer.ColorDeserializer;
import de.eldoria.jacksonbukkit.deserializer.HexBukkitColorDeserializer;
import de.eldoria.jacksonbukkit.deserializer.PaperColorDeserializer;
import de.eldoria.jacksonbukkit.deserializer.FireworkEffectDeserializer;
import de.eldoria.jacksonbukkit.deserializer.HexColorDeserializer;
import de.eldoria.jacksonbukkit.deserializer.HexPaperColorDeserializer;
import de.eldoria.jacksonbukkit.deserializer.InventoryDeserializer;
import de.eldoria.jacksonbukkit.deserializer.LocationDeserializer;
import de.eldoria.jacksonbukkit.deserializer.NamespacedKeyDeserializer;
Expand All @@ -29,10 +31,12 @@
import de.eldoria.jacksonbukkit.serializer.AttributeModifierSerializer;
import de.eldoria.jacksonbukkit.serializer.BlockVectorSerializer;
import de.eldoria.jacksonbukkit.serializer.BoundingBoxSerializer;
import de.eldoria.jacksonbukkit.serializer.BukkitColorSerializer;
import de.eldoria.jacksonbukkit.serializer.BukkitItemStackSerializer;
import de.eldoria.jacksonbukkit.serializer.ColorSerializer;
import de.eldoria.jacksonbukkit.serializer.HexBukkitColorSerializer;
import de.eldoria.jacksonbukkit.serializer.PaperColorSerializer;
import de.eldoria.jacksonbukkit.serializer.FireworkEffectSerializer;
import de.eldoria.jacksonbukkit.serializer.HexColorSerializer;
import de.eldoria.jacksonbukkit.serializer.HexPaperColorSerializer;
import de.eldoria.jacksonbukkit.serializer.InventorySerializer;
import de.eldoria.jacksonbukkit.serializer.LocationSerializer;
import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer;
Expand Down Expand Up @@ -79,7 +83,10 @@
* </ul>
*/
public class JacksonBukkit extends Module {
private final boolean hexColors;
/**
* True when colors should be interpreted as hex strings.
*/
protected final boolean hexColors;

/**
* Create a new JacksonBukkit module.
Expand Down Expand Up @@ -158,7 +165,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, hexColors ? new HexColorSerializer() : new ColorSerializer());
serializers.addSerializer(Color.class, hexColors ? new HexBukkitColorSerializer() : new BukkitColorSerializer());
serializers.addSerializer(ItemStack.class, new BukkitItemStackSerializer());
serializers.addSerializer(NamespacedKey.class, new NamespacedKeySerializer());
serializers.addSerializer(PotionEffect.class, new PotionEffectSerializer());
Expand All @@ -179,7 +186,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, hexColors ? new HexColorDeserializer() : new ColorDeserializer());
deserializers.addDeserializer(Color.class, hexColors ? new HexBukkitColorDeserializer() : new BukkitColorDeserializer());
deserializers.addDeserializer(ItemStack.class, new BukkitItemStackDeserializer());
deserializers.addDeserializer(NamespacedKey.class, new NamespacedKeyDeserializer());
deserializers.addDeserializer(PotionEffect.class, new PotionEffectDeserializer());
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/de/eldoria/jacksonbukkit/JacksonPaper.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,16 @@

import com.fasterxml.jackson.databind.module.SimpleDeserializers;
import com.fasterxml.jackson.databind.module.SimpleSerializers;
import de.eldoria.jacksonbukkit.deserializer.BukkitColorDeserializer;
import de.eldoria.jacksonbukkit.deserializer.HexBukkitColorDeserializer;
import de.eldoria.jacksonbukkit.deserializer.HexPaperColorDeserializer;
import de.eldoria.jacksonbukkit.deserializer.PaperColorDeserializer;
import de.eldoria.jacksonbukkit.deserializer.PaperItemStackDeserializer;
import de.eldoria.jacksonbukkit.entities.InventoryWrapper;
import de.eldoria.jacksonbukkit.serializer.BukkitColorSerializer;
import de.eldoria.jacksonbukkit.serializer.HexBukkitColorSerializer;
import de.eldoria.jacksonbukkit.serializer.HexPaperColorSerializer;
import de.eldoria.jacksonbukkit.serializer.PaperColorSerializer;
import de.eldoria.jacksonbukkit.serializer.PaperItemStackSerializer;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
Expand Down Expand Up @@ -81,6 +89,7 @@ protected void addDeserializer(SimpleDeserializers deserializers) {
if (!legacyItemStackSerialization) {
deserializers.addDeserializer(ItemStack.class, new PaperItemStackDeserializer());
}
deserializers.addDeserializer(Color.class, hexColors ? new HexPaperColorDeserializer() : new PaperColorDeserializer());
}

@Override
Expand All @@ -89,5 +98,6 @@ protected void addSerializer(SimpleSerializers serializers) {
if (!legacyItemStackSerialization) {
serializers.addSerializer(ItemStack.class, new PaperItemStackSerializer());
}
serializers.addSerializer(Color.class, hexColors ? new HexPaperColorSerializer() : new PaperColorSerializer());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* 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.BukkitColorWrapper;
import de.eldoria.jacksonbukkit.entities.PaperColorWrapper;
import org.bukkit.Color;

import java.io.IOException;

/**
* Class for deserialization of {@link Color} as object.
*/
public class BukkitColorDeserializer extends JsonDeserializer<Color> {

@Override
public Color deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return ctxt.readValue(p, BukkitColorWrapper.class).toBukkitColor();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* 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.BukkitColorWrapper;
import de.eldoria.jacksonbukkit.entities.PaperColorWrapper;
import org.bukkit.Color;

import java.io.IOException;

/**
* Class for deserialization of {@link Color} as hexadecimal string.
*/
public class HexBukkitColorDeserializer extends JsonDeserializer<Color> {

@Override
public Color deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return BukkitColorWrapper.of(ctxt.readValue(p, String.class)).toBukkitColor();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@
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 de.eldoria.jacksonbukkit.entities.PaperColorWrapper;
import org.bukkit.Color;

import java.io.IOException;

/**
* Class for deserialization of {@link Color} as hexadecimal string.
*/
public class HexColorDeserializer extends JsonDeserializer<Color> {
public class HexPaperColorDeserializer extends JsonDeserializer<Color> {

@Override
public Color deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return ColorWrapper.of(ctxt.readValue(p, String.class)).toBukkitColor();
return PaperColorWrapper.of(ctxt.readValue(p, String.class)).toBukkitColor();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@
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 de.eldoria.jacksonbukkit.entities.PaperColorWrapper;
import org.bukkit.Color;

import java.io.IOException;

/**
* Class for deserialization of {@link Color} as object.
*/
public class ColorDeserializer extends JsonDeserializer<Color> {
public class PaperColorDeserializer extends JsonDeserializer<Color> {

@Override
public Color deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return ctxt.readValue(p, ColorWrapper.class).toBukkitColor();
return ctxt.readValue(p, PaperColorWrapper.class).toBukkitColor();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* SPDX-License-Identifier: MIT
*
* Copyright (C) EldoriaRPG Team and Contributor
*/
package de.eldoria.jacksonbukkit.entities;

import org.bukkit.Color;

/**
* Class for wrapping a {@link Color}.
* <p>
* It also allows transformation to hex code and parsing of hex code.
*/
public record BukkitColorWrapper(int red, int green, int blue) {

/**
* Create a new {@link BukkitColorWrapper} based on a {@link Color}.
*
* @param color color instance
* @return new {@link BukkitColorWrapper} instance
*/
public static BukkitColorWrapper of(Color color) {
return new BukkitColorWrapper(color.getRed(), color.getGreen(), color.getBlue());
}

/**
* Create a new {@link BukkitColorWrapper} based on a hex string with RGBA or RGB.
*
* @param hex color as hex string
* @return new {@link BukkitColorWrapper} instance
*/
public static BukkitColorWrapper 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);
return new BukkitColorWrapper(red, green, blue);
}

/**
* Get the string as hex string with RGBA.
*
* @return hex color as RGBA
*/
public String asHex() {
return "%02X%02X%02X".formatted(red, green, blue);
}

/**
* Constructs a new color instance based on wrapper values.
*
* @return new color instance
*/
public Color toBukkitColor() {
return Color.fromRGB(red, green, blue);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,35 +12,30 @@
* <p>
* It also allows transformation to hex code and parsing of hex code.
*/
public record ColorWrapper(int red, int green, int blue, int alpha) {
public record PaperColorWrapper(int red, int green, int blue, int alpha) {

/**
* Create a new {@link ColorWrapper} based on a {@link Color}.
* Create a new {@link PaperColorWrapper} based on a {@link Color}.
*
* @param color color instance
* @return new {@link ColorWrapper} instance
* @return new {@link PaperColorWrapper} instance
*/
public static ColorWrapper of(Color color) {
return new ColorWrapper(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha());
public static PaperColorWrapper of(Color color) {
return new PaperColorWrapper(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha());
}

/**
* Create a new {@link ColorWrapper} based on a hex string with RGBA or RGB.
* Create a new {@link PaperColorWrapper} based on a hex string with RGBA or RGB.
*
* @param hex color as hex string
* @return new {@link ColorWrapper} instance
* @return new {@link PaperColorWrapper} instance
*/
public static ColorWrapper of(String hex) {

public static PaperColorWrapper 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);
int alpha = hex.length() == 8 ? Integer.parseInt(hex.substring(6, 8), 16) : 255;
return new PaperColorWrapper(red, green, blue, alpha);
}

/**
Expand All @@ -52,10 +47,6 @@ 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;
}

/**
* Constructs a new color instance based on wrapper values.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* 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.BukkitColorWrapper;
import de.eldoria.jacksonbukkit.entities.PaperColorWrapper;
import org.bukkit.Color;

import java.io.IOException;

/**
* Class for serialization of {@link Color}.
*/
public class BukkitColorSerializer extends JsonSerializer<Color> {
@Override
public void serialize(Color value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeObject(BukkitColorWrapper.of(value));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* 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.BukkitColorWrapper;
import de.eldoria.jacksonbukkit.entities.PaperColorWrapper;
import org.bukkit.Color;

import java.io.IOException;

/**
* Class for serialization of {@link Color}.
*/
public class HexBukkitColorSerializer extends JsonSerializer<Color> {
@Override
public void serialize(Color value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(BukkitColorWrapper.of(value).asHex());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +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.ColorWrapper;
import de.eldoria.jacksonbukkit.entities.PaperColorWrapper;
import org.bukkit.Color;

import java.io.IOException;

/**
* Class for serialization of {@link Color}.
*/
public class ColorSerializer extends JsonSerializer<Color> {
public class HexPaperColorSerializer extends JsonSerializer<Color> {
@Override
public void serialize(Color value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeObject(ColorWrapper.of(value));
gen.writeString(PaperColorWrapper.of(value).asHex());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +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.ColorWrapper;
import de.eldoria.jacksonbukkit.entities.PaperColorWrapper;
import org.bukkit.Color;

import java.io.IOException;

/**
* Class for serialization of {@link Color}.
*/
public class HexColorSerializer extends JsonSerializer<Color> {
public class PaperColorSerializer extends JsonSerializer<Color> {
@Override
public void serialize(Color value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(ColorWrapper.of(value).asHex());
gen.writeObject(PaperColorWrapper.of(value));
}
}
Loading