This commit is contained in:
Jesse Boyd 2016-05-23 23:00:33 +10:00
parent b209c6221a
commit 4ac02d6297
12 changed files with 47 additions and 55 deletions

View File

@ -18,7 +18,7 @@ public class BukkitEditSessionWrapper_0 extends EditSessionWrapper {
try {
// Try to hook into BlocksHub
this.hook = new BlocksHubHook();
} catch (final Throwable e) {}
} catch (final Throwable ignore) {}
}
@Override

View File

@ -113,7 +113,7 @@ public class Sniper {
if (fp.getMeta("fawe_action") != null) {
return false;
}
RegionWrapper[] mask = WEManager.IMP.getMask(fp).toArray(new RegionWrapper[0]);
RegionWrapper[] mask = WEManager.IMP.getMask(fp);
queue = FaweAPI.createQueue(fp.getLocation().world, true);
this.mask = (MaskedFaweQueue) (queue = new MaskedFaweQueue(queue, mask));
com.sk89q.worldedit.world.World worldEditWorld = fp.getWorld();

View File

@ -1,6 +1,7 @@
package com.boydti.fawe.bukkit.v1_8;
import com.boydti.fawe.bukkit.ABukkitMain;
import com.boydti.fawe.bukkit.v0.BukkitEditSessionWrapper_0;
import com.boydti.fawe.bukkit.v0.BukkitQueue_0;
import com.boydti.fawe.object.EditSessionWrapper;
import com.sk89q.worldedit.EditSession;
@ -14,6 +15,6 @@ public class BukkitMain_18 extends ABukkitMain {
@Override
public EditSessionWrapper getEditSessionWrapper(EditSession session) {
return new EditSessionWrapper(session);
return new BukkitEditSessionWrapper_0(session);
}
}

View File

@ -1,6 +1,7 @@
package com.boydti.fawe.bukkit.v1_9;
import com.boydti.fawe.bukkit.ABukkitMain;
import com.boydti.fawe.bukkit.v0.BukkitEditSessionWrapper_0;
import com.boydti.fawe.bukkit.v0.BukkitQueue_0;
import com.boydti.fawe.object.EditSessionWrapper;
import com.sk89q.worldedit.EditSession;
@ -13,6 +14,6 @@ public class BukkitMain_19 extends ABukkitMain {
@Override
public EditSessionWrapper getEditSessionWrapper(EditSession session) {
return new EditSessionWrapper(session);
return new BukkitEditSessionWrapper_0(session);
}
}

View File

@ -153,7 +153,7 @@ public class FaweAPI {
* @param player
* @return
*/
public static Set<RegionWrapper> getRegions(FawePlayer player) {
public static RegionWrapper[] getRegions(FawePlayer player) {
return WEManager.IMP.getMask(player);
}

View File

@ -118,6 +118,7 @@ public enum BBC {
WORLDEDIT_CANCEL_REASON_MAX_ENTITIES("Too many entities", "Cancel"),
WORLDEDIT_CANCEL_REASON_MAX_ITERATIONS("Max iterations", "Cancel"),
WORLDEDIT_CANCEL_REASON_MAX_FAILS("Outside allowed region", "Cancel"),
WORLDEDIT_CANCEL_REASON_NO_REGION("No allowed region", "Cancel"),
WORLDEDIT_FAILED_LOAD_CHUNK("&cSkipped loading chunk: &7%s0;%s1&c. Try increasing chunk-wait.", "Cancel"),
LOADING_CLIPBOARD("Loading clipboard from disk, please wait.", "History"),

View File

@ -281,7 +281,7 @@ public abstract class FawePlayer<T> {
* Get the player's current allowed WorldEdit regions
* @return
*/
public HashSet<RegionWrapper> getCurrentRegions() {
public RegionWrapper[] getCurrentRegions() {
return WEManager.IMP.getMask(this);
}

View File

@ -16,16 +16,15 @@ import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.biome.BaseBiome;
import java.util.HashSet;
import java.util.List;
public class ProcessedWEExtent extends FaweRegionExtent {
private final FaweLimit limit;
private final RegionWrapper[] mask;
public ProcessedWEExtent(final Extent parent, final HashSet<RegionWrapper> mask, FaweLimit limit) {
public ProcessedWEExtent(final Extent parent, final RegionWrapper[] mask, FaweLimit limit) {
super(parent);
this.mask = mask.toArray(new RegionWrapper[mask.size()]);
this.mask = mask;
this.limit = limit;
}

View File

@ -4,6 +4,7 @@ import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.regions.FaweMask;
import com.boydti.fawe.regions.FaweMaskManager;
import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.RegionWrapper;
import com.plotsquared.listener.WEManager;
@ -21,7 +22,11 @@ public class PlotSquaredFeature extends FaweMaskManager {
public FaweMask getMask(FawePlayer fp) {
final PlotPlayer pp = PlotPlayer.wrap((Player) fp.parent);
final HashSet<RegionWrapper> regions = WEManager.getMask(pp);
if (regions.size() == 0 || !PS.get().hasPlotArea(pp.getLocation().getWorld())) {
if (regions.size() == 0) {
Plot plot = pp.getCurrentPlot();
if (plot.isOwner(pp.getUUID())) {
System.out.println("INVALID MASK? " + WEManager.getMask(pp) + " | " + plot + " | " + pp.getName());
}
return null;
}
final HashSet<com.boydti.fawe.object.RegionWrapper> faweRegions = new HashSet<>();

View File

@ -2,7 +2,6 @@ package com.boydti.fawe.util;
import com.boydti.fawe.config.BBC;
import com.boydti.fawe.config.Settings;
import com.boydti.fawe.object.FaweLocation;
import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.RegionWrapper;
import com.boydti.fawe.object.RunnableVal;
@ -64,47 +63,43 @@ public class WEManager {
* @param player
* @return
*/
public HashSet<RegionWrapper> getMask(final FawePlayer<?> player) {
return TaskManager.IMP.sync(new RunnableVal<HashSet<RegionWrapper>>() {
public RegionWrapper[] getMask(final FawePlayer<?> player) {
HashSet<RegionWrapper> mask = TaskManager.IMP.sync(new RunnableVal<HashSet<RegionWrapper>>() {
@Override
public void run(HashSet<RegionWrapper> value) {
final HashSet<RegionWrapper> regions = new HashSet<>();
public void run(HashSet<RegionWrapper> ignore) {
this.value = new HashSet<>();
String world = player.getLocation().world;
if (!world.equals(player.getMeta("lastMaskWorld"))) {
player.deleteMeta("lastMaskWorld");
player.deleteMeta("lastMask");
}
player.setMeta("lastMaskWorld", world);
if (player.hasPermission("fawe.bypass") || !Settings.REGION_RESTRICTIONS) {
regions.add(new RegionWrapper(Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE));
player.deleteMeta("lastmask");
this.value = regions;
value.add(new RegionWrapper(Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE));
return;
}
for (final FaweMaskManager manager : managers) {
if (player.hasPermission("fawe." + manager.getKey())) {
final FaweMask mask = manager.getMask(player);
if (mask != null) {
regions.addAll(mask.getRegions());
value.addAll(mask.getRegions());
}
}
}
if (regions.size() == 0) {
HashSet<RegionWrapper> mask = player.<HashSet<RegionWrapper>>getMeta("lastmask");
if (mask != null) {
FaweLocation loc = player.getLocation();
for (RegionWrapper region : mask) {
if (region.isIn(loc.x, loc.z)) {
player.deleteMeta("lastmask");
this.value = regions;
return;
}
}
this.value = mask;
return;
}
}
player.setMeta("lastmask", regions);
this.value = regions;
return;
}
}, 1000);
if (mask == null || mask.isEmpty()) {
mask = player.getMeta("lastMask");
if (mask == null) {
mask = new HashSet<>();
}
}
player.setMeta("lastmask", mask);
return mask.toArray(new RegionWrapper[mask.size()]);
}
public boolean intersects(final RegionWrapper region1, final RegionWrapper region2) {
return (region1.minX <= region2.maxX) && (region1.maxX >= region2.minX) && (region1.minZ <= region2.maxZ) && (region1.maxZ >= region2.minZ);
}

View File

@ -261,7 +261,7 @@ public class EditSession implements Extent {
}
Extent extent;
HashSet<RegionWrapper> mask;
RegionWrapper[] mask;
final FawePlayer fp = FawePlayer.wrap(actor);
final LocalSession session = fp.getSession();
this.fastmode = session.hasFastMode();
@ -287,9 +287,9 @@ public class EditSession implements Extent {
queue.addEditSession(this);
this.limit = fp.getLimit();
mask = WEManager.IMP.getMask(fp);
if (mask.size() == 0) {
if (mask.length == 0) {
// No allowed area; return null extent
extent = this.regionExtent = new NullExtent(world, BBC.WORLDEDIT_CANCEL_REASON_MAX_FAILS);
extent = this.regionExtent = new NullExtent(world, BBC.WORLDEDIT_CANCEL_REASON_NO_REGION);
this.bypassReorderHistory = extent;
this.bypassHistory = extent;
this.bypassNone = extent;
@ -426,23 +426,14 @@ public class EditSession implements Extent {
eventBus.post(event);
final Extent toReturn = event.getExtent();
if (toReturn != extent) {
String className = toReturn.getClass().getSimpleName().toLowerCase();
if (className.contains("coreprotect")) {
if (Settings.EXTENT_DEBUG) {
Fawe.debug("&cUnsafe extent detected: " + toReturn.getClass().getCanonicalName() + " !");
Fawe.debug("&8 - &7Use BlocksHub instead");
Fawe.debug("&8 - &7Or use FAWE rollback");
Fawe.debug("&8 - &7Change `extent.debug: false` to hide this message");
}
return extent;
}
String className = toReturn.getClass().getName().toLowerCase();
for (String allowed : Settings.ALLOWED_3RDPARTY_EXTENTS) {
if (className.contains(allowed.toLowerCase())) {
return toReturn;
}
}
if (Settings.EXTENT_DEBUG) {
Fawe.debug("&cPotentially inefficient WorldEdit extent: " + toReturn.getClass().getSimpleName());
Fawe.debug("&cPotentially inefficient WorldEdit extent: " + toReturn.getClass().getName());
Fawe.debug("&8 - &7For area restrictions, it is recommended to use the FaweAPI");
Fawe.debug("&8 - &7To allow this plugin add it to the FAWE `allowed-plugins` list");
}

View File

@ -22,10 +22,10 @@ package com.sk89q.worldedit.command.composition;
import com.boydti.fawe.config.BBC;
import com.boydti.fawe.object.FaweChunk;
import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.FaweQueue;
import com.boydti.fawe.object.NullChangeSet;
import com.boydti.fawe.object.RegionWrapper;
import com.boydti.fawe.object.RunnableVal;
import com.boydti.fawe.object.FaweQueue;
import com.boydti.fawe.util.MainUtil;
import com.boydti.fawe.util.WEManager;
import com.google.common.base.Joiner;
@ -55,7 +55,6 @@ import com.sk89q.worldedit.util.command.argument.CommandArgs;
import com.sk89q.worldedit.util.command.composition.CommandExecutor;
import com.sk89q.worldedit.util.command.composition.SimpleCommand;
import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.List;
@ -105,9 +104,9 @@ public class SelectionCommand extends SimpleCommand<Operation> {
RegionFunction function = ((RegionVisitor) operation).function;
RegionWrapper current = new RegionWrapper(cuboid.getMinimumPoint(), cuboid.getMaximumPoint());
FawePlayer fp = FawePlayer.wrap(player);
HashSet<RegionWrapper> mask = WEManager.IMP.getMask(fp);
RegionWrapper[] mask = WEManager.IMP.getMask(fp);
if (function instanceof BlockReplace && mask.size() == 1 && mask.iterator().next().contains(current)) {
if (function instanceof BlockReplace && mask.length == 1 && mask[0].equals(current)) {
try {
BlockReplace replace = ((BlockReplace) function);
Field field = replace.getClass().getDeclaredField("pattern");