Fixed rare case of endless loop over Inventory viewers

This commit is contained in:
Sn0wStorm 2019-09-12 11:01:13 +02:00
parent cec9a50b15
commit 29ea53683c
4 changed files with 21 additions and 5 deletions

View File

@ -4,7 +4,7 @@
<groupId>com.dre</groupId> <groupId>com.dre</groupId>
<artifactId>brewery</artifactId> <artifactId>brewery</artifactId>
<version>1.8.1</version> <version>1.8.2</version>
<name>Brewery</name> <name>Brewery</name>
<properties> <properties>

View File

@ -1,5 +1,5 @@
name: Brewery name: Brewery
version: 1.8.1 version: 1.8.2
main: com.dre.brewery.P main: com.dre.brewery.P
softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault, Citadel] softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault, Citadel]
authors: [Milan Albrecht, Frank Baumann, ProgrammerDan, Daniel Saukel] authors: [Milan Albrecht, Frank Baumann, ProgrammerDan, Daniel Saukel]

View File

@ -8,6 +8,7 @@ import org.apache.commons.lang.ArrayUtils;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
@ -18,6 +19,7 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
@ -469,9 +471,10 @@ public class Barrel implements InventoryHolder {
// removes a barrel, throwing included potions to the ground // removes a barrel, throwing included potions to the ground
public void remove(Block broken, Player breaker) { public void remove(Block broken, Player breaker) {
if (inventory != null) { if (inventory != null) {
while (!inventory.getViewers().isEmpty()) { List<HumanEntity> viewers = new ArrayList(inventory.getViewers());
// Use while loop to fix ConcModExc // Copy List to fix ConcModExc
inventory.getViewers().get(0).closeInventory(); for (HumanEntity viewer : viewers) {
viewer.closeInventory();
} }
ItemStack[] items = inventory.getContents(); ItemStack[] items = inventory.getContents();
inventory.clear(); inventory.clear();

View File

@ -349,10 +349,23 @@ public class InventoryListener implements Listener {
barrel.clickInv(event); barrel.clickInv(event);
} }
//public static boolean opening = false;
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onInventoryOpen(InventoryOpenEvent event) { public void onInventoryOpen(InventoryOpenEvent event) {
if (!P.use1_14) return; 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 // Check for MC Barrel
if (event.getInventory().getType() == InventoryType.BARREL) { if (event.getInventory().getType() == InventoryType.BARREL) {
Inventory inv = event.getInventory(); Inventory inv = event.getInventory();