diff --git a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java index 3d295a2..249d7e7 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java @@ -8,12 +8,12 @@ import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; -import org.eclipse.sisu.bean.LifecycleManager; import org.jetbrains.annotations.NotNull; import xyz.soukup.ecoCraftCore.commands.RulerCommand; import xyz.soukup.ecoCraftCore.commands.ShopCommand; import xyz.soukup.ecoCraftCore.commands.TransactionCommand; import xyz.soukup.ecoCraftCore.events.RulerMarking; +import xyz.soukup.ecoCraftCore.events.VirtualChestLogic; import xyz.soukup.ecoCraftCore.objects.Shop; import xyz.soukup.ecoCraftCore.objects.Transaction; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; @@ -35,7 +35,7 @@ public final class EcoCraftCore extends JavaPlugin { try { prepareDatabase(); registerCommands(); - this.getServer().getPluginManager().registerEvents(new RulerMarking(), this); + registerEvents(); } catch (SQLException e) { e.printStackTrace(); getLogger().severe("Failed to initialize database."); @@ -81,5 +81,6 @@ public final class EcoCraftCore extends JavaPlugin { PluginManager pm = this.getServer().getPluginManager(); pm.registerEvents(new RulerMarking(), this); + pm.registerEvents(new VirtualChestLogic(), this); } } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java index 9a73cd3..104f898 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java @@ -83,6 +83,8 @@ public class ShopCommand { VirtualChest virtualChest = VirtualChest.getOrCreate(chest); virtualChest.save(); + + PDC.set(chest, "virtual", virtualChest.getId()); int freeSpace = InventoryUtils.getSpaceLeft(chest.getInventory(), item); diff --git a/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java b/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java index 33c6671..ac3b175 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java @@ -1,4 +1,104 @@ package xyz.soukup.ecoCraftCore.events; -public class VirtualChestLogic { -} +import com.destroystokyo.paper.utils.PaperPluginLogger; +import com.j256.ormlite.stmt.query.In; +import org.bukkit.block.Chest; +import org.bukkit.block.DoubleChest; +import org.bukkit.block.TileState; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import xyz.soukup.ecoCraftCore.objects.VirtualChest; +import xyz.soukup.ecoCraftCore.utilities.PDC; + +import java.util.HashMap; +import java.util.List; +import java.util.Objects; + +public class VirtualChestLogic implements Listener { + + public static HashMap openedChests = new HashMap<>(); + + @EventHandler + public void chestOpen(InventoryOpenEvent event){ + InventoryHolder inventoryHolder = event.getInventory().getHolder(); + Player player = (Player) event.getPlayer(); + + + Integer id; + + if (inventoryHolder instanceof Chest chest){ + id = PDC.getInteger(chest, "virtual"); + } else if (inventoryHolder instanceof DoubleChest doubleChest) { + id = PDC.getInteger((TileState) doubleChest.getRightSide(), "virtual"); + }else { + return; + } + + + if (id == null){ + return; + } + + if (openedChests.containsKey(id)){ + Integer count = openedChests.get(id); + count++; + openedChests.put(id, count); + player.sendPlainMessage(Integer.toString(count)); + return; + } + + player.sendPlainMessage(Integer.toString(id)); + + + VirtualChest virtualChest = VirtualChest.findById(id); + + if (virtualChest == null){ + return; + } + + openedChests.put(id, 1); + event.getInventory().setContents(virtualChest.getInventory().getContents()); + } + + @EventHandler + public void chestClose(InventoryCloseEvent event){ + InventoryHolder inventoryHolder = event.getInventory().getHolder(); + Player player = (Player) event.getPlayer(); + + + Integer id; + + if (inventoryHolder instanceof Chest chest){ + id = PDC.getInteger(chest, "virtual"); + } else if (inventoryHolder instanceof DoubleChest doubleChest) { + id = PDC.getInteger((TileState) doubleChest.getRightSide(), "virtual"); + }else { + return; + } + + if (id == null){ + return; + } + + Integer count = openedChests.get(id); + + if (count == null){ + return; + } + + if (count > 1){ + openedChests.put(id, count-1); + return; + } + + + openedChests.remove(id); + + + } +} \ No newline at end of file diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java b/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java index fd163bd..d110091 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java @@ -36,7 +36,7 @@ public class VirtualChest { public VirtualChest(Chest chest){ - Inventory inventory = chest.getSnapshotInventory(); + Inventory inventory = chest.getInventory(); this.inventoryString = Converter.toString(inventory); } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/utilities/Converter.java b/src/main/java/xyz/soukup/ecoCraftCore/utilities/Converter.java index cc23965..00d7599 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/utilities/Converter.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/utilities/Converter.java @@ -5,6 +5,9 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.configuration.file.YamlConfiguration; +import java.util.List; +import java.util.logging.Logger; + public class Converter { @@ -53,7 +56,9 @@ public class Converter { int size = config.getInt("size"); Inventory inv = Bukkit.createInventory(null, size); - ItemStack[] items = ((ItemStack[]) config.get("items")); + List itemList = (List) config.getList("items"); + ItemStack[] items = itemList != null ? itemList.toArray(new ItemStack[0]) : new ItemStack[0]; + if (items != null) { inv.setContents(items); }