From 0e0927502ee44c1b8883ab55c87a6188f64e39b0 Mon Sep 17 00:00:00 2001 From: poqdavid Date: Sat, 26 Mar 2022 14:00:27 -0400 Subject: [PATCH] Version 1.4 --- gradle.properties | 6 +- .../nyx/nyxbackpack/Commands/BackpackCMD.java | 73 +--------- .../nyx/nyxbackpack/Commands/OpenCMD.java | 126 +++------------- .../Listeners/NyxBackpackListener.java | 64 ++++++++ .../poqdavid/nyx/nyxbackpack/NyxBackpack.java | 23 ++- .../nyx/nyxbackpack/Utils/Backpack.java | 137 ++++++++++++++---- 6 files changed, 208 insertions(+), 221 deletions(-) create mode 100644 src/main/java/io/github/poqdavid/nyx/nyxbackpack/Listeners/NyxBackpackListener.java diff --git a/gradle.properties b/gradle.properties index b993631..905ba61 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ m_description=A simple backpack plugin ## Version m_major=1 -m_minor=3 +m_minor=4 m_api=S7.4 m_suffix=STABLE @@ -28,8 +28,8 @@ spongemixin=0.8.5-SNAPSHOT minecraft_version=1.12.2 forge_rundir=run/forge forgeVersion=1.12.2-14.23.5.2860 -mappings_channel=snapshot -mappings_version=20180814-1.12 +mappings_channel=stable +mappings_version=39-1.12 bstats=2.2.1 validation=1.1.0.Final \ No newline at end of file diff --git a/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Commands/BackpackCMD.java b/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Commands/BackpackCMD.java index 39e81b5..1cddec4 100644 --- a/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Commands/BackpackCMD.java +++ b/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Commands/BackpackCMD.java @@ -21,7 +21,6 @@ package io.github.poqdavid.nyx.nyxbackpack.Commands; import io.github.poqdavid.nyx.nyxbackpack.NyxBackpack; -import io.github.poqdavid.nyx.nyxbackpack.Utils.Backpack; import io.github.poqdavid.nyx.nyxcore.Permissions.BackpackPermission; import io.github.poqdavid.nyx.nyxcore.Utils.CoreTools; import org.spongepowered.api.command.CommandException; @@ -31,10 +30,7 @@ import org.spongepowered.api.command.args.CommandContext; import org.spongepowered.api.command.spec.CommandExecutor; import org.spongepowered.api.entity.living.player.Player; -import org.spongepowered.api.item.inventory.Inventory; -import org.spongepowered.api.item.inventory.property.InventoryTitle; import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.TextSerializers; import java.io.File; import java.nio.file.Files; @@ -65,9 +61,7 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm if (player_cmd_src.hasPermission(BackpackPermission.COMMAND_BACKPACK_MAIN)) { this.backpackCheckLock(player_cmd_src, player_cmd_src); - - final Backpack backpack = new Backpack(player_cmd_src, player_cmd_src, this.getBackpackSize(player_cmd_src), true, nb); - player_cmd_src.openInventory(backpack.getBackpack()); + NyxBackpack.Backpacks.get(player_cmd_src.getUniqueId()).openBackpack(); } else { throw new CommandPermissionException(Text.of("You don't have permission to use this command.")); @@ -78,77 +72,12 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm return CommandResult.success(); } - public int getBackpackSize(Player player) { - if (player.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_SIX)) - return 6; - if (player.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_FIVE)) - return 5; - if (player.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_FOUR)) - return 4; - if (player.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_THREE)) - return 3; - if (player.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_TWO)) - return 2; - if (player.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_ONE)) - return 1; - return 1; - } - - private void backpackCheckLock(Player player, Player playerSrc) throws CommandException { Path file = Paths.get(this.nb.getConfigPath() + File.separator + "backpacks" + File.separator + player.getUniqueId() + ".lock"); if (Files.exists(file)) { throw new CommandPermissionException(Text.of("Sorry currently your backpack is locked.")); - } else { - - if (isBackpackOpen(player)) { - throw new CommandPermissionException(Text.of("Sorry currently your backpack is locked!!")); - } - } - } - - private Boolean isBackpackOpen(Player player) { - String tl = player.getName() + "'s " + "Backpack"; - if (player.isOnline()) { - if (player.isViewingInventory()) { - Inventory inv = player.getInventory(); - - InventoryTitle title = inv.getInventoryProperty(InventoryTitle.class).orElse(InventoryTitle.of(Text.of("NONE"))); - String titles = TextSerializers.FORMATTING_CODE.serialize(title.getValue()); - - if (titles.equals("Backpack")) { - return true; - } else { - return searchInvs(tl); - } - - } else { - - return searchInvs(tl); - } - - } else { - return searchInvs(tl); } } - - private Boolean searchInvs(String title) { - for (Player pl : this.nb.getGame().getServer().getOnlinePlayers()) { - if (pl.isViewingInventory()) { - Inventory inv2 = pl.getInventory(); - - InventoryTitle title2 = inv2.getInventoryProperty(InventoryTitle.class).orElse(InventoryTitle.of(Text.of("NONE"))); - String titles2 = TextSerializers.FORMATTING_CODE.serialize(title2.getValue()); - - if (titles2.equals(title)) { - return true; - } - } - } - return false; - } - - } diff --git a/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Commands/OpenCMD.java b/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Commands/OpenCMD.java index 24fd94e..23df2af 100644 --- a/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Commands/OpenCMD.java +++ b/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Commands/OpenCMD.java @@ -32,10 +32,7 @@ import org.spongepowered.api.command.spec.CommandExecutor; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.entity.living.player.User; -import org.spongepowered.api.item.inventory.Inventory; -import org.spongepowered.api.item.inventory.property.InventoryTitle; import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.TextSerializers; import java.io.File; import java.io.IOException; @@ -71,8 +68,6 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm user_args = user.get(); } - final Integer bpszie = args.getOne("size").orElse(0); - src.sendMessage(Text.of("§6Opening Backpack for:")); src.sendMessage(Text.of("§6Name: §7" + user_args.getName())); @@ -84,18 +79,31 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm if (user_args.hasPermission(BackpackPermission.COMMAND_BACKPACK_MAIN)) { if (args.hasAny("m")) { if (player_cmd_src.hasPermission(BackpackPermission.COMMAND_BACKPACK_ADMIN_MODIFY)) { - this.backpackcheck(user_args); - this.backpackchecklock(user_args, player_cmd_src); - final Backpack backpack = new Backpack(user_args, player_cmd_src, this.getBackpackSize(user_args, bpszie), true, this.nb); - player_cmd_src.openInventory(backpack.getBackpack()); + this.backpackCheck(user_args); + this.backpackCheckLock(user_args, player_cmd_src); + + if (!NyxBackpack.Backpacks.containsKey(user_args.getUniqueId())) { + Backpack backpack = new Backpack(user_args, CoreTools.getBackpackSize(user_args)); + NyxBackpack.Backpacks.put(user_args.getUniqueId(), backpack); + } + + NyxBackpack.Backpacks.get(user_args.getUniqueId()).openBackpack(player_cmd_src, false, false); + } else { throw new CommandPermissionException(Text.of("You don't have permission to modify other backpacks.")); } } else { - this.backpackcheck(user_args); - final Backpack backpack = new Backpack(user_args, player_cmd_src, this.getBackpackSize(user_args, bpszie), false, nb); - player_cmd_src.openInventory(backpack.getBackpack()); + + this.backpackCheck(user_args); + + if (!NyxBackpack.Backpacks.containsKey(user_args.getUniqueId())) { + Backpack backpack = new Backpack(user_args, CoreTools.getBackpackSize(user_args)); + NyxBackpack.Backpacks.put(user_args.getUniqueId(), backpack); + } + + NyxBackpack.Backpacks.get(user_args.getUniqueId()).openBackpack(player_cmd_src, true); + } } else { throw new CommandPermissionException(Text.of("This user doesn't have permission to use backpack.")); @@ -116,106 +124,16 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm return CommandResult.success(); } - public int getBackpackSize(User user) { - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_SIX)) - return 6; - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_FIVE)) - return 5; - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_FOUR)) - return 4; - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_THREE)) - return 3; - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_TWO)) - return 2; - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_ONE)) - return 1; - return 1; - } - - public int getBackpackSize(User user, Integer size) { - if (size == 0) { - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_SIX)) - return 6; - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_FIVE)) - return 5; - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_FOUR)) - return 4; - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_THREE)) - return 3; - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_TWO)) - return 2; - if (user.hasPermission(BackpackPermission.COMMAND_BACKPACK_SIZE_ONE)) - return 1; - return 1; - } else { - if (size < 6) { - return 6; - } else { - return size; - } - } - - } - - private void backpackchecklock(User user, Player playersrc) throws CommandException { + private void backpackCheckLock(User user, Player playersrc) throws CommandException { Path file = Paths.get(this.nb.getConfigPath() + File.separator + "backpacks" + File.separator + user.getUniqueId() + ".lock"); if (Files.exists(file)) { throw new CommandPermissionException(Text.of("Sorry currently your backpack is locked.")); - } else { - if (isBackpackOpen(user)) { - throw new CommandPermissionException(Text.of("Sorry currently your backpack is locked!!")); - } - } - } - - private Boolean isBackpackOpen(User user) { - String tl = user.getName() + "'s " + "Backpack"; - if (user.isOnline()) { - if (user.getPlayer().isPresent()) { - Player player = user.getPlayer().get(); - if (player.isViewingInventory()) { - Inventory inv = player.getInventory(); - - InventoryTitle title = inv.getInventoryProperty(InventoryTitle.class).orElse(InventoryTitle.of(Text.of("NONE"))); - String titles = TextSerializers.FORMATTING_CODE.serialize(title.getValue()); - - if (titles == "Backpack") { - return true; - } else { - return searchInvs(tl); - } - - } else { - - return searchInvs(tl); - } - } else { - return searchInvs(tl); - } - } else { - return searchInvs(tl); - } - } - - private Boolean searchInvs(String title) { - for (Player pl : this.nb.getGame().getServer().getOnlinePlayers()) { - if (pl.isViewingInventory()) { - Inventory inv2 = pl.getInventory(); - - InventoryTitle title2 = inv2.getInventoryProperty(InventoryTitle.class).orElse(InventoryTitle.of(Text.of("NONE"))); - String titles2 = TextSerializers.FORMATTING_CODE.serialize(title2.getValue()); - - if (titles2 == title) { - return true; - } - } } - return false; } - private void backpackcheck(User user) throws CommandException { + private void backpackCheck(User user) throws CommandException { Path file = Paths.get(this.nb.getConfigPath() + File.separator + "backpacks" + File.separator + user.getUniqueId() + ".backpack"); if (!Files.exists(file)) { throw new CommandPermissionException(Text.of("Sorry there is no backpack data for " + user.getName())); diff --git a/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Listeners/NyxBackpackListener.java b/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Listeners/NyxBackpackListener.java new file mode 100644 index 0000000..9189792 --- /dev/null +++ b/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Listeners/NyxBackpackListener.java @@ -0,0 +1,64 @@ +/* + * This file is part of NyxBackpack. + * + * NyxBackpack is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * NyxBackpack is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with NyxBackpack. If not, see . + * + * Copyright (c) POQDavid + * Copyright (c) contributors + */ + +package io.github.poqdavid.nyx.nyxbackpack.Listeners; + +import io.github.poqdavid.nyx.nyxbackpack.NyxBackpack; +import io.github.poqdavid.nyx.nyxbackpack.Utils.Backpack; +import io.github.poqdavid.nyx.nyxcore.Utils.CoreTools; +import org.spongepowered.api.entity.living.player.Player; +import org.spongepowered.api.event.Listener; +import org.spongepowered.api.event.network.ClientConnectionEvent; + +import java.util.Optional; +import java.util.UUID; + +public class NyxBackpackListener { + + @Listener + public void onPlayerJoin(ClientConnectionEvent.Join event) { + Optional optionalPlayer = CoreTools.getPlayer(event.getCause()); + if (optionalPlayer.isPresent()) { + Player player = optionalPlayer.get(); + CoreTools.MakeNewBP(player); + + if (!NyxBackpack.Backpacks.containsKey(player.getUniqueId())) { + Backpack backpack = new Backpack(player, CoreTools.getBackpackSize(player)); + NyxBackpack.Backpacks.put(player.getUniqueId(), backpack); + } + } + } + + @Listener + public void onPlayerDisconnect(ClientConnectionEvent.Disconnect event) { + Optional optionalPlayer = CoreTools.getPlayer(event.getCause()); + + if (optionalPlayer.isPresent()) { + final UUID uuid = optionalPlayer.get().getUniqueId(); + + if (NyxBackpack.Backpacks.containsKey(uuid)) { + if (NyxBackpack.Backpacks.get(uuid).readOnly.isEmpty()) { + NyxBackpack.Backpacks.remove(uuid); + } + } + } + } + +} diff --git a/src/main/java/io/github/poqdavid/nyx/nyxbackpack/NyxBackpack.java b/src/main/java/io/github/poqdavid/nyx/nyxbackpack/NyxBackpack.java index cf0ae96..b4598db 100644 --- a/src/main/java/io/github/poqdavid/nyx/nyxbackpack/NyxBackpack.java +++ b/src/main/java/io/github/poqdavid/nyx/nyxbackpack/NyxBackpack.java @@ -22,23 +22,23 @@ import com.google.inject.Inject; import io.github.poqdavid.nyx.nyxbackpack.Commands.CommandManager; +import io.github.poqdavid.nyx.nyxbackpack.Listeners.NyxBackpackListener; +import io.github.poqdavid.nyx.nyxbackpack.Utils.Backpack; import io.github.poqdavid.nyx.nyxcore.NyxCore; import io.github.poqdavid.nyx.nyxcore.Utils.CText; -import io.github.poqdavid.nyx.nyxcore.Utils.NCLogger; import io.github.poqdavid.nyx.nyxcore.Utils.CoreTools; +import io.github.poqdavid.nyx.nyxcore.Utils.NCLogger; import org.bstats.sponge.Metrics; import org.slf4j.Logger; import org.spongepowered.api.Game; import org.spongepowered.api.Sponge; import org.spongepowered.api.config.ConfigDir; -import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.event.Listener; import org.spongepowered.api.event.game.GameReloadEvent; import org.spongepowered.api.event.game.state.GameInitializationEvent; import org.spongepowered.api.event.game.state.GamePreInitializationEvent; import org.spongepowered.api.event.game.state.GameStartedServerEvent; import org.spongepowered.api.event.game.state.GameStartingServerEvent; -import org.spongepowered.api.event.network.ClientConnectionEvent; import org.spongepowered.api.event.service.ChangeServiceProviderEvent; import org.spongepowered.api.plugin.Dependency; import org.spongepowered.api.plugin.Plugin; @@ -48,17 +48,20 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; -@Plugin(id = "nyxbackpack", name = "@name@", version = "@version@", description = "@description@", url = "https://github.com/poqdavid/NyxBackpack", authors = {"@authors@"}, dependencies = {@Dependency(id = "nyxcore", version = "1.5", optional = false)}) +@Plugin(id = "nyxbackpack", name = "@name@", version = "@version@", description = "@description@", url = "https://github.com/poqdavid/NyxBackpack", authors = {"@authors@"}, dependencies = {@Dependency(id = "nyxcore", version = "1.+", optional = false)}) public class NyxBackpack { + public static Map Backpacks = new HashMap<>(); private static NyxBackpack nyxbackpack; private final NCLogger logger; private final PluginContainer pluginContainer; private final Metrics metrics; public PermissionService permService; - @Inject private Game game; private CommandManager cmdManager; @@ -146,6 +149,9 @@ public void onGameInit(@Nullable final GameInitializationEvent event) { return; } + NyxBackpackListener listener = new NyxBackpackListener(); + Sponge.getEventManager().registerListeners(this, listener); + this.logger.info("Plugin Initialized successfully!"); } @@ -161,12 +167,6 @@ public void onServerStart(GameStartedServerEvent event) { //this.logger.info("Game Server Started..."); } - @Listener - public void onPlayerJoin(ClientConnectionEvent.Join event) { - final Player player = CoreTools.getPlayer(event.getCause()).get(); - CoreTools.MakeNewBP(player); - } - @Listener public void onGameReload(@Nullable final GameReloadEvent event) { this.logger.info("Reloading..."); @@ -174,5 +174,4 @@ public void onGameReload(@Nullable final GameReloadEvent event) { CoreTools.backpackUnlockAll(); this.logger.info("Reloaded!"); } - } diff --git a/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Utils/Backpack.java b/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Utils/Backpack.java index aa6837f..71c7261 100644 --- a/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Utils/Backpack.java +++ b/src/main/java/io/github/poqdavid/nyx/nyxbackpack/Utils/Backpack.java @@ -27,9 +27,11 @@ import io.github.poqdavid.nyx.nyxbackpack.NyxBackpack; import io.github.poqdavid.nyx.nyxcore.Utils.CoreTools; import org.apache.commons.io.FileUtils; +import org.spongepowered.api.Sponge; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.entity.living.player.User; import org.spongepowered.api.event.item.inventory.ClickInventoryEvent; +import org.spongepowered.api.event.item.inventory.InteractInventoryEvent; import org.spongepowered.api.item.ItemTypes; import org.spongepowered.api.item.inventory.Inventory; import org.spongepowered.api.item.inventory.InventoryArchetypes; @@ -44,50 +46,75 @@ import java.io.File; import java.io.IOException; import java.lang.reflect.Type; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; +import java.util.Optional; +import java.util.UUID; public class Backpack { private final Path backpackFilePath; - private final User user_args; - private final Player playerCmdSrc; - private final Inventory inventory; - private final NyxBackpack nb; private final Text backpackTitleText; - private final String backpackTitleStr; - private final int size; - private final Boolean saveIt; + private final User owner; + private final Inventory inventory; + public Map readOnly = new HashMap<>(); + public int size; + public Boolean ownerAllowed = true; - public Backpack(User user_args, Player player_cmd_src, int size, Boolean saveit, NyxBackpack nb) { - this.backpackFilePath = Paths.get(nb.getBackpackPath() + File.separator + user_args.getUniqueId() + ".backpack"); + public Backpack(User owner, int size) { + this.backpackFilePath = Paths.get(NyxBackpack.getInstance().getBackpackPath() + File.separator + owner.getUniqueId() + ".backpack"); - this.nb = nb; - this.user_args = user_args; - this.playerCmdSrc = player_cmd_src; + this.owner = owner; this.size = size; - this.saveIt = saveit; - if (!player_cmd_src.getUniqueId().equals(this.user_args.getUniqueId())) { - this.backpackTitleText = Text.of(this.user_args.getName() + "'s " + "Backpack"); - this.backpackTitleStr = this.user_args.getName() + "'s " + "Backpack"; - } else { - this.backpackTitleText = Text.of("Backpack"); - this.backpackTitleStr = "Backpack"; - } + this.backpackTitleText = Text.of("Backpack"); this.inventory = Inventory.builder() - .of(InventoryArchetypes.CHEST).withCarrier(this.playerCmdSrc) + .of(InventoryArchetypes.CHEST).withCarrier(owner) .property(InventoryTitle.PROPERTY_NAME, InventoryTitle.of(Text.of(this.backpackTitleText))) .property(InventoryDimension.PROPERTY_NAME, InventoryDimension.of(9, this.size)) .listener(ClickInventoryEvent.class, this::triggerClickEvent) + .listener(InteractInventoryEvent.Close.class, this::triggerInventoryCloseEvent) + .listener(InteractInventoryEvent.Open.class, this::triggerInventoryOpenEvent) .build(NyxBackpack.getInstance()); - this.loadBackpack(this.user_args, this.nb); + + this.loadBackpack(this.owner); + } + + public void openBackpack() { + openBackpack(Sponge.getServer().getPlayer(owner.getUniqueId()).get(), false); + } + + public void openBackpack(Player player, Boolean readonly, Boolean ownerallowed) { + this.ownerAllowed = ownerallowed; + openBackpack(player, readonly); + } + + public void openBackpack(Player player, Boolean readonly) { + String inventoryname = ""; + if (!player.getUniqueId().equals(this.owner.getUniqueId())) { + inventoryname = owner.getName() + "'s " + "Backpack"; + this.readOnly.put(player.getUniqueId(), readonly); + } else { + inventoryname = "Backpack"; + } + + player.openInventory(this.inventory, Text.of(inventoryname)); + } + + private void saveBackpack(User owner) { + try { + Map items = this.loadStacks(owner); + this.saveBackpack(items); + } catch (Exception e) { + e.printStackTrace(); + } } - private void saveBackpack(User user, Map items, NyxBackpack nb) { + private void saveBackpack(Map items) { Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create(); if (items == null || items.isEmpty()) { @@ -165,7 +192,7 @@ private Map loadSlots() throws Exception { } } - private void loadBackpack(User user, NyxBackpack nb) { + private void loadBackpack(User user) { Map items = new HashMap(); try { items = loadSlots(); @@ -198,18 +225,68 @@ private void loadBackpack(User user, NyxBackpack nb) { } private void triggerClickEvent(ClickInventoryEvent event) { - if (this.saveIt) { - try { - Map items = this.loadStacks(this.user_args); - this.saveBackpack(this.user_args, items, this.nb); - } catch (Exception e) { - e.printStackTrace(); + final Optional optionalPlayer = CoreTools.getPlayer(event.getCause()); + + if (optionalPlayer.isPresent()) { + final Player player = optionalPlayer.get(); + + if (player.getUniqueId().equals(this.owner.getUniqueId())) { + if (this.ownerAllowed && !this.backpackCheckLock(owner)) { + this.saveBackpack(this.owner); + } else { + event.setCancelled(true); + } + } else { + if (readOnly.containsKey(player.getUniqueId())) { + + if (readOnly.get(player.getUniqueId())) { + event.setCancelled(true); + } else { + this.saveBackpack(this.owner); + } + } else { + event.setCancelled(true); + } } } else { event.setCancelled(true); } } + private void triggerInventoryOpenEvent(InteractInventoryEvent.Open event) { + final Optional optionalPlayer = CoreTools.getPlayer(event.getCause()); + + if (optionalPlayer.isPresent()) { + final Player player = optionalPlayer.get(); + if (!player.getUniqueId().equals(this.owner.getUniqueId())) { + player.sendMessage(Text.of("§6Backpack is Open!!")); + } + } + } + + private void triggerInventoryCloseEvent(InteractInventoryEvent.Close event) { + final Optional optionalPlayer = CoreTools.getPlayer(event.getCause()); + + if (optionalPlayer.isPresent()) { + final Player player = optionalPlayer.get(); + if (readOnly.containsKey(player.getUniqueId())) { + + if (!readOnly.get(player.getUniqueId())) { + this.ownerAllowed = true; + } + readOnly.remove(player.getUniqueId()); + player.sendMessage(Text.of("§6Closed Backpack for:")); + player.sendMessage(Text.of("§6Name: §7" + owner.getName())); + player.sendMessage(Text.of("§6UUID: §7" + owner.getUniqueId())); + } + } + } + + private Boolean backpackCheckLock(User user) { + Path file = Paths.get(NyxBackpack.getInstance().getConfigPath() + File.separator + "backpacks" + File.separator + user.getUniqueId() + ".lock"); + return Files.exists(file); + } + public Inventory getBackpack() { return this.inventory; }