geforkt von Mirrors/FastAsyncWorldEdit
fix: invalidate cached FaweMask when a plot is unlinked (#2157)
* fix: invalidate cached FaweMask when a plot is unlinked - Fixes IntellectualSites/PlotSquared#3998 * Use a weakly-referenced copy of the copnncted plots set
Dieser Commit ist enthalten in:
Ursprung
da4d966d9e
Commit
e4158ac084
@ -23,6 +23,7 @@ import com.sk89q.worldedit.world.World;
|
|||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -176,15 +177,28 @@ public class PlotSquaredFeature extends FaweMaskManager {
|
|||||||
maskedRegion = new RegionIntersection(world, weRegions);
|
maskedRegion = new RegionIntersection(world, weRegions);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new FaweMask(maskedRegion) {
|
return new PlotSquaredMask(maskedRegion, finalPlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final class PlotSquaredMask extends FaweMask {
|
||||||
|
|
||||||
|
private final Plot plot;
|
||||||
|
private final WeakReference<Set<Plot>> connectedPlots;
|
||||||
|
|
||||||
|
private PlotSquaredMask(Region region, Plot plot) {
|
||||||
|
super(region);
|
||||||
|
this.plot = plot;
|
||||||
|
connectedPlots = new WeakReference<>(plot.getConnectedPlots());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isValid(Player player, MaskType type) {
|
public boolean isValid(Player player, MaskType type) {
|
||||||
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(finalPlot)) {
|
if (!connectedPlots.refersTo(plot.getConnectedPlots()) || (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return isAllowed(player, finalPlot, type);
|
return isAllowed(player, plot, type);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren