Add teleport flag

This commit is contained in:
Jesse Boyd 2016-06-29 21:22:55 +10:00
parent 185352d3cf
commit b9ad75ad84
7 changed files with 96 additions and 9 deletions

View File

@ -1668,6 +1668,9 @@ public class PlayerEvents extends PlotListener implements Listener {
return; return;
} }
} else if (lastPlot != null && now.equals(lastPlot)) { } else if (lastPlot != null && now.equals(lastPlot)) {
if (!Flags.DENY_TELEPORT.allowsTeleport(pp, lastPlot)) {
event.setTo(BukkitUtil.getLocation(lastPlot.getSide()));
}
return; return;
} else if (!plotEntry(pp, now) && this.tmpTeleport) { } else if (!plotEntry(pp, now) && this.tmpTeleport) {
MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_ENTRY_DENIED); MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_ENTRY_DENIED);
@ -1738,6 +1741,9 @@ public class PlayerEvents extends PlotListener implements Listener {
return; return;
} }
} else if (lastPlot != null && now.equals(lastPlot)) { } else if (lastPlot != null && now.equals(lastPlot)) {
if (!Flags.DENY_TELEPORT.allowsTeleport(pp, lastPlot)) {
event.setTo(BukkitUtil.getLocation(lastPlot.getSide()));
}
return; return;
} else if (!plotEntry(pp, now) && this.tmpTeleport) { } else if (!plotEntry(pp, now) && this.tmpTeleport) {
MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_ENTRY_DENIED); MainUtil.sendMessage(pp, C.NO_PERMISSION_EVENT, C.PERMISSION_ADMIN_ENTRY_DENIED);

View File

@ -225,9 +225,16 @@ public class MainCommand extends Command {
} }
try { try {
super.execute(player, args, confirm, whenDone); super.execute(player, args, confirm, whenDone);
} catch (CommandException e) {
throw e;
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();
C.ERROR.send(player, e.getLocalizedMessage()); String message = e.getLocalizedMessage();
if (message != null) {
C.ERROR.send(player, message);
} else {
C.ERROR.send(player);
}
} }
// Reset command scope // // Reset command scope //
if (tp && !(player instanceof ConsolePlayer)) { if (tp && !(player instanceof ConsolePlayer)) {

View File

@ -0,0 +1,31 @@
package com.intellectualcrafters.plot.flag;
import com.intellectualcrafters.plot.util.StringMan;
import java.util.Arrays;
import java.util.HashSet;
public class EnumFlag extends Flag<String> {
private final HashSet<String> values;
public EnumFlag(String name, String... values) {
super(name);
this.values = new HashSet<>(Arrays.asList(values));
}
@Override
public String valueToString(Object value) {
return value.toString();
}
@Override public String parseValue(String value) {
value = value.toLowerCase();
if (values.contains(value)) {
return value;
}
return null;
}
@Override public String getValueDescription() {
return "Must be one of: " + StringMan.getString(values);
}
}

View File

@ -6,7 +6,6 @@ import com.intellectualcrafters.plot.object.PlotArea;
import com.intellectualcrafters.plot.object.RunnableVal; import com.intellectualcrafters.plot.object.RunnableVal;
import com.intellectualcrafters.plot.util.MainUtil; import com.intellectualcrafters.plot.util.MainUtil;
import com.intellectualcrafters.plot.util.MathMan; import com.intellectualcrafters.plot.util.MathMan;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@ -114,6 +113,8 @@ public final class Flags {
} }
}; };
public static final BooleanFlag SLEEP = new BooleanFlag("sleep"); public static final BooleanFlag SLEEP = new BooleanFlag("sleep");
public static final TeleportDenyFlag DENY_TELEPORT = new TeleportDenyFlag("teleport-deny");
private static final HashMap<String, Flag<?>> flags; private static final HashMap<String, Flag<?>> flags;
static { static {

View File

@ -0,0 +1,38 @@
package com.intellectualcrafters.plot.flag;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotPlayer;
public class TeleportDenyFlag extends EnumFlag {
public TeleportDenyFlag(String name) {
super(name, "trusted", "members", "nonmembers", "nontrusted", "nonowners");
}
public boolean allowsTeleport(PlotPlayer player, Plot plot) {
String value = plot.getFlag(this, null);
if (value == null || !plot.hasOwner()) {
return true;
}
boolean result;
switch (plot.getFlag(this, null)) {
case "trusted":
result = !plot.getTrusted().contains(player.getUUID());
break;
case "members":
result =!plot.getMembers().contains(player.getUUID());
break;
case "nonmembers":
result =!plot.isAdded(player.getUUID());
break;
case "nontrusted":
result =!plot.getTrusted().contains(player.getUUID()) && !plot.isOwner(player.getUUID());
break;
case "nonowners":
result =!plot.isOwner(player.getUUID());
break;
default:
return true;
}
return result || player.hasPermission("plots.admin.entry.denied");
}
}

View File

@ -1109,6 +1109,15 @@ public class Plot {
return loc; return loc;
} }
public Location getSide() {
RegionWrapper largest = getLargestRegion();
int x = (largest.maxX >> 1) - (largest.minX >> 1) + largest.minX;
int z = largest.minZ - 1;
PlotManager manager = getManager();
int y = Math.max(WorldUtil.IMP.getHighestBlock(area.worldname, x, z), manager.getSignLoc(area, this).getY());
return new Location(area.worldname, x, y + 1, z);
}
/** /**
* Return the home location for the plot * Return the home location for the plot
* @return Home location * @return Home location
@ -1169,12 +1178,7 @@ public class Plot {
return new Location(plot.area.worldname, x, y + 1, z); return new Location(plot.area.worldname, x, y + 1, z);
} }
// Side // Side
RegionWrapper largest = plot.getLargestRegion(); return plot.getSide();
int x = (largest.maxX >> 1) - (largest.minX >> 1) + largest.minX;
int z = largest.minZ - 1;
PlotManager manager = plot.getManager();
int y = Math.max(WorldUtil.IMP.getHighestBlock(plot.area.worldname, x, z), manager.getSignLoc(plot.area, plot).getY());
return new Location(plot.area.worldname, x, y + 1, z);
} }
public double getVolume() { public double getVolume() {

View File

@ -19,7 +19,7 @@ ext {
git = Grgit.open() git = Grgit.open()
revision = "-${git.head().abbreviatedId}" revision = "-${git.head().abbreviatedId}"
} }
version = "3.4.4-SNAPSHOT-${revision}" version = "3.4.4-SNAPSHOT${revision}"
description = """PlotSquared""" description = """PlotSquared"""
subprojects { subprojects {