mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-26 23:26:45 +01:00
Port deny-teleport
This commit is contained in:
parent
085dfbf735
commit
3df7d3cde9
@ -8,10 +8,12 @@ import com.github.intellectualsites.plotsquared.plot.PlotSquared;
|
||||
import com.github.intellectualsites.plotsquared.plot.config.Captions;
|
||||
import com.github.intellectualsites.plotsquared.plot.config.Settings;
|
||||
import com.github.intellectualsites.plotsquared.plot.flag.Flags;
|
||||
import com.github.intellectualsites.plotsquared.plot.flag.TeleportDenyFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.AnimalAttackFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.AnimalInteractFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.BlockBurnFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.BlockIgnitionFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.DenyTeleportFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.DisablePhysicsFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.DoneFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.ExplosionFlag;
|
||||
@ -818,7 +820,7 @@ import java.util.regex.Pattern;
|
||||
}
|
||||
Plot plot = area.getPlot(location);
|
||||
if (plot != null) {
|
||||
final boolean result = Flags.DENY_TELEPORT.allowsTeleport(pp, plot);
|
||||
final boolean result = DenyTeleportFlag.allowsTeleport(pp, plot);
|
||||
// there is one possibility to still allow teleportation:
|
||||
// to is identical to the plot's home location, and untrusted-visit is true
|
||||
// i.e. untrusted-visit can override deny-teleport
|
||||
|
@ -626,6 +626,7 @@ public enum Captions implements Caption {
|
||||
FLAG_DESCRIPTION_VEHICLE_USE("Set to `true` to allow guests to use vehicles in the plot.", "Flags"),
|
||||
FLAG_DESCRIPTION_VILLAGER_INTERACT("Set to `true` to allow guests to interact with villagers in the plot.", "Flags"),
|
||||
FLAG_DESCRIPTION_VINE_GROW("Set to `true` to allow vines to grow within the plot.", "Flags"),
|
||||
FLAG_DESCRIPTION_DENY_TELEPORT("Deny a certain group from teleporting to the plot. Available groups: members, nonmembers, trusted, nontrusted, nonowners", "Flags"),
|
||||
//</editor-fold>
|
||||
//<editor-fold desc="Flag category errors">
|
||||
FLAG_ERROR_BOOLEAN("Flag value must be a boolean (true|false)", "Flags"),
|
||||
|
@ -37,6 +37,4 @@ public final class Flags {
|
||||
}
|
||||
};
|
||||
|
||||
public static final TeleportDenyFlag DENY_TELEPORT = new TeleportDenyFlag("deny-teleport");
|
||||
|
||||
}
|
||||
|
@ -1,40 +1,10 @@
|
||||
package com.github.intellectualsites.plotsquared.plot.flag;
|
||||
|
||||
import com.github.intellectualsites.plotsquared.plot.object.Plot;
|
||||
import com.github.intellectualsites.plotsquared.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");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import com.github.intellectualsites.plotsquared.plot.flags.implementations.Anima
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.BlockBurnFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.BlockIgnitionFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.DenyExitFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.DenyTeleportFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.DescriptionFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.DeviceInteractFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.implementations.DisablePhysicsFlag;
|
||||
@ -92,7 +93,6 @@ public final class GlobalFlagContainer extends FlagContainer {
|
||||
this.addFlag(DescriptionFlag.DESCRIPTION_FLAG_EMPTY);
|
||||
this.addFlag(GreetingFlag.GREETING_FLAG_EMPTY);
|
||||
this.addFlag(FarewellFlag.FAREWELL_FLAG_EMPTY);
|
||||
this.addFlag(PlotWeatherFlag.PLOT_WEATHER_FLAG_OFF);
|
||||
this.addFlag(AnimalAttackFlag.ANIMAL_ATTACK_FALSE);
|
||||
this.addFlag(AnimalInteractFlag.ANIMAL_INTERACT_FALSE);
|
||||
this.addFlag(BlockBurnFlag.BLOCK_BURN_FALSE);
|
||||
@ -137,6 +137,10 @@ public final class GlobalFlagContainer extends FlagContainer {
|
||||
this.addFlag(InstabreakFlag.INSTABREAK_FALSE);
|
||||
this.addFlag(InvincibleFlag.INVINCIBLE_FALSE);
|
||||
|
||||
// Enum Flags
|
||||
this.addFlag(PlotWeatherFlag.PLOT_WEATHER_FLAG_OFF);
|
||||
this.addFlag(DenyTeleportFlag.DENY_TELEPORT_FLAG_NONE);
|
||||
|
||||
// Integer flags
|
||||
this.addFlag(AnimalCapFlag.ANIMAL_CAP_UNLIMITED);
|
||||
this.addFlag(EntityCapFlag.ENTITY_CAP_UNLIMITED);
|
||||
|
@ -0,0 +1,99 @@
|
||||
package com.github.intellectualsites.plotsquared.plot.flags.implementations;
|
||||
|
||||
import com.github.intellectualsites.plotsquared.plot.config.Captions;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.FlagParseException;
|
||||
import com.github.intellectualsites.plotsquared.plot.flags.PlotFlag;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.Plot;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class DenyTeleportFlag extends PlotFlag<DenyTeleportFlag.DeniedGroup, DenyTeleportFlag> {
|
||||
|
||||
public static final DenyTeleportFlag DENY_TELEPORT_FLAG_NONE = new DenyTeleportFlag(DeniedGroup.NONE);
|
||||
|
||||
/**
|
||||
* Construct a new flag instance.
|
||||
*
|
||||
* @param value Flag value
|
||||
*/
|
||||
protected DenyTeleportFlag(@NotNull DeniedGroup value) {
|
||||
super(value, Captions.FLAG_CATEGORY_ENUM, Captions.FLAG_DESCRIPTION_DENY_TELEPORT);
|
||||
}
|
||||
|
||||
@Override public DenyTeleportFlag parse(@NotNull String input) throws FlagParseException {
|
||||
final DeniedGroup group = DeniedGroup.fromString(input);
|
||||
if (group == null) {
|
||||
throw new FlagParseException(this, input, Captions.FLAG_ERROR_ENUM, "members, nonmembers,"
|
||||
+ " trusted, nontrusted, nonowners");
|
||||
}
|
||||
return flagOf(group);
|
||||
}
|
||||
|
||||
@Override public DenyTeleportFlag merge(@NotNull DeniedGroup newValue) {
|
||||
if (getValue().ordinal() < newValue.ordinal()) {
|
||||
return flagOf(newValue);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override public String toString() {
|
||||
return this.getValue().name();
|
||||
}
|
||||
|
||||
@Override public String getExample() {
|
||||
return "trusted";
|
||||
}
|
||||
|
||||
@Override protected DenyTeleportFlag flagOf(@NotNull DeniedGroup value) {
|
||||
return new DenyTeleportFlag(value);
|
||||
}
|
||||
|
||||
public static boolean allowsTeleport(PlotPlayer player, Plot plot) {
|
||||
final DeniedGroup value = plot.getFlag(DenyTeleportFlag.class);
|
||||
if (value == DeniedGroup.NONE) {
|
||||
return true;
|
||||
}
|
||||
final boolean result;
|
||||
switch (value) {
|
||||
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");
|
||||
}
|
||||
|
||||
public enum DeniedGroup {
|
||||
NONE,
|
||||
MEMBERS,
|
||||
TRUSTED,
|
||||
NONMEMBERS,
|
||||
NONTRUSTED,
|
||||
NONOWNERS;
|
||||
|
||||
@Nullable public static DeniedGroup fromString(@NotNull final String string) {
|
||||
for (final DeniedGroup group : values()) {
|
||||
if (group.name().equalsIgnoreCase(string)) {
|
||||
return group;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user