Merge pull request #2548 from IntellectualSites/flag_fix

Flag fixes and others 🐮
This commit is contained in:
Alexander Söderberg 2019-10-27 16:13:22 +01:00 committed by GitHub
commit d1115d62a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 131 additions and 66 deletions

View File

@ -163,6 +163,11 @@ public class FlagCmd extends SubCommand {
MainUtil.sendMessage(player, "&c" + flag.getValueDescription());
return false;
}
if (flag instanceof ListFlag) {
if (!(parsed instanceof Collection) || ((Collection) parsed).isEmpty()) {
return !MainUtil.sendMessage(player, Captions.FLAG_NOT_ADDED);
}
}
boolean result = plot.setFlag(flag, parsed);
if (!result) {
MainUtil.sendMessage(player, Captions.FLAG_NOT_ADDED);
@ -197,25 +202,26 @@ public class FlagCmd extends SubCommand {
}
if (args.length == 3 && flag instanceof ListFlag) {
String value = StringMan.join(Arrays.copyOfRange(args, 2, args.length), " ");
Optional<? extends Collection> flag1 =
plot.getFlag((Flag<? extends Collection<?>>) flag);
if (flag1.isPresent()) {
boolean o = flag1.get().removeAll((Collection) flag.parseValue(value));
if (o) {
if (flag1.get().isEmpty()) {
final boolean result = plot.removeFlag(flag);
if (result) {
MainUtil.sendMessage(player, Captions.FLAG_REMOVED);
final ListFlag<? extends Collection> listFlag = (ListFlag<? extends Collection>) flag;
final Optional<? extends Collection> collectionOptional = plot.getFlag(listFlag);
if (collectionOptional.isPresent()) {
final Collection parsedCollection = (Collection) flag.parseValue(value);
if (parsedCollection.isEmpty()) {
return !MainUtil.sendMessage(player, Captions.FLAG_NOT_REMOVED);
}
final Collection flagCollection = collectionOptional.get();
if (flagCollection.removeAll(parsedCollection)) {
if (flagCollection.isEmpty()) {
if (plot.removeFlag(flag)) {
return MainUtil.sendMessage(player, Captions.FLAG_REMOVED);
} else {
MainUtil.sendMessage(player, Captions.FLAG_NOT_REMOVED);
return !MainUtil.sendMessage(player, Captions.FLAG_NOT_REMOVED);
}
return true;
} else {
MainUtil.sendMessage(player, Captions.FLAG_REMOVED);
}
} else {
MainUtil.sendMessage(player, Captions.FLAG_NOT_REMOVED);
return false;
return !MainUtil.sendMessage(player, Captions.FLAG_NOT_REMOVED);
}
}
DBFunc.setFlags(plot, plot.getFlags());
@ -259,16 +265,19 @@ public class FlagCmd extends SubCommand {
}
Object val = parsed;
if (flag instanceof ListFlag) {
Optional<? extends Collection> flag1 =
plot.getFlag((Flag<? extends Collection<?>>) flag);
if (flag1.isPresent()) {
boolean o = flag1.get().addAll((Collection) parsed);
if (o) {
final Collection parsedCollection = (Collection<?>) parsed;
if (parsedCollection.isEmpty()) {
return !MainUtil.sendMessage(player, Captions.FLAG_NOT_ADDED);
}
final ListFlag<? extends Collection> listFlag = (ListFlag<? extends Collection>) flag;
final Optional<? extends Collection> collectionOptional = plot.getFlag(listFlag);
if (collectionOptional.isPresent()) {
final Collection flagCollection = collectionOptional.get();
if (flagCollection.addAll(parsedCollection)) {
MainUtil.sendMessage(player, Captions.FLAG_ADDED);
val = flag1.get();
val = flagCollection;
} else {
MainUtil.sendMessage(player, Captions.FLAG_NOT_ADDED);
return false;
return !MainUtil.sendMessage(player, Captions.FLAG_NOT_ADDED);
}
}
}
@ -289,21 +298,26 @@ public class FlagCmd extends SubCommand {
MainUtil.sendMessage(player, Captions.COMMAND_SYNTAX, "/plot flag list");
return false;
}
HashMap<String, ArrayList<String>> flags = new HashMap<>();
final Map<String, ArrayList<String>> flags = new HashMap<>();
for (Flag<?> flag1 : Flags.getFlags()) {
String type = flag1.getClass().getSimpleName();
flags.computeIfAbsent(type, k -> new ArrayList<>());
flags.get(type).add(flag1.getName());
final String category = flag1.getCategoryCaption();
final Collection<String> flagList =
flags.computeIfAbsent(category, k -> new ArrayList<>());
flagList.add(flag1.getName());
}
StringBuilder message = new StringBuilder();
String prefix = "";
for (Map.Entry<String, ArrayList<String>> entry : flags.entrySet()) {
String category = entry.getKey();
List<String> flagNames = entry.getValue();
final StringBuilder message = new StringBuilder();
final Iterator<Map.Entry<String, ArrayList<String>>> iterator =
flags.entrySet().iterator();
while (iterator.hasNext()) {
final Map.Entry<String, ArrayList<String>> flagsEntry = iterator.next();
final List<String> flagNames = flagsEntry.getValue();
Collections.sort(flagNames);
message.append(prefix).append("&6").append(category).append(": &7")
.append(StringMan.join(flagNames, ", "));
prefix = "\n";
message.append(String.format(Captions.FLAG_LIST_ENTRY.formatted(),
flagsEntry.getKey(), StringMan.join(flagNames, ", ")));
if (iterator.hasNext()) {
message.append("\n");
}
}
MainUtil.sendMessage(player, message.toString());
return true;

View File

@ -28,7 +28,6 @@ public enum Captions {
FLAG_PVP("pvp", "static.flags"),
FLAG_HANGING_PLACE("hanging-place", "static.flags"),
FLAG_HANGING_BREAK("hanging-break", "static.flags"),
FLAG_HANGING_INTERACT("hanging-interact", "static.flags"),
FLAG_MISC_INTERACT("misc-interact", "static.flags"),
FLAG_MISC_BREAK("misc-break", "static.flags"),
FLAG_MISC_PLACE("misc-place", "static.flags"),
@ -532,7 +531,24 @@ public enum Captions {
FLAG_REMOVED("$4Successfully removed flag", "Flag"),
FLAG_ADDED("$4Successfully added flag", "Flag"),
FLAG_TUTORIAL_USAGE("$1Have an admin set the flag: $2%s", "CommandConfig"),
FLAG_LIST_ENTRY("$2%s: $1%s", "Flag"),
//</editor-fold>
//<editor-fold desc="Flag category captions">
FLAG_CATEGORY_STRING("String Flags", "Flags"),
FLAG_CATEGORY_INTEGERS("Integer Flags", "Flags"),
FLAG_CATEGORY_TELEPORT_DENY("Teleport Deny Flag", "Flags"),
FLAG_CATEGORY_STRING_LIST("String List Flags", "Flags"),
FLAG_CATEGORY_WEATHER("Weather Flags", "Flags"),
FLAG_CATEGORY_BLOCK_LIST("Material Flags", "Flags"),
FLAG_CATEGORY_INTERVALS("Interval Flags", "Flags"),
FLAG_CATEGORY_INTEGER_LIST("Integer List Flags", "Flags"),
FLAG_CATEGORY_GAMEMODE("Game Mode Flags", "Flags"),
FLAG_CATEGORY_ENUM("Generic Enum Flags", "Flags"),
FLAG_CATEGORY_DECIMAL("Decimal Flags", "Flags"),
FLAG_CATEGORY_BOOLEAN("Boolean Flags", "Flags"),
FLAG_CATEGORY_MIXED("Mixed Value Flags", "Flags"),
//</editor-fold>
//<editor-fold desc="Trusted">
TRUSTED_ADDED("$4You successfully trusted a user to the plot", "Trusted"),
WAS_NOT_ADDED("$2That player was not trusted on this plot", "Trusted"),
@ -567,9 +583,7 @@ public enum Captions {
//</editor-fold>
BUCKET_ENTRIES_IGNORED("$2Total bucket values add up to 1 or more. Blocks without a specified chance will be ignored","Generator_Bucket"),
/**
* Command Categories
*/
//<editor-fold desc="Command Categories">
COMMAND_CATEGORY_CLAIMING("Claiming", "Category"),
COMMAND_CATEGORY_TELEPORT("Teleport", "Category"),
COMMAND_CATEGORY_SETTINGS("Protection", "Category"),
@ -579,6 +593,7 @@ public enum Captions {
COMMAND_CATEGORY_INFO("Info", "Category"),
COMMAND_CATEGORY_DEBUG("Debug", "Category"),
COMMAND_CATEGORY_ADMINISTRATION("Admin", "Category"),
//</editor-fold>
//<editor-fold desc="Grants">
GRANTED_PLOTS("$1Result: $2%s $1grants left", "Grants"),

View File

@ -1,11 +1,12 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.object.Plot;
public class BooleanFlag extends Flag<Boolean> {
public BooleanFlag(String name) {
super(name);
super(Captions.FLAG_CATEGORY_BOOLEAN, name);
}
@Override public String valueToString(Object value) {

View File

@ -1,9 +1,11 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
public class DoubleFlag extends Flag<Double> {
public DoubleFlag(String name) {
super(name);
super(Captions.FLAG_CATEGORY_DECIMAL, name);
}
@Override public String valueToString(Object value) {

View File

@ -1,15 +1,17 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.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);
super(Captions.FLAG_CATEGORY_ENUM, name);
this.values = new HashSet<>(Arrays.asList(values));
}

View File

@ -1,13 +1,21 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.util.StringComparison;
import lombok.Getter;
public abstract class Flag<V> implements StringComparison.StringComparable {
@Getter private final Captions typeCaption;
private final String name;
private boolean reserved = false;
public Flag(Captions typeCaption, String name) {
this.typeCaption = typeCaption;
this.name = name;
}
/**
* Flag object used to store basic information for a Plot. Flags are a
* key/value pair. For a flag to be usable by a player, you need to
@ -16,7 +24,7 @@ public abstract class Flag<V> implements StringComparison.StringComparable {
* @param name the flag name
*/
public Flag(String name) {
this.name = name;
this(null, name);
}
public Flag<V> reserve() {
@ -57,4 +65,11 @@ public abstract class Flag<V> implements StringComparison.StringComparable {
@Override public String getComparableString() {
return getName();
}
public String getCategoryCaption() {
return this.typeCaption == null ?
getClass().getSimpleName() :
this.typeCaption.getTranslated();
}
}

View File

@ -1,6 +1,7 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.PlotSquared;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
import com.github.intellectualsites.plotsquared.plot.util.MathMan;
import com.github.intellectualsites.plotsquared.plot.util.StringMan;
@ -52,7 +53,6 @@ public final class Flags {
public static final BooleanFlag SNOW_MELT = new BooleanFlag("snow-melt");
public static final BooleanFlag SNOW_FORM = new BooleanFlag("snow-form");
public static final BooleanFlag ICE_MELT = new BooleanFlag("ice-melt");
public static final BooleanFlag FIRE_SPREAD = new BooleanFlag("fire-spread");
public static final BooleanFlag BLOCK_BURN = new BooleanFlag("block-burn");
public static final BooleanFlag ICE_FORM = new BooleanFlag("ice-form");
public static final BooleanFlag BLOCK_IGNITION = new BooleanFlag("block-ignition");
@ -67,7 +67,6 @@ public final class Flags {
public static final BooleanFlag VEHICLE_USE = new BooleanFlag("vehicle-use");
public static final BooleanFlag HANGING_BREAK = new BooleanFlag("hanging-break");
public static final BooleanFlag HANGING_PLACE = new BooleanFlag("hanging-place");
public static final BooleanFlag HANGING_INTERACT = new BooleanFlag("hanging-interact");
public static final BooleanFlag MISC_PLACE = new BooleanFlag("misc-place");
public static final BooleanFlag MISC_BREAK = new BooleanFlag("misc-break");
public static final BooleanFlag MISC_INTERACT = new BooleanFlag("misc-interact");
@ -95,7 +94,7 @@ public final class Flags {
public static final IntegerFlag ANIMAL_CAP = new IntegerFlag("animal-cap");
public static final IntegerFlag HOSTILE_CAP = new IntegerFlag("hostile-cap");
public static final IntegerFlag VEHICLE_CAP = new IntegerFlag("vehicle-cap");
public static final Flag<?> KEEP = new Flag("keep") {
public static final Flag<?> KEEP = new Flag(Captions.FLAG_CATEGORY_MIXED, "keep") {
@Override public String valueToString(Object value) {
return value.toString();
}
@ -115,10 +114,9 @@ public final class Flags {
}
@Override public String getValueDescription() {
return "Flag value must a timestamp or a boolean";
return "Flag value must be a timestamp or a boolean";
}
};
public static final BooleanFlag SLEEP = new BooleanFlag("sleep");
public static final TeleportDenyFlag DENY_TELEPORT = new TeleportDenyFlag("deny-teleport");
public static final BooleanFlag DENY_EXIT = new BooleanFlag("deny-exit");

View File

@ -1,11 +1,12 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.util.PlotGameMode;
public class GameModeFlag extends Flag<PlotGameMode> {
public GameModeFlag(String name) {
super(name);
super(Captions.FLAG_CATEGORY_GAMEMODE, name);
}
@Override public String valueToString(Object value) {

View File

@ -1,11 +1,12 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.object.Plot;
public class IntegerFlag extends Flag<Integer> {
public IntegerFlag(String name) {
super(name);
super(Captions.FLAG_CATEGORY_INTEGERS, name);
}
@Override public String getValueDescription() {

View File

@ -1,5 +1,6 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import java.util.ArrayList;
@ -9,7 +10,7 @@ import java.util.List;
public class IntegerListFlag extends ListFlag<List<Integer>> {
public IntegerListFlag(String name) {
super(name);
super(Captions.FLAG_CATEGORY_INTEGER_LIST, name);
}
@Override public String valueToString(Object value) {

View File

@ -1,5 +1,6 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@ -7,7 +8,7 @@ import lombok.RequiredArgsConstructor;
public class IntervalFlag extends Flag<IntervalFlag.Interval> {
public IntervalFlag(String name) {
super(name);
super(Captions.FLAG_CATEGORY_INTERVALS, name);
}
@Override public String valueToString(Object value) {

View File

@ -1,11 +1,16 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.object.Plot;
import java.util.Collection;
public abstract class ListFlag<V extends Collection<?>> extends Flag<V> {
public ListFlag(Captions typeCaption, String name) {
super(typeCaption, name);
}
public ListFlag(String name) {
super(name);
}

View File

@ -1,9 +1,11 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
public class LongFlag extends Flag<Long> {
public LongFlag(String name) {
super(name);
super(Captions.FLAG_CATEGORY_INTEGERS, name);
}
@Override public Long parseValue(String value) {

View File

@ -1,15 +1,21 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.PlotSquared;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.object.PlotBlock;
import com.github.intellectualsites.plotsquared.plot.util.LegacyMappings;
import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
public class PlotBlockListFlag extends ListFlag<HashSet<PlotBlock>> {
public PlotBlockListFlag(String name) {
super(name);
super(Captions.FLAG_CATEGORY_BLOCK_LIST, name);
}
@Override public String valueToString(Object value) {
@ -17,14 +23,9 @@ public class PlotBlockListFlag extends ListFlag<HashSet<PlotBlock>> {
}
@Override public HashSet<PlotBlock> parseValue(final String value) {
final HashSet<PlotBlock> list = new HashSet<>();
for (final String item : value.split(",")) {
final PlotBlock block = PlotSquared.get().IMP.getLegacyMappings().fromAny(item);
if (block != null) {
list.add(block);
}
}
return list;
final LegacyMappings legacyMappings = PlotSquared.get().IMP.getLegacyMappings();
return Arrays.stream(value.split(",")).map(legacyMappings::fromAny).filter(Objects::nonNull)
.collect(Collectors.toCollection(HashSet::new));
}
@Override public String getValueDescription() {

View File

@ -1,11 +1,12 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.util.PlotWeather;
public class PlotWeatherFlag extends Flag<PlotWeather> {
public PlotWeatherFlag(String name) {
super(name);
super(Captions.FLAG_CATEGORY_WEATHER, name);
}
@Override public String valueToString(Object value) {

View File

@ -1,10 +1,12 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
public class StringFlag extends Flag<String> {
public StringFlag(String name) {
super(name);
super(Captions.FLAG_CATEGORY_STRING, name);
}
@Override public String valueToString(Object value) {

View File

@ -1,5 +1,6 @@
package com.github.intellectualsites.plotsquared.plot.flag;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.util.StringMan;
import java.util.ArrayList;
@ -9,7 +10,7 @@ import java.util.List;
public class StringListFlag extends ListFlag<List<String>> {
public StringListFlag(String name) {
super(name);
super(Captions.FLAG_CATEGORY_STRING_LIST, name);
}
@Override public String valueToString(Object value) {

View File

@ -4,6 +4,7 @@ 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");
}

View File

@ -200,7 +200,9 @@ public class PlotListener {
if (pw == null) {
return true;
}
if (Flags.DENY_EXIT.isTrue(plot) && !player.getMeta("kick", false)) {
if (Flags.DENY_EXIT.isTrue(plot)
&& !Permissions.hasPermission(player, Captions.PERMISSION_ADMIN_EXIT_DENIED)
&& !player.getMeta("kick", false)) {
if (previous != null) {
player.setMeta(PlotPlayer.META_LAST_PLOT, previous);
}

View File

@ -302,8 +302,7 @@ public abstract class EventUtil {
}
return !(!notifyPerms || MainUtil
.sendMessage(player, Captions.FLAG_TUTORIAL_USAGE,
Captions.FLAG_USE.getTranslated() + '/' + Captions.FLAG_HANGING_INTERACT
.getTranslated()));
Captions.FLAG_USE.getTranslated()));
}
return true;
}