Skip to content

Commit a05a836

Browse files
Release 1.0.2 (#11)
2 parents 5bc05ad + cfd19c5 commit a05a836

File tree

77 files changed

+1030
-117
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+1030
-117
lines changed

.github/workflows/javadocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
echo "Creating .nojekyll to have Github pages deploy html as is:"
2626
touch .nojekyll
2727
- name: Deploy
28-
uses: JamesIves/github-pages-deploy-action@v4.4.0
28+
uses: JamesIves/github-pages-deploy-action@v4
2929
with:
3030
branch: gh-pages # The branch the action should deploy to.
3131
folder: build/docs/javadoc # The folder the action should deploy.

.github/workflows/publish_to_nexus.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
runs-on: ubuntu-latest
1414

1515
steps:
16-
- uses: actions/checkout@v3.0.2
16+
- uses: actions/checkout@v3
1717
- name: Set up JDK 18
1818
uses: actions/setup-java@v3
1919
with:

.github/workflows/verify.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ jobs:
77
runs-on: ubuntu-latest
88

99
steps:
10-
- uses: actions/checkout@v3.0.2
10+
- uses: actions/checkout@v3
1111
- name: Set up JDK 18
1212
uses: actions/setup-java@v3
1313
with:

Readme.md

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,25 +35,58 @@ dependencies {
3535
</dependency>
3636
```
3737

38-
## Usage
38+
## Module Creation
3939

40-
Simply add the JacksonBukkit module to the builder of your choice.
40+
You can either create the `JacksonBukkit` and `JacksonPaper` module directly or use the builder for easy modification.
41+
Usage of the builder is recommended.
42+
Builder for spigot and paper can both be accessed via the `JacksonBukkit` class.
43+
44+
### Creating a Spigot/Bukkit Module
4145

4246
```java
43-
ObjectMapper JSON = JsonMapper.builder()
44-
.addModule(new JacksonBukkit())
45-
.build();
47+
ObjectMapper JSON=JsonMapper.builder()
48+
.addModule(JacksonBukkit.spigot().build())
49+
.build();
50+
```
51+
52+
### Creating a Paper Module
4653

54+
```java
55+
ObjectMapper JSON=JsonMapper.builder()
56+
.addModule(JacksonBukkit.paper().build())
57+
.build();
4758
```
4859

60+
### Difference between Paper and Bukkit module
61+
62+
Paper serializes `ItemStack`s to a Base64 encoded byte array instead of using spigots serialization.
63+
This will only work on paper servers and not on spigot servers.
64+
The builder allows to use spigots serialization on paper servers as well, but this is not recommended.
65+
66+
When creating a paper plugin the `JacksonBukkit` module is no longer able to serialize `ItemStacks`.
67+
you need to use `JacksonPaper` in that case and make sure that you are not using legacy serialization.
68+
69+
### More customization
70+
71+
There are some more customizations
72+
73+
#### Color
74+
75+
Colors will be read and written to an object containing a value for red, green, blue and alpha by default.
76+
By calling `ModuleBuilder#colorAsHex()` you can enable hex codes.
77+
This will attempt to read each color as a HEX string with RGBA or RGB format.
78+
It will also write colors as RGBA.
79+
80+
**Warning:** As of now you can use either way, but not both at the same time. Mixing up format will cause errors.
81+
4982
## Supported Classes
5083

5184
We support all classes implementing `ConfigurationSerializable`. To be precise we support the following classes:
5285

5386
- Vector
5487
- BlockVector
55-
- Color
56-
- ItemStack (Serialized as Base64 encoded bytes as recommended by [paper](https://jd.papermc.io/paper/1.19/org/bukkit/inventory/ItemStack.html#serializeAsBytes()))
88+
- Color (Can be serialized as object or as hex string)
89+
- ItemStack (Serialized as map for `JacksonBukkit`. Serialized as Base64 encoded bytes for `JacksonPaper`)
5790
- PotionEffect
5891
- FireworkEffect
5992
- Pattern
@@ -65,4 +98,4 @@ We support all classes implementing `ConfigurationSerializable`. To be precise w
6598

6699
- NamespacedKey
67100
- OfflinePlayer
68-
- Inventory via InventoryWrapper class
101+
- Inventory via `InventoryWrapper` class

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ plugins {
44
java
55
`maven-publish`
66
`java-library`
7-
id("com.diffplug.spotless") version "6.16.0"
7+
id("com.diffplug.spotless") version "6.17.0"
88
id("de.chojo.publishdata") version "1.2.4"
99
id("io.papermc.paperweight.userdev") version "1.5.3"
1010
}
1111

1212
group = "de.eldoria"
13-
version = "1.0.1"
13+
version = "1.0.2"
1414

1515
repositories {
1616
mavenCentral()

src/main/java/de/eldoria/jacksonbukkit/JacksonBukkit.java

Lines changed: 81 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@
99
import com.fasterxml.jackson.databind.Module;
1010
import com.fasterxml.jackson.databind.module.SimpleDeserializers;
1111
import com.fasterxml.jackson.databind.module.SimpleSerializers;
12+
import de.eldoria.jacksonbukkit.builder.JacksonBukkitBuilder;
13+
import de.eldoria.jacksonbukkit.builder.JacksonPaperBuilder;
1214
import de.eldoria.jacksonbukkit.deserializer.AttributeModifierDeserializer;
1315
import de.eldoria.jacksonbukkit.deserializer.BlockVectorDeserializer;
1416
import de.eldoria.jacksonbukkit.deserializer.BoundingBoxDeserializer;
17+
import de.eldoria.jacksonbukkit.deserializer.BukkitItemStackDeserializer;
1518
import de.eldoria.jacksonbukkit.deserializer.ColorDeserializer;
1619
import de.eldoria.jacksonbukkit.deserializer.FireworkEffectDeserializer;
20+
import de.eldoria.jacksonbukkit.deserializer.HexColorDeserializer;
1721
import de.eldoria.jacksonbukkit.deserializer.InventoryDeserializer;
18-
import de.eldoria.jacksonbukkit.deserializer.ItemStackDeserializer;
1922
import de.eldoria.jacksonbukkit.deserializer.LocationDeserializer;
2023
import de.eldoria.jacksonbukkit.deserializer.NamespacedKeyDeserializer;
2124
import de.eldoria.jacksonbukkit.deserializer.PatternDeserializer;
@@ -26,10 +29,11 @@
2629
import de.eldoria.jacksonbukkit.serializer.AttributeModifierSerializer;
2730
import de.eldoria.jacksonbukkit.serializer.BlockVectorSerializer;
2831
import de.eldoria.jacksonbukkit.serializer.BoundingBoxSerializer;
32+
import de.eldoria.jacksonbukkit.serializer.BukkitItemStackSerializer;
2933
import de.eldoria.jacksonbukkit.serializer.ColorSerializer;
3034
import de.eldoria.jacksonbukkit.serializer.FireworkEffectSerializer;
35+
import de.eldoria.jacksonbukkit.serializer.HexColorSerializer;
3136
import de.eldoria.jacksonbukkit.serializer.InventorySerializer;
32-
import de.eldoria.jacksonbukkit.serializer.ItemStackSerializer;
3337
import de.eldoria.jacksonbukkit.serializer.LocationSerializer;
3438
import de.eldoria.jacksonbukkit.serializer.NamespacedKeySerializer;
3539
import de.eldoria.jacksonbukkit.serializer.PatternSerializer;
@@ -73,9 +77,57 @@
7377
* <li>{@link OfflinePlayer}
7478
* <li>{@link Inventory} via {@link InventoryWrapper}
7579
* </ul>
76-
* <p>
7780
*/
7881
public class JacksonBukkit extends Module {
82+
private final boolean hexColors;
83+
84+
/**
85+
* Create a new JacksonBukkit module.
86+
*
87+
* @param hexColors true to serialize colors as hex by default
88+
*/
89+
public JacksonBukkit(boolean hexColors) {
90+
this.hexColors = hexColors;
91+
}
92+
93+
/**
94+
* Create a new JacksonPaper module.
95+
*/
96+
public JacksonBukkit() {
97+
hexColors = false;
98+
}
99+
100+
/**
101+
* Create a new builder for a {@link JacksonBukkit} module for use with spigot.
102+
* <p>
103+
* If you are using paper you should use the {@link #paper()} builder.
104+
*
105+
* @return builder instance
106+
*/
107+
public static JacksonBukkitBuilder bukkit() {
108+
return new JacksonBukkitBuilder();
109+
}
110+
111+
/**
112+
* Create a new builder for a {@link JacksonBukkit} module for use with spigot.
113+
* <p>
114+
* If you are using paper you should use the {@link #paper()} builder.
115+
*
116+
* @return builder instance
117+
*/
118+
public static JacksonBukkitBuilder spigot() {
119+
return new JacksonBukkitBuilder();
120+
}
121+
122+
/**
123+
* Create a new builder for a {@link JacksonPaper} module for use with paper.
124+
*
125+
* @return builder instance
126+
*/
127+
public static JacksonPaperBuilder paper() {
128+
return new JacksonPaperBuilder();
129+
}
130+
79131
@Override
80132
public String getModuleName() {
81133
return "JacksonBukkit";
@@ -89,10 +141,25 @@ public Version version() {
89141
@Override
90142
public void setupModule(SetupContext context) {
91143
SimpleSerializers serializers = new SimpleSerializers();
144+
addSerializer(serializers);
145+
146+
SimpleDeserializers deserializers = new SimpleDeserializers();
147+
addDeserializer(deserializers);
148+
149+
context.addSerializers(serializers);
150+
context.addDeserializers(deserializers);
151+
}
152+
153+
/**
154+
* Add serializer to the serializers
155+
*
156+
* @param serializers serializers
157+
*/
158+
protected void addSerializer(SimpleSerializers serializers) {
92159
serializers.addSerializer(Vector.class, new VectorSerializer());
93160
serializers.addSerializer(BlockVector.class, new BlockVectorSerializer());
94-
serializers.addSerializer(Color.class, new ColorSerializer());
95-
serializers.addSerializer(ItemStack.class, new ItemStackSerializer());
161+
serializers.addSerializer(Color.class, hexColors ? new HexColorSerializer() : new ColorSerializer());
162+
serializers.addSerializer(ItemStack.class, new BukkitItemStackSerializer());
96163
serializers.addSerializer(NamespacedKey.class, new NamespacedKeySerializer());
97164
serializers.addSerializer(PotionEffect.class, new PotionEffectSerializer());
98165
serializers.addSerializer(FireworkEffect.class, new FireworkEffectSerializer());
@@ -102,12 +169,18 @@ public void setupModule(SetupContext context) {
102169
serializers.addSerializer(Location.class, new LocationSerializer());
103170
serializers.addSerializer(OfflinePlayer.class, new PlayerSerializer());
104171
serializers.addSerializer(InventoryWrapper.class, new InventorySerializer());
172+
}
105173

106-
SimpleDeserializers deserializers = new SimpleDeserializers();
174+
/**
175+
* Add deserializer to the deserializers
176+
*
177+
* @param deserializers deserializers
178+
*/
179+
protected void addDeserializer(SimpleDeserializers deserializers) {
107180
deserializers.addDeserializer(Vector.class, new VectorDeserializer());
108181
deserializers.addDeserializer(BlockVector.class, new BlockVectorDeserializer());
109-
deserializers.addDeserializer(Color.class, new ColorDeserializer());
110-
deserializers.addDeserializer(ItemStack.class, new ItemStackDeserializer());
182+
deserializers.addDeserializer(Color.class, hexColors ? new HexColorDeserializer() : new ColorDeserializer());
183+
deserializers.addDeserializer(ItemStack.class, new BukkitItemStackDeserializer());
111184
deserializers.addDeserializer(NamespacedKey.class, new NamespacedKeyDeserializer());
112185
deserializers.addDeserializer(PotionEffect.class, new PotionEffectDeserializer());
113186
deserializers.addDeserializer(FireworkEffect.class, new FireworkEffectDeserializer());
@@ -117,8 +190,5 @@ public void setupModule(SetupContext context) {
117190
deserializers.addDeserializer(Location.class, new LocationDeserializer());
118191
deserializers.addDeserializer(OfflinePlayer.class, new PlayerDeserializer());
119192
deserializers.addDeserializer(InventoryWrapper.class, new InventoryDeserializer());
120-
121-
context.addSerializers(serializers);
122-
context.addDeserializers(deserializers);
123193
}
124194
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
* SPDX-License-Identifier: MIT
3+
*
4+
* Copyright (C) EldoriaRPG Team and Contributor
5+
*/
6+
package de.eldoria.jacksonbukkit;
7+
8+
import com.fasterxml.jackson.databind.module.SimpleDeserializers;
9+
import com.fasterxml.jackson.databind.module.SimpleSerializers;
10+
import de.eldoria.jacksonbukkit.deserializer.PaperItemStackDeserializer;
11+
import de.eldoria.jacksonbukkit.entities.InventoryWrapper;
12+
import de.eldoria.jacksonbukkit.serializer.PaperItemStackSerializer;
13+
import org.bukkit.Color;
14+
import org.bukkit.FireworkEffect;
15+
import org.bukkit.Location;
16+
import org.bukkit.NamespacedKey;
17+
import org.bukkit.OfflinePlayer;
18+
import org.bukkit.attribute.AttributeModifier;
19+
import org.bukkit.block.banner.Pattern;
20+
import org.bukkit.configuration.serialization.ConfigurationSerializable;
21+
import org.bukkit.inventory.Inventory;
22+
import org.bukkit.inventory.ItemStack;
23+
import org.bukkit.potion.PotionEffect;
24+
import org.bukkit.util.BlockVector;
25+
import org.bukkit.util.BoundingBox;
26+
import org.bukkit.util.Vector;
27+
28+
/**
29+
* Class adding support for classes implementing {@link ConfigurationSerializable}.
30+
*
31+
* <ul>
32+
* <li>{@link Vector}
33+
* <li>{@link BlockVector}
34+
* <li>{@link Color}
35+
* <li>{@link ItemStack}
36+
* <li>{@link PotionEffect}
37+
* <li>{@link FireworkEffect}
38+
* <li>{@link Pattern}
39+
* <li>{@link BoundingBox}
40+
* <li>{@link AttributeModifier}
41+
* <li>{@link Location}
42+
* </ul>
43+
* <p>
44+
* It also provides some additional serialization for:
45+
* <ul>
46+
* <li>{@link NamespacedKey}
47+
* <li>{@link OfflinePlayer}
48+
* <li>{@link Inventory} via {@link InventoryWrapper}
49+
* </ul>
50+
*/
51+
public class JacksonPaper extends JacksonBukkit {
52+
private final boolean legacyItemStackSerialization;
53+
54+
/**
55+
* Create a new JacksonPaper module.
56+
*
57+
* @param hexColors true to serialize colors as hex by default
58+
* @param legacyItemStackSerialization true to use spigot based serialization
59+
*/
60+
public JacksonPaper(boolean hexColors, boolean legacyItemStackSerialization) {
61+
super(hexColors);
62+
this.legacyItemStackSerialization = legacyItemStackSerialization;
63+
}
64+
65+
/**
66+
* Create a new JacksonPaper module.
67+
*/
68+
public JacksonPaper() {
69+
super();
70+
legacyItemStackSerialization = false;
71+
}
72+
73+
@Override
74+
public String getModuleName() {
75+
return "JacksonPaper";
76+
}
77+
78+
@Override
79+
protected void addDeserializer(SimpleDeserializers deserializers) {
80+
super.addDeserializer(deserializers);
81+
if (!legacyItemStackSerialization) {
82+
deserializers.addDeserializer(ItemStack.class, new PaperItemStackDeserializer());
83+
}
84+
}
85+
86+
@Override
87+
protected void addSerializer(SimpleSerializers serializers) {
88+
super.addSerializer(serializers);
89+
if (!legacyItemStackSerialization) {
90+
serializers.addSerializer(ItemStack.class, new PaperItemStackSerializer());
91+
}
92+
}
93+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* SPDX-License-Identifier: MIT
3+
*
4+
* Copyright (C) EldoriaRPG Team and Contributor
5+
*/
6+
package de.eldoria.jacksonbukkit.builder;
7+
8+
import de.eldoria.jacksonbukkit.JacksonBukkit;
9+
10+
/**
11+
* Class to build a {@link JacksonBukkit} module.
12+
*/
13+
public class JacksonBukkitBuilder extends ModuleBuilder<JacksonBukkitBuilder, JacksonBukkit> {
14+
@Override
15+
public JacksonBukkit build() {
16+
return new JacksonBukkit(hexColors);
17+
}
18+
}

0 commit comments

Comments
 (0)