diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6ba77eb9..0e55ddbe 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,7 @@ stages: variables: name: "SongodaCore" path: "/builds/$CI_PROJECT_PATH" - version: "2.0.1" + version: "2.0.2" build: stage: build diff --git a/src/main/java/com/songoda/core/gui/Gui.java b/src/main/java/com/songoda/core/gui/Gui.java index a7a3cdb6..df853826 100644 --- a/src/main/java/com/songoda/core/gui/Gui.java +++ b/src/main/java/com/songoda/core/gui/Gui.java @@ -567,7 +567,7 @@ public class Gui { for (int i = 0; i < cells; ++i) { final ItemStack item = cellItems.get(i); - inventory.setItem(i, item != null ? item : blankItem); + inventory.setItem(i, item != null ? item : (unlockedCells.getOrDefault(i, false) ? AIR : blankItem)); } return inventory; @@ -584,7 +584,7 @@ public class Gui { final int cells = rows * 9; for (int i = 0; i < cells; ++i) { final ItemStack item = cellItems.get(i); - inventory.setItem(i, item != null ? item : blankItem); + inventory.setItem(i, item != null ? item : (unlockedCells.getOrDefault(i, false) ? AIR : blankItem)); } } diff --git a/src/main/java/com/songoda/core/gui/GuiManager.java b/src/main/java/com/songoda/core/gui/GuiManager.java index 9a5dae75..426b3a6f 100644 --- a/src/main/java/com/songoda/core/gui/GuiManager.java +++ b/src/main/java/com/songoda/core/gui/GuiManager.java @@ -9,16 +9,19 @@ import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryType.SlotType; import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; /** @@ -132,6 +135,7 @@ public class GuiManager { if (!(event.getWhoClicked() instanceof Player)) { return; } + Inventory openInv = event.getInventory(); final Player player = (Player) event.getWhoClicked(); Gui gui; @@ -139,6 +143,20 @@ public class GuiManager { && ((GuiHolder) openInv.getHolder()).manager.uuid.equals(manager.uuid)) { gui = ((GuiHolder) openInv.getHolder()).getGUI(); + if (event.getClick() == ClickType.DOUBLE_CLICK) { + // always cancel this event if there are matching gui elements, since it tends to do bad things + ItemStack clicked = event.getCursor(); + if(clicked != null && clicked.getType() != Material.AIR) { + int cell = 0; + for(ItemStack it : gui.inventory.getContents()) { + if(!gui.unlockedCells.getOrDefault(cell++, false) && clicked.isSimilar(it)) { + event.setCancelled(true); + break; + } + } + } + } + if (event.getSlotType() == SlotType.OUTSIDE) { if (!gui.onClickOutside(manager, player, event)) { event.setCancelled(true);