From d5b6981ec71a287c88383102a3ec7f7abc61df27 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 10 Aug 2015 07:45:50 +0200 Subject: [PATCH] Bug fixes - Commented out WIP code which caused errors - Other fixes --- .metadata/.log | 22 + .metadata/.mylyn/.tasks.xml.zip | Bin 250 -> 250 bytes .metadata/.mylyn/tasks.xml.zip | Bin 250 -> 250 bytes .../2a/a0e2f548223f00151fb6edb183f9215c | 265 +++++++++++ .../59/e0223e91203f00151fb6edb183f9215c | 425 +++++++++++++++++ .../69/c01a2ee6213f00151fb6edb183f9215c | 426 +++++++++++++++++ .../a1/c08d0bfa213f00151fb6edb183f9215c | 427 ++++++++++++++++++ .../c/b022c7a5213f00151fb6edb183f9215c | 71 +++ .../c1/408ae8d7213f00151fb6edb183f9215c | 425 +++++++++++++++++ .../ea/405d99db213f00151fb6edb183f9215c | 426 +++++++++++++++++ .../f8/50673234203f00151fb6edb183f9215c | 265 +++++++++++ .../RemoteSystemsTempFiles/.markers.snap | Bin 0 -> 32 bytes .../RemoteSystemsTempFiles/.syncinfo.snap | Bin 0 -> 32 bytes .../TheButtonAutoFlair/.markers.snap | Bin 0 -> 2983 bytes .../TheButtonAutoFlair/.syncinfo.snap | Bin 0 -> 32 bytes .../org.eclipse.jdt.core/state.dat | Bin 172823 -> 0 bytes .../.root/.markers.snap | Bin 0 -> 32 bytes .../.safetable/org.eclipse.core.resources | Bin 1760 -> 3407 bytes .../.plugins/org.eclipse.core.resources/.snap | Bin 0 -> 1349 bytes .../org.eclipse.e4.workbench/workbench.xmi | 110 ++--- .../org.eclipse.jdt.core/1508644233.index | Bin 17197 -> 17035 bytes .../externalLibsTimeStamps | Bin 1593 -> 1593 bytes .../org.eclipse.jdt.core/savedIndexNames.txt | 6 +- .../org.eclipse.jdt.ui/jdt-images/0.png | Bin 210 -> 478 bytes .../org.eclipse.jdt.ui/jdt-images/1.png | Bin 159 -> 283 bytes .../org.eclipse.jdt.ui/jdt-images/3.png | Bin 281 -> 147 bytes .../org.eclipse.jdt.ui/jdt-images/4.png | Bin 194 -> 0 bytes .../org.eclipse.jdt.ui/jdt-images/5.png | Bin 283 -> 0 bytes .../org.eclipse.jdt.ui/jdt-images/6.png | Bin 238 -> 0 bytes .../org.eclipse.ui.workbench/workingsets.xml | 1 + .../tk/sznp/thebuttonautoflair/Commands.class | Bin 7601 -> 7677 bytes .../thebuttonautoflair/PlayerListener.class | Bin 4760 -> 4763 bytes .../sznp/thebuttonautoflair/PluginMain.class | Bin 14629 -> 13359 bytes .../tk/sznp/thebuttonautoflair/Commands.java | 4 +- .../thebuttonautoflair/PlayerListener.java | 2 +- .../sznp/thebuttonautoflair/PluginMain.java | 12 +- 36 files changed, 2821 insertions(+), 66 deletions(-) create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/2a/a0e2f548223f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/59/e0223e91203f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/69/c01a2ee6213f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/a1/c08d0bfa213f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c/b022c7a5213f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/c1/408ae8d7213f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/ea/405d99db213f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f8/50673234203f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/org.eclipse.jdt.core/state.dat create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.snap delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/4.png delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/6.png diff --git a/.metadata/.log b/.metadata/.log index bda18fc..79840e4 100644 --- a/.metadata/.log +++ b/.metadata/.log @@ -792,3 +792,25 @@ user global configuration and to define the default location to store repositori not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and EGit might behave differently since they see different configuration options. This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. +!SESSION 2015-08-10 07:20:59.956 ----------------------------------------------- +eclipse.buildId=M20130204-1200 +java.version=1.8.0_45 +java.vendor=Oracle Corporation +BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=hu_HU +Framework arguments: -product org.eclipse.epp.package.jee.product +Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product + +!ENTRY org.eclipse.egit.ui 2 0 2015-08-10 07:22:18.883 +!MESSAGE Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level +Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory. +The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in +this system level configuration. The Git installation location can be configured on the +Team > Git > Configuration preference page's 'System Settings' tab. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. + +!ENTRY org.eclipse.egit.ui 2 0 2015-08-10 07:22:18.926 +!MESSAGE Warning: The environment variable HOME is not set. The following directory will be used to store the Git +user global configuration and to define the default location to store repositories: 'C:\Users\Norbi'. If this is +not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and +EGit might behave differently since they see different configuration options. +This warning can be switched off on the Team > Git > Confirmations and Warnings preference page. diff --git a/.metadata/.mylyn/.tasks.xml.zip b/.metadata/.mylyn/.tasks.xml.zip index 0bf1e7ee9eca3ba09bd37a6a48e8760eeeae09a7..4a143bd18aafbf9d068d2585df3da8460b662dee 100644 GIT binary patch delta 26 gcmeyx_=}Mzz?+#xgn@&DgMr0*BF`!&Ai2W{08+sQBLDyZ delta 26 gcmeyx_=}Mzz?+#xgn@&DgJCnnM4nYlKyrr@09tnk3jhEB diff --git a/.metadata/.mylyn/tasks.xml.zip b/.metadata/.mylyn/tasks.xml.zip index aaeae30096ab3351f6ba3757b2671e0f83bf9562..111b56511a556135e58e240fdd0f1aefbb34061a 100644 GIT binary patch delta 26 gcmeyx_=}Mzz?+#xgn@&DgCW6oBF`!&Ai2W{09c&{-v9sr delta 26 gcmeyx_=}Mzz?+#xgn@&DgF%^jBF`!&Ai2W{08ya@@c;k- diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/2a/a0e2f548223f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/2a/a0e2f548223f00151fb6edb183f9215c new file mode 100644 index 0000000..cb3a610 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/2a/a0e2f548223f00151fb6edb183f9215c @@ -0,0 +1,265 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(p.Flair==null) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AppendPlayerDisplayFlair(p, player); + p.AcceptedFlair=true; //2015.08.08. + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + //p.Flair="§7(non-pr.)§r"; + SetPlayerFlair(player, p, "§7(non-pr.)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); + break; + } + //p.Flair="§r(can't press)§r"; + SetPlayerFlair(player, p, "§r(can't pr.)§r"); + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + if(mp.Flair!=null) + { + //String flair=mp.Flair; + //PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + //String msg="§6Reloaded config file.§r"; + //SendMessage(player, msg); //2015.08.09. + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName()=="NorbiPeti") + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + System.out.println(message); + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§6The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/59/e0223e91203f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/59/e0223e91203f00151fb6edb183f9215c new file mode 100644 index 0000000..ceca4ee --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/59/e0223e91203f00151fb6edb183f9215c @@ -0,0 +1,425 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; + +public class PluginMain extends JavaPlugin +{ //Translated to Java: 2015.07.15. + //A user, which flair isn't obtainable: + //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + private static PluginMain Instance; + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + Instance=this; //2015.08.08. + LoadFiles(false); //2015.08.09. + Runnable r=new Runnable(){public void run(){ThreadMethod();}}; + Thread t=new Thread(r); + t.start(); + } + Boolean stop=false; + // Fired when plugin is disabled + @Override + public void onDisable() + { + SaveFiles(); //2015.08.09. + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + while(!stop) + { + try + { + String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); + for(Object obj : json) + { + JSONObject item = (JSONObject)obj; + String author=item.getJSONObject("data").getString("author"); + String ign=item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if(start==-1) + continue; //2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end=ign.indexOf('\n', start); //2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + if(HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); + String flair; + if(flairdata.length > 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + else + flair = "non-presser"; + String flairclass; + if(flairdata.length>2) + flairclass = flairdata[2]; + else + flairclass="unknown"; + SetFlair(ign, flair, flairclass, author); + } + Thread.sleep(10000); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + } + + public static Exception LastException; //2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, IOException + { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + return p.Flair!=null; //2015.08.08. + } + + public void SetFlair(String playername, String text, String flairclass, String username) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + String finalflair; + p.FlairDecided=true; + switch(flairclass) + { + case "press-1": + finalflair="§c("+text+")§r"; + break; + case "press-2": + finalflair="§6("+text+")§r"; + break; + case "press-3": + finalflair="§e("+text+")§r"; + break; + case "press-4": + finalflair="§a("+text+")§r"; + break; + case "press-5": + finalflair="§9("+text+")§r"; + break; + case "press-6": + finalflair="§5("+text+")§r"; + break; + case "no-press": + finalflair="§7(non-pr.)§r"; + break; + case "cheater": + finalflair="§5("+text+")§r"; + break; + case "cant-press": //2015.08.08. + finalflair="§r(can't press)§r"; + break; + case "undecided": //2015.08.09. + p.FlairDecided=false; + finalflair=""; + break; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + p.Flair=finalflair; //2015.08.08. + p.UserName=username; //2015.08.08. + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. + { + if(player.getName().equals(playername)) + { + //AppendPlayerDisplayFlair(player, username, finalflair); + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. + return flair==null ? "" : flair; + } + + //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. + { + + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) + { + AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. + if(!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. + } + else + p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); + } + + private static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getName(); //2015.08.08. + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i GetPlayers() + { + return Instance.getServer().getOnlinePlayers(); + } + + public static void LoadFiles(boolean reload) //<-- 2015.08.09. + { + if(reload) + { //2015.08.09. + System.out.println("Auto-flair plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + } + System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. + try { + File file=new File("flairsaccepted.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + //System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("flairsignored.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("autoflairconfig.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + TownColors.put(s[0], s[1]); + } + br.close(); + } + file=new File("customflairs.txt"); //2015.08.09. + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]).Flair=s[1]; //2015.08.09. + } + br.close(); + } + //throw new IOException("Test"); //2015.08.09. + System.out.println("Auto-flair plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static void SaveFiles() //<-- 2015.08.09. + { + try + { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + try { + File file=new File("flairsaccepted.txt"); + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.AcceptedFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + file=new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.IgnoredFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static boolean RemoveLineFromFile(String file, String line) + { //2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if(!inputFile.exists()) + return true; //2015.08.10. + + try { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + //if(trimmedLine.equals(lineToRemove)) continue; + if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + return tempFile.renameTo(inputFile); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/69/c01a2ee6213f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/69/c01a2ee6213f00151fb6edb183f9215c new file mode 100644 index 0000000..6ce3c66 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/69/c01a2ee6213f00151fb6edb183f9215c @@ -0,0 +1,426 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; + +public class PluginMain extends JavaPlugin +{ //Translated to Java: 2015.07.15. + //A user, which flair isn't obtainable: + //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + private static PluginMain Instance; + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + Instance=this; //2015.08.08. + LoadFiles(false); //2015.08.09. + Runnable r=new Runnable(){public void run(){ThreadMethod();}}; + Thread t=new Thread(r); + t.start(); + } + Boolean stop=false; + // Fired when plugin is disabled + @Override + public void onDisable() + { + SaveFiles(); //2015.08.09. + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + while(!stop) + { + try + { + String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); + for(Object obj : json) + { + JSONObject item = (JSONObject)obj; + String author=item.getJSONObject("data").getString("author"); + String ign=item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if(start==-1) + continue; //2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end=ign.indexOf('\n', start); //2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + if(HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); + String flair; + if(flairdata.length > 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + else + flair = "non-presser"; + String flairclass; + if(flairdata.length>2) + flairclass = flairdata[2]; + else + flairclass="unknown"; + SetFlair(ign, flair, flairclass, author); + } + Thread.sleep(10000); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + } + + public static Exception LastException; //2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, IOException + { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + return p.Flair!=null; //2015.08.08. + } + + public void SetFlair(String playername, String text, String flairclass, String username) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + String finalflair; + p.FlairDecided=true; + switch(flairclass) + { + case "press-1": + finalflair="§c("+text+")§r"; + break; + case "press-2": + finalflair="§6("+text+")§r"; + break; + case "press-3": + finalflair="§e("+text+")§r"; + break; + case "press-4": + finalflair="§a("+text+")§r"; + break; + case "press-5": + finalflair="§9("+text+")§r"; + break; + case "press-6": + finalflair="§5("+text+")§r"; + break; + case "no-press": + finalflair="§7(non-pr.)§r"; + break; + case "cheater": + finalflair="§5("+text+")§r"; + break; + case "cant-press": //2015.08.08. + finalflair="§r(can't press)§r"; + break; + case "undecided": //2015.08.09. + p.FlairDecided=false; + finalflair=""; + break; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + p.Flair=finalflair; //2015.08.08. + p.UserName=username; //2015.08.08. + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. + { + if(player.getName().equals(playername)) + { + //AppendPlayerDisplayFlair(player, username, finalflair); + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. + return flair==null ? "" : flair; + } + + //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. + { + + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) + { + AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. + if(!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. + } + else + p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); + } + + private static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + /*String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getName(); //2015.08.08. + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i GetPlayers() + { + return Instance.getServer().getOnlinePlayers(); + } + + public static void LoadFiles(boolean reload) //<-- 2015.08.09. + { + if(reload) + { //2015.08.09. + System.out.println("Auto-flair plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + } + System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. + try { + File file=new File("flairsaccepted.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + //System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("flairsignored.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("autoflairconfig.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //<-- 2015.08.10. + TownColors.put(s[0], s[1]); + } + br.close(); + } + file=new File("customflairs.txt"); //2015.08.09. + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]).Flair=s[1]; //2015.08.09. + } + br.close(); + } + //throw new IOException("Test"); //2015.08.09. + System.out.println("Auto-flair plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static void SaveFiles() //<-- 2015.08.09. + { + try + { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + try { + File file=new File("flairsaccepted.txt"); + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.AcceptedFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + file=new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.IgnoredFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static boolean RemoveLineFromFile(String file, String line) + { //2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if(!inputFile.exists()) + return true; //2015.08.10. + + try { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + //if(trimmedLine.equals(lineToRemove)) continue; + if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + return tempFile.renameTo(inputFile); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/a1/c08d0bfa213f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/a1/c08d0bfa213f00151fb6edb183f9215c new file mode 100644 index 0000000..b4e646d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/a1/c08d0bfa213f00151fb6edb183f9215c @@ -0,0 +1,427 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; + +public class PluginMain extends JavaPlugin +{ //Translated to Java: 2015.07.15. + //A user, which flair isn't obtainable: + //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + private static PluginMain Instance; + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + Instance=this; //2015.08.08. + LoadFiles(false); //2015.08.09. + Runnable r=new Runnable(){public void run(){ThreadMethod();}}; + Thread t=new Thread(r); + t.start(); + } + Boolean stop=false; + // Fired when plugin is disabled + @Override + public void onDisable() + { + SaveFiles(); //2015.08.09. + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + while(!stop) + { + try + { + String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); + for(Object obj : json) + { + JSONObject item = (JSONObject)obj; + String author=item.getJSONObject("data").getString("author"); + String ign=item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if(start==-1) + continue; //2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end=ign.indexOf('\n', start); //2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + if(HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); + String flair; + if(flairdata.length > 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + else + flair = "non-presser"; + String flairclass; + if(flairdata.length>2) + flairclass = flairdata[2]; + else + flairclass="unknown"; + SetFlair(ign, flair, flairclass, author); + } + Thread.sleep(10000); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + } + + public static Exception LastException; //2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, IOException + { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + return p.Flair!=null; //2015.08.08. + } + + public void SetFlair(String playername, String text, String flairclass, String username) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + String finalflair; + p.FlairDecided=true; + switch(flairclass) + { + case "press-1": + finalflair="§c("+text+")§r"; + break; + case "press-2": + finalflair="§6("+text+")§r"; + break; + case "press-3": + finalflair="§e("+text+")§r"; + break; + case "press-4": + finalflair="§a("+text+")§r"; + break; + case "press-5": + finalflair="§9("+text+")§r"; + break; + case "press-6": + finalflair="§5("+text+")§r"; + break; + case "no-press": + finalflair="§7(non-pr.)§r"; + break; + case "cheater": + finalflair="§5("+text+")§r"; + break; + case "cant-press": //2015.08.08. + finalflair="§r(can't press)§r"; + break; + case "undecided": //2015.08.09. + p.FlairDecided=false; + finalflair=""; + break; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + p.Flair=finalflair; //2015.08.08. + p.UserName=username; //2015.08.08. + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. + { + if(player.getName().equals(playername)) + { + //AppendPlayerDisplayFlair(player, username, finalflair); + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. + return flair==null ? "" : flair; + } + + //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. + { + + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) + { + AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. + if(!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. + } + else + p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); + } + + private static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + /*String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getName(); //2015.08.08. + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i GetPlayers() + { + return Instance.getServer().getOnlinePlayers(); + } + + public static void LoadFiles(boolean reload) //<-- 2015.08.09. + { + if(reload) + { //2015.08.09. + System.out.println("Auto-flair plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + } + System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. + try { + File file=new File("flairsaccepted.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + //System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("flairsignored.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("autoflairconfig.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //<-- 2015.08.10. + TownColors.put(s[0], s[1]); + } + br.close(); + } + file=new File("customflairs.txt"); //2015.08.09. + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) //2015.08.10. + MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]).Flair=s[1]; //2015.08.09. + } + br.close(); + } + //throw new IOException("Test"); //2015.08.09. + System.out.println("Auto-flair plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static void SaveFiles() //<-- 2015.08.09. + { + try + { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + try { + File file=new File("flairsaccepted.txt"); + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.AcceptedFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + file=new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.IgnoredFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static boolean RemoveLineFromFile(String file, String line) + { //2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if(!inputFile.exists()) + return true; //2015.08.10. + + try { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + //if(trimmedLine.equals(lineToRemove)) continue; + if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + return tempFile.renameTo(inputFile); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c/b022c7a5213f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/c/b022c7a5213f00151fb6edb183f9215c new file mode 100644 index 0000000..dc0378b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c/b022c7a5213f00151fb6edb183f9215c @@ -0,0 +1,71 @@ +package tk.sznp.thebuttonautoflair; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import de.inventivegames.TellRawAutoMessage.Reflection; + +public class PlayerListener implements Listener +{ //2015.07.16. + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player p=event.getPlayer(); + MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); //2015.08.08. + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(p.getName()); //2015.08.08. + if(mp.Flair!=null) + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + else + { //2015.07.20. + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your Minecraft name to \"},{\"text\":\"[this thread.]\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread§r\"}]}}}]"; + sendRawMessage(p, json); + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) + { + MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event.getPlayer().getName()); + String flair=player.Flair; //2015.08.08. + if(flair==null || !player.AcceptedFlair) + flair=""; //2015.08.08. + String message=event.getMessage(); //2015.08.08. + /*for(Player p : PluginMain.GetPlayers()) + { //2015.08.08. + message.replaceAll(p.getName(), ) + }*/ + event.setFormat(event.getFormat().substring(0, event.getFormat().indexOf(">"))+flair+"> "+message); //2015.08.08. + } + + private static Class nmsChatSerializer = Reflection.getNMSClass("IChatBaseComponent$ChatSerializer"); + private static Class nmsPacketPlayOutChat = Reflection.getNMSClass("PacketPlayOutChat"); + public static void sendRawMessage(Player player, String message) + { + try { + System.out.println("1"); + Object handle = Reflection.getHandle(player); + System.out.println("2"); + Object connection = Reflection.getField(handle.getClass(), "playerConnection").get(handle); + System.out.println("3"); + Object serialized = Reflection.getMethod(nmsChatSerializer, "a", String.class).invoke(null, message); + System.out.println("4"); + Object packet = nmsPacketPlayOutChat.getConstructor(Reflection.getNMSClass("IChatBaseComponent")).newInstance(serialized); + System.out.println("5"); + Reflection.getMethod(connection.getClass(), "sendPacket").invoke(connection, packet); + System.out.println("6"); + } catch (Exception e) { + e.printStackTrace(); + PluginMain.LastException=e; //2015.08.09. + } + } + +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/c1/408ae8d7213f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/c1/408ae8d7213f00151fb6edb183f9215c new file mode 100644 index 0000000..f9b9fd3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/c1/408ae8d7213f00151fb6edb183f9215c @@ -0,0 +1,425 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; + +public class PluginMain extends JavaPlugin +{ //Translated to Java: 2015.07.15. + //A user, which flair isn't obtainable: + //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + private static PluginMain Instance; + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + Instance=this; //2015.08.08. + LoadFiles(false); //2015.08.09. + Runnable r=new Runnable(){public void run(){ThreadMethod();}}; + Thread t=new Thread(r); + t.start(); + } + Boolean stop=false; + // Fired when plugin is disabled + @Override + public void onDisable() + { + SaveFiles(); //2015.08.09. + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + while(!stop) + { + try + { + String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); + for(Object obj : json) + { + JSONObject item = (JSONObject)obj; + String author=item.getJSONObject("data").getString("author"); + String ign=item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if(start==-1) + continue; //2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end=ign.indexOf('\n', start); //2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + if(HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); + String flair; + if(flairdata.length > 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + else + flair = "non-presser"; + String flairclass; + if(flairdata.length>2) + flairclass = flairdata[2]; + else + flairclass="unknown"; + SetFlair(ign, flair, flairclass, author); + } + Thread.sleep(10000); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + } + + public static Exception LastException; //2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, IOException + { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + return p.Flair!=null; //2015.08.08. + } + + public void SetFlair(String playername, String text, String flairclass, String username) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + String finalflair; + p.FlairDecided=true; + switch(flairclass) + { + case "press-1": + finalflair="§c("+text+")§r"; + break; + case "press-2": + finalflair="§6("+text+")§r"; + break; + case "press-3": + finalflair="§e("+text+")§r"; + break; + case "press-4": + finalflair="§a("+text+")§r"; + break; + case "press-5": + finalflair="§9("+text+")§r"; + break; + case "press-6": + finalflair="§5("+text+")§r"; + break; + case "no-press": + finalflair="§7(non-pr.)§r"; + break; + case "cheater": + finalflair="§5("+text+")§r"; + break; + case "cant-press": //2015.08.08. + finalflair="§r(can't press)§r"; + break; + case "undecided": //2015.08.09. + p.FlairDecided=false; + finalflair=""; + break; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + p.Flair=finalflair; //2015.08.08. + p.UserName=username; //2015.08.08. + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. + { + if(player.getName().equals(playername)) + { + //AppendPlayerDisplayFlair(player, username, finalflair); + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. + return flair==null ? "" : flair; + } + + //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. + { + + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) + { + AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. + if(!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. + } + else + p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); + } + + private static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + /*String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getName(); //2015.08.08. + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i GetPlayers() + { + return Instance.getServer().getOnlinePlayers(); + } + + public static void LoadFiles(boolean reload) //<-- 2015.08.09. + { + if(reload) + { //2015.08.09. + System.out.println("Auto-flair plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + } + System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. + try { + File file=new File("flairsaccepted.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + //System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("flairsignored.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("autoflairconfig.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + TownColors.put(s[0], s[1]); + } + br.close(); + } + file=new File("customflairs.txt"); //2015.08.09. + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]).Flair=s[1]; //2015.08.09. + } + br.close(); + } + //throw new IOException("Test"); //2015.08.09. + System.out.println("Auto-flair plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static void SaveFiles() //<-- 2015.08.09. + { + try + { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + try { + File file=new File("flairsaccepted.txt"); + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.AcceptedFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + file=new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.IgnoredFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static boolean RemoveLineFromFile(String file, String line) + { //2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if(!inputFile.exists()) + return true; //2015.08.10. + + try { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + //if(trimmedLine.equals(lineToRemove)) continue; + if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + return tempFile.renameTo(inputFile); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/ea/405d99db213f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/ea/405d99db213f00151fb6edb183f9215c new file mode 100644 index 0000000..7bee146 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/ea/405d99db213f00151fb6edb183f9215c @@ -0,0 +1,426 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.json.JSONArray; +import org.json.JSONObject; + +import com.palmergames.bukkit.towny.object.Town; +import com.palmergames.bukkit.towny.object.WorldCoord; + +public class PluginMain extends JavaPlugin +{ //Translated to Java: 2015.07.15. + //A user, which flair isn't obtainable: + //https://www.reddit.com/r/thebutton/comments/31c32v/i_pressed_the_button_without_really_thinking/ + private static PluginMain Instance; + // Fired when plugin is first enabled + @Override + public void onEnable() + { + System.out.println("The Button Auto-flair Plugin by NorbiPeti (:P)"); + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + this.getCommand("u").setExecutor(new Commands()); + this.getCommand("u").setUsage(this.getCommand("u").getUsage().replace('&', '§')); + Instance=this; //2015.08.08. + LoadFiles(false); //2015.08.09. + Runnable r=new Runnable(){public void run(){ThreadMethod();}}; + Thread t=new Thread(r); + t.start(); + } + Boolean stop=false; + // Fired when plugin is disabled + @Override + public void onDisable() + { + SaveFiles(); //2015.08.09. + stop=true; + } + + public void ThreadMethod() //<-- 2015.07.16. + { + while(!stop) + { + try + { + String body=DownloadString("https://www.reddit.com/r/TheButtonMinecraft/comments/3d25do/autoflair_system_comment_your_minecraft_name_and/.json?limit=1000"); + JSONArray json=new JSONArray(body).getJSONObject(1).getJSONObject("data").getJSONArray("children"); + for(Object obj : json) + { + JSONObject item = (JSONObject)obj; + String author=item.getJSONObject("data").getString("author"); + String ign=item.getJSONObject("data").getString("body"); + int start = ign.indexOf("IGN:") + "IGN:".length(); + if(start==-1) + continue; //2015.08.09. + int end = ign.indexOf(' ', start); + if (end == -1 || end == start) + end=ign.indexOf('\n', start); //2015.07.15. + if (end == -1 || end == start) + ign = ign.substring(start); + else + ign = ign.substring(start, end); + ign = ign.trim(); + if(HasIGFlair(ign)) + continue; + try { + Thread.sleep(10); + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + } + String[] flairdata = DownloadString("http://karmadecay.com/thebutton-data.php?users=" + author).replace("\"", "").split(":"); + String flair; + if(flairdata.length > 1) //2015.07.15. + flair = flairdata[1]; + else + flair=""; + if (flair != "-1") + flair = flair + "s"; + else + flair = "non-presser"; + String flairclass; + if(flairdata.length>2) + flairclass = flairdata[2]; + else + flairclass="unknown"; + SetFlair(ign, flair, flairclass, author); + } + Thread.sleep(10000); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + } + + public static Exception LastException; //2015.08.09. + + public String DownloadString(String urlstr) throws MalformedURLException, IOException + { + URL url = new URL(urlstr); + URLConnection con = url.openConnection(); + con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + String body = IOUtils.toString(in, encoding); + in.close(); + return body; + } + + public static Map TownColors=new HashMap(); //2015.07.20. + public Boolean HasIGFlair(String playername) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + return p.Flair!=null; //2015.08.08. + } + + public void SetFlair(String playername, String text, String flairclass, String username) + { + MaybeOfflinePlayer p=MaybeOfflinePlayer.AddPlayerIfNeeded(playername); //2015.08.08. + String finalflair; + p.FlairDecided=true; + switch(flairclass) + { + case "press-1": + finalflair="§c("+text+")§r"; + break; + case "press-2": + finalflair="§6("+text+")§r"; + break; + case "press-3": + finalflair="§e("+text+")§r"; + break; + case "press-4": + finalflair="§a("+text+")§r"; + break; + case "press-5": + finalflair="§9("+text+")§r"; + break; + case "press-6": + finalflair="§5("+text+")§r"; + break; + case "no-press": + finalflair="§7(non-pr.)§r"; + break; + case "cheater": + finalflair="§5("+text+")§r"; + break; + case "cant-press": //2015.08.08. + finalflair="§r(can't press)§r"; + break; + case "undecided": //2015.08.09. + p.FlairDecided=false; + finalflair=""; + break; + default: + finalflair=""; + break; + } + if(finalflair.length()==0) //<-- 2015.07.20. + return; + p.Flair=finalflair; //2015.08.08. + p.UserName=username; //2015.08.08. + System.out.println("Added new flair to "+playername+": "+finalflair); + for(Player player : getServer().getOnlinePlayers()) //<-- 2015.08.08. + { + if(player.getName().equals(playername)) + { + //AppendPlayerDisplayFlair(player, username, finalflair); + AppendPlayerDisplayFlair(p, player); + break; + } + } + } + + public static String GetFlair(Player player) + { //2015.07.16. + String flair=MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair; //2015.08.08. + return flair==null ? "" : flair; + } + + //public static void AppendPlayerDisplayFlair(Player player, String username, String flair) + public static void AppendPlayerDisplayFlair(MaybeOfflinePlayer player, Player p) //<-- 2015.08.09. + { + + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).IgnoredFlair) + return; + if(MaybeOfflinePlayer.AllPlayers.get(p.getName()).AcceptedFlair) + { + AppendPlayerDisplayFlairFinal(p, player.Flair); //2015.07.20. + if(!player.FlairDecided) + p.sendMessage("§9Your flair type is unknown. Are you a non-presser or a can't press? (/u nonpresser or /u cantpress)§r"); //2015.08.09. + } + else + p.sendMessage("§9Are you Reddit user "+player.UserName+"?§r §6Type /u accept or /u ignore§r"); + } + + private static void AppendPlayerDisplayFlairFinal(Player player, String flair) + { //2015.07.20. + /*String color = GetColorForTown(GetPlayerTown(player)); //TO!DO: Multiple colors put on first capital letters + String[] colors = color.substring(1).split("§"); + String displayname=player.getName(); //2015.08.08. + ArrayList Positions=new ArrayList<>(); + for(int i=0; i=colors.length) + { + int x=0; + for(int i=0; i GetPlayers() + { + return Instance.getServer().getOnlinePlayers(); + } + + public static void LoadFiles(boolean reload) //<-- 2015.08.09. + { + if(reload) + { //2015.08.09. + System.out.println("Auto-flair plugin cleanup for reloading..."); + MaybeOfflinePlayer.AllPlayers.clear(); + TownColors.clear(); + } + System.out.println("Loading files for auto-flair plugin..."); //2015.08.09. + try { + File file=new File("flairsaccepted.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsaccepted.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + //System.out.println("Name: " + name); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).AcceptedFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("flairsignored.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader("flairsignored.txt")); + String line; + while ((line = br.readLine()) != null) + { + String name=line.replace("\n", ""); + MaybeOfflinePlayer.AddPlayerIfNeeded(name).IgnoredFlair=true; //2015.08.08. + } + br.close(); + } + file=new File("autoflairconfig.txt"); + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + if(s.length>=2) + TownColors.put(s[0], s[1]); + } + br.close(); + } + file=new File("customflairs.txt"); //2015.08.09. + if(file.exists()) + { + BufferedReader br=new BufferedReader(new FileReader(file)); + String line; + while((line=br.readLine())!=null) + { + String[] s=line.split(" "); + MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]).Flair=s[1]; //2015.08.09. + } + br.close(); + } + //throw new IOException("Test"); //2015.08.09. + System.out.println("Auto-flair plugin loaded files!"); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static void SaveFiles() //<-- 2015.08.09. + { + try + { + FileWriter fw; + fw = new FileWriter("flairsaccepted.txt"); + fw.close(); + fw = new FileWriter("flairsignored.txt"); + fw.close(); + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + try { + File file=new File("flairsaccepted.txt"); + BufferedWriter bw=new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.AcceptedFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + file=new File("flairsignored.txt"); + bw = new BufferedWriter(new FileWriter(file, true)); + for(MaybeOfflinePlayer player : MaybeOfflinePlayer.AllPlayers.values()) //<-- 2015.08.08. + { + if(!player.IgnoredFlair) + continue; //2015.08.08. + bw.write(player.PlayerName+"\n"); + } + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + } + public static boolean RemoveLineFromFile(String file, String line) + { //2015.08.09. + File inputFile = new File(file); + File tempFile = new File("_temp.txt"); + + if(!inputFile.exists()) + return true; //2015.08.10. + + try { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + + String lineToRemove = line; + String currentLine; + + while((currentLine = reader.readLine()) != null) { + // trim newline when comparing with lineToRemove + String trimmedLine = currentLine.trim(); + //if(trimmedLine.equals(lineToRemove)) continue; + if(trimmedLine.contains(lineToRemove)) continue; //2015.08.09. + writer.write(currentLine + System.getProperty("line.separator")); + } + writer.close(); + reader.close(); + return tempFile.renameTo(inputFile); + } catch (IOException e) { + System.out.println("Error!\n"+e); + LastException=e; //2015.08.09. + } + return false; + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/f8/50673234203f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/f8/50673234203f00151fb6edb183f9215c new file mode 100644 index 0000000..659cf9d --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f8/50673234203f00151fb6edb183f9215c @@ -0,0 +1,265 @@ +package tk.sznp.thebuttonautoflair; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Commands implements CommandExecutor { + // This method is called, when somebody uses our command + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if(args.length<1) + return false; + MaybeOfflinePlayer p=MaybeOfflinePlayer.AllPlayers.get(player.getName()); //2015.08.08. + //if(!PluginMain.PlayerFlairs.containsKey(player.getName())) + if(p.Flair==null) + { + player.sendMessage("Error: You need to write your username to the reddit thread at /r/TheButtonMinecraft"); + return true; + } + switch(args[0].toLowerCase()) //toLowerCase: 2015.08.09. + { + case "accept": + { + if(p.IgnoredFlair) + p.IgnoredFlair=false; //2015.08.08. + if(!p.AcceptedFlair) + { + String flair=p.Flair; //2015.08.08. + //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. + PluginMain.AppendPlayerDisplayFlair(p, player); + p.AcceptedFlair=true; //2015.08.08. + player.sendMessage("§6Your flair has been set:§r "+flair); + } + else + player.sendMessage("§cYou already have this user's flair.§r"); + break; + } + case "ignore": + { + if(p.AcceptedFlair) + p.AcceptedFlair=false; //2015.08.08. + if(!p.IgnoredFlair) + { + p.IgnoredFlair=true; + //String flair=p.Flair; //2015.08.08. + //PluginMain.RemovePlayerDisplayFlairFinal(player, flair); //2015.07.20. + player.sendMessage("§6You have ignored this request. You can still use /u accept though.§r"); + } + else + player.sendMessage("§cYou already ignored this request.§r"); + break; + } + /*case "reload": //2015.07.20. + DoReload(player); + break;*/ + case "admin": //2015.08.09. + DoAdmin(player, args); + break; + case "nonpresser": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + //p.Flair="§7(non-pr.)§r"; + SetPlayerFlair(player, p, "§7(non-pr.)§r"); + break; + case "cantpress": //2015.08.09. + if(!p.AcceptedFlair) + { + player.sendMessage("§cYou need to accept the flair first.§r"); + break; + } + if(p.FlairDecided) + { + player.sendMessage("§cYou have already set the flair type.§r"); + break; + } + //p.Flair="§r(can't press)§r"; + SetPlayerFlair(player, p, "§r(can't pr.)§r"); + break; + default: + return false; + } + return true; + } + /*if(args[0].toLowerCase()=="reload") + DoReload(null); //2015.07.20.*/ + else if(args.length>0 && args[0].toLowerCase().equals("admin")) //2015.08.09. + { + DoAdmin(null, args); //2015.08.09. + return true; //2015.08.09. + } + return false; + } + private static void DoReload(Player player) + { //2015.07.20. + //if(player==null || player.isOp() || player.getName()=="NorbiPeti") + //{ + try + { + File file=new File("autoflairconfig.txt"); + if(file.exists()) + { + PluginMain.LoadFiles(true); //2015.08.09. + for(Player p : PluginMain.GetPlayers()) + { + MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p.getName()); + if(mp.Flair!=null) + { + //String flair=mp.Flair; + //PluginMain.RemovePlayerDisplayFlairFinal(p, flair); + //PluginMain.AppendPlayerDisplayFlairFinal(p, flair); + PluginMain.AppendPlayerDisplayFlair(mp, p); //2015.08.09. + } + String msg="§6Note: The auto-flair plugin has been reloaded. You might need to wait 10s to have your flair.§r"; //2015.08.09. + p.sendMessage(msg); //2015.08.09. + } + //String msg="§6Reloaded config file.§r"; + //SendMessage(player, msg); //2015.08.09. + } + } + catch(Exception e) + { + System.out.println("Error!\n"+e); + if(player!=null) + player.sendMessage("§cAn error occured. See console for details.§r"); + PluginMain.LastException=e; //2015.08.09. + } + //} + //else + //player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static Player ReloadPlayer; //2015.08.09. + private static void DoAdmin(Player player, String[] args) + { //2015.08.09. + if(player==null || player.isOp() || player.getName()=="NorbiPeti") + { + //System.out.println("Args length: " + args.length); + if(args.length==1) + { + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair§r"; + SendMessage(player, message); + return; + } + //args[0] is "admin" + switch(args[1].toLowerCase()) + { + case "reload": + ReloadPlayer=player; //2015.08.09. + SendMessage(player, "§6Make sure to save the current settings before you modify and reload them! Type /u admin confirm when done.§r"); + break; + case "playerinfo": + DoPlayerInfo(player, args); + break; + case "getlasterror": + DoGetLastError(player, args); + case "confirm": + if(ReloadPlayer==player) + DoReload(player); //2015.08.09. + else + SendMessage(player, "§cYou need to do /u admin reload first.§r"); + break; + case "save": + PluginMain.SaveFiles(); //2015.08.09. + SendMessage(player, "§6Saved files. Now you can edit them and reload if you want.§r"); + break; + case "setflair": + DoSetFlair(player, args); + break; + default: + String message="§cUsage: /u admin reload|playerinfo|getlasterror|save|setflair§r"; + SendMessage(player, message); + return; + } + } + else + player.sendMessage("§cYou need to be OP to use this command.§r"); + } + private static void DoPlayerInfo(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "playerinfo" + if(args.length==2) + { + String message="§cUsage: /u admin playerinfo §r"; + SendMessage(player, message); + return; + } + if(!MaybeOfflinePlayer.AllPlayers.containsKey(args[2])) + { + String message="§cPlayer not found: "+args[2]+"§r"; + SendMessage(player, message); + return; + } + MaybeOfflinePlayer p = MaybeOfflinePlayer.AllPlayers.get(args[2]); + SendMessage(player, "Player name: "+p.PlayerName); + SendMessage(player, "User flair: "+p.Flair); + SendMessage(player, "Username: "+p.UserName); + SendMessage(player, "Flair accepted: "+p.AcceptedFlair); + SendMessage(player, "Flair ignored: "+p.IgnoredFlair); + } + private static void SendMessage(Player player, String message) + { //2015.08.09. + if(player==null) + System.out.println(message); + else + player.sendMessage(message); + } + private static void DoGetLastError(Player player, String[] args) + { //2015.08.09. + //args[0] is "admin" - args[1] is "getlasterror" + if(PluginMain.LastException!=null) + { + SendMessage(player, "Last error:"); + SendMessage(player, PluginMain.LastException.toString()); + PluginMain.LastException=null; + } + else + SendMessage(player, "There were no exceptions."); + } + private static void SetPlayerFlair(Player player, MaybeOfflinePlayer targetplayer, String flair) + { //2015.08.09. + flair=flair.replace('&', '§'); + targetplayer.Flair=flair; + if(!PluginMain.RemoveLineFromFile("customflairs.txt", targetplayer.PlayerName)) + { + SendMessage(player, "§cError removing previous custom flair!§r"); + return; + } + File file=new File("customflairs.txt"); + try { + BufferedWriter bw; + bw = new BufferedWriter(new FileWriter(file, true)); + bw.write(targetplayer.PlayerName+"\n"); + bw.close(); + } catch (IOException e) { + System.out.println("Error!\n"+e); + PluginMain.LastException=e; //2015.08.09. + } + SendMessage(player, "§6The flair has been set. Player: "+targetplayer.PlayerName+" Flair: "+flair+"§r"); + } + private static void DoSetFlair(Player player, String[] args) + { + //args[0] is "admin" - args[1] is "setflair" + if(args.length<4) + { + SendMessage(player, "§cUsage: /u admin setflair "); + return; + } + SetPlayerFlair(player, MaybeOfflinePlayer.AddPlayerIfNeeded(args[2]), args[3]); + } +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap new file mode 100644 index 0000000000000000000000000000000000000000..0b368ce14fbcdffc79d020bc00b88646cda52674 GIT binary patch literal 32 acmZ?R*xjhShe1S2b=vdAllRFvpz#6ORt7WuZ_90-3yI-tWEq-uu1T%?I~J z-@wr6v8NwjJb9Y}02$`edKu3JjJZxGVD7w)2u=IcNV7`Xzw3BuR>q~!jJWw$XkM}d zi#P>D9Ca0~A%0F5zxW#XEW;U>S}Hbd;`vxzHJNI-6ssO}OE#`TFZB3$4O7BuGXFs0 zTQ{Hv&Y1~FEM#@)HOh!yVTdwrmvl&qz2=x=XF)HbR#3$b^Aj*UIW4@a0VB4Wp%m5f z#AhHAQ|<@pJ|wHy_mPDYaE^zlkgDfWrZo9PA->`WP)guq6Z&l8;9^iMVJaXVhdu)_ zY`L_S6DZ&gN3wWwi0b^FuYoTzoN5{~Lw*H%T1S}Lgk#(*)l9+=&yWPsh*K}aa1@ZX zBjI%Ei`hl!@hEW{d5occ9|QT7A1t!n8qMhUR%p&jZK9F-_o9K63~D@OCa0Md@+r^r zKSwdDcrI~R0nrMkoH%=!kyK#3`3WK2{J{6HV=lQiF+!rrkZ%5ZK-7iIwaki^*9uxu zU%8YiX7k!gE}MYDO!LyX$SSHR4RwEMtj9`Yxv`J_*W?zYqHyZ5hsd!bXkbcGoQE?J z226<*DW%^znr^sJmIZyMm8r>_%6UaE^LNYwW@XnLpV-UOh*QF=Z#W7_)NN>o(WZ~< zMa^m+E}|;0u(3aEGRy{{_4@zjc+?)Bf7lvaQ*e|ce5RDOoLsArZJ6dJPZ30 z3?4bSjcH`#c^%~cR&cmm!7r+I9{_o(b5e%+wk9G}!&J;4*uivnDiT5Qb@anO%bmR4 zdAYmVmfY=&n@e8wSycAqAAglSh|At^MD}v~WiRS#SNbl5(&svLAPanm7;oHaYkYd_ Vpb}2BRKh4+F%zBmq;|*E@F(XOrvd-~ literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap new file mode 100644 index 0000000000000000000000000000000000000000..0b368ce14fbcdffc79d020bc00b88646cda52674 GIT binary patch literal 32 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�ZrdO8USv0JN`SozS^ku$8><|}y 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 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.snap b/.metadata/.plugins/org.eclipse.core.resources/.snap new file mode 100644 index 0000000000000000000000000000000000000000..87ad877111abf3caadd9e24f6d08bb1b90bf679d GIT binary patch literal 1349 zcmZ?R*xjhShe1S2b=vdAllRH7Ff%bRfC0-R2n{2Jegj!73?lhO>3XTjIhh5;sd^=; ziMe{oWyK7_MX9;@C8@easm1xFMaikU*{PKblGv2$CFd8VGH|Em=cJ?-=@wV!CF4^k z300SpSyWP~TU?R|v?Dn&IU_X%pDtdwGeG7uGB7YQGBOB-WTZNkmXze@IhK~>yX7Qi z7BMq1Fehc^F*7nSm1F}+mg1_s0w66^l98GOR+JhFB5Ca)nfFAn=VQT|j z#*gG8G(94@P%R7+!1PfH;dsAbI1ussGdN`he(tH>U4G1g=#(bR4m4!srZg5jDNTOe zWk>*nQ(82Xy@!E8Bp@fTGPTGjv$!NRFSQ6G*+@4QK^4aVX;>CdB$PyDSI&iM10_*S zD0?3MBr3ad4pbp1i8>%O5uHStaVJsvwSOT7f|DqyOacOJ4F(2bv=Bf`rqT_S5VZ`| cKpL9N1%&Y?ZP^tkp?W|`8>-*O1tVz#0HNJZoB#j- literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi index faba522..6756939 100644 --- a/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ b/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -1,7 +1,7 @@ activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration - + topLevel shellMaximized @@ -240,13 +240,13 @@ org.eclipse.e4.primaryDataStack EditorStack - + Editor org.eclipse.jdt.ui.CompilationUnitEditor removeOnHide - + Editor org.eclipse.jdt.ui.CompilationUnitEditor removeOnHide @@ -318,7 +318,7 @@ categoryTag:General - + View categoryTag:General @@ -420,18 +420,18 @@ Draggable - - - - - - - - - - - - + + + + + + + + + + + + toolbarSeparator @@ -439,38 +439,38 @@ Draggable - - - + + + Draggable - - + + Draggable - - + + Draggable - - + + Draggable - - - - + + + + Draggable - - - - + + + + Draggable @@ -480,20 +480,20 @@ Draggable - - - - + + + + Draggable - - - - - - - + + + + + + + Draggable @@ -511,15 +511,15 @@ Draggable - - - - - - - - - + + + + + + + + + toolbarSeparator @@ -531,8 +531,8 @@ Draggable - - + + stretch diff --git a/.metadata/.plugins/org.eclipse.jdt.core/1508644233.index b/.metadata/.plugins/org.eclipse.jdt.core/1508644233.index index b97e7c95e2e3644a4824481849bed902e0b0dd30..44cd70791b0a2ebc72355cb2ebd075a2718266fb 100644 GIT binary patch literal 17035 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 A?f?J) delta 42 xcmdnVvy*4TN9M_nOxlx^S%fBkWG>pgfJK@SD4;%Bg-w)+!D14l*5qfbVgNb+4FUiF diff --git a/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt b/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt index 08ab0e4..0031340 100644 --- a/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt +++ b/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt @@ -1,11 +1,11 @@ INDEX VERSION 1.126+D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spigot plugin\.metadata\.plugins\org.eclipse.jdt.core -1508644233.index +3656756579.index 3089967703.index 2674037006.index 323251068.index 355369697.index -3716007315.index 1934142626.index +3716007315.index 1045485630.index 605290374.index 533208796.index @@ -22,5 +22,5 @@ INDEX VERSION 1.126+D:\Z - Norbi cucca\0 Projektek\TheButtonMCAutoFlairProto\Spi 3954291735.index 994834796.index 3604769962.index +1508644233.index 3045053200.index -3656756579.index diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/0.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/0.png index 9abe3c5dfca657aa02d5841c2ea981d4cbd30700..38192cfe62a4950df3503f139a59fdcc7b7ddba6 100644 GIT binary patch delta 453 zcmV;$0XqKD0p0_UBYy#jm==#8*aqA?ori>-||I61^z%hsq0@eE_feirB7>0l}8#TE9Z`@q_f5U~<{}0{S z|Nq#%!(e*B@!2T0W4Hq3Jdn+m>&pM{yS4j2E`Za3sM!Vo6Mq+^|DS(+7F_Y}8{7X+ z+}HDe^Q8?a&WB+XZ@Bfx{STTJ_kZ58g60G_MJih?b-vt7#{!| zki4k;zgM&XT@ zcmJ!D+5Hcho(PPI#{ai~VSo&teSGo1XV2vS5i?W3>OirEk%;OxPx!A_z?sSsv}eytnOnLbJX!)B%Y4+Clf(I7rZ9Is~N vL=`e4>%T*1#DAymC@>u}rx3fdhX()vBnjGr5)dUj00000NkvXXu0mjf#=G+4 delta 183 zcmV;o07(Dd1JVJIBYyyyNklUNGEp(4$wq#`pJ^%{Xe& lqZfzsB*bM9zV#2Dg##v)*A?fRbWi{Q002ovPDHLkV1f#PS7iVI diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/1.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/1.png index c1396b16db1400b72dcd2ddb89cd1d8d13a79aec..56554ec38d3e023519caa92e643d159bddfcabc5 100644 GIT binary patch delta 213 zcmV;`04o2V0hVP`fVOQcgW^&!4H5&%5i}rWUF(1Q8S(!+b~gU+*wIP&zY~Z-Z2Rd6 z|3PvD4FCb>IXVBmW~ct2zPICl)7E-08ze@QW*Erd*aeS95St{;Lkj=^7}N}N>&IMg P00000NkvXXu0mjf(#L1! delta 88 zcmV-e0H^<(0-phpBmriTB`!?GULa_|4JZHq$QT5k^)7&W0mLR~z~k};up$r*;uGy$ um;uOuECXOJc-}FAJOj`%Nd}Ap;sF5vQ_hyNKgY2E0000FhHne%#-=SP;bFVa(LH z6Y)!)%^_!k#6>oaEkB!b+ZY9;Rou2PZmoX)zg?2)GLMk*EruD2MROgWWXiEFVPrV8 WA@t|7>KkhrfWXt$&t;ucLK6T_Z!iM@ delta 253 zcmV3ci=H*Kv4vq54+X@-IPja~3)1hGldJhT7+7j)wyXv7ug00000NkvXXu0mjf D`(b|o diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/4.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/4.png deleted file mode 100644 index 834bd74ebfc616dcd621c0382db635898e71168a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ot`d^Ar*6y6BLC0us88n_x-m& zw}ktcf*FUvYWW-n4`rSMH&Ub-m{lYlHi}PRbkz5;+4ye%=|e&WY#Tkfm?yAJmX!Q& zU2f83*ul$mzDoSSUWTN{CJaj!79?xlF%ythaobYQdaLH3*)*aR>e1fKOSfO`SN#%e&}w%-3?%M1RmK0gx)&j5>o zwo(h z@&7w^HvaF}(fGd;h(T=o=?VWqas&+k0p~e6|Gj3X{-3_LW`FZ1Z`}N`{&?T9|8pI9l5YF^|KOjbtR*w&`IA52XU+Xp|Lb1gf8XfW2XiJ!1kOrS ms81HRk#fwLWWuk@z_58+^F9&IJH + \ No newline at end of file diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/Commands.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/Commands.class index 3436167cb99951896e5d0b4e714a33099775fbb3..06133e0c58a96a55f917c66dbab9675e93b4a585 100644 GIT binary patch delta 2543 zcmZ8idwg4U75|s%k>v-0SMY@uXbFiT2u z%UT7CI+$)caX%HQFQ~XHGL^Plno_OXl!60aD56sopZG$j;tPR#emCj#vwwa$Ij`S2 z-}61cJJI%9TglniADaWPhPqv_5o*N*RZfIjT(n6%=&Y;Nk|}K@Ih4}QkkW{eC* zwOCqvTOzqXvFePOQt*zcU9J+k<}g9MHFA5TDVA*76pKd{e1PDO3>ir)vOk&F6B}4% z3>zLCLZ3YDRq-JlB{-wQv9ysU6x28D@Sq1DR`C&hRGd-*&X1|MA7kQqMR$GzpK{@o zqR1UA_%t364emN^91pqh8G_Hcc*uywo3*6|d`aHy+8arCM~4kJCNSl~B%#F06pthZnzoOmjp#lVCvZ|6@n}n@+5hTP zDw(SGc+iU(6*uBBLZjGeTQ2r`i&uN_Wz4zo6>fVGh;6A@!q{%4q7hE?RWxymL8*!- z6r2{dg_k8ZiamBeaX# ziv5DrHO^;M`~c61R<-@6A2E!nXgnFYMZu3bI32m2C-6MaWFTt9BixCsT*1${0&5hh zeF}a~P|{Junva5C5>;J@M{$=C<wy>Lr z-TtWJC6Oo!xc{u;y?CF3zlbA6%}f5K;$?Wa{Ow$eWJFrQKg6>|o6G;D;@>ipXJc}E z)Yv46rQkoJxwws97m4DgQNDx-R}c!hRwEKiq_;*#6e=JrIb-(cZr2h?L)()aO5D<_ zDdb@GNH&s-P_*a}*%xiq+z60cB@Y_-!knd>4GO7z%eCofp4l=;v`jqY)tt*!(x_UT^{%8^ao!tnu2iXx-YAMnHc*4;DOpV+aaT#@`o=}B=a=mI zRE#IC`OEYs9&d3goO3AwLk;Q#8_&A~4M04W|9weMXSyy-lRfH_eR(sHX0(J9n2kl|5-uFnW zBOG*C<+J-22xALRnb12Y@#rji`+S*c+`#E;vKicz!K^-yLfv=D@()en%!F(Xef&tw zi^JtRM`as;eBPeKH`o^9HV&}Ph89%dEVpJy2mgPHTXW#8sKe8Eoc#`R)HQG|pc-}; z%3S<#x-bqbpazbd!aB!Y2uN+=#cm3S9aNy*h51)e!>70{pe_FfiUBV>ln0 zvp)dU_e_`0{eNFP8t54PVFqnuXg6^n>^o=4115&UzMoj~dK2-m@28f0nTg$D-wT%9 zW1=_g`-LU@O?2o}_?7Pa4JS3xqldEit%=R@_Yae7I0lcN#h*;9)qUqJAGZ8e_x(MK zN)A{q9sg+};CrT9Z)E#~DS>`P99?>NWe!wOF(hAzF>>Nn2GGW5PAXuQv-dVGOl$z<#pH2}{)uKiT=@L0{ynokE~X&v`r9 zJA8taoFf;S*B45CFH`GcLs2fkd$HbU>9I9KWqjlR5(RSl%@_3I@`~$j$U}hBc?jGW zAXs-n>cEJ#JT{9>cG$cjW+Hz(a*$v*1I7!8a{UPuF~6DCv*N{ywY`hU%PmxMWaRK- zCx^eZh$!yJhu2Nw%seV}KLusg{4Yb5ED^7R$y4@I75@{-%9hf_#C7?q4~k4>-RK*- zLgACB^HWWTfy~m1F&?#_>N#pc?lc>Csk>)M@0+D?U!#4RR!!3-a&_elazSeuCO=)4 zLp4LKL3@VYY@)i={{NfHTI4r3Xy^Lmu$uUSD>+)`;c!2-^BK0J{P<-dj9C+IMwB*+ zLsdQby#|icCf;GW^T(~{$;MuHTDx9=4XCEg)WO6XKoy>*EiB2su0X+x1zefm*nkU{ z$o1xL*v4fHFn=TS^NF#)oKIC~&NXg9@)lW%&g3lMr%UWywzg&w(W*s6*}p(;22m%A HHtPB>dF+K` delta 2468 zcmZ8idwg4U75|>}Cb>y&llG>MWo=p7ZLz({R_L|@tq$6awYom$XGQ76jZp4N_Q{%l zk_ZQ^UKY z@e>+8iBE|Jk5RV=pLXLBLYaNZj%*^?xF(fMngiKHYDmLp@L93L6LF2>^KR@Fdp(s! zkKzkr)>G%&r@_J(#Velc=}Y2j@6Ao)*stM9nT`AAc&5i3$$Ib=Ot|q?LWvzd86O&K z+_*E7HMeV+#FRMY4VNEe|7+6eRJzvdMIWX$T#vj6_?nhKg|E3WO9;*rupylo%5Kc2 z%{b$qMk6DKr7Ah3;_D*iyWDj|!!vkR?DrY;4RO-fR`-I2Z_AXFM5cFG#dnyIo>cnA z#0E2)Q1M+tyJ*vcqFY1BdRQ^{De}k6`*vQ$~EmiRk zQS0xh_?L#)WC-ut)J8MAu8_cg#2x-tA|9S+th7o_Lh%MW^YBo7yV(-A&HQK?Ft34~oW8eKw*L`BKcOKLg(z>Z8dwcXAuvphSJ<*}#58ZDuv zqQ9h#-Xb0;xs)2j3nf)sq6B?@!X&NlPA9m(UNUHz1`jP~bA8vF9a`lYQ9WHM&6n|f zUN9H1t#ZvSqZJyhq*Y>F>8jY}1oBGEl^V6k!FAp$Z;_g}YV{z_ zpp6*|+XS?P-LyuWF5NhFtoHc&u!Q zUKVBLkFR+j-p^A6I*HqGI~=xj2O3ahOQX0G3X16od;lt(sHgjJ7d{9VPGKo_v7d^u z2P>LKc?LO*k3pjhaPeccYZklv^^Z*Bqg~M)KK3wnD0w`P$3ruCn9yUPY1s@uM>veK z?$`{f33)u$qJ)$Kh#Z3_q{O%c{qYuOEabGaXZI%vd(J&?!RVUAmuJz}uOFDkbsWAf zm&4{9W{hL-8TujHKRSiO6S6k+^K)@joUC}ysH_5z@7pmv$F?X}aTn_xXvRW(lPgou z$^XB_l{xWVL~tC>vfmh^-U;_P)IxEi%+1fL8{^_~D}vv!>(^i0hcnSb$~ZLrM7P29e@~pP>>Pb5ht@r4x3DXw|HzgH zEsVtUQ?`7Sg=9?ssV!e&;f9!g+Ln7Q^u_dF*mBT9r!j?J8v3s|sD)l5n#XS}bjaV| zO|oGhyha{>w6N09|7`oP<&2^KJ&!5|ERv4@v{0#^=rNYDeZrDN|6811aL>{LsUSb( zxDa#X!he}S2hPq(MHmzJhL&`{ifwF{Q*td6%_D{*(L+vI@Ba$*PE4XA>TJs4^*vZD z8yqCa4olUhAUXKtM$d6`E>u3Mur+poTm=IsW)x5!TaU=adSAi6_+ouY!GC>@biUw1 zobrOcXvzjOV`1=?YVbp|NXg2Uh z_smj#|125(%amz~O;e-XTS=OoWSW#EmeiUA$D?d*ys3`)MsNuw3~4_S58GuiNcKFG3q? z=^9$cQ#Xie9H$PJ#>D2DO5bkYOlq%TI$sla)>LVo@&;-wnQCpdS{nuXQf$>)6|@$C_1u4xAXJ^**}do7 zbHDTY?zxXepWNzw?(%m}0+=mbN4?MIZzZyC3dfd2dLz;0k?6X}uD&e(gfH5Bftau@ zv@_H+5bNn}Y7Oo1@u%z~vbrOEu~1K6|ElnAW11i`VtTAEv^}gx6l_gzXm{9!^73WA zV)K_oqf=2><(v$7JwA@`SI*YJ9htg$+Q&2ejq_4qsm<5;hRxTV(!yqoZ}PX!+QJ21 zp5|S zl%%KGOghP;{5UTg(~BZLEMihBke)4lk!UK844I&Sp@CS$-O>VY?%9$G@UmnZhdI;q+!c=|Dc9d*^;fRR zORi7yB;Oe-UQ#fH$mt&Fk43hp92uYtDRlfLds*ciEGfvU)KsLBL0f7x&!Tvx)EXys zTBK`y+%}`bE7j6qwi~ZXx-;4nbCdRBvdr{JGau3V?F{t}g!?nuDYJbthuR-+iVbbb z4ukX|pUlH-ZQCw$UNsETSzmf@@rQ}b+hgJFJKVgbQnI~RFH3x~RF*mCO6z!&Q&yH& zy3!{%<5SAQEy}ZKWJfp}+pQgxpif$*?K|ydizc)q2+I|RYw^h>9EM*QfEdJQZnOQKA&kOb;=NJkU^JmW7nGJLJ zl3IWjYMllK)b!_kN{>uZMO6RYAZkzW7YY74!B>NI3I5J`cxFpI-{RY@T^h?Z5V{cQ z;2N6~73B|nM9)r86yYBoHn+q#!=oQ?PvJfk9>a7$|CB(Z=9l1~HKHN@m2lO6Q}r;< zclr5`LH^Tte19M25A$NzFfY4W!Jx492nrhfVog4qz*`HffOUc$)^UEXJ|XE{ZKslF zb&=`fh*xpq9{^JI{{tHOFF?L40WBR1sBTauroySxa3&@2jtS`JWmeu%?N}8zvYR#9ZbPACsCQnNwLSheTXBIana0($c?&1AodK@n40f=dw{kAK zxQMs$W|h}+13P)U;%ww5hIkL}V4Ry=3O)9G_stmsW_mSQPUuPaa`rBbGxScP0E zSJI^+4109d5l5y}sM5k0#tofu!zacK4~*NrjOJ0m5mcmLh;h3&Fa__i1QutYF=fYk zl#bf18MEVD!&7qTqGIQkmlOwA@v-37PK7hL+P@(fQ$=@`~|`uxePU zyNpGxH7GL%r9Noxjx;&xbEm~;oxnNmvtEY;&Lr@9LgqFMsc-C0{-`b?*Il^>{|jb_ z2Z**KXlWS2K|*IuYyHz4+K==jsH-zns()I>-6+k^==KKvGd}aKb$Ze`)%eTeN8J%p ziV7VI*K-Ps#;F%Yu@+$)viMPCvloTjj#BoiWdu`sC+0J%CkC*BJM|sfg(!DpH}A&1 zya!)a`4B&b!@LhqGOpq7!3aN&*Z2v%$xkwidzi}yI3>*w?cb#BRj=t!!73jhfM#s=!W+_=SCm98 zEW;P6R{TRiQm=v)Pibs+j_L}pHk#*JU29Z*wNVn;>S&Zma=qM;A`)NKftsm1$4q-` zb&j;A`rM++wtAhL`%&q!zBM*g>Qj?yfi=dYhC#VeiR9clFYkuM`%I_H10K`rfIY^i zj%7M4*6GUDOXwe61yL&> zQC$Wc4b@zH%WdaMcrKyDz4zyns78ife)Bbhz?}tBozego;n(H+C{Aj?mRiI&EDO+mjnq(*pMJ#fMoNMK%)c@A)rt~M8t$3Dw|{ji<{lJy8)uW zq5>AhR_9tf*b$A7$@F1Ws+**-4r4o`W2?2TwW8t!Dy3Sr7EwW9d;Ytdq$%3W&b|NR zobP=9dHpv}tbZ(`zjXFj&jFah-+xMfIXA9@=w*Xmp(hEWF89Zl2Yp@s$jb1hklK0G zpg&?KAxm~@!@+Rmvaq%1q(2k*`5uk_Ldf3W+vuz8j0J*~^CJ;oS6v_))9E$j=(vX7 zFz6t?NpQ5R_eJK%2=?M7CAB)eP48%Qh~jDOpf9wpvQ|WVEir$@pm*s#f;$ksx}(D% zsr5zuO0l+NwN8iWZyFsToM&0J^p=ET{&k{-iSz*>R}9phvpHKB(ccX^Mj?XD*V?M) z9~yD`2+s(1G;ot&t$b`yFMUGD83}Sl^9FxQOfU}9zYO|JsW=0nSc5Ov>37m`L43X^ zqV!J~^aVx}GFpOuUqro?*VOUVJ1S>t4MaP{$01+4oXHhm9*zcLfpAE+a#E~EI&wCF z0wUNJ2>F63CE6_ZI>Mr%h5Vai*2odvjnki9b$5HIJ}g_rGQH`t2Q=a@d&lI)) z23q0wwfZAE&roX9`62_ke6eJGamr_6E+sL$q`}EG5-wed%`tc`n#3a!QLhVx#3R$G z&dHZb=B7vm)`h~66elMy5I|pNEZjC%5f;a`1=gk5&fta0;v&%-wx|wh*}GiqO;mAO zV(@o)srhPtZQe4%=$6iCEZm+lq;Q;kh3OrCr(YP2I9y{SAoZs6Ds{M3RHyN^l01XQ zU(ngs<`<4bQhdGQvQ|L;hs)}c2A$V%v)XPk^9%B4`wecR2gJP_Rgpwp)X3`%4v-Xw zo@z4nR-UY333CuLq*gX5G6G|U3*rTxlJwWd{OuhnH>~1?(oT4@!CiclsTY>c+(O6< zieoFH{toFIv2aAkG~Q-#Ty-q>I_YJRuyl`Dmx}f+2H(oJ{W4HEXH?v_1$K-A=w5Fh z{l1U>u&m6UKz}yopm+YDW(ycyPezWT zkKRwv(Z(GP%5iu^e}8xKoiRsi9G;8>{iFQ3ZkV=e%~tK~!B!D>Cg`6B=x~BQt&Y2L zoR*Ni^+DvRJ^R|>UA+go1y`*P;Eg6B)r+^wbF>{ARV8ppXt;9p1b!{!Z2Gr66L`PI ztwcSJJ{%Wek2}5U*x{tKsqSRF2R~F+Klj8H+4ARt7CT$Ds|Ou9u4+BUWtq*dZ(|A$p%m}nV!Vr58863Sti%yqhY#SxQLMu;Y{ZAS6(8X~e2fS130}mf zqH$DKK9kw!IF1uIgD(j9k{mcmI=-fSoTeh2rBWoRAud%El+EpABa`gN7aDSZsSKgV z=@&9nqX{$`QqZ)AzLXJTtjK>wg|MMOTJlL*vttT{=@fm93>2f7PSZFzu#zsNGqURt z!gtVFS<}#p+pS%vkY7*nq%68%!p4x1E~l8E9=#|9MWXDM6WqqEl;s@TEf^=+u+@Tb z$(fo-q3ARzjpCNGrBK||kVY}sCTB6^7#2~sBSYj77k7?Iik~%&x;0#*epF;VUlVJ2 zoWw-9&fOCUlKs=Dpwn>BNz|T%aTa+*GA~T8UH+9AbgAzMF?*hvZxr8&77F$w&)d%# z41F&~rzW~tP+C5d-Ev|mX5w7(h_-y6q_rdRX4x3)?PDXsV-lQOSDN4gb8G25JD<-J z%>$+RnLLRe5HTroFi$p*mClPVm!M<_Y9xOz^7mtEHeZlH#eRA!!BfO|KTjoC%hP0e zfJ>UPxwMzd6?ny7%o^b7O#?h5wfdc2u3pxIyz*?GHRfmn$7<{zdmlB}pP^^V5}{{Z!W1JL|oLURWR3CY?NokF2=nY6GPyPU^kw^e!U_Nsnf zY(ryNVs(nud&8{ihQVsi1$8qkbfK|#C@ZyN9*^3yOUhvW`R+I}g8Zl}p|!&ruCid2PVm=+AmQ3W#7at#O=bzw*nr&@G^ zHI6#fd%AThF`=PGPQgscKJ9-FS+oK9bORB#pKC(Iyp-t$b&DcU+ z_>s&XqMPw3ZNU??RXAr8m2g z%^?m;+$O6qN;`&R+;6Ph1Ddd(JNQO%Qbd~Q4N~U_C6OhD0Rk{F4@_y zV(67hUzQ4HOosJRx)t{$!~XNZvM=l9Qq@G{t0$c<<-NR7vZW@Yv_?WX)1xJDpvLKO zdK?MfWZqMiJMHE^-a3>va-mCqsnK3Yz91hN+^*)Al#8A1<||dR;(Mfp-z69355zrp z%gtcQjd3sL(S2Azd$EXqj5_JpO|%aiWqu1igk98)JLzHELyy3uNAWXy3{O&z6{HRc zk(`XLRJVjRQk5v*i}(rekOm=FGxqUL8QD;Q7T&d9dW9YHu!3)w$Yo#wuHf&9iUW%< zop;Mf!#0U}YE&o9;0{@H%7t7gW!xx*ucEmG8D~&vg|Q@wX>h6wQhutct-_Ws*H2~? b7FlyEBy#uMDT>T{_%3 Positions=new ArrayList<>(); @@ -255,7 +255,7 @@ public class PluginMain extends JavaPlugin String substr="§"+colors[x++]+displayname.substring(pos, nextpos)+"§r"; finalname+=substr; } - } + }*/ MaybeOfflinePlayer.AllPlayers.get(player.getName()).Flair=flair; //2015.08.08. } @@ -329,7 +329,8 @@ public class PluginMain extends JavaPlugin while((line=br.readLine())!=null) { String[] s=line.split(" "); - TownColors.put(s[0], s[1]); + if(s.length>=2) //<-- 2015.08.10. + TownColors.put(s[0], s[1]); } br.close(); } @@ -341,7 +342,8 @@ public class PluginMain extends JavaPlugin while((line=br.readLine())!=null) { String[] s=line.split(" "); - MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]).Flair=s[1]; //2015.08.09. + if(s.length>=2) //2015.08.10. + MaybeOfflinePlayer.AddPlayerIfNeeded(s[0]).Flair=s[1]; //2015.08.09. } br.close(); } @@ -383,7 +385,7 @@ public class PluginMain extends JavaPlugin { if(!player.IgnoredFlair) continue; //2015.08.08. - bw.write(player.PlayerName+"\n"); + bw.write(player.PlayerName+" "+player.Flair+"\n"); } bw.close(); } catch (IOException e) {