diff --git a/src/main/java/com/denizenscript/denizen2sponge/Denizen2Sponge.java b/src/main/java/com/denizenscript/denizen2sponge/Denizen2Sponge.java index 169bbbc..1eb2f45 100644 --- a/src/main/java/com/denizenscript/denizen2sponge/Denizen2Sponge.java +++ b/src/main/java/com/denizenscript/denizen2sponge/Denizen2Sponge.java @@ -124,10 +124,11 @@ public void onServerStart(GamePreInitializationEvent event) { Denizen2Core.getImplementation().getScriptDataFolder().mkdirs(); // Commands: Entity Denizen2Core.register(new EditEntityCommand()); - Denizen2Core.register(new FlagEntityCommand()); + Denizen2Core.register(new FlagCommand()); Denizen2Core.register(new MountCommand()); Denizen2Core.register(new SpawnCommand()); Denizen2Core.register(new TeleportCommand()); + Denizen2Core.register(new UnflagCommand()); // Commands: Player Denizen2Core.register(new ActionBarCommand()); Denizen2Core.register(new GiveCommand()); diff --git a/src/main/java/com/denizenscript/denizen2sponge/commands/entity/FlagEntityCommand.java b/src/main/java/com/denizenscript/denizen2sponge/commands/entity/FlagCommand.java similarity index 70% rename from src/main/java/com/denizenscript/denizen2sponge/commands/entity/FlagEntityCommand.java rename to src/main/java/com/denizenscript/denizen2sponge/commands/entity/FlagCommand.java index c75776d..bfeeb58 100644 --- a/src/main/java/com/denizenscript/denizen2sponge/commands/entity/FlagEntityCommand.java +++ b/src/main/java/com/denizenscript/denizen2sponge/commands/entity/FlagCommand.java @@ -17,30 +17,27 @@ import java.util.Map; import java.util.Optional; -public class FlagEntityCommand extends AbstractCommand { +public class FlagCommand extends AbstractCommand { // <--[command] - // @Name flagentity + // @Name flag // @Arguments - // @Short flags an entity. - // @Updated 2016/10/26 + // @Short flags an entity with some data. + // @Updated 2017/02/15 // @Group Entities // @Minimum 2 // @Maximum 2 - // @Switch remove BooleanTag whether to remove things. // @Description - // Adds or edits flags on an entity (including players, etc.) + // Adds or edits flags on an entity (including players, etc.). + // See also the <@link command unflag>unflag command<@/link>. // @Example // # Mark the player as a VIP. - // - flagentity vip:true - // @Example - // # Remove the flag 'VIP' from the player. - // - flagentity vip:null -remove true + // - flag vip:true // --> @Override public String getName() { - return "flagentity"; + return "flag"; } @Override @@ -63,8 +60,6 @@ public void execute(CommandQueue queue, CommandEntry entry) { EntityTag entityTag = EntityTag.getFor(queue.error, entry.getArgumentObject(queue, 0)); Entity entity = entityTag.getInternal(); MapTag propertyMap = MapTag.getFor(queue.error, entry.getArgumentObject(queue, 1)); - boolean remover = entry.namedArgs.containsKey("remove") && - BooleanTag.getFor(queue.error, entry.getNamedArgumentObject(queue, "remove")).getInternal(); MapTag basic; Optional fm = entity.get(FlagHelper.FLAGMAP); if (fm.isPresent()) { @@ -74,18 +69,13 @@ public void execute(CommandQueue queue, CommandEntry entry) { basic = new MapTag(); } for (Map.Entry dat : propertyMap.getInternal().entrySet()) { - if (remover) { - basic.getInternal().remove(dat.getKey()); - } - else { - basic.getInternal().put(CoreUtilities.toLowerCase(dat.getKey()), dat.getValue()); - } + basic.getInternal().put(CoreUtilities.toLowerCase(dat.getKey()), dat.getValue()); } entity.offer(new FlagMapDataImpl(new FlagMap(basic))); if (queue.shouldShowGood()) { queue.outGood("Flagged the entity " + ColorSet.emphasis + entityTag.friendlyName() + ColorSet.good - + " with the specified data... " + (remover ? "(Removal mode)" : "(Normal mode)")); + + " with the specified data... (" + propertyMap + ")"); } } } diff --git a/src/main/java/com/denizenscript/denizen2sponge/commands/entity/UnflagCommand.java b/src/main/java/com/denizenscript/denizen2sponge/commands/entity/UnflagCommand.java new file mode 100644 index 0000000..105ff0e --- /dev/null +++ b/src/main/java/com/denizenscript/denizen2sponge/commands/entity/UnflagCommand.java @@ -0,0 +1,80 @@ +package com.denizenscript.denizen2sponge.commands.entity; + +import com.denizenscript.denizen2core.commands.AbstractCommand; +import com.denizenscript.denizen2core.commands.CommandEntry; +import com.denizenscript.denizen2core.commands.CommandQueue; +import com.denizenscript.denizen2core.tags.AbstractTagObject; +import com.denizenscript.denizen2core.tags.objects.ListTag; +import com.denizenscript.denizen2core.tags.objects.MapTag; +import com.denizenscript.denizen2core.utilities.CoreUtilities; +import com.denizenscript.denizen2core.utilities.debugging.ColorSet; +import com.denizenscript.denizen2sponge.tags.objects.EntityTag; +import com.denizenscript.denizen2sponge.utilities.flags.FlagHelper; +import com.denizenscript.denizen2sponge.utilities.flags.FlagMap; +import com.denizenscript.denizen2sponge.utilities.flags.FlagMapDataImpl; +import org.spongepowered.api.entity.Entity; + +import java.util.Optional; + +public class UnflagCommand extends AbstractCommand { + + // <--[command] + // @Name unflag + // @Arguments + // @Short removes a list of flags from an entity. + // @Updated 2017/02/15 + // @Group Entities + // @Minimum 2 + // @Maximum 2 + // @Description + // Removes flags from an entity (including players, etc.). + // See also the <@link command flag>flag command<@/link>. + // @Example + // # Mark the player as no longer VIP. + // - unflag vip + // --> + + @Override + public String getName() { + return "unflag"; + } + + @Override + public String getArguments() { + return " "; + } + + @Override + public int getMinimumArguments() { + return 2; + } + + @Override + public int getMaximumArguments() { + return 2; + } + + @Override + public void execute(CommandQueue queue, CommandEntry entry) { + EntityTag entityTag = EntityTag.getFor(queue.error, entry.getArgumentObject(queue, 0)); + Entity entity = entityTag.getInternal(); + ListTag toRemove = ListTag.getFor(queue.error, entry.getArgumentObject(queue, 1)); + MapTag basic; + Optional fm = entity.get(FlagHelper.FLAGMAP); + if (fm.isPresent()) { + basic = fm.get().flags; + } + else { + basic = new MapTag(); + } + for (AbstractTagObject dat : toRemove.getInternal()) { + basic.getInternal().remove(CoreUtilities.toLowerCase(dat.toString())); + } + entity.offer(new FlagMapDataImpl(new FlagMap(basic))); + if (queue.shouldShowGood()) { + queue.outGood("Removed from the entity " + + ColorSet.emphasis + entityTag.friendlyName() + ColorSet.good + + " the specified flags... (" + toRemove + ")"); + } + } +} diff --git a/src/main/java/com/denizenscript/denizen2sponge/tags/objects/ItemTag.java b/src/main/java/com/denizenscript/denizen2sponge/tags/objects/ItemTag.java index 64790d0..391a315 100644 --- a/src/main/java/com/denizenscript/denizen2sponge/tags/objects/ItemTag.java +++ b/src/main/java/com/denizenscript/denizen2sponge/tags/objects/ItemTag.java @@ -70,7 +70,7 @@ public ItemStack getInternal() { return DataKeys.getValue(((ItemTag) obj).internal, key, dat.error); }); // <--[tag] - // @Name ItemTag.without_flags[] + // @Name ItemTag.without_flags[] // @Updated 2017/02/13 // @Group General Information // @ReturnType ItemTag @@ -86,9 +86,9 @@ public ItemStack getInternal() { else { flags = new MapTag(); } - MapTag toApply = MapTag.getFor(dat.error, dat.getNextModifier()); - for (String k : toApply.getInternal().keySet()) { - flags.getInternal().remove(k); + ListTag toRemove = ListTag.getFor(dat.error, dat.getNextModifier()); + for (AbstractTagObject k : toRemove.getInternal()) { + flags.getInternal().remove(k.toString()); } ItemStack its = ((ItemTag) obj).internal.createSnapshot().createStack(); its.offer(new FlagMapDataImpl(new FlagMap(flags)));