diff --git a/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java b/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java index cd8e048..5336e4d 100644 --- a/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java +++ b/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java @@ -43,6 +43,9 @@ private RegionTracker tracker = new RegionTracker(this); + private boolean canRemoveRegionNow = true; + private final List regionsToRemove = new ArrayList(); + public RegionManager(MinecraftServer server, int dimension, IRegionDataProvider dataProvider) { this.server = server; @@ -199,8 +202,12 @@ { if(tick % 101 == 0) { + canRemoveRegionNow = false; for(Region region : idToRegion.values()) region.onUpdate(); + canRemoveRegionNow = true; + for(Region region : regionsToRemove) + idToRegion.remove(region.getID()); } } @@ -216,7 +223,10 @@ { regionMap.remove(region); region.onDestroy(); - idToRegion.remove(region.getID()); + if(canRemoveRegionNow) + idToRegion.remove(region.getID()); + else + regionsToRemove.add(region); dataProvider.destroyRegion(region); tracker.onRegionDestroy(region); }