net.pocketpixels.hubmanager.HubManager.java Source code

Java tutorial

Introduction

Here is the source code for net.pocketpixels.hubmanager.HubManager.java

Source

/*
 * This file is part of HubManager.
 * 
 * HubManager 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.
 * 
 * HubManager 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 HubManager.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * 
 */
package net.pocketpixels.hubmanager;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import lombok.Getter;
import lombok.Setter;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.messaging.PluginMessageListener;

/**
 *
 * @author donoa_000
 */
public class HubManager extends JavaPlugin implements PluginMessageListener, CommandExecutor {

    @Getter
    private static JavaPlugin instance;

    @Getter
    private static HashMap<String, InventoryMenu> Menus = new HashMap<>();

    @Getter
    private static HashMap<String, Integer> ServerCount = new HashMap<>();

    @Getter
    private final static String prefix = ChatColor.YELLOW + "[" + ChatColor.BLUE + "HubManager" + ChatColor.YELLOW
            + "]" + ChatColor.RESET;

    @Getter
    private static String FileSep = System.getProperty("file.separator");

    @Getter
    private static File pluginDirectory;

    @Getter
    private static Runnable getCurrent = new Runnable() {
        @Override
        public void run() {
            if (!Bukkit.getOnlinePlayers().isEmpty()) {
                for (String server : ServerCount.keySet()) {
                    ByteArrayDataOutput out = ByteStreams.newDataOutput();
                    out.writeUTF("PlayerCount");
                    out.writeUTF(server);
                    ((Player) Bukkit.getOnlinePlayers().toArray()[0]).sendPluginMessage(HubManager.getInstance(),
                            "RedisBungee", out.toByteArray());
                }
            }
            InventoryMenu.updateItems();
        }
    };

    @Override
    public void onEnable() {
        this.saveDefaultConfig();
        PluginManager pm = Bukkit.getPluginManager();
        StaffLogin sl = new StaffLogin();
        pm.registerEvents(new MenuHandler(), this);
        pm.registerEvents(sl, this);
        this.pluginDirectory = getDataFolder();
        getServer().getMessenger().registerOutgoingPluginChannel(this, "RedisBungee");
        getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
        getServer().getMessenger().registerIncomingPluginChannel(this, "RedisBungee", this);
        getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
        Bukkit.getScheduler().scheduleSyncRepeatingTask(this, getCurrent, 10, 20 * 2);
        instance = this;
        getCommand("ReloadMenus").setExecutor(this);
        getCommand("login").setExecutor(sl);
        getCommand("password").setExecutor(sl);
        loadMenus();
        for (String s : getConfig().getStringList("servers")) {
            ServerCount.put(s, -1);
        }
    }

    @Override
    public void onPluginMessageReceived(String channel, Player player, byte[] message) {
        if (!channel.equals("RedisBungee")) {
            return;
        }
        ByteArrayDataInput in = ByteStreams.newDataInput(message);
        String subchannel = in.readUTF();
        if (subchannel.equals("PlayerCount")) {
            try {
                ServerCount.put(in.readUTF(), in.readInt());
            } catch (Exception ex) {
            }
        }
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String lbl, String[] args) {
        if (cmd.getName().equalsIgnoreCase("reloadmenus") && sender.isOp()) {
            Menus.clear();
            loadMenus();
        }
        return true;
    }

    private void loadMenus() {
        if (!getDataFolder().exists()) {
            getDataFolder().mkdir();
        }
        for (File f : getDataFolder().listFiles()) {
            if (f.getName().endsWith(".menu")) {
                try {
                    ObjectMapper JSonParser = new ObjectMapper();
                    Menu menu = JSonParser.readValue(f, Menu.class);
                    InventoryMenu.MenuOption[] Items = new InventoryMenu.MenuOption[menu.items.length];
                    int j = 0;
                    for (Menu.Item i : menu.items) {
                        Items[j] = new InventoryMenu.MenuOption(ChatColor.GOLD + i.name,
                                new ItemStack(i.icon, 1, (short) 0, i.itemdat), i.lore, i.command, i.X, i.Y);
                        j++;
                    }
                    ItemStack menuIcon = new ItemStack(Material.valueOf(f.getName().replace(".menu", "")));
                    InventoryMenu.setItemNameAndLore(menuIcon, menu.itemName, new String[] {});
                    Menus.put(f.getName().replace(".menu", ""),
                            new InventoryMenu(menu.title, Items, menu.size, menuIcon, menu.slot));
                } catch (IOException ex) {
                    Logger.getLogger(HubManager.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }

    private static class Menu {
        @Setter
        private String title;

        @Setter
        private int size;

        @Setter
        private int slot;

        @Setter
        private Item[] items;

        @Setter
        private String itemName;

        private static class Item {
            @Setter
            private String name;

            @Setter
            private int icon;

            @Setter
            private byte itemdat;

            @Setter
            private String[] lore;

            @Setter
            private String command;

            @Setter
            private int X;

            @Setter
            private int Y;
        }
    }
}