Skip to content

Commit

Permalink
Add serializer for spigot color
Browse files Browse the repository at this point in the history
  • Loading branch information
rainbowdashlabs committed Mar 18, 2023
1 parent cfd19c5 commit b75a933
Show file tree
Hide file tree
Showing 44 changed files with 526 additions and 125 deletions.
18 changes: 11 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,7 @@
* </ul>
*/
public class JacksonBukkit extends Module {
private final boolean hexColors;
protected final boolean hexColors;

/**
* Create a new JacksonBukkit module.
Expand Down Expand Up @@ -158,7 +162,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 +183,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

0 comments on commit b75a933

Please sign in to comment.