From c6fb20d686e69709dbbc76b783c3dcbcc4134998 Mon Sep 17 00:00:00 2001 From: Izzel_Aliz Date: Fri, 30 Jun 2017 13:27:08 +0800 Subject: [PATCH] Complete --- bin/.gitignore | 6 + pom.xml | 2 +- bungee.yml => src/bungee.yml | 0 config.yml => src/config.yml | 0 lang.yml => src/lang.yml | 0 lang_cn.yml => src/lang_cn.yml | 0 lang_en.yml => src/lang_en.yml | 0 plugin.yml => src/plugin.yml | 0 target/BugRepGUI-b.jar | Bin 0 -> 22132 bytes target/classes/bungee.yml | 4 + target/classes/com/ilummc/bugrepgui/Bug.java | 124 +++++++ .../com/ilummc/bugrepgui/Database.java | 338 ++++++++++++++++++ .../com/ilummc/bugrepgui/EventListener.java | 142 ++++++++ target/classes/com/ilummc/bugrepgui/GUI.java | 235 ++++++++++++ target/classes/com/ilummc/bugrepgui/Main.java | 28 ++ .../classes/com/ilummc/bugrepgui/Notify.java | 35 ++ .../classes/com/ilummc/bugrepgui/Stats.java | 53 +++ .../classes/com/ilummc/bugrepgui/Storage.java | 143 ++++++++ .../bugrepgui/bungee/BungeeListener.java | 19 + .../ilummc/bugrepgui/bungee/GlobalNotify.java | 167 +++++++++ .../com/ilummc/bugrepgui/bungee/Main.java | 84 +++++ .../classes/com/ilummc/bugrepgui/cmdExe.java | 116 ++++++ .../com/ilummc/bugrepgui/stats/Reporter.java | 28 ++ .../ilummc/bugrepgui/util/UpdateChecker.java | 48 +++ target/classes/config.yml | 27 ++ target/classes/lang.yml | 23 ++ target/classes/lang_cn.yml | 48 +++ target/classes/lang_en.yml | 48 +++ target/classes/plugin.yml | 44 +++ target/classes/pom.xml | 75 ---- target/maven-archiver/pom.properties | 5 + 31 files changed, 1766 insertions(+), 76 deletions(-) rename bungee.yml => src/bungee.yml (100%) rename config.yml => src/config.yml (100%) rename lang.yml => src/lang.yml (100%) rename lang_cn.yml => src/lang_cn.yml (100%) rename lang_en.yml => src/lang_en.yml (100%) rename plugin.yml => src/plugin.yml (100%) create mode 100644 target/BugRepGUI-b.jar create mode 100644 target/classes/bungee.yml create mode 100644 target/classes/com/ilummc/bugrepgui/Bug.java create mode 100644 target/classes/com/ilummc/bugrepgui/Database.java create mode 100644 target/classes/com/ilummc/bugrepgui/EventListener.java create mode 100644 target/classes/com/ilummc/bugrepgui/GUI.java create mode 100644 target/classes/com/ilummc/bugrepgui/Main.java create mode 100644 target/classes/com/ilummc/bugrepgui/Notify.java create mode 100644 target/classes/com/ilummc/bugrepgui/Stats.java create mode 100644 target/classes/com/ilummc/bugrepgui/Storage.java create mode 100644 target/classes/com/ilummc/bugrepgui/bungee/BungeeListener.java create mode 100644 target/classes/com/ilummc/bugrepgui/bungee/GlobalNotify.java create mode 100644 target/classes/com/ilummc/bugrepgui/bungee/Main.java create mode 100644 target/classes/com/ilummc/bugrepgui/cmdExe.java create mode 100644 target/classes/com/ilummc/bugrepgui/stats/Reporter.java create mode 100644 target/classes/com/ilummc/bugrepgui/util/UpdateChecker.java create mode 100644 target/classes/config.yml create mode 100644 target/classes/lang.yml create mode 100644 target/classes/lang_cn.yml create mode 100644 target/classes/lang_en.yml create mode 100644 target/classes/plugin.yml delete mode 100644 target/classes/pom.xml create mode 100644 target/maven-archiver/pom.properties diff --git a/bin/.gitignore b/bin/.gitignore index c2d9872..1874f1d 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -1 +1,7 @@ /com/ +/bungee.yml +/config.yml +/lang.yml +/lang_cn.yml +/lang_en.yml +/plugin.yml diff --git a/pom.xml b/pom.xml index c3b2f91..bc110d2 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ . - ${basedir} + ${basedir}/src/ diff --git a/bungee.yml b/src/bungee.yml similarity index 100% rename from bungee.yml rename to src/bungee.yml diff --git a/config.yml b/src/config.yml similarity index 100% rename from config.yml rename to src/config.yml diff --git a/lang.yml b/src/lang.yml similarity index 100% rename from lang.yml rename to src/lang.yml diff --git a/lang_cn.yml b/src/lang_cn.yml similarity index 100% rename from lang_cn.yml rename to src/lang_cn.yml diff --git a/lang_en.yml b/src/lang_en.yml similarity index 100% rename from lang_en.yml rename to src/lang_en.yml diff --git a/plugin.yml b/src/plugin.yml similarity index 100% rename from plugin.yml rename to src/plugin.yml diff --git a/target/BugRepGUI-b.jar b/target/BugRepGUI-b.jar new file mode 100644 index 0000000000000000000000000000000000000000..20d3eb073ce32993818c6e39b516896a29b1ee05 GIT binary patch literal 22132 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 literal 0 HcmV?d00001 diff --git a/target/classes/bungee.yml b/target/classes/bungee.yml new file mode 100644 index 0000000..1a363e1 --- /dev/null +++ b/target/classes/bungee.yml @@ -0,0 +1,4 @@ +name: BugRepGUI +main: com.ilummc.bugrepgui.bungee.Main +version: 1.5b +author: IzzelAliz \ No newline at end of file diff --git a/target/classes/com/ilummc/bugrepgui/Bug.java b/target/classes/com/ilummc/bugrepgui/Bug.java new file mode 100644 index 0000000..b835614 --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/Bug.java @@ -0,0 +1,124 @@ +package com.ilummc.bugrepgui; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; + +public class Bug { + /* + * SERIAL REPNAME REPTIME REPMSG EXENAME EXETIME EXEMSG EXECUTED BACK METHOD + */ + @SuppressWarnings("deprecation") + OfflinePlayer player = Bukkit.getOfflinePlayer("Steve"), exeplayer = Bukkit.getOfflinePlayer("Steve"); + String repmsg = "", reptime = "", exetime = "", exemsg = ""; + Date date = new Date(); + Locale l; + Integer serial = 0, method = 0; + + public Bug(Player player) { + this.player = player; + repmsg = ""; + date = new Date(); + l = new Locale(Storage.getConfig().getString("lang"), Storage.getConfig().getString("locale")); + reptime = String.format(l, "%tc", date); + } + + @SuppressWarnings("deprecation") + public Bug(int serial, String reptime, String repname, String repmsg) { + this.repmsg = repmsg; + this.reptime = reptime; + this.serial = serial; + this.player = Bukkit.getOfflinePlayer(repname); + + } + + @SuppressWarnings("deprecation") + public Bug(int serial, String reptime, String repname, String repmsg, String exetime, String exename, String exemsg, + Integer method) { + this.repmsg = repmsg; + this.reptime = reptime; + this.serial = serial; + this.player = Bukkit.getOfflinePlayer(repname); + this.exeplayer = Bukkit.getOfflinePlayer(exename); + this.exetime = exetime; + this.exemsg = exemsg; + this.method = method; + } + + public ItemStack toItem() { + ItemStack head = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); + SkullMeta m = (SkullMeta) head.getItemMeta(); + m.setOwner(player.getName()); + m.setDisplayName(serial.toString()); + List l = new ArrayList<>(); + l.add("¡ìb" + player.getName()); + l.add("¡ìe" + reptime + "¡ìf"); + String[] lorem = this.repmsg.split("#"); + for (int i = 0; i < lorem.length; i++) { + l.add("¡ìe" + lorem[i]); + } + m.setLore(l); + head.setItemMeta(m); + return head; + } + + public ItemStack toItemExecuted(){ + ItemStack head = new ItemStack(Material.SKULL_ITEM, 1 ,(short)3); + SkullMeta m =(SkullMeta) head.getItemMeta(); + m.setOwner(player.getName()); + m.setDisplayName("¡ìa#"+serial.toString()); + List l = new ArrayList<>(); + l.add("¡ìb"+player.getName()); + l.add("¡ìe"+reptime+"¡ìf"); + String[] lorem= this.repmsg.split("#"); + for(int i=0;i loadStatsRep() { + connect(); + String sql = "SELECT REPNAME FROM br_bug;"; + Map reprank = new TreeMap<>(); + Integer repmax = 1; + try { + ResultSet res = state.executeQuery(sql); + while (res.next()) { + String repname = res.getString("REPNAME"); + if (reprank.containsKey(repname)) { + reprank.replace(repname, reprank.get(repname) + 1); + if (repmax < reprank.get(repname)) + repmax++; + } else { + reprank.put(repname, 1); + } + } + } catch (SQLException e) { + Storage.logExcept(e); + } + return reprank; + } + + public static Map loadStatsExe() { + connect(); + String sql = "SELECT EXENAME,EXECUTED FROM br_bug;"; + Map exerank = new TreeMap<>(); + Integer exemax = 1; + try { + ResultSet res = state.executeQuery(sql); + while (res.next()) { + String exename = res.getString("EXENAME"); + if (exerank.containsKey(exename)) { + exerank.replace(exename, exerank.get(exename) + 1); + if (exemax < exerank.get(exename)) + exemax++; + } else { + exerank.put(exename, 1); + } + } + } catch (SQLException e) { + Storage.logExcept(e); + } + return exerank; + } + + @SuppressWarnings("deprecation") + public static Player getRepPlayer(String serial) { + connect(); + String sql = "SELECT REPNAME FROM br_bug WHERE SERIAL =" + serial + ";"; + String name = "Steve"; + try { + ResultSet res = state.executeQuery(sql); + if (res.next()) { + name = res.getString("REPNAME"); + res.close(); + res = null; + } + } catch (SQLException e) { + Storage.logExcept(e); + } finally { + close(); + } + return Bukkit.getPlayer(name); + } + + public static void check(Player player) { + connect(); + String sql = "SELECT SERIAL,EXEMSG,EXENAME FROM br_bug WHERE REPNAME = '" + player.getName() + + "' AND (EXECUTED = 1 OR EXECUTED = 2) AND BACK = 0 ORDER BY SERIAL ASC;"; + String send[] = new String[12]; + Integer[] ser = new Integer[6]; + try { + ResultSet res = state.executeQuery(sql); + int limit = 0; + while (((limit += 2) < 12) && res.next()) { + Integer serial = res.getInt("SERIAL"); + String msg = res.getString("EXEMSG"); + String exename = res.getString("EXENAME"); + String str = format.replaceAll("%serial%", serial.toString()).replaceAll("%exename%", exename) + .replaceAll("%reply%", msg); + String str2 = format2.replaceAll("%serial%", serial.toString()).replaceAll("%exename%", exename) + .replaceAll("%reply%", msg); + send[limit - 2] = Storage.compile(str); + send[limit - 1] = Storage.compile(str2); + ser[limit / 2] = serial; + } + res.close(); + } catch (SQLException e) { + Storage.logExcept(e); + } + Storage.sends(player, send); + close(); + setback(ser); + } + + public static void setback(Integer[] ser) { + connect(); + for (int i = 1; i < (ser.length) && (ser[i] != null); i++) { + String sql2 = "UPDATE br_bug SET BACK = 1 WHERE SERIAL = " + ser[i].toString() + ";"; + try { + state.executeUpdate(sql2); + } catch (SQLException e) { + Storage.logExcept(e); + } + } + close(); + } + + public static void setback(String ser) { + connect(); + String sql = "UPDATE br_bug SET BACK = 1 WHERE SERIAL = " + ser + ";"; + try { + state.executeUpdate(sql); + } catch (SQLException e) { + Storage.logExcept(e); + } + close(); + } + + public static void qback(String serial, Player player) { + // auto reply method + connect(); + Date date = new Date(); + String exetime = String.format("%tc", date); + String sql = "UPDATE br_bug SET EXETIME = '" + exetime + "', EXENAME = '" + player.getName() + + "' ,EXECUTED = 2, EXEMSG = '" + autoback + "' WHERE SERIAL = " + serial + ";"; + try { + state.executeUpdate(sql); + } catch (SQLException e) { + Storage.logExcept(e); + } + close(); + } + + public static void back(String serial, String msg, Player player) { + // manual reply method + connect(); + Date date = new Date(); + String exetime = String.format("%tc", date); + String sql = "UPDATE br_bug SET EXETIME = '" + exetime + "', EXENAME = '" + player.getName() + + "', EXECUTED = 1, EXEMSG = '" + msg + "' WHERE SERIAL = " + serial + ";"; + try { + state.executeUpdate(sql); + } catch (SQLException e) { + Storage.logExcept(e); + } + close(); + } + + public static List list() { + connect(); + List set = new ArrayList<>(); + String sql = "SELECT SERIAL,REPTIME,REPNAME,REPMSG FROM br_bug WHERE EXECUTED = 0;"; + try { + ResultSet res = state.executeQuery(sql); + while (res.next()) { + Bug bug = new Bug(res.getInt("SERIAL"), res.getString("REPTIME"), res.getString("REPNAME"), + res.getString("REPMSG")); + set.add(bug); + } + } catch (SQLException e) { + Storage.logExcept(e); + } + close(); + return set; + } + + public static List listHis() { + connect(); + List set = new ArrayList<>(); + String sql = "SELECT SERIAL,REPTIME,REPNAME,REPMSG,EXENAME,EXETIME,EXEMSG,EXECUTED FROM br_bug WHERE BACK = 1"; + try { + ResultSet res = state.executeQuery(sql); + while (res.next()) { + Bug bug = new Bug(res.getInt("SERIAL"), res.getString("REPTIME"), res.getString("REPNAME"), + res.getString("REPMSG"), res.getString("EXETIME"), res.getString("EXENAME"), + res.getString("EXEMSG"), res.getInt("EXECUTED")); + set.add(bug); + } + } catch (SQLException e) { + Storage.logExcept(e); + } + close(); + return set; + } + + public static void insert(Bug bug) { + connect(); + String sql = "INSERT INTO br_bug (REPTIME,REPNAME,REPMSG,EXECUTED,BACK)" + " VALUES ('" + bug.getRepTime() + + "','" + bug.getName() + "','" + bug.getMsg() + "',0,0);"; + try { + state.executeUpdate(sql); + } catch (SQLException e) { + Storage.logExcept(e); + } + close(); + } + + public static void ignore(String serial, Player player) { + connect(); + Date date = new Date(); + String exetime = String.format("tc", date); + String sql = "UPDATE br_bug SET EXETIME = '" + exetime + "', EXENAME = '" + player.getName() + + "', EXECUTED = 3 WHERE SERIAL = " + serial + ";"; + try { + state.executeUpdate(sql); + } catch (SQLException e) { + Storage.logExcept(e); + } + close(); + } + + public static String getSerial(Player player) { + connect(); + String sql = "SELECT SERIAL FROM br_bug WHERE REPNAME = '" + player.getName() + "' ORDER BY SERIAL DESC;"; + Integer i = 0; + try { + ResultSet res = state.executeQuery(sql); + if (res.next()) { + i = res.getInt("SERIAL"); + } + res.close(); + res = null; + } catch (SQLException e1) { + Storage.logExcept(e1); + } finally { + close(); + } + return i.toString(); + } + + public static void connect() { + if (dbtype.equalsIgnoreCase("sqlite")) { + conSQLite(); + } + if (dbtype.equalsIgnoreCase("mysql")) { + if (!conMySQL()) { + Bukkit.getLogger().warning("[BugRepGUI] MySQL connect failed!"); + Bukkit.getLogger().warning("[BugRepGUI] Now using SQLite!"); + conSQLite(); + } + } + } + + public static void close() { + try { + state.close(); + state = null; + c.close(); + } catch (Exception e) { + Storage.logExcept(e); + } + } + + public static void conSQLite() { + try { + Class.forName("org.sqlite.JDBC"); + c = DriverManager.getConnection("jdbc:sqlite:" + Storage.getFolder().getAbsolutePath() + "/bug.db"); + state = c.createStatement(); + } catch (SQLException e) { + Storage.logExcept(e); + } catch (ClassNotFoundException e) { + Storage.logExcept(e); + } + String sql = "CREATE TABLE IF NOT EXISTS br_bug " + "(SERIAL INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + + " REPNAME TEXT NOT NULL, " + " REPTIME TEXT NOT NULL, " + + " REPMSG TEXT NOT NULL, " + " EXENAME TEXT, " + " EXETIME TEXT, " + + " EXEMSG TEXT, " + " EXECUTED INTEGER, " + " BACK INTEGER);"; + try { + state.executeUpdate(sql); + } catch (SQLException e) { + Storage.logExcept(e); + } + + } + + public static boolean conMySQL() { + String url = "jdbc:mysql://" + Storage.getConfig().getString("mysql-url") + ":" + + Storage.getConfig().getString("mysql-port") + "/" + Storage.getConfig().getString("mysql-db"); + try { + Class.forName("com.mysql.jdbc.Driver"); + c = DriverManager.getConnection(url, Storage.getConfig().getString("mysql-username"), + Storage.getConfig().getString("mysql-password")); + state = c.createStatement(); + } catch (SQLException e) { + Storage.logExcept(e); + return false; + } catch (ClassNotFoundException e) { + Storage.logExcept(e); + return false; + } + String sql = "CREATE TABLE IF NOT EXISTS br_bug " + "(SERIAL INT PRIMARY KEY AUTO_INCREMENT NOT NULL," + + " REPNAME TEXT NOT NULL, " + " REPTIME TEXT NOT NULL, " + + " REPMSG TEXT NOT NULL, " + " EXENAME TEXT, " + " EXETIME TEXT, " + + " EXEMSG TEXT, " + " EXECUTED INT, " + " BACK INT);"; + try { + state.executeUpdate(sql); + } catch (SQLException e) { + Storage.logExcept(e); + } + return true; + } +} diff --git a/target/classes/com/ilummc/bugrepgui/EventListener.java b/target/classes/com/ilummc/bugrepgui/EventListener.java new file mode 100644 index 0000000..c6929a4 --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/EventListener.java @@ -0,0 +1,142 @@ +package com.ilummc.bugrepgui; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.Inventory; + +public class EventListener implements org.bukkit.event.Listener { + String alias; + public EventListener setAlias(String msg) { + this.alias = msg; + return this; + } + + @EventHandler + public void onCommand(PlayerCommandPreprocessEvent evt) { + if (evt.getMessage().equalsIgnoreCase("/"+alias)) { + evt.setCancelled(true); + Player sender = evt.getPlayer(); + if (sender.hasPermission("bugrepgui.report")) { + Bug bug = new Bug(sender); + Storage.putMap(bug); + Storage.send(sender, "input-bug-info"); + return; + } else { + Storage.send(sender, "no-perm"); + return; + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = false) + public void onChat(AsyncPlayerChatEvent evt) { + String regex2 = "[^']+"; + Pattern pattern2 = Pattern.compile(regex2); + Matcher m2 = pattern2.matcher(evt.getMessage()); + if (Storage.map.containsKey(evt.getPlayer().getUniqueId().toString())) { + evt.setCancelled(true); + if (m2.matches()) { + Bug bug = Storage.map.get(evt.getPlayer().getUniqueId().toString()); + bug.append(evt.getMessage()); + evt.getPlayer().sendMessage(Storage.getMsg("continue-input")); + return; + } else { + Storage.send(evt.getPlayer(), "illegal-char"); + return; + } + } + if (Storage.back.containsKey(evt.getPlayer().getUniqueId().toString())) { + evt.setCancelled(true); + Database.back(Storage.back.get(evt.getPlayer().getUniqueId().toString()), evt.getMessage(), + evt.getPlayer()); + if (!Storage.getConfig().getBoolean("use-bungee")) { + Notify.notifyb(Storage.back.get(evt.getPlayer().getUniqueId().toString()), evt.getMessage(), + evt.getPlayer()); + } + Storage.back.remove(evt.getPlayer().getUniqueId().toString()); + Storage.send(evt.getPlayer(), "send-back-success"); + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = false) + public void onMove(PlayerMoveEvent evt) { + if (Storage.map.containsKey(evt.getPlayer().getUniqueId().toString())) { + evt.setCancelled(true); + Bug bug = Storage.map.get(evt.getPlayer().getUniqueId().toString()); + Database.insert(bug); + evt.getPlayer().sendMessage(Storage.getPrefix() + + Storage.getMsg("rep-suc").replaceAll("%serial%", Database.getSerial(evt.getPlayer()))); + if (!Storage.getConfig().getBoolean("use-bungee")) { + Notify.notifyt(evt.getPlayer()); + } + Storage.map.remove(evt.getPlayer().getUniqueId().toString()); + return; + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = false) + public void onOffline(PlayerQuitEvent evt) { + if (Storage.map.containsKey(evt.getPlayer().getUniqueId().toString())) { + Storage.map.remove(evt.getPlayer().getUniqueId().toString()); + } + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = false) + public void onClick(InventoryClickEvent evt) { + String regex = "[¡ì[0-9a-fA-f]]*\\u005b\\s[0-9]*\\s/\\s[0-9]*\\s\\u005d\\s*[\\d\\D]*"; + Pattern pattern = Pattern.compile(regex); + Matcher m = pattern.matcher(evt.getInventory().getTitle()); + String regex2 = "[¡ì[0-9a-fA-f]]*\\u0028\\s[0-9]*\\s/\\s[0-9]*\\s\\u0029\\s*[\\d\\D]*"; + Pattern pattern2 = Pattern.compile(regex2); + Matcher m2 = pattern2.matcher(evt.getInventory().getTitle()); + if (m2.matches()) { + evt.setCancelled(true); + Inventory inv = evt.getInventory(); + Integer id = evt.getRawSlot(); + String arr = evt.getInventory().getTitle(); + String pagestr = ""; + for (int i = 4;; i++) { + if (arr.charAt(i) >= '0' && arr.charAt(i) <= '9') { + pagestr = pagestr + arr.charAt(i); + } else { + break; + } + } + Integer page = Integer.parseInt(pagestr); + GUI.clickHis(inv, page, id, evt.getClick(), (Player) evt.getWhoClicked()); + } + if (m.matches()) { + evt.setCancelled(true); + Inventory inv = evt.getInventory(); + Integer id = evt.getRawSlot(); + String arr = evt.getInventory().getTitle(); + String pagestr = ""; + for (int i = 4;; i++) { + if (arr.charAt(i) >= '0' && arr.charAt(i) <= '9') { + pagestr = pagestr + arr.charAt(i); + } else { + break; + } + } + Integer page = Integer.parseInt(pagestr); + GUI.click(inv, page, id, evt.getClick(), (Player) evt.getWhoClicked()); + return; + } + + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = false) + public void onJoin(PlayerJoinEvent evt) { + Database.check(evt.getPlayer()); + } +} diff --git a/target/classes/com/ilummc/bugrepgui/GUI.java b/target/classes/com/ilummc/bugrepgui/GUI.java new file mode 100644 index 0000000..24f96b4 --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/GUI.java @@ -0,0 +1,235 @@ +package com.ilummc.bugrepgui; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class GUI { + static List invs = new ArrayList<>(); + static List his = new ArrayList<>(); + static Integer pages; + + public static void open(Player player, int page) { + loadInv(); + player.closeInventory(); + player.openInventory(invs.get(page - 1)); + } + + public static void openHistory(Player player, int page) { + loadHis(player); + player.closeInventory(); + player.openInventory(his.get(page - 1)); + } + + public static void loadHis(Player player) { + his = new ArrayList<>(); + List set = Database.listHis(); + Iterator it = set.iterator(); + List nlist = new ArrayList<>(); + while (it.hasNext()) { + nlist.add(it.next().toItemExecuted()); + } + setItemHis(nlist, player); + } + + public static boolean loadInv() { + invs = new ArrayList<>(); + List set = Database.list(); + Iterator it = set.iterator(); + List nlist = new ArrayList<>(); + while (it.hasNext()) { + nlist.add(it.next().toItem()); + } + setItem(nlist); + return true; + } + + private static void setItemHis(List nlist, Player player) { + ItemStack lp = new ItemStack(Material.REDSTONE); + ItemMeta lm = lp.getItemMeta(); + lm.setDisplayName(Storage.getMsg("last-page")); + lp.setItemMeta(lm); + ItemStack np = new ItemStack(Material.EMERALD); + ItemMeta nm = np.getItemMeta(); + nm.setDisplayName(Storage.getMsg("next-page")); + np.setItemMeta(nm); + ItemStack usage = new ItemStack(Material.PAPER); + ItemMeta um = usage.getItemMeta(); + um.setDisplayName(Storage.getMsg("to-not-executed")); + usage.setItemMeta(um); + ItemStack re = new ItemStack(Material.BOOK); + ItemMeta rm = re.getItemMeta(); + rm.setDisplayName(Storage.getMsg("refresh")); + re.setItemMeta(rm); + ItemStack ex = new ItemStack(Material.NETHER_STAR); + ItemMeta em = ex.getItemMeta(); + em.setDisplayName(Storage.getMsg("exit")); + ex.setItemMeta(em); + Iterator iter = nlist.iterator(); + int all = nlist.size(); + pages = (((all % 45) == 0) && (all != 0)) ? (all / 45) : (all / 45 + 1); + for (Integer t = 1; t <= pages; t++) { + Inventory inv = Bukkit.createInventory(player, 54, + "¡ìd( " + t.toString() + " / " + pages.toString() + " ) " + Storage.getMsg("history-name")); + for (int i = 0; i <= 44 && iter.hasNext(); i++) { + ItemStack it = iter.next(); + inv.setItem(i, it); + } + inv.setItem(45, lp); + inv.setItem(47, np); + inv.setItem(51, usage); + inv.setItem(49, re); + inv.setItem(53, ex); + his.add(t - 1, inv); + } + } + + public static void setItem(List item) { + ItemStack lp = new ItemStack(Material.REDSTONE); + ItemMeta lm = lp.getItemMeta(); + lm.setDisplayName(Storage.getMsg("last-page")); + lp.setItemMeta(lm); + ItemStack np = new ItemStack(Material.EMERALD); + ItemMeta nm = np.getItemMeta(); + nm.setDisplayName(Storage.getMsg("next-page")); + np.setItemMeta(nm); + ItemStack usage = new ItemStack(Material.PAPER); + ItemMeta um = usage.getItemMeta(); + um.setDisplayName(Storage.getMsg("usage-name")); + List lore = Storage.getMsgs("usage-lore"); + um.setLore(lore); + usage.setItemMeta(um); + ItemStack re = new ItemStack(Material.BOOK); + ItemMeta rm = re.getItemMeta(); + rm.setDisplayName(Storage.getMsg("refresh")); + re.setItemMeta(rm); + ItemStack ex = new ItemStack(Material.NETHER_STAR); + ItemMeta em = ex.getItemMeta(); + em.setDisplayName(Storage.getMsg("exit")); + ex.setItemMeta(em); + // add items to bug view + Iterator iter = item.iterator(); + int all = item.size(); + pages = (((all % 45) == 0) && (all != 0)) ? (all / 45) : (all / 45 + 1); + for (Integer t = 1; t <= pages; t++) { + Inventory inv = Bukkit.createInventory(null, 54, + "¡ìd[ " + t.toString() + " / " + pages.toString() + " ] " + Storage.getMsg("gui-name")); + for (int i = 0; i <= 44 && iter.hasNext(); i++) { + ItemStack it = iter.next(); + inv.setItem(i, it); + } + inv.setItem(45, lp); + inv.setItem(47, np); + inv.setItem(51, usage); + inv.setItem(49, re); + inv.setItem(53, ex); + invs.add(t - 1, inv); + } + } + + /** + * + * @param inv + * this inventory + * @param page + * this page + * @param id + * slot id + * @param click + * click type + */ + public static void click(Inventory inv, Integer page, Integer id, ClickType click, Player player) { + if (inv.getItem(id) != null) { + ItemStack item = inv.getItem(id); + String serial = item.getItemMeta().getDisplayName(); + if (id != 45 && id != 47 && id != 49 && id != 51 && id != 53) { + if (click.isLeftClick() && (!click.isShiftClick())) { + ItemMeta im = item.getItemMeta(); + List lore = im.getLore(); + lore.add(Storage.getMsg("executed")); + item.setItemMeta(im); + inv.clear(id); + inv.setItem(id, item); + Database.qback(serial, player); + Notify.notifyb(serial, Storage.getConfig().getString("auto-sendback-msg"), player); + } + if (click.isRightClick() && (!click.isShiftClick())) { + // need to add a serial to this map + Storage.back.put(player.getUniqueId().toString(), serial); + Storage.send(player, "send-back"); + player.closeInventory(); + } + if (click.isLeftClick() && (click.isShiftClick())) { + ItemMeta im = item.getItemMeta(); + List lore = im.getLore(); + lore.add(Storage.getMsg("executed")); + item.setItemMeta(im); + inv.clear(id); + inv.setItem(id, item); + Database.ignore(serial, player); + } + } else { + if (id == 45) { + if (page != 1) { + open(player, page - 1); + } else { + Storage.send(player, "no-this-page"); + } + } + if (id == 47) { + if (page != pages) { + open(player, page + 1); + } else { + Storage.send(player, "no-this-page"); + } + } + if (id == 49) { + loadInv(); + player.closeInventory(); + open(player, page); + } + if (id == 53) { + player.closeInventory(); + } + } + } + } + + public static void clickHis(Inventory inv, Integer page, Integer id, ClickType click, Player player) { + if (id >= 0 && id <= 53 && inv.getItem(id) != null) { + if (id == 45) { + if (page != 1) { + openHistory(player, page - 1); + } else { + Storage.send(player, "no-this-page"); + } + } + if (id == 47) { + if (page != pages) { + openHistory(player, page + 1); + } else { + Storage.send(player, "no-this-page"); + } + } + if (id == 49) { + loadHis(player); + player.closeInventory(); + openHistory(player, page); + } + if (id == 51) { + player.closeInventory(); + open(player, 1); + } + if (id == 53) { + player.closeInventory(); + } + } + } +} diff --git a/target/classes/com/ilummc/bugrepgui/Main.java b/target/classes/com/ilummc/bugrepgui/Main.java new file mode 100644 index 0000000..6ba3328 --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/Main.java @@ -0,0 +1,28 @@ +package com.ilummc.bugrepgui; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.*; + +import com.ilummc.bugrepgui.util.UpdateChecker; + +public class Main extends JavaPlugin { + @Override + public void onEnable() { + this.saveDefaultConfig(); + String lang = this.getConfig().getString("lang"); + String alias = this.getConfig().getString("alias"); + this.saveResource("lang_" + lang + ".yml", false); + Storage.init(this.getConfig(), this.getDataFolder(), "lang_" + lang + ".yml"); + getServer().getPluginManager().registerEvents(new EventListener().setAlias(getConfig().getString("alias")), + this); + getCommand("bug").setExecutor(new cmdExe()); + getCommand("bugrepgui").setExecutor(new cmdExe()); + if (this.getConfig().getBoolean("check-update")) + UpdateChecker.check(this.getDescription().getVersion(), this.getDescription().getWebsite()); + } + + @Override + public void onDisable() { + Bukkit.getLogger().info("[BugRepGUI] Thanks for chosing this plugin!"); + } +} diff --git a/target/classes/com/ilummc/bugrepgui/Notify.java b/target/classes/com/ilummc/bugrepgui/Notify.java new file mode 100644 index 0000000..e57af1f --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/Notify.java @@ -0,0 +1,35 @@ +package com.ilummc.bugrepgui; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +public class Notify { + + public static void notifyt(Player player) { + OfflinePlayer[] list = Bukkit.getOfflinePlayers(); + for (int i = 0; i < list.length; i++) { + if (list[i].isOnline()) { + if ((list[i]).getPlayer().hasPermission("bugrepgui.notify")) { + (list[i]).getPlayer() + .sendMessage(Storage.getPrefix() + + Storage.getMsg("notify-op").replaceAll("%player%", player.getName()) + .replaceAll("%serial%", Database.getSerial(player))); + } + } + } + } + + public static void notifyb(String serial, String msg, Player exename) { + Player player = Database.getRepPlayer(serial); + if (player.isOnline()) { + String str = Database.format.replaceAll("%serial%", serial.toString()) + .replaceAll("%exename%", exename.getDisplayName()).replaceAll("%reply%", msg); + String str2 = Database.format2.replaceAll("%serial%", serial.toString()) + .replaceAll("%exename%", exename.getDisplayName()).replaceAll("%reply%", msg); + String msgs[] = { str, Storage.compile(str2) }; + player.sendMessage(msgs); + Database.setback(serial); + } + } +} diff --git a/target/classes/com/ilummc/bugrepgui/Stats.java b/target/classes/com/ilummc/bugrepgui/Stats.java new file mode 100644 index 0000000..488147e --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/Stats.java @@ -0,0 +1,53 @@ +package com.ilummc.bugrepgui; + +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import com.ilummc.bugrepgui.stats.Reporter; + +public class Stats { + public static String[] loadTextRep() { + Map res = Database.loadStatsRep(); + Set set = res.keySet(); + Iterator it = set.iterator(); + Set rank = new TreeSet<>(); + while (it.hasNext()) { + String name = it.next(); + Reporter rep = new Reporter(name, res.get(name)); + rank.add(rep); + } + String[] msg = new String[rank.size() + 2]; + msg[0] = Storage.getMsg("rep-rank"); + Iterator its = rank.iterator(); + for (int i = 1; i <= rank.size(); i++) { + Reporter next = its.next(); + msg[i] = next.getName() + " : " + next.getAmount().toString(); + } + Integer all = rank.size(); + msg[all + 1] = Storage.getMsg("rep-stats").replaceAll("%amount%", all.toString()); + return msg; + } + public static String[] loadTextExe() { + Map res = Database.loadStatsExe(); + Set set = res.keySet(); + Iterator it = set.iterator(); + Set rank = new TreeSet<>(); + while (it.hasNext()) { + String name = it.next(); + Reporter rep = new Reporter(name, res.get(name)); + rank.add(rep); + } + String[] msg = new String[rank.size() + 2]; + msg[0] = Storage.getMsg("exe-rank"); + Iterator its = rank.iterator(); + for (int i = 1; i <= rank.size(); i++) { + Reporter next = its.next(); + msg[i] = next.getName() + " : " + next.getAmount().toString(); + } + Integer all = rank.size(); + msg[all + 1] = Storage.getMsg("rep-stats").replaceAll("%amount%", all.toString()); + return msg; + } +} diff --git a/target/classes/com/ilummc/bugrepgui/Storage.java b/target/classes/com/ilummc/bugrepgui/Storage.java new file mode 100644 index 0000000..0e1cf14 --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/Storage.java @@ -0,0 +1,143 @@ +package com.ilummc.bugrepgui; + +import java.io.File; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +public class Storage { + private static FileConfiguration configyml; + private static File folder; + static String serial; + static File lang; + static boolean debug; + static String format = "%serial%:\n serial: '#%serial%'\n name: '%player%'\n time: '%time%'\n file: '%path%'\n executed: false\n"; + private static FileConfiguration langyml; + // this is a temporary list for reporters + public static Map map = new HashMap<>(); + // this is a temporary list for ops who send back + public static Map back = new HashMap<>(); + + public static void init(FileConfiguration config, File thisfolder, String language) { + configyml = config; + folder = thisfolder; + lang = new File(thisfolder, language); + langyml = YamlConfiguration.loadConfiguration(lang); + debug = configyml.getBoolean("debug"); + Database.connect(); + } + + public static void reload() { + init(configyml, folder, "lang_" + configyml.getString("lang", "en") + ".yml"); + } + + public static void putMap(Bug bug) { + Storage.map.put(bug.getRepUUID(), bug); + } + + public static File getFolder() { + return folder; + } + + public static FileConfiguration getConfig() { + return configyml; + } + + public static FileConfiguration getLang() { + return langyml; + } + + public static String compile(String str) { + char[] cha = str.toCharArray(); + for (int i = 0; i < str.length(); i++) { + if (cha[i] == '&') { + if ((cha[i + 1] >= '0' && cha[i + 1] <= '9') || (cha[i + 1] >= 'a' && cha[i + 1] <= 'f')) { + cha[i] = '¡ì'; + } + } + } + return String.valueOf(cha); + } + + public static String getMsg(String msg) { + String str = langyml.getString(msg, "¡ìePlease check the lang_" + configyml.getString("lang", "xx") + ".yml!!!"); + return compile(str); + } + + public static List getMsgs(String msg) { + List list = langyml.getStringList(msg); + for (int i = 0; i < list.size(); i++) { + list.set(i, compile(list.get(i))); + } + return list; + } + + public static String getPrefix() { + return getMsg("prefix"); + } + + public static void send(Player player, String msg) { + player.sendMessage(getPrefix() + getMsg(msg)); + } + + public static void send(CommandSender player, String msg) { + player.sendMessage(getPrefix() + getMsg(msg)); + } + + public static void sends(Player player, String[] msg) { + for (int i = 0; i < msg.length; i++) { + if (msg[i] != null && msg[i] != "") + player.sendMessage(getPrefix() + msg[i]); + } + } + + public static void log(String msg) { + Bukkit.getLogger().info( + getLang().getString(getPrefix().replaceAll("¡ì", ""), "[BugRepGUI]") + getMsg(msg).replaceAll("¡ì", "")); + } + + public static void logExcept(Exception e) { + Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "[BugRepGUI] Err occured: " + e.getMessage()); + if (debug) { + e.printStackTrace(); + } + } + + public static void getHelp(Player player) { + List helpl = langyml.getStringList("help"); + String[] help = new String[helpl.size()]; + for (int i = 0; i < helpl.size(); i++) { + help[i] = compile(helpl.get(i)); + } + player.sendMessage(help); + } + + public static void getHelp(CommandSender player) { + List helpl = langyml.getStringList("help"); + String[] help = new String[helpl.size()]; + for (int i = 0; i < helpl.size(); i++) { + help[i] = compile(helpl.get(i)); + } + player.sendMessage(help); + } + + public static String transfer(String string) { + char[] ch = string.toCharArray(); + StringBuffer out = new StringBuffer(); + for (int i = 0; i < ch.length; i++) { + if (ch[i] == ' ') + out.append("\\s"); + else + out.append(String.valueOf(ch[i])); + } + return out.toString(); + } + +} diff --git a/target/classes/com/ilummc/bugrepgui/bungee/BungeeListener.java b/target/classes/com/ilummc/bugrepgui/bungee/BungeeListener.java new file mode 100644 index 0000000..cbe8533 --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/bungee/BungeeListener.java @@ -0,0 +1,19 @@ +package com.ilummc.bugrepgui.bungee; + +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.ChatEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; + +public class BungeeListener implements Listener { + @EventHandler + public void onChat(ChatEvent evt) { + if (!(evt.getSender() instanceof ProxiedPlayer)) { + return; + } + ProxiedPlayer p = (ProxiedPlayer) evt.getSender(); + if (Main.config.getString("stop-sign").equals(evt.getMessage())) { + GlobalNotify.notifyt(p); + } + } +} diff --git a/target/classes/com/ilummc/bugrepgui/bungee/GlobalNotify.java b/target/classes/com/ilummc/bugrepgui/bungee/GlobalNotify.java new file mode 100644 index 0000000..02669e9 --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/bungee/GlobalNotify.java @@ -0,0 +1,167 @@ +package com.ilummc.bugrepgui.bungee; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Collection; +import java.util.Iterator; + +import com.ilummc.bugrepgui.Storage; + +import net.md_5.bungee.api.connection.ProxiedPlayer; + +public class GlobalNotify { + private static Connection c = null; + private static Statement state = null; + public static String format = Main.lang.getString("join-notify"); + public static String format2 = Main.lang.getString("join-notify2"); + + public static void init() { + Thread post = new Thread(new Runnable() { + long spd = Main.config.getInt("check-speed"); + @Override + public void run() { + while (true) { + Collection l = Main.server.getPlayers(); + Iterator it = l.iterator(); + while(it.hasNext()){ + ProxiedPlayer p = it.next(); + check(p.getName()); + try { + Thread.sleep(spd); + } catch (InterruptedException e) { + Main.printException(e.getMessage()); + } + } + } + } + }); + post.start(); + } + + @SuppressWarnings("deprecation") + public static void notifyt(ProxiedPlayer player) { + Collection l = Main.server.getPlayers(); + Iterator it = l.iterator(); + while(it.hasNext()){ + ProxiedPlayer p = it.next(); + if(p.hasPermission("bugrepgui.notify")){ + p.sendMessage(Main.lang.getString("notify-op").replaceAll("%player%", player.getName())); + } + } + } + + @SuppressWarnings("deprecation") + public static void sends(String player, String[] msg){ + ProxiedPlayer p = Main.server.getPlayer(player); + for (int i = 0; i < msg.length; i++) { + if (msg[i] != null && msg[i] != "") + p.sendMessage(getPrefix() + msg[i]); + } + } + public static String getPrefix(){ + return Storage.compile(Main.lang.getString("prefix")); + } + public static void check(String player) { + connect(); + String sql = "SELECT SERIAL,EXEMSG,EXENAME FROM br_bug WHERE REPNAME = '" + player + + "' AND (EXECUTED = 1 OR EXECUTED = 2) AND BACK = 0 ORDER BY SERIAL ASC;"; + String send[] = new String[12]; + Integer[] ser = new Integer[6]; + try { + ResultSet res = state.executeQuery(sql); + int limit = 0; + while (((limit += 2) < 12) && res.next()) { + Integer serial = res.getInt("SERIAL"); + String msg = res.getString("EXEMSG"); + String exename = res.getString("EXENAME"); + String str = format.replaceAll("%serial%", serial.toString()).replaceAll("%exename%", exename) + .replaceAll("%reply%", msg); + String str2 = format2.replaceAll("%serial%", serial.toString()).replaceAll("%exename%", exename) + .replaceAll("%reply%", msg); + send[limit - 2] = Storage.compile(str); + send[limit - 1] = Storage.compile(str2); + ser[limit / 2] = serial; + } + res.close(); + } catch (SQLException e) { + Main.printException(e.getMessage()); + } + sends(player, send); + close(); + setback(ser); + } + + public static void setback(Integer[] ser) { + connect(); + for (int i = 1; i < (ser.length) && (ser[i] != null); i++) { + String sql2 = "UPDATE br_bug SET BACK = 1 WHERE SERIAL = " + ser[i].toString() + ";"; + try { + state.executeUpdate(sql2); + } catch (SQLException e) { + Main.printException(e.getMessage()); + } + } + close(); + } + + public static void setback(String ser) { + connect(); + String sql = "UPDATE br_bug SET BACK = 1 WHERE SERIAL = " + ser + ";"; + try { + state.executeUpdate(sql); + } catch (SQLException e) { + Main.printException(e.getMessage()); + } + close(); + } + + public static void connect() { + if (!conMySQL()) { + Main.log.warning("[BugRepGUI] MySQL connect failed!"); + Main.log.warning("**************************************************"); + Main.log.warning("[BugRepGUI] Must check the MySQL server settings!!"); + Main.log.warning("[BugRepGUI] Must check the MySQL server settings!!"); + Main.log.warning("**************************************************"); + } + + } + + public static void close() { + try { + state.close(); + state = null; + c.close(); + } catch (Exception e) { + Main.printException(e.getMessage()); + } + } + public static boolean conMySQL() { + String url = "jdbc:mysql://" + Main.config.getString("mysql-url") + ":" + + Main.config.getString("mysql-port") + "/" +Main.config.getString("mysql-db"); + try { + Class.forName("com.mysql.jdbc.Driver"); + c = DriverManager.getConnection(url, Main.config.getString("mysql-username"), + Main.config.getString("mysql-password")); + state = c.createStatement(); + } catch (SQLException e) { + Main.printException(e.getMessage()); + return false; + } catch (ClassNotFoundException e) { + Main.printException(e.getMessage()); + return false; + } + String sql = "CREATE TABLE IF NOT EXISTS br_bug " + "(SERIAL INT PRIMARY KEY AUTO_INCREMENT NOT NULL," + + " REPNAME TEXT NOT NULL, " + " REPTIME TEXT NOT NULL, " + + " REPMSG TEXT NOT NULL, " + " EXENAME TEXT, " + " EXETIME TEXT, " + + " EXEMSG TEXT, " + " EXECUTED INT, " + " BACK INT);"; + try { + state.executeUpdate(sql); + } catch (SQLException e) { + Main.printException(e.getMessage()); + } + return true; + } +} diff --git a/target/classes/com/ilummc/bugrepgui/bungee/Main.java b/target/classes/com/ilummc/bugrepgui/bungee/Main.java new file mode 100644 index 0000000..d12e881 --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/bungee/Main.java @@ -0,0 +1,84 @@ +package com.ilummc.bugrepgui.bungee; + +import java.io.File; +import java.io.IOException; +import java.nio.file.CopyOption; +import java.nio.file.Files; +import java.util.logging.Logger; + +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.plugin.Plugin; +import net.md_5.bungee.config.Configuration; +import net.md_5.bungee.config.ConfigurationProvider; +import net.md_5.bungee.config.YamlConfiguration; + +public class Main extends Plugin { + static Logger log; + static File folder; + static Configuration config; + static Configuration lang; + static File cf; + static File lf; + static ProxyServer server; + + public void onEnable() { + this.init(this.getDataFolder(), this.getLogger()); + this.getLogger().info("BungeeCord mode is on!"); + this.getProxy().getPluginManager().registerListener(this, new BungeeListener()); + } + + @Override + public void onDisable() { + try { + ConfigurationProvider.getProvider(YamlConfiguration.class).save(config, cf); + ConfigurationProvider.getProvider(YamlConfiguration.class).save(lang, lf); + } catch (Exception e) { + printException(e.getMessage()); + } + this.getLogger().info("BugRepGUI disabled! Thanks for chosing us!"); + } + + public void init(File f, Logger log) { + if (!this.getDataFolder().exists()) { + this.getDataFolder().mkdir(); + } + Main.log = log; + Main.folder = f; + Main.server = this.getProxy(); + cf = new File(f + "/config.yml"); + try { + if (!cf.exists()) { + Files.copy(getResourceAsStream("config.yml"), cf.toPath(), new CopyOption[0]); + } + reloadConfig(); + lf = new File(f + "/lang_"+config.getString("lang")+".yml"); + if (!lf.exists()) { + Files.copy(getResourceAsStream("lang_" + config.getString("lang") + ".yml"), lf.toPath(), + new CopyOption[0]); + } + reloadLang(); + } catch (Exception e) { + printException(e.getMessage()); + } + + } + + private void reloadConfig() { + try { + config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(cf); + } catch (IOException e) { + printException(e.getMessage()); + } + } + private void reloadLang() { + try { + lang = ConfigurationProvider.getProvider(YamlConfiguration.class).load(lf); + } catch (IOException e) { + printException(e.getMessage()); + } + } + + public static void printException(String msg) { + log.warning("Error: " + msg); + } +} diff --git a/target/classes/com/ilummc/bugrepgui/cmdExe.java b/target/classes/com/ilummc/bugrepgui/cmdExe.java new file mode 100644 index 0000000..3c58cb3 --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/cmdExe.java @@ -0,0 +1,116 @@ +package com.ilummc.bugrepgui; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class cmdExe implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (command.getName().equals("report")) { + if (sender instanceof Player) { + if (sender.hasPermission("bugrepgui.report")) { + Bug bug = new Bug((Player) sender); + Storage.putMap(bug); + Storage.send(sender, "input-bug-info"); + return true; + } else { + Storage.send(sender, "no-perm"); + return true; + } + } else { + Storage.send(sender, "must-player-run"); + return true; + } + } else { + if (args.length == 1 && args[0].equalsIgnoreCase("help")) { + Storage.getHelp(sender); + return true; + } + if (args.length == 1 && args[0].equalsIgnoreCase("view")) { + if (sender instanceof Player) { + if (sender.hasPermission("bugrepgui.view")) { + GUI.open((Player) sender, 1); + } else { + Storage.send(sender, "no-perm"); + } + return true; + } else { + Storage.send(sender, "must-player-run"); + } + return true; + } + if (args.length == 2 && args[0].equalsIgnoreCase("view") && args[1].equalsIgnoreCase("history")) { + if (sender instanceof Player) { + if (sender.hasPermission("bugrepgui.view")) { + GUI.openHistory((Player) sender, 1); + } else { + Storage.send(sender, "no-perm"); + } + return true; + } else { + Storage.send(sender, "must-player-run"); + } + } + if (args.length == 1 && args[0].equalsIgnoreCase("report")) { + if (sender instanceof Player) { + if (sender.hasPermission("bugrepgui.report")) { + Bug bug = new Bug((Player) sender); + Storage.putMap(bug); + Storage.send(sender, "input-bug-info"); + return true; + } else { + Storage.send(sender, "no-perm"); + return true; + } + } else { + Storage.send(sender, "must-player-run"); + return true; + } + } + if (args.length == 2 && args[0].equalsIgnoreCase("stats")) { + if (args[1].equalsIgnoreCase("text")) { + if (sender.hasPermission("bugrepgui.stats.text")) { + final CommandSender send = sender; + Thread t = new Thread(new Runnable() { + @Override + public void run() { + send.sendMessage(Stats.loadTextRep()); + try { + Thread.sleep(3000); + Storage.send(send, "wait"); + Thread.sleep(5000); + } catch (InterruptedException e) { + Storage.logExcept(e); + } + send.sendMessage(Stats.loadTextExe()); + } + }); + t.start(); + return true; + } else { + Storage.send(sender, "no-perm"); + return true; + } + } + if (args[1].equalsIgnoreCase("gui")) { + return true; + } + return true; + } + if (args.length == 1 && args[0].equalsIgnoreCase("reload")) { + if (sender.hasPermission("bugrepgui.reload")) { + Storage.reload(); + Storage.send(sender, "reload-suc"); + return true; + } else { + Storage.send(sender, "no-perm"); + } + } + Storage.getHelp(sender); + return true; + } + } +} diff --git a/target/classes/com/ilummc/bugrepgui/stats/Reporter.java b/target/classes/com/ilummc/bugrepgui/stats/Reporter.java new file mode 100644 index 0000000..f7432e2 --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/stats/Reporter.java @@ -0,0 +1,28 @@ +package com.ilummc.bugrepgui.stats; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; + +public class Reporter implements Comparable { + OfflinePlayer player; + Integer amount = 0; + + @SuppressWarnings("deprecation") + public Reporter(String player, Integer amount) { + this.player = Bukkit.getOfflinePlayer(player); + this.amount = amount; + } + + public Integer getAmount() { + return this.amount; + } + public String getName(){ + return this.player.getName(); + } + + @Override + public int compareTo(Reporter other) { + return this.amount - other.getAmount(); + } + +} diff --git a/target/classes/com/ilummc/bugrepgui/util/UpdateChecker.java b/target/classes/com/ilummc/bugrepgui/util/UpdateChecker.java new file mode 100644 index 0000000..4f821dc --- /dev/null +++ b/target/classes/com/ilummc/bugrepgui/util/UpdateChecker.java @@ -0,0 +1,48 @@ +package com.ilummc.bugrepgui.util; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +import org.bukkit.Bukkit; + +import com.ilummc.bugrepgui.Storage; + +public class UpdateChecker { + public static void check(String version, String web) { + final String ver = version; + final String webn = web; + Thread t = new Thread(new Runnable() { + @Override + public void run() { + Storage.log("checking-update"); + try { + HttpURLConnection c = (HttpURLConnection) new URL("http://www.spigotmc.org/api/general.php") + .openConnection(); + c.setDoOutput(true); + c.setRequestMethod("POST"); + c.getOutputStream() + .write(("key=98BE0FE67F88AB82B4C197FAF1DC3B69206EFDCC4D3B80FC83A00037510B99B4&resource=35119") + .getBytes("UTF-8")); + String oldVersion = ver; + String newVersion = new BufferedReader(new InputStreamReader(c.getInputStream())).readLine() + .replaceAll("[a-zA-Z ]", ""); + if (newVersion.equals(oldVersion)) { + Storage.log("no-new-version"); + } else { + String[] msg = Storage.getMsg("new-version").replaceAll("%version%", newVersion) + .replaceAll("%website%", webn).split("\\\\n"); + for (int i = 0; i < msg.length; i++) { + msg[i] = Storage.getPrefix() + Storage.compile(msg[i]); + } + Bukkit.getConsoleSender().sendMessage(msg); + } + } catch (Exception e) { + Storage.logExcept(e); + } + } + }); + t.start(); + } +} diff --git a/target/classes/config.yml b/target/classes/config.yml new file mode 100644 index 0000000..36b596c --- /dev/null +++ b/target/classes/config.yml @@ -0,0 +1,27 @@ +#BugReportGUI Configuration file +#Google is your friend :) +debug: false +check-update: true +#This could be sqlite, mysql +database: sqlite +#These are required if database is set to MySQL +mysql-url: 'localhost' +mysql-port: 3306 +mysql-username: '' +mysql-password: '' +mysql-db: '' +########################################################################### +#This controls the date format(such as CST or PST or EST) in the bug view # +# Here is a country list for you :) # +# https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 # +########################################################################### +locale: 'US' +lang: 'en' +#This controls the message when left click a bug +auto-sendback-msg: '&eThanks for your reporting' +#Report Alias +alias: 'r' +#If you use bungeecord, please set this to true and set database to mysql +use-bungee: false +#This controls the speed of checking sendback (in ms) +check-speed: 2000 \ No newline at end of file diff --git a/target/classes/lang.yml b/target/classes/lang.yml new file mode 100644 index 0000000..732813b --- /dev/null +++ b/target/classes/lang.yml @@ -0,0 +1,23 @@ +prefix: '§d[BugRepGUI] ' +rep-suc: '§eSuccessfully report bug serial #%serial%' +get-help: '§eUse §a/bug help §fto get help' +must-player-run: '§cThis command must be run as player!' +input-bug-info: '§ePlease input bug information. You can divide it in several parts if its too long, and send as§a ##bug§f for several times' +continue-input: '§eContinue input and use §a#end# §fto stop this input' +illegal-char: '§cYour input contains illegal character, please check and retry!' +not-complete: '§cPlease finish reporting first! Chat with§a #end#§c may help' +gui-name: '§cBug View' +last-page: '§eLast Page' +next-page: '§eNext Page' +executed: '§aThis one has been executed!' +usage-name: '§eUsage' +usage-lore: + - '§aUse left click to quick executed' + - '§aUse right click to send back some message to reporter' + - '§aUse shift+left click to ignore this' +send-back: '§ePlease type your message here' +send-back-continue: '§eYou can continue to send and use §a##stop §eto finish' +send-back-success: '§eYour message has been sent to this player' +no-perm: '§cYou dont have permission to do this!' +no-this-page: '§eNo mre pages!' +join-notify: '§bYuor bug §a#%serial% §bhas been accept! Reply - §f%msg%' \ No newline at end of file diff --git a/target/classes/lang_cn.yml b/target/classes/lang_cn.yml new file mode 100644 index 0000000..372d40f --- /dev/null +++ b/target/classes/lang_cn.yml @@ -0,0 +1,48 @@ +prefix: '&d[BugRepGUI] ' +rep-suc: '&eæˆåŠŸæäº¤,ç¼–å·#%serial%' +get-help: '&e使用&a/bug help &f获得更多帮助' +must-player-run: '&c这个命令必须由玩家使用!' +input-bug-info: '&eè¯·è¾“å…¥ä½ è¦æäº¤çš„å†…å®¹' +continue-input: '&e请继续æäº¤,ç§»åŠ¨ä»¥å®Œæˆæäº¤' +illegal-char: '&cä½ çš„è¾“å…¥å«æœ‰éžæ³•字符,è¯·æ£€æŸ¥å¹¶é‡æ–°æäº¤!' +not-complete: '&cè¯·å…ˆå®Œæˆæäº¤!' +gui-name: '&cæµè§ˆå…¨éƒ¨' +history-name: '&b历å²è®°å½•' +last-page: '&e上一页' +next-page: '&e下一页' +executed: '&a处ç†å®Œæˆ!' +usage-name: '&e使用说明' +usage-lore: + - '&a左键å•击å³å¯å¿«æ·å›žå¤' + - '&aå³é”®å•击,å‘é€ä½ çš„æ¶ˆæ¯ç»™æäº¤è€…' + - '&aSHIFT+å·¦é”®å¿½ç•¥è¿™æ¡æäº¤' +send-back: '&e请在这里输入你的消æ¯,这将å‘é€ç»™æäº¤è€…' +send-back-success: '&e你的消æ¯å·²ç»å‘é€ç»™äº†æäº¤è€…' +no-perm: '&c你没有æƒé™è¿™æ ·åš!' +no-this-page: '&e没有更多了!' +join-notify: '&bä½ æäº¤çš„ç¼–å· &a#%serial% &bçš„bug已由 %exename% 处ç†!' +join-notify2: '&b回å¤è‡ª %exename% - %reply%' +reload-suc: '&eæˆåŠŸé‡è½½BugRepGUI' +notify-op: '&e%player% æäº¤äº†æ–°çš„ä¿¡æ¯,ç¼–å· %serial%' +item-msg: '&b%method%&b自%exename%' +method-autoreply: '&e自动回å¤' +method-manualreply: '&e手动回å¤' +method-ignore: '&e忽略' +refresh: '&e刷新' +exit: '&e退出' +to-not-executed: '&e切æ¢è‡³æœªå¤„ç†è§†å›¾' +rep-rank: '&b===æäº¤æŽ’行 & 统计===' +rep-stats: '&b===å…± %amount% æ¡è®°å½•===' +exe-rank: '&b===å¤„ç†æŽ’è¡Œ & 统计===' +wait: '&a请等待5ç§’' +help: + - '&b======BugRepGUI======' + - '&ahttp://www.mcbbs.net/forum.php?mod=viewthread&tid=665729' + - '&a/bug view &f- 打开GUI颿¿æµè§ˆæ‰€æœ‰bug' + - '&a/bug view history &f- 查看历å²è®°å½•' + - '&a/bug stats text &f- 查看文字统计信æ¯' + - '&c (如果人数较多,这会消耗ä¸å°‘CPU)' + - '&a/bug report &f- æäº¤ä¸€æ¡bug' + - '&a/bug reload &f- é‡è½½BugRepGUI' + - '&a/report &f- æäº¤ä¸€æ¡bug' + - '&b======BugRepGUI======' \ No newline at end of file diff --git a/target/classes/lang_en.yml b/target/classes/lang_en.yml new file mode 100644 index 0000000..52ddb1c --- /dev/null +++ b/target/classes/lang_en.yml @@ -0,0 +1,48 @@ +prefix: '&d[BugRepGUI] ' +rep-suc: '&eSuccessfully report bug serial #%serial%' +get-help: '&eUse &a/bug help &fto get help' +must-player-run: '&cThis command must be run as player!' +input-bug-info: '&ePlease input bug information. You can divide it in several parts if its too long.' +continue-input: '&eContinue input and try to move to stop this input' +illegal-char: '&cYour input contains illegal character, please check and retry!' +not-complete: '&cPlease finish reporting first!' +gui-name: '&cBug View' +history-name: '&bHistory View' +last-page: '&eLast Page' +next-page: '&eNext Page' +executed: '&aThis one has been executed!' +usage-name: '&eUsage' +usage-lore: + - '&aUse left click to quick executed' + - '&aUse right click to send back some message to reporter' + - '&aUse shift+left click to ignore this' +send-back: '&ePlease type your message here, and this will send to reporter' +send-back-success: '&eYour message has been sent to this player' +no-perm: '&cYou dont have permission to do this!' +no-this-page: '&eNo mre pages!' +join-notify: '&bYour report No &a#%serial% &bhas been executed by %exename%!' +join-notify2: '&bReply from %exename% - %reply%' +reload-suc: '&eSuccessfully reload BugRepGUI' +notify-op: '&e%player% report a new message #%serial%' +item-msg: '&b%method%&b by %exename%' +method-autoreply: '&eAuto replied' +method-manualreply: '&eManually replied' +method-ignore: '&eIgnored' +refresh: '&eRefresh' +exit: '&eExit' +to-not-executed: '&eTurn to not executed bugs' +rep-rank: '&b===Reporter Rank & Stats===' +rep-stats: '&b===All %amount% records in total===' +exe-rank: '&b===Executer Rank & Stats===' +wait: '&aPlease wait for 5 seconds' +help: + - '&b======BugRepGUI======' + - '&ahttps://www.spigotmc.org/resources/bugreportgui.35119/' + - '&a/bug view &f- View all bugs' + - '&a/bug view history &f- View historic records' + - '&a/bug stats text &f- View text statistics' + - '&c (If player is too much, this will cost a lot.)' + - '&a/bug report &f- Report' + - '&a/bug reload &f- Reload plugin' + - '&a/report &f- Report a bug' + - '&b======BugRepGUI======' \ No newline at end of file diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml new file mode 100644 index 0000000..3bcf68b --- /dev/null +++ b/target/classes/plugin.yml @@ -0,0 +1,44 @@ +name: BugRepGUI +main: com.ilummc.bugrepgui.Main +version: 1.7 +author: IzzelAliz +website: https://www.spigotmc.org/resources/bugreportgui-better-than-rating.35119/ +commands: + bug: + description: /bug help for more help + usage: /bug help + bugrepgui: + description: /bugrepgui for more help + usage: /bugrepgui + +permissions: + bugrepgui.admin: + description: Gives access to all BugRepGUI commands + children: + bugrepgui.view: true + bugrepgui.execute: true + bugrepgui.sendback: true + bugrepgui.notify: true + bugrepgui.stats.text: true + bugrepgui.user: + description: Gives access to user commands + children: + bugrepgui.report: true + bugrepgui.view: + description: Allows you to have a view to all bugs + default: op + bugrepgui.sendback: + description: Allows you to send back to the reporter + default: op + bugrepgui.execute: + description: Allows you to execute a reported bug + default: op + bugrepgui.report: + description: Allows you to report an known bug + default: true + bugrepgui.notify: + description: Allows op to be notified when someone report a bug + default: op + bugrepgui.stats.text: + description: Allows you to view text statistics + default: op \ No newline at end of file diff --git a/target/classes/pom.xml b/target/classes/pom.xml deleted file mode 100644 index c3b2f91..0000000 --- a/target/classes/pom.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - 4.0.0 - - com.ilummc.bugrepgui - BugRepGUI - b - - - bungeecord-repo - https://oss.sonatype.org/content/repositories/snapshots - - - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - - - - - - . - ${basedir} - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - - default-compile - compile - - compile - - - - - 1.8 - 1.8 - GBK - - - - - - - - net.md-5 - bungeecord-api - 1.7-SNAPSHOT - jar - provided - - - - org.spigotmc - spigot-api - 1.8.3-R0.1-SNAPSHOT - provided - - - - org.bukkit - bukkit - 1.8.3-R0.1-SNAPSHOT - provided - - - \ No newline at end of file diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..2807c58 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Fri Jun 30 13:26:31 CST 2017 +version=b +groupId=com.ilummc.bugrepgui +artifactId=BugRepGUI