Skip to content

Commit 449c2ca

Browse files
committed
made more improvements to enchant(s
1 parent d34fbec commit 449c2ca

File tree

4 files changed

+157
-20
lines changed

4 files changed

+157
-20
lines changed

Item Creator/src/main/java/org/broken/arrow/library/itemcreator/serialization/itemstack/ItemStacksSerializer.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33
import com.google.gson.GsonBuilder;
44
import org.broken.arrow.library.itemcreator.meta.BottleEffectMeta;
55
import org.broken.arrow.library.itemcreator.meta.MapWrapperMeta;
6-
import org.broken.arrow.library.itemcreator.serialization.typeadapter.BottleEffectMetaAdapter;
7-
import org.broken.arrow.library.itemcreator.serialization.typeadapter.ColorMetaAdapter;
8-
import org.broken.arrow.library.itemcreator.serialization.typeadapter.FireworkMetaAdapter;
9-
import org.broken.arrow.library.itemcreator.serialization.typeadapter.MapMetaAdapter;
6+
import org.broken.arrow.library.itemcreator.serialization.typeadapter.*;
107
import org.bukkit.inventory.ItemStack;
118
import org.bukkit.inventory.meta.FireworkMeta;
129

@@ -117,6 +114,7 @@ public String toJson() {
117114
.registerTypeAdapter(BottleEffectMeta.class, new BottleEffectMetaAdapter())
118115
.registerTypeAdapter(MapWrapperMeta.class, new MapMetaAdapter())
119116
.registerTypeAdapter(ColorMetaAdapter.class, new ColorMetaAdapter())
117+
.registerTypeAdapter(ColorMetaAdapter.class, new EnhancementWrapperAdapter())
120118
.create()
121119
.toJson(this);
122120
}
@@ -133,6 +131,7 @@ public static ItemStacksSerializer fromJson(String json) {
133131
.registerTypeAdapter(BottleEffectMeta.class, new BottleEffectMetaAdapter())
134132
.registerTypeAdapter(MapWrapperMeta.class, new MapMetaAdapter())
135133
.registerTypeAdapter(ColorMetaAdapter.class, new ColorMetaAdapter())
134+
.registerTypeAdapter(ColorMetaAdapter.class, new EnhancementWrapperAdapter())
136135
.create()
137136
.fromJson(json, ItemStacksSerializer.class);
138137
serializer.itemStacks.addAll(serializer.items.stream()

Item Creator/src/main/java/org/broken/arrow/library/itemcreator/serialization/itemstack/SerializeItem.java

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@
88
import org.broken.arrow.library.itemcreator.meta.MapWrapperMeta;
99
import org.broken.arrow.library.itemcreator.meta.enhancement.EnhancementWrapper;
1010
import org.broken.arrow.library.itemcreator.serialization.AttributeModifierWrapper;
11-
import org.broken.arrow.library.itemcreator.serialization.typeadapter.BottleEffectMetaAdapter;
12-
import org.broken.arrow.library.itemcreator.serialization.typeadapter.ColorMetaAdapter;
13-
import org.broken.arrow.library.itemcreator.serialization.typeadapter.FireworkMetaAdapter;
14-
import org.broken.arrow.library.itemcreator.serialization.typeadapter.MapMetaAdapter;
11+
import org.broken.arrow.library.itemcreator.serialization.typeadapter.*;
1512
import org.broken.arrow.library.itemcreator.meta.potion.PotionTypeWrapper;
1613
import org.bukkit.*;
1714
import org.bukkit.attribute.Attribute;
@@ -23,6 +20,7 @@
2320
import org.bukkit.map.MapView;
2421

2522
import javax.annotation.Nonnull;
23+
import javax.annotation.Nullable;
2624
import java.util.*;
2725
import java.util.stream.Collectors;
2826

@@ -77,11 +75,8 @@ public static SerializeItem fromItemStack(@Nonnull final ItemStack item) {
7775
if (meta.hasCustomModelData()) data.customModelData = meta.getCustomModelData();
7876
data.unbreakable = meta.isUnbreakable();
7977
data.itemFlags.addAll(meta.getItemFlags());
80-
if (meta.hasEnchants()) {
8178

82-
meta.getEnchants().forEach((e, lvl) -> data.enchantments.put(e.getKey().getKey(), new EnhancementWrapper(e, lvl, lvl > e.getMaxLevel())));
83-
84-
}
79+
retrieveEnchant(meta, data);
8580
retrieveAttributeModifiers(meta, data);
8681
retrievePotionMeta(meta, data);
8782
retrieveBannerMeta(meta, data);
@@ -182,6 +177,7 @@ public String toJson() {
182177
.registerTypeAdapter(BottleEffectMeta.class, new BottleEffectMetaAdapter())
183178
.registerTypeAdapter(MapWrapperMeta.class, new MapMetaAdapter())
184179
.registerTypeAdapter(ColorMetaAdapter.class, new ColorMetaAdapter())
180+
.registerTypeAdapter(ColorMetaAdapter.class, new EnhancementWrapperAdapter())
185181
.create()
186182
.toJson(this);
187183
}
@@ -198,6 +194,8 @@ public static SerializeItem fromJson(String json) {
198194
.registerTypeAdapter(BottleEffectMeta.class, new BottleEffectMetaAdapter())
199195
.registerTypeAdapter(MapWrapperMeta.class, new MapMetaAdapter())
200196
.registerTypeAdapter(ColorMetaAdapter.class, new ColorMetaAdapter())
197+
.registerTypeAdapter(ColorMetaAdapter.class, new ColorMetaAdapter())
198+
.registerTypeAdapter(ColorMetaAdapter.class, new EnhancementWrapperAdapter())
201199
.create()
202200
.fromJson(json, SerializeItem.class);
203201
}
@@ -462,21 +460,42 @@ private void setBannerMeta(final ItemMeta meta) {
462460
}
463461
}
464462

463+
private static void retrieveEnchant(@Nonnull final ItemMeta meta, @Nonnull final SerializeItem data) {
464+
if (!meta.hasEnchants())
465+
return;
466+
467+
if (ItemCreator.getServerVersion() > 13.2F) {
468+
meta.getEnchants().forEach((e, lvl) -> data.enchantments.put(e.getKey().getKey(),
469+
new EnhancementWrapper(e, lvl, lvl > e.getMaxLevel())));
470+
} else {
471+
meta.getEnchants().forEach((e, lvl) -> data.enchantments.put(e.getName(),
472+
new EnhancementWrapper(e, lvl, lvl > e.getMaxLevel())));
473+
}
474+
475+
}
476+
465477
private void setEnchantment(final ItemMeta meta) {
466478
if (!enchantments.isEmpty())
467-
for (Map.Entry<String, EnhancementWrapper> e : enchantments.entrySet()) {
468-
final Enchantment enchant = getEnchantment(e);
479+
for (Map.Entry<String, EnhancementWrapper> entry : enchantments.entrySet()) {
480+
final Enchantment enchant = getEnchantment(entry);
469481
if (enchant != null) {
470-
final EnhancementWrapper enhancementData = e.getValue();
482+
final EnhancementWrapper enhancementData = entry.getValue();
471483
meta.addEnchant(enchant, enhancementData.getLevel(), enhancementData.isIgnoreLevelRestriction());
472484
}
473485
}
474486
}
475487

476-
private static Enchantment getEnchantment(final Map.Entry<String, EnhancementWrapper> e) {
477-
if (ItemCreator.getServerVersion() > 14.0F)
478-
return Enchantment.getByKey(NamespacedKey.minecraft(e.getKey()));
479-
return Enchantment.getByName(e.getKey());
488+
private Enchantment getEnchantment(@Nullable final Map.Entry<String, EnhancementWrapper> enhancementEntry) {
489+
if (enhancementEntry == null) return null;
490+
final String enhancementKey = enhancementEntry.getKey();
491+
if (ItemCreator.getServerVersion() > 13.2F) {
492+
Enchantment enchantment = Enchantment.getByKey(NamespacedKey.minecraft(enhancementKey));
493+
if(enchantment == null) {
494+
enchantment = Enchantment.getByName(enhancementKey);
495+
}
496+
return enchantment;
497+
}
498+
return Enchantment.getByName(enhancementKey);
480499
}
481500

482501
private void setAttributeModifier(final ItemMeta meta) {
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package org.broken.arrow.library.itemcreator.serialization.typeadapter;
2+
3+
import com.google.gson.stream.JsonReader;
4+
import com.google.gson.stream.JsonWriter;
5+
import org.broken.arrow.library.itemcreator.ItemCreator;
6+
import org.broken.arrow.library.itemcreator.meta.enhancement.EnhancementMeta;
7+
import org.broken.arrow.library.itemcreator.meta.enhancement.EnhancementWrapper;
8+
import org.broken.arrow.library.itemcreator.serialization.jsonhelper.JsonReaderHelper;
9+
import org.broken.arrow.library.itemcreator.serialization.jsonhelper.JsonWriterHelper;
10+
import org.bukkit.NamespacedKey;
11+
import org.bukkit.enchantments.Enchantment;
12+
13+
import javax.annotation.Nonnull;
14+
import java.io.IOException;
15+
import java.util.concurrent.atomic.AtomicReference;
16+
17+
public class EnhancementWrapperAdapter extends BaseTypeAdapter<EnhancementWrapper> {
18+
19+
@Override
20+
protected void checkedWrite(final JsonWriter out, @Nonnull final EnhancementWrapper value) throws IOException {
21+
final JsonWriterHelper json = new JsonWriterHelper(out);
22+
23+
final Enchantment enchantment = value.getEnchantment();
24+
if (ItemCreator.getServerVersion() > 13.2F) {
25+
json.value("name", enchantment.getKey().getKey());
26+
} else {
27+
json.value("name", enchantment.getName());
28+
}
29+
json.value("level", value.getLevel());
30+
json.value("ignore_level", value.isIgnoreLevelRestriction());
31+
32+
json.finish();
33+
}
34+
35+
@Override
36+
public EnhancementWrapper read(final JsonReader jsonReader) throws IOException {
37+
JsonReaderHelper json = new JsonReaderHelper(jsonReader);
38+
EnhancementMeta enhancementMeta = new EnhancementMeta();
39+
final AtomicReference<EnhancementWrapper> enhancementWrapper = new AtomicReference<>();
40+
json.forEachObjectField((name, reader) -> {
41+
EnchantmentData enchantmentData = new EnchantmentData();
42+
switch (name) {
43+
case "name":
44+
final String enchantmentName = reader.nextString();
45+
if (enchantmentName != null) {
46+
enchantmentData.setEnhancementName(enchantmentName);
47+
}
48+
break;
49+
case "level": {
50+
final int level = reader.nextInt();
51+
if (level > 0) {
52+
enchantmentData.setLevel(level);
53+
}
54+
break;
55+
}
56+
case "ignore_level": {
57+
final boolean level = reader.nextBoolean();
58+
enchantmentData.setIgnoreLevelRestriction(level);
59+
break;
60+
}
61+
default:
62+
reader.skipValue();
63+
break;
64+
}
65+
final Enchantment enchantment = enchantmentData.getEnchantment();
66+
if (enchantment != null) {
67+
enhancementWrapper.set(new EnhancementWrapper(
68+
enchantment,
69+
enchantmentData.getLevel(),
70+
enchantmentData.isIgnoreLevelRestriction()));
71+
}
72+
});
73+
json.endObject();
74+
return enhancementWrapper.get();
75+
}
76+
77+
78+
private static class EnchantmentData {
79+
private String enhancementName;
80+
private int level;
81+
private boolean ignoreLevelRestriction;
82+
83+
public void setEnhancementName(@Nonnull final String enhancementName) {
84+
this.enhancementName = enhancementName;
85+
}
86+
87+
public int getLevel() {
88+
return level;
89+
}
90+
91+
public void setLevel(final int level) {
92+
this.level = level;
93+
}
94+
95+
public boolean isIgnoreLevelRestriction() {
96+
return ignoreLevelRestriction;
97+
}
98+
99+
public void setIgnoreLevelRestriction(final boolean ignoreLevelRestriction) {
100+
this.ignoreLevelRestriction = ignoreLevelRestriction;
101+
}
102+
103+
public Enchantment getEnchantment() {
104+
if (enhancementName == null) return null;
105+
106+
if (ItemCreator.getServerVersion() > 13.2F) {
107+
Enchantment enchantment = Enchantment.getByKey(NamespacedKey.minecraft(enhancementName));
108+
if (enchantment == null) {
109+
enchantment = Enchantment.getByName(enhancementName);
110+
}
111+
return enchantment;
112+
}
113+
return Enchantment.getByName(enhancementName);
114+
}
115+
}
116+
117+
}

Item Creator/src/main/java/org/broken/arrow/library/itemcreator/utility/ServerVersion.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.bukkit.plugin.Plugin;
55

66
import javax.annotation.Nonnull;
7+
import javax.annotation.Nullable;
8+
79
/**
810
* Represents the server version as a floating-point number parsed from the Bukkit version string.
911
*/
@@ -36,7 +38,7 @@ public float getServerVersion() {
3638
*
3739
* @param plugin the plugin instance used to retrieve the server's Bukkit version; may be null
3840
*/
39-
private void setServerVersion(final Plugin plugin) {
41+
private void setServerVersion(@Nullable final Plugin plugin) {
4042
final String[] versionPieces;
4143
if (plugin == null)
4244
versionPieces = Bukkit.getServer().getBukkitVersion().split("\\.");

0 commit comments

Comments
 (0)