de.themoep.servertags.bukkit.ServerTags.java Source code

Java tutorial

Introduction

Here is the source code for de.themoep.servertags.bukkit.ServerTags.java

Source

package de.themoep.servertags.bukkit;

import com.dthielke.herochat.ChannelChatEvent;
import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteStreams;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.messaging.PluginMessageListener;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.logging.Level;

/**
 * ServerTags
 * Copyright (C) 2015 Max Lee (https://github.com/Phoenix616/)
 * <p/>
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
public class ServerTags extends JavaPlugin implements PluginMessageListener, Listener {

    private Map<UUID, ServerInfo> serverMap = new HashMap<UUID, ServerInfo>();

    @Override
    public void onEnable() {
        getServer().getMessenger().registerIncomingPluginChannel(this, getDescription().getName(), this);
        getServer().getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onChannelChatEvent(ChannelChatEvent event) {
        String format;
        format = event.getFormat().replace("{default}", event.getChannel().getFormatSupplier().getStandardFormat());
        if (serverMap.containsKey(event.getSender().getPlayer().getUniqueId())) {
            format = format.replace("{servertag}",
                    "[" + serverMap.get(event.getSender().getPlayer().getUniqueId()).getTag() + "]");
            format = format.replace("{servername}",
                    "[" + serverMap.get(event.getSender().getPlayer().getUniqueId()).getName() + "]");
        } else {
            format = format.replace("{servertag}", "");
            format = format.replace("{servername}", "");
        }
        event.setFormat(format);
    }

    /**
     * Get the server a player is on
     * @param player
     * @return A server info object; <tt>null</tt> </7tt>if the player doesn't have one
     */
    public ServerInfo getPlayerServer(Player player) {
        return serverMap.get(player.getUniqueId());
    }

    @Override
    public void onPluginMessageReceived(String channel, Player receiver, byte[] bytes) {
        if (channel.equalsIgnoreCase(getDescription().getName())) {
            ByteArrayDataInput in = ByteStreams.newDataInput(bytes);
            try {
                String subchannel = in.readUTF();
                if ("serverInfo".equalsIgnoreCase(subchannel)) {
                    try {
                        String playername = in.readUTF();
                        Player player = getServer().getPlayer(playername);
                        if (player != null) {
                            ServerInfo server = new ServerInfo("", "");
                            try {
                                String name = in.readUTF();
                                String tag = in.readUTF();
                                getLogger().info(name + " - " + tag);
                                server = new ServerInfo(name, tag);
                            } catch (IllegalStateException e) {
                                getLogger().log(Level.WARNING,
                                        "No server name or tag send in plugin message. Assuming empty one!");
                            }
                            ServerInfo oldServer = serverMap.put(player.getUniqueId(), server);
                            if (!server.equals(oldServer)) {
                                getServer().getPluginManager()
                                        .callEvent(new PlayerServerInfoChangeEvent(player, server, oldServer));
                            }
                        } else {
                            getLogger().log(Level.WARNING,
                                    "The player with the name " + playername + " is not online (anymore?)");
                        }
                    } catch (IllegalStateException e) {
                        getLogger().log(Level.SEVERE, "No playername in plugin message!");
                    }
                } else {
                    getLogger().log(Level.WARNING, "The subchannel " + subchannel + " is not supported!");
                }
            } catch (IllegalStateException e) {
                getLogger().log(Level.SEVERE, "No subchannel send in plugin message!");
            }
        }
    }
}