From 3dd3cd7d69fb2c4631497e3915ba78711c8f6530 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 16 Jan 2017 16:28:41 +0100 Subject: [PATCH] More GitHub Integration --- .../Slimefun/GitHub/GitHubConnector.java | 53 ++++++----- .../mrCookieSlime/Slimefun/SlimefunGuide.java | 56 +++++++++--- .../Slimefun/SlimefunStartup.java | 87 ++++++++++++++++--- .../Slimefun/URID/AutoSavingTask.java | 1 - 4 files changed, 149 insertions(+), 48 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/GitHub/GitHubConnector.java b/src/me/mrCookieSlime/Slimefun/GitHub/GitHubConnector.java index dae97ff12..86e0ba329 100644 --- a/src/me/mrCookieSlime/Slimefun/GitHub/GitHubConnector.java +++ b/src/me/mrCookieSlime/Slimefun/GitHub/GitHubConnector.java @@ -8,34 +8,51 @@ import java.io.IOException; import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; +import java.util.HashSet; +import java.util.Set; -import com.google.gson.JsonArray; import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import me.mrCookieSlime.Slimefun.SlimefunGuide; - -public class GitHubConnector { +public abstract class GitHubConnector { + + public static Set connectors = new HashSet(); private File file; public GitHubConnector() { - this.file = new File("plugins/Slimefun/cache/contributors.json");; + this.file = new File("plugins/Slimefun/cache/github/" + this.getFileName() + ".json"); + + this.pullFile(); + connectors.add(this); } + public abstract String getFileName(); + public abstract String getRepository(); + public abstract String getURLSuffix(); + public abstract void onSuccess(JsonElement element); + public abstract void onFailure(); + public void pullFile() { - System.out.println("[Slimefun - GitHub] Downloading 'contributors.json' from GitHub..."); + System.out.println("[Slimefun - GitHub] Downloading '" + this.getFileName() + ".json' from GitHub..."); try { - URL website = new URL("https://api.github.com/repos/TheBusyBiscuit/Slimefun4/contributors"); + URL website = new URL("https://api.github.com/repos/" + this.getRepository() + this.getURLSuffix()); ReadableByteChannel rbc = Channels.newChannel(website.openStream()); FileOutputStream fos = new FileOutputStream(file); fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); fos.close(); - System.out.println("[Slimefun - GitHub] Finished download: 'contributors.json'"); + System.out.println("[Slimefun - GitHub] Finished download: '" + this.getFileName() + ".json'"); + this.parseData(); } catch (IOException e) { System.err.println("[Slimefun - GitHub] ERROR - Could not connect to GitHub in time."); + + if (hasData()) { + this.parseData(); + } + else { + this.onFailure(); + } } } @@ -61,22 +78,12 @@ public class GitHubConnector { reader.close(); JsonElement element = new JsonParser().parse(full); - JsonArray array = element.getAsJsonArray(); - for (int i = 0; i < array.size(); i++) { - JsonObject object = array.get(i).getAsJsonObject(); - - String name = object.get("login").getAsString(); - String job = "&cAuthor"; - int commits = object.get("contributions").getAsInt(); - - if (!name.equals("invalid-email-address")) { - SlimefunGuide.contributors.add(new Contributor(name, job, commits)); - } - } - - } catch (IOException e) { + this.onSuccess(element); + } + catch (IOException e) { e.printStackTrace(); + this.onFailure(); } } } diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 1021f9fd6..6c5cfdd33 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -20,7 +20,6 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.ShapelessRecipe; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.material.MaterialData; import me.mrCookieSlime.CSCoreLibPlugin.PlayerRunnable; @@ -59,6 +58,8 @@ public class SlimefunGuide { public static int month = 0; public static List contributors = new ArrayList(); + public static int issues = 0; + public static int forks = 0; static boolean all_recipes = true; private static final int category_size = 36; @@ -83,8 +84,8 @@ public class SlimefunGuide { } }); - for (int i = 0; i < 9; i++) { - if (i != 4) { + for (int i = 0; i < 18; i++) { + if (i != 1 && i != 3 && i != 4 && i != 5) { menu.addItem(i, new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE, (byte) 7), " ")); menu.addMenuClickHandler(i, new MenuClickHandler() { @@ -95,8 +96,8 @@ public class SlimefunGuide { }); } else { - menu.addItem(4, new CustomItem(new MaterialData(Material.EMERALD), "&7\u21E6 Back to normal view")); - menu.addMenuClickHandler(4, new MenuClickHandler() { + menu.addItem(1, new CustomItem(new MaterialData(Material.EMERALD), "&7\u21E6 Back to normal view")); + menu.addMenuClickHandler(1, new MenuClickHandler() { @Override public boolean onClick(Player p, int arg1, ItemStack arg2, ClickAction arg3) { @@ -112,8 +113,8 @@ public class SlimefunGuide { } } - menu.addItem(9, new CustomItem(new MaterialData(SlimefunManager.isItemSimiliar(guide, SlimefunGuide.getItem(true), true) ? Material.BOOK_AND_QUILL: Material.CHEST), "&7Guide Layout: &e" + (SlimefunManager.isItemSimiliar(guide, SlimefunGuide.getItem(true), true) ? "Book": "Chest"), "", "&7\u21E8 Click to change to: &b" + (SlimefunManager.isItemSimiliar(guide, SlimefunGuide.getItem(true), true) ? "Chest": "Book"))); - menu.addMenuClickHandler(9, new MenuClickHandler() { + menu.addItem(18, new CustomItem(new MaterialData(SlimefunManager.isItemSimiliar(guide, SlimefunGuide.getItem(true), true) ? Material.BOOK_AND_QUILL: Material.CHEST), "&7Guide Layout: &e" + (SlimefunManager.isItemSimiliar(guide, SlimefunGuide.getItem(true), true) ? "Book": "Chest"), "", "&7\u21E8 Click to change to: &b" + (SlimefunManager.isItemSimiliar(guide, SlimefunGuide.getItem(true), true) ? "Chest": "Book"))); + menu.addMenuClickHandler(18, new MenuClickHandler() { @Override public boolean onClick(Player p, int arg1, ItemStack arg2, ClickAction arg3) { @@ -129,8 +130,8 @@ public class SlimefunGuide { } }); - menu.addItem(10, new CustomItem(new MaterialData(Material.COMPASS), "&7Credits", "", "&7\u21E8 Click to see the people behind this Plugin")); - menu.addMenuClickHandler(10, new MenuClickHandler() { + menu.addItem(3, new CustomItem(new MaterialData(Material.BOOK_AND_QUILL), "&aCredits", "", "&7\u21E8 Click to see the people behind this Plugin")); + menu.addMenuClickHandler(3, new MenuClickHandler() { @Override public boolean onClick(Player p, int arg1, ItemStack arg2, ClickAction arg3) { @@ -139,9 +140,39 @@ public class SlimefunGuide { } }); + try { + menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&eSource Code", "", "&7Forks: &e" + forks, "", "&7&oSlimefun 4 is a community project,", "&7&othe source code is available on GitHub", "&7&oand if you want to keep this Plugin alive,", "&7&othen please consider contributing to it", "", "&7\u21E8 Click to go to GitHub")); + menu.addMenuClickHandler(4, new MenuClickHandler() { + + @Override + public boolean onClick(Player p, int arg1, ItemStack arg2, ClickAction arg3) { + p.closeInventory(); + p.sendMessage(""); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&ohttps://github.com/TheBusyBiscuit/Slimefun4")); + p.sendMessage(""); + return false; + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + + menu.addItem(5, new CustomItem(new MaterialData(Material.REDSTONE), "&4Bug Tracker", "", "&7Unsolved Issues: &a" + issues, "", "&7\u21E8 Click to go to the Slimefun Bug Tracker")); + menu.addMenuClickHandler(5, new MenuClickHandler() { + + @Override + public boolean onClick(Player p, int arg1, ItemStack arg2, ClickAction arg3) { + p.closeInventory(); + p.sendMessage(""); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&ohttps://github.com/TheBusyBiscuit/Slimefun4/issues")); + p.sendMessage(""); + return false; + } + }); + for (int i = 0; i < 9; i++) { - menu.addItem(18 + i, new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE, (byte) 7), " ")); - menu.addMenuClickHandler(18 + i, new MenuClickHandler() { + menu.addItem(27 + i, new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE, (byte) 7), " ")); + menu.addMenuClickHandler(27 + i, new MenuClickHandler() { @Override public boolean onClick(Player arg0, int arg1, ItemStack arg2, ClickAction arg3) { @@ -200,7 +231,7 @@ public class SlimefunGuide { for (Contributor contributor: contributors) { ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); - SkullMeta meta = (SkullMeta) skull.getItemMeta(); + ItemMeta meta = skull.getItemMeta(); meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&a" + contributor.name)); if (contributor.commits > 0) { @@ -212,7 +243,6 @@ public class SlimefunGuide { meta.setLore(Arrays.asList("", ChatColor.translateAlternateColorCodes('&', "&7Role: &r" + contributor.job))); } - meta.setOwner(contributor.name); skull.setItemMeta(meta); menu.addItem(index, skull); diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java index 532c2976b..da99296a3 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java @@ -31,6 +31,10 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.PluginUtils; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; @@ -168,7 +172,7 @@ public class SlimefunStartup extends JavaPlugin { if (!new File("plugins/Slimefun/scripts").exists()) new File("plugins/Slimefun/scripts").mkdirs(); if (!new File("plugins/Slimefun/generators").exists()) new File("plugins/Slimefun/generators").mkdirs(); if (!new File("plugins/Slimefun/error-reports").exists()) new File("plugins/Slimefun/error-reports").mkdirs(); - if (!new File("plugins/Slimefun/cache").exists()) new File("plugins/Slimefun/cache").mkdirs(); + if (!new File("plugins/Slimefun/cache/github").exists()) new File("plugins/Slimefun/cache/github").mkdirs(); SlimefunManager.plugin = this; @@ -197,18 +201,78 @@ public class SlimefunStartup extends JavaPlugin { // Connecting to GitHub... - GitHubConnector github = new GitHubConnector(); + new GitHubConnector() { + + @Override + public void onSuccess(JsonElement element) { + JsonArray array = element.getAsJsonArray(); + + for (int i = 0; i < array.size(); i++) { + JsonObject object = array.get(i).getAsJsonObject(); + + String name = object.get("login").getAsString(); + String job = "&cAuthor"; + int commits = object.get("contributions").getAsInt(); + + if (!name.equals("invalid-email-address")) { + SlimefunGuide.contributors.add(new Contributor(name, job, commits)); + } + } + SlimefunGuide.contributors.add(new Contributor("AquaLazuryt", "&6Lead Head Artist", 0)); + } + + @Override + public void onFailure() { + SlimefunGuide.contributors.add(new Contributor("TheBusyBiscuit", "&cAuthor", 3)); + SlimefunGuide.contributors.add(new Contributor("John000708", "&cAuthor", 2)); + SlimefunGuide.contributors.add(new Contributor("AquaLazuryt", "&6Lead Head Artist", 0)); + } + + @Override + public String getRepository() { + return "TheBusyBiscuit/Slimefun4"; + } + + @Override + public String getFileName() { + return "contributors"; + } + + @Override + public String getURLSuffix() { + return "/contributors"; + } + }; - github.pullFile(); + new GitHubConnector() { + + @Override + public void onSuccess(JsonElement element) { + JsonObject object = element.getAsJsonObject(); + SlimefunGuide.issues = object.get("open_issues_count").getAsInt(); + SlimefunGuide.forks = object.get("forks").getAsInt(); + } + + @Override + public void onFailure() { + } + + @Override + public String getRepository() { + return "TheBusyBiscuit/Slimefun4"; + } + + @Override + public String getFileName() { + return "repo"; + } + + @Override + public String getURLSuffix() { + return ""; + } + }; - if (github.hasData()) { - github.parseData(); - } - else { - SlimefunGuide.contributors.add(new Contributor("TheBusyBiscuit", "&cAuthor", 1)); - } - - SlimefunGuide.contributors.add(new Contributor("AquaLazuryt", "&6Lead Head Artist", 0)); // All Slimefun Listeners new ArmorListener(this); @@ -553,6 +617,7 @@ public class SlimefunStartup extends JavaPlugin { TickerTask.block_timings = null; OreGenSystem.map = null; SlimefunGuide.contributors = null; + GitHubConnector.connectors = null; for (Player p: Bukkit.getOnlinePlayers()) { p.closeInventory(); diff --git a/src/me/mrCookieSlime/Slimefun/URID/AutoSavingTask.java b/src/me/mrCookieSlime/Slimefun/URID/AutoSavingTask.java index 48babb7ff..c40f9369b 100644 --- a/src/me/mrCookieSlime/Slimefun/URID/AutoSavingTask.java +++ b/src/me/mrCookieSlime/Slimefun/URID/AutoSavingTask.java @@ -33,7 +33,6 @@ public class AutoSavingTask implements Runnable { storage.save(false); } } - } }