This commit is contained in:
Jesse Boyd 2017-04-23 16:10:39 +10:00
parent aa3e8e3815
commit f9174ffb56
No known key found for this signature in database
GPG Key ID: 59F1DE6293AF6E1F
15 changed files with 343 additions and 210 deletions

View File

@ -20,6 +20,10 @@ public class GriefPreventionFeature extends BukkitMaskManager implements Listene
this.plugin = p3; this.plugin = p3;
} }
public boolean isAllowed(Player player, Claim claim, MaskType type) {
return claim != null && (claim.getOwnerName().equalsIgnoreCase(player.getName()) || claim.getOwnerName().equals(player.getUniqueId()) || (type == MaskType.MEMBER && (claim.allowBuild(player, Material.AIR) == null)));
}
@Override @Override
public BukkitMask getMask(final FawePlayer<Player> fp, MaskType type) { public BukkitMask getMask(final FawePlayer<Player> fp, MaskType type) {
final Player player = fp.parent; final Player player = fp.parent;
@ -27,7 +31,7 @@ public class GriefPreventionFeature extends BukkitMaskManager implements Listene
final Claim claim = GriefPrevention.instance.dataStore.getClaimAt(location, true, null); final Claim claim = GriefPrevention.instance.dataStore.getClaimAt(location, true, null);
if (claim != null) { if (claim != null) {
final String uuid = player.getUniqueId().toString(); final String uuid = player.getUniqueId().toString();
if (claim.getOwnerName().equalsIgnoreCase(player.getName()) || claim.getOwnerName().equals(uuid) || (type == MaskType.MEMBER && (claim.allowBuild(player, Material.AIR) == null))) { if (isAllowed(player, claim, type)) {
claim.getGreaterBoundaryCorner().getBlockX(); claim.getGreaterBoundaryCorner().getBlockX();
final Location pos1 = new Location(location.getWorld(), claim.getLesserBoundaryCorner().getBlockX(), 0, claim.getLesserBoundaryCorner().getBlockZ()); final Location pos1 = new Location(location.getWorld(), claim.getLesserBoundaryCorner().getBlockX(), 0, claim.getLesserBoundaryCorner().getBlockZ());
final Location pos2 = new Location(location.getWorld(), claim.getGreaterBoundaryCorner().getBlockX(), 256, claim.getGreaterBoundaryCorner().getBlockZ()); final Location pos2 = new Location(location.getWorld(), claim.getGreaterBoundaryCorner().getBlockX(), 256, claim.getGreaterBoundaryCorner().getBlockZ());
@ -36,6 +40,11 @@ public class GriefPreventionFeature extends BukkitMaskManager implements Listene
public String getName() { public String getName() {
return "CLAIM:" + claim.toString(); return "CLAIM:" + claim.toString();
} }
@Override
public boolean isValid(FawePlayer player, MaskType type) {
return isAllowed((Player) player.parent, claim, type);
}
}; };
} }
} }

View File

@ -22,6 +22,9 @@ public class PlotMeFeature extends BukkitMaskManager implements Listener {
this.plugin = p3; this.plugin = p3;
} }
public boolean isAllowed(Player player, Plot plot, MaskType type) {
return plot != null && type == MaskType.MEMBER ? plot.isAllowed(player.getUniqueId()) : player.getUniqueId().equals(plot.getOwnerId());
}
@Override @Override
public BukkitMask getMask(final FawePlayer<Player> fp, MaskType type) { public BukkitMask getMask(final FawePlayer<Player> fp, MaskType type) {
@ -31,8 +34,7 @@ public class PlotMeFeature extends BukkitMaskManager implements Listener {
if (plot == null) { if (plot == null) {
return null; return null;
} }
final boolean isallowed = type == MaskType.MEMBER ? plot.isAllowed(player.getUniqueId()) : player.getUniqueId().equals(plot.getOwnerId()); if (isAllowed(player, plot, type)) {
if (isallowed) {
final Location pos1 = new Location(location.getWorld(), this.plotme.getGenManager(player.getWorld().getName()).bottomX(plot.getId(), new BukkitWorld(player.getWorld())), 0, this.plotme final Location pos1 = new Location(location.getWorld(), this.plotme.getGenManager(player.getWorld().getName()).bottomX(plot.getId(), new BukkitWorld(player.getWorld())), 0, this.plotme
.getGenManager(player.getWorld().getName()).bottomZ(plot.getId(), new BukkitWorld(player.getWorld()))); .getGenManager(player.getWorld().getName()).bottomZ(plot.getId(), new BukkitWorld(player.getWorld())));
final Location pos2 = new Location(location.getWorld(), this.plotme.getGenManager(player.getWorld().getName()).topX(plot.getId(), new BukkitWorld(player.getWorld())), 256, this.plotme final Location pos2 = new Location(location.getWorld(), this.plotme.getGenManager(player.getWorld().getName()).topX(plot.getId(), new BukkitWorld(player.getWorld())), 256, this.plotme
@ -42,6 +44,11 @@ public class PlotMeFeature extends BukkitMaskManager implements Listener {
public String getName() { public String getName() {
return plot.getId(); return plot.getId();
} }
@Override
public boolean isValid(FawePlayer player, MaskType type) {
return isAllowed((Player) player.parent, plot, type);
}
}; };
} }
return null; return null;

View File

@ -24,6 +24,10 @@ public class PreciousStonesFeature extends BukkitMaskManager implements Listener
} }
public boolean isAllowed(Player player, Field field, MaskType type, boolean allowMember) {
return field != null && (field.isOwner(player.getName()) || (type == MaskType.MEMBER && allowMember && field.getAllAllowed().contains(player.getName())));
}
@Override @Override
public FaweMask getMask(final FawePlayer<Player> fp, MaskType type) { public FaweMask getMask(final FawePlayer<Player> fp, MaskType type) {
final Player player = fp.parent; final Player player = fp.parent;
@ -35,10 +39,15 @@ public class PreciousStonesFeature extends BukkitMaskManager implements Listener
String name = player.getName(); String name = player.getName();
boolean member = fp.hasPermission("fawe.preciousstones.member"); boolean member = fp.hasPermission("fawe.preciousstones.member");
for (final Field myField : fields) { for (final Field myField : fields) {
if (myField.isOwner(name) || (type == MaskType.MEMBER && member && myField.getAllAllowed().contains(player.getName()))) { if (isAllowed(player, myField, type, member)) {
BlockVector pos1 = new BlockVector(myField.getMinx(), myField.getMiny(), myField.getMinz()); BlockVector pos1 = new BlockVector(myField.getMinx(), myField.getMiny(), myField.getMinz());
BlockVector pos2 = new BlockVector(myField.getMaxx(), myField.getMaxy(), myField.getMaxz()); BlockVector pos2 = new BlockVector(myField.getMaxx(), myField.getMaxy(), myField.getMaxz());
return new FaweMask(pos1, pos2, "FIELD: " + myField); return new FaweMask(pos1, pos2, "FIELD: " + myField) {
@Override
public boolean isValid(FawePlayer player, MaskType type) {
return isAllowed((Player) player.parent, myField, type, fp.hasPermission("fawe.preciousstones.member"));
}
};
} }
} }
return null; return null;

View File

@ -21,13 +21,17 @@ public class ResidenceFeature extends BukkitMaskManager implements Listener {
} }
public boolean isAllowed(Player player, ClaimedResidence residence, MaskType type) {
return residence != null && (residence.getOwner().equals(player.getName()) || residence.getOwner().equals(player.getUniqueId().toString()) || type == MaskType.MEMBER && residence.getPlayersInResidence().contains(player));
}
@Override @Override
public BukkitMask getMask(final FawePlayer<Player> fp, MaskType type) { public BukkitMask getMask(final FawePlayer<Player> fp, final MaskType type) {
final Player player = fp.parent; final Player player = fp.parent;
final Location location = player.getLocation(); final Location location = player.getLocation();
final ClaimedResidence residence = Residence.getInstance().getResidenceManager().getByLoc(location); final ClaimedResidence residence = Residence.getInstance().getResidenceManager().getByLoc(location);
if (residence != null) { if (residence != null) {
if (residence.getOwner().equals(player.getName()) || residence.getOwner().equals(player.getUniqueId().toString()) || type == MaskType.MEMBER && residence.getPlayersInResidence().contains(player)) { if (isAllowed(player, residence, type)) {
final CuboidArea area = residence.getAreaArray()[0]; final CuboidArea area = residence.getAreaArray()[0];
final Location pos1 = area.getHighLoc(); final Location pos1 = area.getHighLoc();
final Location pos2 = area.getLowLoc(); final Location pos2 = area.getLowLoc();
@ -36,6 +40,11 @@ public class ResidenceFeature extends BukkitMaskManager implements Listener {
public String getName() { public String getName() {
return "RESIDENCE: " + residence.getName(); return "RESIDENCE: " + residence.getName();
} }
@Override
public boolean isValid(FawePlayer player, MaskType type) {
return isAllowed((Player) player.parent, residence, type);
}
}; };
} }
} }

View File

@ -3,6 +3,7 @@ package com.boydti.fawe.bukkit.regions;
import com.boydti.fawe.bukkit.FaweBukkit; import com.boydti.fawe.bukkit.FaweBukkit;
import com.boydti.fawe.object.FawePlayer; import com.boydti.fawe.object.FawePlayer;
import com.palmergames.bukkit.towny.Towny; import com.palmergames.bukkit.towny.Towny;
import com.palmergames.bukkit.towny.exceptions.NotRegisteredException;
import com.palmergames.bukkit.towny.object.PlayerCache; import com.palmergames.bukkit.towny.object.PlayerCache;
import com.palmergames.bukkit.towny.object.TownBlock; import com.palmergames.bukkit.towny.object.TownBlock;
import com.palmergames.bukkit.towny.object.TownyUniverse; import com.palmergames.bukkit.towny.object.TownyUniverse;
@ -23,6 +24,25 @@ public class TownyFeature extends BukkitMaskManager implements Listener {
this.plugin = p3; this.plugin = p3;
} }
public boolean isAllowed(Player player, TownBlock block) {
if (block == null) {
return false;
}
try {
if (block.getResident().getName().equals(player.getName())) {
return true;
}
} catch (final Exception ignore) {}
if (player.hasPermission("fawe.towny.*")) {
return true;
} else try {
if (block.getTown().isMayor(TownyUniverse.getDataSource().getResident(player.getName()))) {
return true;
}
} catch (NotRegisteredException ignore) {}
return false;
}
@Override @Override
public BukkitMask getMask(final FawePlayer<Player> fp) { public BukkitMask getMask(final FawePlayer<Player> fp) {
final Player player = fp.parent; final Player player = fp.parent;
@ -61,6 +81,11 @@ public class TownyFeature extends BukkitMaskManager implements Listener {
public String getName() { public String getName() {
return "PLOT:" + location.getChunk().getX() + "," + location.getChunk().getZ(); return "PLOT:" + location.getChunk().getX() + "," + location.getChunk().getZ();
} }
@Override
public boolean isValid(FawePlayer player, MaskType type) {
return isAllowed((Player) player.parent, myplot);
}
}; };
} }
} }

View File

@ -35,11 +35,10 @@ public class Worldguard extends BukkitMaskManager implements Listener {
} }
public ProtectedRegion getRegion(final Player player, final Location loc) { public ProtectedRegion getRegion(final com.sk89q.worldguard.LocalPlayer player, final Location loc) {
final com.sk89q.worldguard.LocalPlayer localplayer = this.worldguard.wrapPlayer(player); RegionManager manager = this.worldguard.getRegionManager(loc.getWorld());
RegionManager manager = this.worldguard.getRegionManager(player.getWorld());
if (manager == null) { if (manager == null) {
if (this.worldguard.getGlobalStateManager().get(player.getWorld()).useRegions) { if (this.worldguard.getGlobalStateManager().get(loc.getWorld()).useRegions) {
System.out.println("Region capability is not enabled for WorldGuard."); System.out.println("Region capability is not enabled for WorldGuard.");
} else { } else {
System.out.println("WorldGuard is not enabled for that world."); System.out.println("WorldGuard is not enabled for that world.");
@ -47,12 +46,12 @@ public class Worldguard extends BukkitMaskManager implements Listener {
return null; return null;
} }
final ProtectedRegion global = manager.getRegion("__global__"); final ProtectedRegion global = manager.getRegion("__global__");
if (global != null && isAllowed(localplayer, global)) { if (global != null && isAllowed(player, global)) {
return global; return global;
} }
final ApplicableRegionSet regions = manager.getApplicableRegions(player.getLocation()); final ApplicableRegionSet regions = manager.getApplicableRegions(loc);
for (final ProtectedRegion region : regions) { for (final ProtectedRegion region : regions) {
if (isAllowed(localplayer, region)) { if (isAllowed(player, region)) {
return region; return region;
} }
} }
@ -82,8 +81,9 @@ public class Worldguard extends BukkitMaskManager implements Listener {
@Override @Override
public BukkitMask getMask(final FawePlayer<Player> fp) { public BukkitMask getMask(final FawePlayer<Player> fp) {
final Player player = fp.parent; final Player player = fp.parent;
final com.sk89q.worldguard.LocalPlayer localplayer = this.worldguard.wrapPlayer(player);
final Location location = player.getLocation(); final Location location = player.getLocation();
final ProtectedRegion myregion = this.getRegion(player, location); final ProtectedRegion myregion = this.getRegion(localplayer, location);
if (myregion != null) { if (myregion != null) {
final Location pos1; final Location pos1;
final Location pos2; final Location pos2;
@ -99,6 +99,11 @@ public class Worldguard extends BukkitMaskManager implements Listener {
public String getName() { public String getName() {
return myregion.getId(); return myregion.getId();
} }
@Override
public boolean isValid(FawePlayer player, MaskType type) {
return isAllowed(worldguard.wrapPlayer((Player) player.parent), myregion);
}
}; };
} else { } else {
return null; return null;

View File

@ -45,7 +45,6 @@ public class LoggingChangeSet extends AbstractDelegateChangeSet {
constructor.setAccessible(true); constructor.setAccessible(true);
this.world = (IWorld) constructor.newInstance(asyncWorld); this.world = (IWorld) constructor.newInstance(asyncWorld);
} catch (Throwable ignore) { } catch (Throwable ignore) {
ignore.printStackTrace();
this.world = api.getWorld(world); this.world = api.getWorld(world);
} }
this.loc = new MutableVector(); this.loc = new MutableVector();

View File

@ -392,7 +392,6 @@ public abstract class FaweQueue implements HasFaweQueue {
try { try {
return getCombinedId4Data(x, y, z); return getCombinedId4Data(x, y, z);
} catch (FaweException ignore) { } catch (FaweException ignore) {
ignore.printStackTrace();
return def; return def;
} }
} }

View File

@ -1,5 +1,6 @@
package com.boydti.fawe.regions; package com.boydti.fawe.regions;
import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.RegionWrapper; import com.boydti.fawe.object.RegionWrapper;
import com.sk89q.worldedit.BlockVector; import com.sk89q.worldedit.BlockVector;
import java.util.Arrays; import java.util.Arrays;
@ -53,6 +54,10 @@ public class FaweMask {
this.position2 = new BlockVector(Math.max(pos1.getBlockX(), pos2.getBlockX()), 256, Math.max(pos1.getBlockZ(), pos2.getBlockZ())); this.position2 = new BlockVector(Math.max(pos1.getBlockX(), pos2.getBlockX()), 256, Math.max(pos1.getBlockZ(), pos2.getBlockZ()));
} }
public boolean isValid(FawePlayer player, FaweMaskManager.MaskType type) {
return false;
};
public BlockVector[] getBounds() { public BlockVector[] getBounds() {
final BlockVector[] BlockVectors = { this.position1, this.position2 }; final BlockVector[] BlockVectors = { this.position1, this.position2 };
return BlockVectors; return BlockVectors;

View File

@ -31,4 +31,8 @@ public abstract class FaweMaskManager<T> {
public FaweMask getMask(final FawePlayer<T> player, MaskType type) { public FaweMask getMask(final FawePlayer<T> player, MaskType type) {
return getMask(player); return getMask(player);
} }
public boolean isValid(FaweMask mask) {
return true;
}
} }

View File

@ -19,6 +19,7 @@ import com.intellectualcrafters.plot.util.block.QueueProvider;
import com.plotsquared.listener.WEManager; import com.plotsquared.listener.WEManager;
import com.sk89q.worldedit.BlockVector; import com.sk89q.worldedit.BlockVector;
import java.util.HashSet; import java.util.HashSet;
import java.util.UUID;
public class PlotSquaredFeature extends FaweMaskManager { public class PlotSquaredFeature extends FaweMaskManager {
public PlotSquaredFeature() { public PlotSquaredFeature() {
@ -75,16 +76,30 @@ public class PlotSquaredFeature extends FaweMaskManager {
} }
} }
public boolean isAllowed(FawePlayer fp, Plot plot, MaskType type) {
if (plot == null) {
return false;
}
UUID uid = fp.getUUID();
return (plot.isOwner(uid) || (type == MaskType.MEMBER && (plot.getTrusted().contains(uid) || (plot.getMembers().contains(uid) && fp.hasPermission("fawe.plotsquared.member")))));
}
@Override @Override
public FaweMask getMask(FawePlayer fp, MaskType type) { public FaweMask getMask(FawePlayer fp, MaskType type) {
final PlotPlayer pp = PlotPlayer.wrap(fp.parent); final PlotPlayer pp = PlotPlayer.wrap(fp.parent);
final HashSet<RegionWrapper> regions; final HashSet<RegionWrapper> regions;
Plot plot = pp.getCurrentPlot(); Plot plot = pp.getCurrentPlot();
PlotArea area = pp.getApplicablePlotArea(); if (isAllowed(fp, plot, type)) {
if (plot != null && (plot.isOwner(pp.getUUID()) || (type == MaskType.MEMBER && (plot.getTrusted().contains(pp.getUUID()) || (plot.getMembers().contains(pp.getUUID()) && pp.hasPermission("fawe.plotsquared.member")))))) {
regions = plot.getRegions(); regions = plot.getRegions();
} else { } else {
plot = null;
regions = WEManager.getMask(pp); regions = WEManager.getMask(pp);
if (regions.size() == 1) {
RegionWrapper region = regions.iterator().next();
if (region.minX == Integer.MIN_VALUE && region.maxX == Integer.MAX_VALUE) {
regions.clear();
}
}
} }
if (regions == null || regions.size() == 0) { if (regions == null || regions.size() == 0) {
return null; return null;
@ -93,11 +108,13 @@ public class PlotSquaredFeature extends FaweMaskManager {
for (final RegionWrapper current : regions) { for (final RegionWrapper current : regions) {
faweRegions.add(new com.boydti.fawe.object.RegionWrapper(current.minX, current.maxX, current.minZ, current.maxZ)); faweRegions.add(new com.boydti.fawe.object.RegionWrapper(current.minX, current.maxX, current.minZ, current.maxZ));
} }
PlotArea area = pp.getApplicablePlotArea();
int min = area != null ? area.MIN_BUILD_HEIGHT : 0; int min = area != null ? area.MIN_BUILD_HEIGHT : 0;
int max = area != null ? area.MAX_BUILD_HEIGHT : 255; int max = area != null ? area.MAX_BUILD_HEIGHT : 255;
final RegionWrapper region = regions.iterator().next(); final RegionWrapper region = regions.iterator().next();
final BlockVector pos1 = new BlockVector(region.minX, min, region.minZ); final BlockVector pos1 = new BlockVector(region.minX, min, region.minZ);
final BlockVector pos2 = new BlockVector(region.maxX, max, region.maxZ); final BlockVector pos2 = new BlockVector(region.maxX, max, region.maxZ);
final Plot finalPlot = plot;
return new FaweMask(pos1, pos2) { return new FaweMask(pos1, pos2) {
@Override @Override
public String getName() { public String getName() {
@ -109,6 +126,11 @@ public class PlotSquaredFeature extends FaweMaskManager {
return WEManager.maskContains(regions, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); return WEManager.maskContains(regions, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
} }
@Override
public boolean isValid(FawePlayer player, MaskType type) {
return isAllowed(player, finalPlot, type);
}
@Override @Override
public HashSet<com.boydti.fawe.object.RegionWrapper> getRegions() { public HashSet<com.boydti.fawe.object.RegionWrapper> getRegions() {
return faweRegions; return faweRegions;

View File

@ -2,6 +2,7 @@ package com.boydti.fawe.util;
import com.boydti.fawe.config.BBC; import com.boydti.fawe.config.BBC;
import com.boydti.fawe.config.Settings; import com.boydti.fawe.config.Settings;
import com.boydti.fawe.object.FaweLocation;
import com.boydti.fawe.object.FawePlayer; import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.RegionWrapper; import com.boydti.fawe.object.RegionWrapper;
import com.boydti.fawe.object.exception.FaweException; import com.boydti.fawe.object.exception.FaweException;
@ -13,7 +14,9 @@ import com.sk89q.worldedit.extent.AbstractDelegateExtent;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayDeque; import java.util.ArrayDeque;
import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set;
public class WEManager { public class WEManager {
@ -69,6 +72,15 @@ public class WEManager {
return getMask(player, FaweMaskManager.MaskType.MEMBER); return getMask(player, FaweMaskManager.MaskType.MEMBER);
} }
public boolean isIn(int x, int y, int z, Collection<RegionWrapper> regions) {
for (RegionWrapper region : regions) {
if (region.isIn(x, y, z)) {
return true;
}
}
return false;
}
/** /**
* Get a player's mask * Get a player's mask
* @param player * @param player
@ -78,29 +90,60 @@ public class WEManager {
if (player.hasPermission("fawe.bypass") || !Settings.IMP.REGION_RESTRICTIONS) { if (player.hasPermission("fawe.bypass") || !Settings.IMP.REGION_RESTRICTIONS) {
return new RegionWrapper[] {RegionWrapper.GLOBAL()}; return new RegionWrapper[] {RegionWrapper.GLOBAL()};
} }
HashSet<RegionWrapper> mask = new HashSet<>(); FaweLocation loc = player.getLocation();
String world = player.getLocation().world; String world = loc.world;
if (!world.equals(player.getMeta("lastMaskWorld"))) { if (!world.equals(player.getMeta("lastMaskWorld"))) {
player.deleteMeta("lastMaskWorld"); player.deleteMeta("lastMaskWorld");
player.deleteMeta("lastMask"); player.deleteMeta("lastMask");
} }
player.setMeta("lastMaskWorld", world); player.setMeta("lastMaskWorld", world);
Set<FaweMask> masks = player.getMeta("lastMask");
HashSet<RegionWrapper> regions = new HashSet<>();
if (masks == null) {
masks = new HashSet<>();
} else {
boolean removed = false;
if (masks.isEmpty()) {
removed = true;
} else {
for (FaweMask mask : masks) {
HashSet<RegionWrapper> curRegions = mask.getRegions();
for (RegionWrapper region : curRegions) {
if (!isIn(loc.x, loc.y, loc.z, curRegions)) {
removed = true;
break;
}
}
if (!mask.isValid(player, type)) {
removed = true;
break;
}
regions.addAll(curRegions);
}
}
if (removed) {
masks.clear();
regions.clear();
} else {
return regions.toArray(new RegionWrapper[regions.size()]);
}
}
for (final FaweMaskManager manager : managers) { for (final FaweMaskManager manager : managers) {
if (player.hasPermission("fawe." + manager.getKey())) { if (player.hasPermission("fawe." + manager.getKey())) {
final FaweMask fm = manager.getMask(player); final FaweMask fm = manager.getMask(player);
if (fm != null) { if (fm != null) {
mask.addAll(fm.getRegions()); HashSet<RegionWrapper> cur = fm.getRegions();
regions.addAll(cur);
masks.add(fm);
} }
} }
} }
if (mask.isEmpty()) { if (!masks.isEmpty()) {
mask = player.getMeta("lastMask"); player.setMeta("lastMask", masks);
if (mask == null) { } else {
mask = new HashSet<>(); player.deleteMeta("lastMask");
} }
} return regions.toArray(new RegionWrapper[regions.size()]);
player.setMeta("lastMask", mask);
return mask.toArray(new RegionWrapper[mask.size()]);
} }

View File

@ -44,9 +44,7 @@ public class Favs extends JavaPlugin {
} }
}); });
} catch (Throwable ignore) { } catch (Throwable ignore) {}
ignore.printStackTrace();
}
} }
public void setupCommand(final String label, final FaweCommand cmd) { public void setupCommand(final String label, final FaweCommand cmd) {

View File

@ -109,6 +109,30 @@ public class Sniper {
* @return true if command visibly processed, false otherwise. * @return true if command visibly processed, false otherwise.
*/ */
public boolean snipe(final Action action, final Material itemInHand, final Block clickedBlock, final BlockFace clickedFace) { public boolean snipe(final Action action, final Material itemInHand, final Block clickedBlock, final BlockFace clickedFace) {
switch (action) {
case LEFT_CLICK_AIR:
case LEFT_CLICK_BLOCK:
case RIGHT_CLICK_AIR:
case RIGHT_CLICK_BLOCK:
break;
default:
return false;
}
if (tools.isEmpty()) {
return false;
}
String toolId = getToolId(itemInHand);
SniperTool sniperTool = tools.get(toolId);
if (sniperTool == null) {
return false;
}
if (!sniperTool.hasToolAssigned(itemInHand)) {
return false;
}
if (sniperTool.getCurrentBrush() == null) {
getPlayer().sendMessage("No Brush selected.");
return false;
}
try { try {
Player player = getPlayer(); Player player = getPlayer();
final FawePlayer<Player> fp = FawePlayer.wrap(player); final FawePlayer<Player> fp = FawePlayer.wrap(player);
@ -118,18 +142,14 @@ public class Sniper {
if (!fp.runAction(new Runnable() { if (!fp.runAction(new Runnable() {
@Override @Override
public void run() { public void run() {
snipeOnCurrentThread(fp, action, itemInHand, clickedBlock, clickedFace); snipeOnCurrentThread(fp, action, itemInHand, clickedBlock, clickedFace, sniperTool, toolId);
} }
}, true, false)) { }, true, false)) {
BBC.WORLDEDIT_COMMAND_LIMIT.send(fp); BBC.WORLDEDIT_COMMAND_LIMIT.send(fp);
} }
} }
}, Fawe.isMainThread()); }, Fawe.isMainThread());
String toolId = getToolId(itemInHand);
SniperTool sniperTool = tools.get(toolId);
if (sniperTool.hasToolAssigned(itemInHand) && sniperTool.getCurrentBrush() != null) {
return true; return true;
}
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -137,7 +157,7 @@ public class Sniper {
} }
// Old method (plus world arg) // Old method (plus world arg)
public synchronized boolean snipeOnCurrentThread(FawePlayer fp, final Action action, final Material itemInHand, Block clickedBlock, final BlockFace clickedFace) { public synchronized boolean snipeOnCurrentThread(FawePlayer fp, final Action action, final Material itemInHand, Block clickedBlock, final BlockFace clickedFace, SniperTool sniperTool, String toolId) {
Player bukkitPlayer = getPlayer(); Player bukkitPlayer = getPlayer();
World bukkitWorld = bukkitPlayer.getWorld(); World bukkitWorld = bukkitPlayer.getWorld();
@ -162,26 +182,6 @@ public class Sniper {
if (clickedBlock != null) { if (clickedBlock != null) {
clickedBlock = world.getBlockAt(clickedBlock.getX(), clickedBlock.getY(), clickedBlock.getZ()); clickedBlock = world.getBlockAt(clickedBlock.getX(), clickedBlock.getY(), clickedBlock.getZ());
} }
String toolId = getToolId(itemInHand);
SniperTool sniperTool = tools.get(toolId);
switch (action) {
case LEFT_CLICK_AIR:
case LEFT_CLICK_BLOCK:
case RIGHT_CLICK_AIR:
case RIGHT_CLICK_BLOCK:
break;
default:
return false;
}
if (sniperTool.hasToolAssigned(itemInHand)) {
if (sniperTool.getCurrentBrush() == null) {
getPlayer().sendMessage("No Brush selected.");
return true;
}
if (!getPlayer().hasPermission(sniperTool.getCurrentBrush().getPermissionNode())) { if (!getPlayer().hasPermission(sniperTool.getCurrentBrush().getPermissionNode())) {
getPlayer().sendMessage("You are not allowed to use this brush. You're missing the permission node '" + sniperTool.getCurrentBrush().getPermissionNode() + "'"); getPlayer().sendMessage("You are not allowed to use this brush. You're missing the permission node '" + sniperTool.getCurrentBrush().getPermissionNode() + "'");
return true; return true;
@ -342,7 +342,6 @@ public class Sniper {
} }
return true; return true;
} }
}
return false; return false;
} }