Skip to content

Commit df08d84

Browse files
committed
Improve itemstack empty check
1 parent 02819b3 commit df08d84

File tree

3 files changed

+22
-16
lines changed

3 files changed

+22
-16
lines changed

src/main/java/org/mvplugins/multiverse/inventories/MultiverseInventories.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public final void onEnable() {
103103
Sharables.init(this);
104104
Perm.register(this);
105105
ItemStackConverter.init(this);
106-
Logging.fine("ItemStackConverter is using byte serialization: " + ItemStackConverter.hasByteSerializeSupport);
106+
Logging.fine("ItemStackConverter is using byte serialization: " + ItemStackConverter.hasByteSerializeSupport());
107107
this.reloadConfig();
108108
inventoriesConfig.get().save().onFailure(e -> Logging.severe("Failed to save config file!"));
109109

src/main/java/org/mvplugins/multiverse/inventories/share/InventorySerializer.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,9 @@ public Object serialize(ItemStack[] itemStacks) {
3333
private Map<String, Object> mapSlots(ItemStack[] itemStacks) {
3434
Map<String, Object> result = new HashMap<>(itemStacks.length);
3535
for (int i = 0; i < itemStacks.length; i++) {
36-
if (itemStacks[i] != null && itemStacks[i].getType() != Material.AIR) {
37-
Object serialize = ItemStackConverter.serialize(itemStacks[i]);
38-
if (serialize != null) {
39-
result.put(Integer.toString(i), serialize);
40-
}
36+
Object serialize = ItemStackConverter.serialize(itemStacks[i]);
37+
if (serialize != null) {
38+
result.put(Integer.toString(i), serialize);
4139
}
4240
}
4341
return result;

src/main/java/org/mvplugins/multiverse/inventories/util/ItemStackConverter.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
public final class ItemStackConverter {
1414

15-
public final static boolean hasByteSerializeSupport;
15+
private final static boolean hasByteSerializeSupport;
1616

1717
static {
1818
hasByteSerializeSupport = Try.run(() -> ItemStack.class.getMethod("deserializeBytes", byte[].class))
@@ -27,6 +27,10 @@ public static void init(MultiverseInventories plugin) {
2727
config = plugin.getServiceLocator().getService(InventoriesConfig.class);
2828
}
2929

30+
public static boolean isEmptyItemStack(@Nullable ItemStack itemStack) {
31+
return itemStack == null || itemStack.getType() == Material.AIR || itemStack.getAmount() == 0;
32+
}
33+
3034
@Nullable
3135
public static ItemStack deserialize(Object obj) {
3236
if (obj instanceof ItemStack itemStack) {
@@ -42,16 +46,20 @@ public static ItemStack deserialize(Object obj) {
4246

4347
@Nullable
4448
public static Object serialize(ItemStack itemStack) {
45-
if (config != null && config.getUseByteSerializationForInventoryData() && hasByteSerializeSupport) {
46-
if (itemStack.getType() == Material.AIR) {
47-
return null;
48-
}
49-
return Try.of(() -> Base64.getEncoder().encodeToString(itemStack.serializeAsBytes()))
50-
.onFailure(e -> Logging.severe("Could not serialize item stack: %s", e.getMessage()))
51-
.getOrNull();
49+
if (isEmptyItemStack(itemStack)) {
50+
return null;
51+
}
52+
if (config == null || !config.getUseByteSerializationForInventoryData() || !hasByteSerializeSupport) {
53+
// let ConfigurationSerialization handle it
54+
return itemStack;
5255
}
53-
// let ConfigurationSerialization handle it
54-
return itemStack;
56+
return Try.of(() -> Base64.getEncoder().encodeToString(itemStack.serializeAsBytes()))
57+
.onFailure(e -> Logging.severe("Could not byte serialize item stack: %s", e.getMessage()))
58+
.getOrNull();
59+
}
60+
61+
public static boolean hasByteSerializeSupport() {
62+
return hasByteSerializeSupport;
5563
}
5664

5765
private ItemStackConverter() {

0 commit comments

Comments
 (0)