Package net.aufdemrand.denizen.tags.core

Source Code of net.aufdemrand.denizen.tags.core.FlagTags

package net.aufdemrand.denizen.tags.core;

import net.aufdemrand.denizen.Denizen;
import net.aufdemrand.denizen.events.bukkit.ReplaceableTagEvent;
import net.aufdemrand.denizen.flags.FlagManager;
import net.aufdemrand.denizen.flags.FlagManager.Value;
import net.aufdemrand.denizen.objects.dPlayer;
import net.aufdemrand.denizen.utilities.debugging.dB;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

import java.text.DecimalFormat;

@Deprecated
public class FlagTags implements Listener {

    Denizen denizen;

    public FlagTags(Denizen denizen) {
        this.denizen = denizen;
        denizen.getServer().getPluginManager().registerEvents(this, denizen);
    }

    private enum ReplaceType { LENGTH, SIZE, ASSTRING, ABS, ASINT, ASDOUBLE, ASLIST, ASMONEY, ASPLAYERLIST, ASNPCLIST, ASCSLIST, ISEXPIRED, EXPIRATION }

    /**
     * Replaces FLAG TAGs. Called automatically by the dScript ScriptBuilder and Executer.
     *
     * @param event
     *      ReplaceableTagEvent
     */

    @EventHandler
    public void flagTag(ReplaceableTagEvent event) {
        if (!event.matches("FLAG")) return;

        if (!event.hasValue()) return;

        dB.echoError(event.getAttributes().getScriptEntry().getResidingQueue(), "flag.x: tags are deprecated! Use <x.flag[]>, EG, <global.flag[name]>!");

        // Replace <FLAG...> TAGs.
        String flagName = event.getValue().split(":").length > 1
                ? event.getValue().split(":")[0].toUpperCase() : event.getValue().toUpperCase();
        String flagFallback = event.hasAlternative() ? event.getAlternative() : "EMPTY";
        int index = -1;
        ReplaceType replaceType = ReplaceType.ASSTRING;

        // Get format, if specified
        if (flagName.contains(".")) {
            try {
                int replaceTypeIndex = flagName.split("\\.").length - 1;
                replaceType = ReplaceType.valueOf(flagName.split("\\.")[replaceTypeIndex].replace("_", "").toUpperCase());
                flagName = flagName.replace("." + flagName.split("\\.")[replaceTypeIndex], "");
            } catch (Exception e) {
                replaceType = ReplaceType.ASSTRING;
            }
        }

        // Get index, if specified
        // TODO: Remove this code at 1.0 release. This call been deprecated and is now removed!
        // if (event.hasValueContext()) {
        //    try {
        //        index = Integer.valueOf(event.getValueContext());
        //    } catch (NumberFormatException e) { index = -1; }
        // }

        // Check flag replacement type
        if (event.getType().toUpperCase().startsWith("G")) {
            if (denizen.flagManager().getGlobalFlag(flagName).get(index).isEmpty()) {
                // dB.echoDebug(ChatColor.YELLOW + "//REPLACED//" + ChatColor.WHITE + " '%s' flag not found, using fallback!", flagName);
            } else {
                FlagManager.Flag flag = denizen.flagManager().getGlobalFlag(flagName);
                event.setReplaced(getReplaceable(flag, flag.get(index), replaceType));
                // dB.echoDebug(ChatColor.YELLOW + "//REPLACED//" + ChatColor.WHITE + " '%s' with flag value '" + event.getReplaced() + "'.", flagName);
            }

        } else if (event.getType().toUpperCase().startsWith("D") || event.getType().toUpperCase().startsWith("N")) {
            if (denizen.flagManager().getNPCFlag(event.getNPC().getId(), flagName).get(index).isEmpty()) {
                // dB.echoDebug(ChatColor.YELLOW + "//REPLACED//" + ChatColor.WHITE + " '%s' flag not found, using fallback!", flagName);
            } else {
                FlagManager.Flag flag = denizen.flagManager().getNPCFlag(event.getNPC().getId(), flagName);
                event.setReplaced(getReplaceable(flag, flag.get(index), replaceType));
                // dB.echoDebug(ChatColor.YELLOW + "//REPLACED//" + ChatColor.WHITE + " '%s' with flag value '" + event.getReplaced() + "'.", flagName);
            }

        } else if (event.getType().toUpperCase().startsWith("P")) {
            // Separate name since subType context may specify a different (or offline) player
            dPlayer player = event.getPlayer();

            // No name? No flag replacement!
            if (player == null) return;

            if (denizen.flagManager().getPlayerFlag(player, flagName).get(index).isEmpty()) {
                if (replaceType.toString().equals("ISEXPIRED"))
                    event.setReplaced("true");
            } else {
                FlagManager.Flag flag = denizen.flagManager().getPlayerFlag(player, flagName);
                event.setReplaced(getReplaceable(flag, flag.get(index), replaceType));
                // dB.echoDebug(ChatColor.YELLOW + "//REPLACED//" + ChatColor.WHITE + " '%s' with flag value '" + event.getReplaced() + "'.", flagName);

            }
        }
    }

    private String getReplaceable(FlagManager.Flag flag, Value value, ReplaceType replaceType) {
        switch (replaceType) {
        case ASINT:
            return String.valueOf(value.asInteger());
        case ASDOUBLE:
            return String.valueOf(value.asDouble());
        case ABS:
            return String.valueOf(Math.abs(value.asDouble()));
        case ASSTRING:
            return value.asString();
        case ASLIST:
            return String.valueOf(value.asList());
        case ASPLAYERLIST:
            return String.valueOf(value.asList("p@"));
        case ASNPCLIST:
            return String.valueOf(value.asList("n@"));
        case ASCSLIST:
            return String.valueOf(value.asCommaSeparatedList());
        case ASMONEY:
            DecimalFormat d = new DecimalFormat("0.00");
            return String.valueOf(d.format(value.asDouble()));
        case LENGTH:
            return String.valueOf(value.asString().length());
        case SIZE:
            return String.valueOf(value.asSize());
        case ISEXPIRED:
            return String.valueOf(flag.checkExpired());
        case EXPIRATION:
            return String.valueOf(flag.expirationTime());
        }
        return null;
    }
}
TOP

Related Classes of net.aufdemrand.denizen.tags.core.FlagTags

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.