Skip to content

Commit

Permalink
Allow regular expressions in list_flags tags
Browse files Browse the repository at this point in the history
Also, follow Java naming conventions. 😇
  • Loading branch information
Morphan1 committed Nov 9, 2014
1 parent 4075c35 commit 676944a
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 24 deletions.
Expand Up @@ -126,7 +126,7 @@ public static <T extends dObject> T getObjectFrom(Class<T> dClass, String value)
return getObjectFrom(dClass, value, null, null);
}

public static List<String> SeparateProperties(String input) {
public static List<String> separateProperties(String input) {
if (input.indexOf('[') == -1 || input.lastIndexOf(']') != input.length() - 1)
return null;
ArrayList<String> output = new ArrayList<String>();
Expand Down Expand Up @@ -155,7 +155,7 @@ else if (input.charAt(i) == ']' && brackets > 0) {

public static <T extends dObject> T getObjectFrom(Class<T> dClass, String value, dPlayer player, dNPC npc) {
try {
List<String> matches = SeparateProperties(value);
List<String> matches = separateProperties(value);
boolean matched = matches != null && Adjustable.class.isAssignableFrom(dClass);
T gotten = (T) ((dClass.equals(dItem.class)) ? dItem.valueOf(matched ? matches.get(0): value, player, npc):
valueof.get(dClass).invoke(null, matched ? matches.get(0): value));
Expand Down
23 changes: 18 additions & 5 deletions src/main/java/net/aufdemrand/denizen/objects/dNPC.java
Expand Up @@ -32,7 +32,6 @@
import net.citizensnpcs.trait.Poses;
import net.citizensnpcs.util.Anchor;
import net.citizensnpcs.util.Pose;

import net.minecraft.server.v1_7_R4.EntityLiving;
import org.bukkit.Material;
import org.bukkit.World;
Expand All @@ -47,6 +46,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

public class dNPC implements dObject, Adjustable, InventoryHolder {

Expand Down Expand Up @@ -549,7 +549,7 @@ && getCitizen().getTrait(Anchors.class).getAnchor(attribute.getContext(1)) != nu
}

// <--[tag]
// @attribute <n@npc.list_flags[<search>]>
// @attribute <n@npc.list_flags[(regex:)<search>]>
// @returns dList
// @description
// Returns a list of an NPC's flag names, with an optional search for
Expand All @@ -560,9 +560,22 @@ && getCitizen().getTrait(Anchors.class).getAnchor(attribute.getContext(1)) != nu
dList searchFlags = null;
if (!allFlags.isEmpty() && attribute.hasContext(1)) {
searchFlags = new dList();
for (String flag : allFlags)
if (flag.toLowerCase().contains(attribute.getContext(1).toLowerCase()))
searchFlags.add(flag);
String search = attribute.getContext(1).toLowerCase();
if (search.startsWith("regex:")) {
try {
Pattern pattern = Pattern.compile(search.substring(6));
for (String flag : allFlags)
if (pattern.matcher(flag).matches())
searchFlags.add(flag);
} catch (Exception e) {
dB.echoError(e);
}
}
else {
for (String flag : allFlags)
if (flag.toLowerCase().contains(search))
searchFlags.add(flag);
}
}
return searchFlags == null ? allFlags.getAttribute(attribute.fulfill(1))
: searchFlags.getAttribute(attribute.fulfill(1));
Expand Down
27 changes: 22 additions & 5 deletions src/main/java/net/aufdemrand/denizen/objects/dPlayer.java
Expand Up @@ -11,7 +11,10 @@
import net.aufdemrand.denizen.utilities.debugging.dB;
import net.aufdemrand.denizen.utilities.depends.Depends;
import net.aufdemrand.denizen.utilities.nbt.ImprovedOfflinePlayer;
import net.aufdemrand.denizen.utilities.packets.*;
import net.aufdemrand.denizen.utilities.packets.BossHealthBar;
import net.aufdemrand.denizen.utilities.packets.EntityEquipment;
import net.aufdemrand.denizen.utilities.packets.ItemChangeMessage;
import net.aufdemrand.denizen.utilities.packets.PlayerBars;
import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.npc.NPC;
import org.bukkit.*;
Expand All @@ -27,6 +30,7 @@
import org.bukkit.util.BlockIterator;

import java.util.*;
import java.util.regex.Pattern;

public class dPlayer implements dObject, Adjustable {

Expand Down Expand Up @@ -590,7 +594,7 @@ public String getAttribute(Attribute attribute) {
}

// <--[tag]
// @attribute <p@player.list_flags[<search>]>
// @attribute <p@player.list_flags[(regex:)<search>]>
// @returns dList
// @description
// Returns a list of a player's flag names, with an optional search for
Expand All @@ -602,9 +606,22 @@ public String getAttribute(Attribute attribute) {
dList searchFlags = null;
if (!allFlags.isEmpty() && attribute.hasContext(1)) {
searchFlags = new dList();
for (String flag : allFlags)
if (flag.toLowerCase().contains(attribute.getContext(1).toLowerCase()))
searchFlags.add(flag);
String search = attribute.getContext(1).toLowerCase();
if (search.startsWith("regex:")) {
try {
Pattern pattern = Pattern.compile(search.substring(6));
for (String flag : allFlags)
if (pattern.matcher(flag).matches())
searchFlags.add(flag);
} catch (Exception e) {
dB.echoError(e);
}
}
else {
for (String flag : allFlags)
if (flag.toLowerCase().contains(search))
searchFlags.add(flag);
}
}
return searchFlags == null ? allFlags.getAttribute(attribute.fulfill(1))
: searchFlags.getAttribute(attribute.fulfill(1));
Expand Down
37 changes: 25 additions & 12 deletions src/main/java/net/aufdemrand/denizen/tags/core/UtilTags.java
@@ -1,11 +1,5 @@
package net.aufdemrand.denizen.tags.core;

import java.io.File;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.*;

import java.sql.Connection;
import net.aufdemrand.denizen.Denizen;
import net.aufdemrand.denizen.Settings;
import net.aufdemrand.denizen.events.EventManager;
Expand All @@ -20,8 +14,6 @@
import net.aufdemrand.denizen.scripts.queues.ScriptQueue;
import net.aufdemrand.denizen.tags.Attribute;
import net.aufdemrand.denizen.utilities.DenizenAPI;


import net.aufdemrand.denizen.utilities.debugging.dB;
import net.aufdemrand.denizen.utilities.depends.Depends;
import net.aufdemrand.denizencore.utilities.CoreUtilities;
Expand All @@ -38,6 +30,13 @@
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;

import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Pattern;

public class UtilTags implements Listener {

public UtilTags(Denizen denizen) {
Expand Down Expand Up @@ -162,7 +161,7 @@ public void serverTag(ReplaceableTagEvent event) {
}

// <--[tag]
// @attribute <server.list_flags[<search>]>
// @attribute <server.list_flags[(regex:)<search>]>
// @returns dList
// @description
// Returns a list of the server's flag names, with an optional search for
Expand All @@ -173,9 +172,23 @@ public void serverTag(ReplaceableTagEvent event) {
dList searchFlags = null;
if (!allFlags.isEmpty() && attribute.hasContext(1)) {
searchFlags = new dList();
for (String flag : allFlags)
if (flag.toLowerCase().contains(attribute.getContext(1).toLowerCase()))
searchFlags.add(flag);
String search = attribute.getContext(1).toLowerCase();
if (search.startsWith("regex:")) {
String regex = search.substring(6);
try {
Pattern pattern = Pattern.compile(search.substring(6));
for (String flag : allFlags)
if (pattern.matcher(flag).matches())
searchFlags.add(flag);
} catch (Exception e) {
dB.echoError(e);
}
}
else {
for (String flag : allFlags)
if (flag.toLowerCase().contains(search))
searchFlags.add(flag);
}
}
event.setReplaced(searchFlags == null ? allFlags.getAttribute(attribute.fulfill(1))
: searchFlags.getAttribute(attribute.fulfill(1)));
Expand Down

0 comments on commit 676944a

Please sign in to comment.