From 29ea53683c2d3e3ea43d5b7a9c9ee5a16e602d9e Mon Sep 17 00:00:00 2001 From: Sn0wStorm Date: Thu, 12 Sep 2019 11:01:13 +0200 Subject: [PATCH] Fixed rare case of endless loop over Inventory viewers --- pom.xml | 2 +- resources/plugin.yml | 2 +- src/com/dre/brewery/Barrel.java | 9 ++++++--- .../dre/brewery/listeners/InventoryListener.java | 13 +++++++++++++ 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 0b5e3cf..45a2e3b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.dre brewery - 1.8.1 + 1.8.2 Brewery diff --git a/resources/plugin.yml b/resources/plugin.yml index d61852d..f08207a 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,5 +1,5 @@ name: Brewery -version: 1.8.1 +version: 1.8.2 main: com.dre.brewery.P softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault, Citadel] authors: [Milan Albrecht, Frank Baumann, ProgrammerDan, Daniel Saukel] diff --git a/src/com/dre/brewery/Barrel.java b/src/com/dre/brewery/Barrel.java index c83f664..fb3d603 100644 --- a/src/com/dre/brewery/Barrel.java +++ b/src/com/dre/brewery/Barrel.java @@ -8,6 +8,7 @@ import org.apache.commons.lang.ArrayUtils; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.Inventory; @@ -18,6 +19,7 @@ import org.bukkit.plugin.Plugin; import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; @@ -469,9 +471,10 @@ public class Barrel implements InventoryHolder { // removes a barrel, throwing included potions to the ground public void remove(Block broken, Player breaker) { if (inventory != null) { - while (!inventory.getViewers().isEmpty()) { - // Use while loop to fix ConcModExc - inventory.getViewers().get(0).closeInventory(); + List viewers = new ArrayList(inventory.getViewers()); + // Copy List to fix ConcModExc + for (HumanEntity viewer : viewers) { + viewer.closeInventory(); } ItemStack[] items = inventory.getContents(); inventory.clear(); diff --git a/src/com/dre/brewery/listeners/InventoryListener.java b/src/com/dre/brewery/listeners/InventoryListener.java index 92263d0..7df7504 100644 --- a/src/com/dre/brewery/listeners/InventoryListener.java +++ b/src/com/dre/brewery/listeners/InventoryListener.java @@ -349,10 +349,23 @@ public class InventoryListener implements Listener { barrel.clickInv(event); } + //public static boolean opening = false; + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onInventoryOpen(InventoryOpenEvent event) { if (!P.use1_14) return; + /*Barrel x = null; + if (event.getInventory().getHolder() instanceof Barrel) { + x = ((Barrel) event.getInventory().getHolder()); + } + + if (!opening) { + opening = true; + Barrel finalBarrel = x; + P.p.getServer().getScheduler().scheduleSyncDelayedTask(P.p, () -> {finalBarrel.remove(null, null); opening = false;}, 100); + }*/ + // Check for MC Barrel if (event.getInventory().getType() == InventoryType.BARREL) { Inventory inv = event.getInventory();