com.legit.globalrep.chat.Message.java Source code

Java tutorial

Introduction

Here is the source code for com.legit.globalrep.chat.Message.java

Source

/*
 * MIT License
 * 
 * Copyright (c) 2017 Austin Asmus
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package com.legit.globalrep.chat;

import org.apache.commons.lang.StringUtils;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;

import com.legit.globalrep.object.Rep;

import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;

public class Message {

    private static Plugin plugin;

    public Message(Plugin plugin) {
        Message.plugin = plugin;
    }

    //sends message without a parameter to player
    public void send(Player player, String message) {
        if (player.isOnline())
            player.sendMessage(
                    ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("MESSAGES.PREFIX")
                            + " " + plugin.getConfig().getString("MESSAGES." + message)));
    }

    //sends message with a parameter to player
    public void send(Player player, String message, String parameter) {
        if (player.isOnline()) {
            String str = plugin.getConfig().getString("MESSAGES." + message);
            String output = str.replaceAll("<parameter>", parameter);
            player.sendMessage(ChatColor.translateAlternateColorCodes('&',
                    plugin.getConfig().getString("MESSAGES.PREFIX") + " " + output));
        }
    }

    //sends help information to player
    public void sendHelp(Player player) {
        player.sendMessage(ChatColor.AQUA + "m" + StringUtils.repeat(" ", 31) + ChatColor.GREEN + ChatColor.BOLD
                + " Global Rep " + ChatColor.RESET + ChatColor.AQUA + "m" + StringUtils.repeat(" ", 31));
        player.sendMessage(
                ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("MESSAGES.HELP_CHECK")));
        player.sendMessage(ChatColor.translateAlternateColorCodes('&',
                plugin.getConfig().getString("MESSAGES.HELP_POSITIVE")));
        player.sendMessage(ChatColor.translateAlternateColorCodes('&',
                plugin.getConfig().getString("MESSAGES.HELP_NEGATIVE")));
        if (player.hasPermission("rep.delete.self"))
            player.sendMessage(ChatColor.translateAlternateColorCodes('&',
                    plugin.getConfig().getString("MESSAGES.HELP_DELETE_SELF")));
        if (player.hasPermission("rep.delete") || player.hasPermission("rep.delete.others"))
            player.sendMessage(ChatColor.translateAlternateColorCodes('&',
                    plugin.getConfig().getString("MESSAGES.HELP_DELETE_OTHERS")));
        printLine(player);
    }

    public void tableCreated(String table) {
        System.out.println("[GlobalRep] " + table + " table created");
    }

    public static void databaseError(Exception e) {
        System.out.println("[GlobalRep] An Error occured. Is the database down?");
        e.printStackTrace();
    }

    /**
     * getComment - fired when a new rep record is being created to get comment for reputation record
     * 
     * @param args - array of arguments containing comment
     * @return - returns comment as a string
     */
    public synchronized static String getComment(String[] args) {
        String comment = "";
        if (args.length >= 3) {
            StringBuilder builder = new StringBuilder();
            for (int i = 2; i < args.length; i++) {
                builder.append(args[i]);
                builder.append(" ");
            }
            comment = builder.toString();
        }
        return comment;
    }

    /**
     * displayRep - used to display reputation records 10 at a time
     * 
     * @param player - command sender
     * @param username - player whose rep records are being looked up
     * @param reps - synchronized List array containing rep objects
     * @param page - rep page command sender is on
     * @param totalPages - total pages of rep records
     */
    public void displayRep(Player player, String username, java.util.List<Rep> reps, int page, int totalPages) {
        int resultAmount = page * 10;
        if (page <= totalPages && page > 0) {
            Message.repHeader(player, username);
            Rep rep;
            if (reps.size() - resultAmount <= 0) {
                if (page == 1) {
                    for (int i = 0; i < reps.size(); i++) {
                        rep = reps.get(i);
                        sendRep(player, rep);
                    }
                } else {
                    int remaining = reps.size() % (resultAmount - 10);
                    for (int i = reps.size() - remaining; i < reps.size(); i++) {
                        rep = reps.get(i);
                        sendRep(player, rep);
                    }
                }
            } else {
                for (int i = resultAmount - 10; i < resultAmount; i++) {
                    rep = reps.get(i);
                    sendRep(player, rep);
                }
            }

            Message.navigate(player, username, page, totalPages);

            int positiveRep = 0;
            int negativeRep = 0;
            for (Rep record : reps) {
                if (record.getAmount() > 0) {
                    positiveRep += record.getAmount();
                } else if (record.getAmount() < 0) {
                    negativeRep += record.getAmount();
                }
            }

            if (positiveRep + negativeRep > 0) {
                Message.repTotalPositive(player, positiveRep, negativeRep);
            } else if (positiveRep + negativeRep < 0) {
                Message.repTotalNegative(player, positiveRep, negativeRep);
            } else {
                Message.repTotalZero(player, positiveRep, negativeRep);
            }

            Message.repFooter(player);
        } else {
            send(player, "PAGE_OUT_OF_BOUNDS");
        }
    }

    /**
     * sendRep - decides whether rep was positive or negative and sends output accordingly
     * 
     * @param player - command sender
     * @param reps - synchronized List array containing rep objects
     * @param i - counter variable
     */
    private static void sendRep(Player player, Rep rep) {
        if (rep.getAmount() > 0) {
            Message.repPositive(player, rep.getAmount(), rep.getDate(), rep.getUsername(), rep.getComment());
        } else {
            Message.repNegative(player, rep.getAmount(), rep.getDate(), rep.getUsername(), rep.getComment());
        }
    }

    //prints rep header to players chat
    private static void repHeader(Player player, String username) {
        if (player.isOnline()) {
            player.sendMessage(ChatColor.GREEN + "" + ChatColor.BOLD + username + "'s Reputation:");
            printLine(player);
        }
    }

    //prints reputation records
    private static void repPositive(Player player, int amount, String date, String username, String comment) {
        if (player.isOnline()) {
            player.sendMessage(ChatColor.GREEN + "+" + amount + " " + ChatColor.GRAY + date + " " + ChatColor.YELLOW
                    + username + ": " + ChatColor.RESET + comment);
        }
    }

    //prints reputation records
    private static void repNegative(Player player, int amount, String date, String username, String comment) {
        if (player.isOnline()) {
            player.sendMessage(ChatColor.RED + "" + amount + " " + ChatColor.GRAY + date + " " + ChatColor.YELLOW
                    + username + ": " + ChatColor.RESET + comment);
        }
    }

    //menu navigation for reputation records
    private static void navigate(Player player, String username, int page, int totalPages) {
        if (player.isOnline()) {
            if (page == 1) {
                if (page == totalPages) {
                    TextComponent prev = new TextComponent("<m--");
                    prev.setColor(ChatColor.GRAY);

                    TextComponent middle = new TextComponent(" Page " + page + "/" + totalPages + " ");

                    TextComponent next = new TextComponent("m--r7>");
                    next.setColor(ChatColor.GRAY);
                    player.spigot().sendMessage(prev, middle, next);
                } else {
                    TextComponent prev = new TextComponent("<m--");
                    prev.setColor(ChatColor.GRAY);

                    TextComponent middle = new TextComponent(" Page " + page + "/" + totalPages + " ");

                    TextComponent next = new TextComponent("m--rb>");
                    next.setColor(ChatColor.AQUA);
                    next.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
                            "/rep " + username + " page " + (page + 1)));
                    next.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
                            new ComponentBuilder("Next page.").create()));
                    player.spigot().sendMessage(prev, middle, next);
                }
            } else if (page != totalPages) {
                TextComponent prev = new TextComponent("<m--");
                prev.setColor(ChatColor.AQUA);
                prev.setClickEvent(
                        new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/rep " + username + " page " + (page - 1)));
                prev.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
                        new ComponentBuilder("Previous page.").create()));

                TextComponent middle = new TextComponent(" Page " + page + "/" + totalPages + " ");

                TextComponent next = new TextComponent("m--rb>");
                next.setColor(ChatColor.AQUA);
                next.setClickEvent(
                        new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/rep " + username + " page " + (page + 1)));
                next.setHoverEvent(
                        new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Next page.").create()));
                player.spigot().sendMessage(prev, middle, next);
            } else if (page == totalPages) {
                TextComponent prev = new TextComponent("<m--");
                prev.setColor(ChatColor.AQUA);
                prev.setClickEvent(
                        new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/rep " + username + " page " + (page - 1)));
                prev.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
                        new ComponentBuilder("Previous page.").create()));

                TextComponent middle = new TextComponent(" Page " + page + "/" + totalPages + " ");

                TextComponent next = new TextComponent("m--r7>");
                next.setColor(ChatColor.GRAY);
                player.spigot().sendMessage(prev, middle, next);
            }
        }
    }

    private static void repTotalPositive(Player player, int positiveRep, int negativeRep) {
        if (player.isOnline()) {
            player.sendMessage(ChatColor.GREEN + "Positive Rep: " + positiveRep + " " + ChatColor.RED
                    + "Negative Rep: " + Math.abs(negativeRep) + ChatColor.BLUE + " Total Rep: " + ChatColor.GREEN
                    + (positiveRep + negativeRep));
        }
    }

    private static void repTotalNegative(Player player, int positiveRep, int negativeRep) {
        if (player.isOnline()) {
            player.sendMessage(ChatColor.GREEN + "Positive Rep: " + positiveRep + " " + ChatColor.RED
                    + "Negative Rep: " + Math.abs(negativeRep) + ChatColor.BLUE + " Total Rep: " + ChatColor.RED
                    + (positiveRep + negativeRep));
        }
    }

    private static void repTotalZero(Player player, int positiveRep, int negativeRep) {
        if (player.isOnline()) {
            player.sendMessage(ChatColor.GREEN + "Positive Rep: " + positiveRep + " " + ChatColor.RED
                    + "Negative Rep: " + Math.abs(negativeRep) + ChatColor.BLUE + " Total Rep: " + ChatColor.GRAY
                    + (positiveRep + negativeRep));
        }
    }

    private static void repFooter(Player player) {
        if (player.isOnline()) {
            printLine(player);
        }
    }

    private static void printLine(Player player) {
        if (player.isOnline()) {
            player.sendMessage(ChatColor.AQUA + "m" + StringUtils.repeat(" ", 80));
        }
    }
}