Skip to content

Commit dbc0df4

Browse files
committed
apply nbt from CraftItem
1 parent d6696e0 commit dbc0df4

File tree

2 files changed

+37
-32
lines changed

2 files changed

+37
-32
lines changed

pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@
7373
<shadedPattern>me.hsgamer.bettergui.lib.minelib</shadedPattern>
7474
</relocation>
7575

76+
<!-- CraftItem -->
77+
<relocation>
78+
<pattern>io.github.projectunified.craftitem</pattern>
79+
<shadedPattern>me.hsgamer.bettergui.lib.craftitem</shadedPattern>
80+
</relocation>
81+
7682
<!-- bStats -->
7783
<relocation>
7884
<pattern>org.bstats</pattern>
@@ -330,6 +336,13 @@
330336
<version>${minelib.version}</version>
331337
</dependency>
332338

339+
<!-- CraftItem -->
340+
<dependency>
341+
<groupId>io.github.projectunified</groupId>
342+
<artifactId>craftitem-nbt</artifactId>
343+
<version>1.1.0</version>
344+
</dependency>
345+
333346
<!-- Annotations -->
334347
<dependency>
335348
<groupId>org.jetbrains</groupId>
Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package me.hsgamer.bettergui.modifier;
22

3-
import com.google.gson.Gson;
3+
import io.github.projectunified.craftitem.nbt.NBTMapNormalizer;
4+
import io.github.projectunified.craftitem.nbt.SNBTConverter;
45
import me.hsgamer.hscore.bukkit.utils.VersionUtils;
56
import me.hsgamer.hscore.common.StringReplacer;
6-
import me.hsgamer.hscore.common.Validate;
77
import me.hsgamer.hscore.minecraft.item.ItemModifier;
88
import org.bukkit.Bukkit;
9-
import org.bukkit.Material;
10-
import org.bukkit.NamespacedKey;
119
import org.bukkit.inventory.ItemStack;
1210
import org.jetbrains.annotations.NotNull;
1311

@@ -20,49 +18,43 @@
2018
* I decide to keep it here for compatibility.
2119
*/
2220
public class NBTModifier implements ItemModifier<ItemStack> {
23-
private static final Gson GSON = new Gson();
2421
private static final boolean USE_ITEM_COMPONENT = VersionUtils.isAtLeast(20, 5);
25-
private String nbtData = "";
22+
private Object value;
2623

27-
@SuppressWarnings("deprecation")
2824
@Override
2925
public @NotNull ItemStack modify(@NotNull ItemStack original, UUID uuid, @NotNull StringReplacer stringReplacer) {
30-
if (Validate.isNullOrEmpty(nbtData)) {
31-
return original;
26+
String nbtString;
27+
if (value instanceof Map) {
28+
Object normalized = NBTMapNormalizer.normalize(value, s -> stringReplacer.replaceOrOriginal(s, uuid));
29+
nbtString = SNBTConverter.convert(normalized, USE_ITEM_COMPONENT);
30+
} else {
31+
nbtString = stringReplacer.replaceOrOriginal(Objects.toString(value), uuid);
3232
}
33+
ItemStack appliedItemStack = applyNBT(original, nbtString);
34+
return appliedItemStack == null ? original : appliedItemStack;
35+
}
3336

34-
String replacedNbtData = stringReplacer.replaceOrOriginal(nbtData, uuid);
35-
36-
if (USE_ITEM_COMPONENT) {
37-
Material material = original.getType();
38-
NamespacedKey materialKey = material.getKey();
39-
String materialName = materialKey.toString();
40-
try {
41-
return Bukkit.getItemFactory().createItemStack(materialName + replacedNbtData);
42-
} catch (Throwable throwable) {
43-
return original;
44-
}
45-
} else {
46-
try {
47-
return Bukkit.getUnsafe().modifyItemStack(original, replacedNbtData);
48-
} catch (Throwable throwable) {
49-
return original;
37+
@SuppressWarnings("deprecation")
38+
private ItemStack applyNBT(ItemStack item, String nbtString) {
39+
try {
40+
if (USE_ITEM_COMPONENT) {
41+
String materialName = item.getType().getKey().toString();
42+
return Bukkit.getItemFactory().createItemStack(materialName + nbtString);
43+
} else {
44+
return Bukkit.getUnsafe().modifyItemStack(item, nbtString);
5045
}
46+
} catch (Throwable ignored) {
5147
}
48+
return null;
5249
}
5350

5451
@Override
5552
public Object toObject() {
56-
return nbtData;
53+
return value;
5754
}
5855

5956
@Override
6057
public void loadFromObject(Object object) {
61-
if (object instanceof Map) {
62-
Map<?, ?> map = (Map<?, ?>) object;
63-
this.nbtData = GSON.toJson(map);
64-
} else {
65-
this.nbtData = Objects.toString(object, "");
66-
}
58+
this.value = object;
6759
}
6860
}

0 commit comments

Comments
 (0)