From 00861205ae01692b84212fb1f8077796ee1917ed Mon Sep 17 00:00:00 2001 From: Trent Hensler Date: Sun, 31 Dec 2017 23:58:22 -0800 Subject: [PATCH] Preserve title and size of vaults --- .../vaultmanagement/VaultManager.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java index 07c1e64..0732e8b 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/VaultManager.java @@ -8,6 +8,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import java.io.File; @@ -128,8 +129,26 @@ public class VaultManager { * @return inventory if exists, otherwise null. */ private Inventory getInventory(YamlConfiguration playerFile, int size, int number, String title) { + Inventory inventory = Bukkit.createInventory(null, size, title); + String data = playerFile.getString(String.format(VAULTKEY, number)); - return Base64Serialization.fromBase64(data); + Inventory deserialized = Base64Serialization.fromBase64(data); + if (deserialized == null) { + return inventory; + } + + // Check if deserialized has more used slots than the limit here. + // Happens on change of permission or if people used the broken version. + // In this case, players will lose items. + if (deserialized.getContents().length > size) { + for (ItemStack stack : deserialized.getContents()) { + inventory.addItem(stack); + } + } else { + inventory.setContents(deserialized.getContents()); + } + + return inventory; } /**