Package net.aufdemrand.denizen.tags.core

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

package net.aufdemrand.denizen.tags.core;

import net.aufdemrand.denizen.Denizen;
import net.aufdemrand.denizen.events.bukkit.ReplaceableTagEvent;
import net.aufdemrand.denizen.tags.Attribute;
import net.aufdemrand.denizen.objects.*;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizen.utilities.debugging.dB;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class PlayerTags implements Listener {

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

    ///////////
    // Player Chat History
    /////////

    public static Map<String, List<String>> playerChatHistory = new ConcurrentHashMap<String, List<String>>(8, 0.9f, 2);

    @EventHandler(priority = EventPriority.MONITOR)
    public void addMessage(final AsyncPlayerChatEvent event) {
        Bukkit.getScheduler().runTaskLater(DenizenAPI.getCurrentInstance(), new Runnable() {
            @Override
            public void run() {
                List<String> history = playerChatHistory.get(event.getPlayer().getName());
                // If history hasn't been started for this player, initialize a new ArrayList
                if (history == null) history = new ArrayList<String>();
                // Maximum history size is 10
                // TODO: Make size configurable
                if (history.size() > 10) history.remove(9);
                // Add message to history
                history.add(0, event.getMessage());
                // Store the new history
                playerChatHistory.put(event.getPlayer().getName(), history);
            }
        }, 1);
    }


    //////////
    //  ReplaceableTagEvent handler
    ////////

    @EventHandler
    public void playerTags(ReplaceableTagEvent event) {

        if (!event.matches("player", "pl") || event.replaced()) return;

        // Build a new attribute out of the raw_tag supplied in the script to be fulfilled
        Attribute attribute = new Attribute(event.raw_tag, event.getScriptEntry());

        // PlayerTags require a... dPlayer!
        dPlayer p = event.getPlayer();

        // Player tag may specify a new player in the <player[context]...> portion of the tag.
        if (attribute.hasContext(1))
            // Check if this is a valid player and update the dPlayer object reference.
            if (dPlayer.matches(attribute.getContext(1)))
                p = dPlayer.valueOf(attribute.getContext(1));
            else {
                if (!event.hasAlternative()) dB.echoError("Could not match '" + attribute.getContext(1) + "' to a valid player!");
                return;
            }

        if (p == null || !p.isValid()) {
            if (!event.hasAlternative()) dB.echoError("Invalid or missing player for tag <" + event.raw_tag + ">!");
            return;
        }

        event.setReplaced(p.getAttribute(attribute.fulfill(1)));
    }
}


TOP

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

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.