diff --git a/src/main/java/com/intellectualcrafters/plot/object/Plot.java b/src/main/java/com/intellectualcrafters/plot/object/Plot.java index c6f9ce2ea..2348f916b 100644 --- a/src/main/java/com/intellectualcrafters/plot/object/Plot.java +++ b/src/main/java/com/intellectualcrafters/plot/object/Plot.java @@ -25,8 +25,10 @@ import java.net.URL; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map.Entry; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.UUID; @@ -397,7 +399,7 @@ public class Plot { public void addTrusted(final UUID uuid) { if (this.getTrusted().add(uuid)) DBFunc.setTrusted(this, uuid); } - + /** * Add someone as a trusted user (updates database as well) * @@ -418,6 +420,66 @@ public class Plot { } } + /** + * Set the trusted users for this plot + * @param uuids + */ + public void setTrusted(Set uuids) { + if (uuids.size() == 0) { + return; + } + if (trusted != null && trusted.size() > 0) { + trusted.removeAll(uuids); + for (UUID uuid : trusted) { + DBFunc.removeTrusted(this, uuid); + } + trusted.clear(); + } + for (UUID uuid : uuids) { + addTrusted(uuid); + } + } + + /** + * Set the members for this plot + * @param uuids + */ + public void setMembers(Set uuids) { + if (uuids.size() == 0) { + return; + } + if (members != null && members.size() > 0) { + members.removeAll(uuids); + for (UUID uuid : members) { + DBFunc.removeMember(this, uuid); + } + members.clear(); + } + for (UUID uuid : uuids) { + addMember(uuid); + } + } + + /** + * Set the denied users for this plot + * @param uuids + */ + public void setDenied(Set uuids) { + if (uuids.size() == 0) { + return; + } + if (denied != null && denied.size() > 0) { + denied.removeAll(uuids); + for (UUID uuid : denied) { + DBFunc.removeDenied(this, uuid); + } + denied.clear(); + } + for (UUID uuid : uuids) { + addDenied(uuid); + } + } + /** * Clear a plot * @see MainUtil#clear(Plot, boolean, Runnable) diff --git a/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java b/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java index b3f93f4d3..93cec65d9 100644 --- a/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java +++ b/src/main/java/com/intellectualcrafters/plot/util/MainUtil.java @@ -23,6 +23,7 @@ package com.intellectualcrafters.plot.util; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -645,23 +646,36 @@ public class MainUtil { if (!result) { return false; } + + HashSet trusted = new HashSet(); + HashSet members = new HashSet(); + HashSet denied = new HashSet(); manager.startPlotMerge(plotworld, plotIds); for (int x = pos1.x; x <= pos2.x; x++) { for (int y = pos1.y; y <= pos2.y; y++) { final PlotId id = new PlotId(x, y); final Plot plot = PS.get().getPlot(world, id); + trusted.addAll(plot.getTrusted()); + members.addAll(plot.getMembers()); + denied.addAll(plot.getDenied()); if (removeRoads) { removeSign(plot); } } } + members.removeAll(trusted); + denied.removeAll(trusted); + denied.removeAll(members); for (int x = pos1.x; x <= pos2.x; x++) { for (int y = pos1.y; y <= pos2.y; y++) { final boolean lx = x < pos2.x; final boolean ly = y < pos2.y; final PlotId id = new PlotId(x, y); final Plot plot = PS.get().getPlot(world, id); + plot.setTrusted(trusted); + plot.setMembers(members); + plot.setDenied(denied); Plot plot2 = null; if (lx) { if (ly) {