diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java index 69e26bd..a7558a1 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java @@ -75,7 +75,8 @@ public class ShopCommand { return 0; } - VirtualChest virtualChest = new VirtualChest(chest); + + VirtualChest virtualChest = VirtualChest.getOrCreate(chest); virtualChest.save(); PDC.set(chest, "virtual", virtualChest.getId()); diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java b/src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java index a74efe1..ff1862c 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java @@ -32,7 +32,7 @@ public class Shop { private String itemName; @DatabaseField(canBeNull = false, columnName = "itemstack") - private String itemStackJson; + private String itemStackString; @DatabaseField(canBeNull = false) private int amount; @@ -65,7 +65,7 @@ public class Shop { public Shop(Player player, ItemStack itemStack, int stock, int freeSpace, int amount, float priceBuy, float priceSell, int virtualChestID) { this.ownerType = "player"; this.owner = player.getName(); - this.itemStackJson = Converter.toString(itemStack); + this.itemStackString = Converter.toString(itemStack); this.itemName = itemStack.getType().toString(); this.stock = stock; this.freeSpace = freeSpace; @@ -79,8 +79,8 @@ public class Shop { this.itemName = itemName; } - public void setItemStackJson(String itemStackJson) { - this.itemStackJson = itemStackJson; + public void setItemStackString(String itemStackString) { + this.itemStackString = itemStackString; } public void setAmount(int amount) { @@ -116,7 +116,7 @@ public class Shop { } public ItemStack getItemStack() { - return Converter.itemstackFromString(this.itemStackJson); + return Converter.itemstackFromString(this.itemStackString); } public void writeIntoSign(Sign sign){ diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java b/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java index 4821d39..fd163bd 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java @@ -7,6 +7,7 @@ import org.bukkit.block.Chest; import org.bukkit.inventory.Inventory; import xyz.soukup.ecoCraftCore.utilities.DaoRegistry; import xyz.soukup.ecoCraftCore.utilities.Converter; +import xyz.soukup.ecoCraftCore.utilities.PDC; import java.sql.SQLException; @@ -17,7 +18,7 @@ public class VirtualChest { private int id; @DatabaseField(columnName = "inventory", dataType = DataType.LONG_STRING) - private String inventoryJson; + private String inventoryString; @DatabaseField(columnName = "active_on_server") private String activeServer; @@ -32,10 +33,27 @@ public class VirtualChest { } + + public VirtualChest(Chest chest){ Inventory inventory = chest.getSnapshotInventory(); - this.inventoryJson = Converter.toString(inventory); + this.inventoryString = Converter.toString(inventory); + + } + + public static VirtualChest getOrCreate(Chest chest){ + Integer id = PDC.getInteger(chest, "virtual"); + if (id == null){ + return new VirtualChest(chest); + } + + VirtualChest virtualChest = findById(id); + + if (virtualChest == null){ + return new VirtualChest(chest); + } + return virtualChest; } public static VirtualChest findById(int id) { @@ -48,7 +66,7 @@ public class VirtualChest { public void save(){ if (this.inventory != null){ - this.inventoryJson = Converter.toString(this.inventory); + this.inventoryString = Converter.toString(this.inventory); } try { DaoRegistry.getVirtualChestDao().createOrUpdate(this); @@ -59,7 +77,7 @@ public class VirtualChest { public Inventory getInventory(){ if (this.inventory == null){ - this.inventory = Converter.inventoryFromString(this.inventoryJson); + this.inventory = Converter.inventoryFromString(this.inventoryString); } return this.inventory; }