From a85f53663618eb1d4b26d719360a435754a1656a Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 10 Aug 2015 11:31:42 +0200 Subject: [PATCH] Forgot the JAR... Again Uploading the JAR of the bugfixes, and also adding more bugfixes! --- .metadata/.mylyn/.tasks.xml.zip | Bin 250 -> 250 bytes .metadata/.mylyn/tasks.xml.zip | Bin 250 -> 250 bytes .../19/40416a76403f00151fb6edb183f9215c | 266 +++++++++++ .../24/f05e1fe03f3f00151fb6edb183f9215c | 31 ++ .../47/b0efe5c83f3f00151fb6edb183f9215c | 31 ++ .../7e/a0c2dc11423f00151fb6edb183f9215c | 427 ++++++++++++++++++ .../e0/c0cc3d6a403f00151fb6edb183f9215c | 265 +++++++++++ .../f4/303fdacd3f3f00151fb6edb183f9215c | 31 ++ .../RemoteSystemsTempFiles/.markers.snap | Bin 32 -> 48 bytes .../RemoteSystemsTempFiles/.syncinfo.snap | Bin 32 -> 48 bytes .../TheButtonAutoFlair/.markers.snap | Bin 2983 -> 4789 bytes .../TheButtonAutoFlair/.syncinfo.snap | Bin 32 -> 48 bytes .../.root/.markers.snap | Bin 32 -> 48 bytes .../.safetable/org.eclipse.core.resources | Bin 3407 -> 4230 bytes .../.plugins/org.eclipse.core.resources/.snap | Bin 1349 -> 2038 bytes .../org.eclipse.jdt.core/1508644233.index | Bin 17035 -> 17035 bytes .../org.eclipse.jdt.ui/jdt-images/4.png | Bin 0 -> 281 bytes .../org.eclipse.jdt.ui/jdt-images/5.png | Bin 0 -> 159 bytes TheButtonAutoFlair.jar | Bin 64897 -> 64183 bytes .../tk/sznp/thebuttonautoflair/Commands.class | Bin 7677 -> 7684 bytes .../tk/sznp/thebuttonautoflair/Commands.java | 1 + .../sznp/thebuttonautoflair/PluginMain.java | 2 +- 22 files changed, 1053 insertions(+), 1 deletion(-) create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/19/40416a76403f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/24/f05e1fe03f3f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/47/b0efe5c83f3f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/7e/a0c2dc11423f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/e0/c0cc3d6a403f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.history/f4/303fdacd3f3f00151fb6edb183f9215c create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/4.png create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png diff --git a/.metadata/.mylyn/.tasks.xml.zip b/.metadata/.mylyn/.tasks.xml.zip index 4a143bd18aafbf9d068d2585df3da8460b662dee..60d7360b6b936548b351858fb1a83252327b7138 100644 GIT binary patch delta 26 gcmeyx_=}Mzz?+#xgn@&DgCQbvBF`!&Ai2W{09mC62LJ#7 delta 26 gcmeyx_=}Mzz?+#xgn@&DgMr0*BF`!&Ai2W{08+sQBLDyZ diff --git a/.metadata/.mylyn/tasks.xml.zip b/.metadata/.mylyn/tasks.xml.zip index 111b56511a556135e58e240fdd0f1aefbb34061a..79d47436b1242ba0168e082806af043b259ebfd2 100644 GIT binary patch delta 26 gcmeyx_=}Mzz?+#xgn@&DgJDzjM4nYlKyrr@0AFDTzW@LL delta 26 gcmeyx_=}Mzz?+#xgn@&DgCW6oBF`!&Ai2W{09c&{-v9sr diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/19/40416a76403f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/19/40416a76403f00151fb6edb183f9215c new file mode 100644 index 0000000..d668ed3 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/19/40416a76403f00151fb6edb183f9215c @@ -0,0 +1,266 @@ +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. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + 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); + break; + 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/24/f05e1fe03f3f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/24/f05e1fe03f3f00151fb6edb183f9215c new file mode 100644 index 0000000..ade377b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/24/f05e1fe03f3f00151fb6edb183f9215c @@ -0,0 +1,31 @@ +package tk.sznp.thebuttonautoflair; + +import java.util.HashMap; + +public class MaybeOfflinePlayer +{ //2015.08.08. + public String PlayerName; + public String UserName; + public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not + public boolean AcceptedFlair; + public boolean IgnoredFlair; + public boolean FlairDecided; //2015.08.09. + private static HashMap AllPlayers=new HashMap<>(); + public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) + { + if(!AllPlayers.containsKey(playername)) + { + MaybeOfflinePlayer player=new MaybeOfflinePlayer(); + player.PlayerName=playername; + AllPlayers.put(playername, player); + return player; + } + return AllPlayers.get(playername); + } + /*public enum FlairClassType + { //2015.08.09. + NonPresser, + CantPress, + Undecided + }*/ +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/47/b0efe5c83f3f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/47/b0efe5c83f3f00151fb6edb183f9215c new file mode 100644 index 0000000..28679fc --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/47/b0efe5c83f3f00151fb6edb183f9215c @@ -0,0 +1,31 @@ +package tk.sznp.thebuttonautoflair; + +import java.util.HashMap; + +public class MaybeOfflinePlayer +{ //2015.08.08. + public String PlayerName; + public String UserName; + public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not + public boolean AcceptedFlair; + public boolean IgnoredFlair; + public boolean FlairDecided; //2015.08.09. + public static HashMap AllPlayers=new HashMap<>(); //2015.08.08. + public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) + { + if(!AllPlayers.containsKey(playername)) + { + MaybeOfflinePlayer player=new MaybeOfflinePlayer(); + player.PlayerName=playername; + AllPlayers.put(playername, player); + return player; + } + return AllPlayers.get(playername); + } + /*public enum FlairClassType + { //2015.08.09. + NonPresser, + CantPress, + Undecided + }*/ +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.history/7e/a0c2dc11423f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/7e/a0c2dc11423f00151fb6edb183f9215c new file mode 100644 index 0000000..9e93192 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/7e/a0c2dc11423f00151fb6edb183f9215c @@ -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+" "+player.Flair+"\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/e0/c0cc3d6a403f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/e0/c0cc3d6a403f00151fb6edb183f9215c new file mode 100644 index 0000000..e152ef5 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/e0/c0cc3d6a403f00151fb6edb183f9215c @@ -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. + p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); + 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/f4/303fdacd3f3f00151fb6edb183f9215c b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/303fdacd3f3f00151fb6edb183f9215c new file mode 100644 index 0000000..8206839 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.resources/.history/f4/303fdacd3f3f00151fb6edb183f9215c @@ -0,0 +1,31 @@ +package tk.sznp.thebuttonautoflair; + +import java.util.HashMap; + +public class MaybeOfflinePlayer +{ //2015.08.08. + public String PlayerName; + public String UserName; + public String Flair; //If the user comments their name, it gets set, it doesn't matter if they accepted it or not + public boolean AcceptedFlair; + public boolean IgnoredFlair; + public boolean FlairDecided; //2015.08.09. + private static HashMap AllPlayers=new HashMap<>(); //2015.08.08. + public static MaybeOfflinePlayer AddPlayerIfNeeded(String playername) + { + if(!AllPlayers.containsKey(playername)) + { + MaybeOfflinePlayer player=new MaybeOfflinePlayer(); + player.PlayerName=playername; + AllPlayers.put(playername, player); + return player; + } + return AllPlayers.get(playername); + } + /*public enum FlairClassType + { //2015.08.09. + NonPresser, + CantPress, + Undecided + }*/ +} diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap index 0b368ce14fbcdffc79d020bc00b88646cda52674..1253ec8ad8c6db053a75de6169f668d2efcd4ee5 100644 GIT binary patch delta 7 OcmY!|n4mCGKmY&-Isvi( delta 4 LcmXp|n4kav0%QRJ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap index 0b368ce14fbcdffc79d020bc00b88646cda52674..1253ec8ad8c6db053a75de6169f668d2efcd4ee5 100644 GIT binary patch delta 7 OcmY!|n4mCGKmY&-Isvi( delta 4 LcmXp|n4kav0%QRJ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap index 265239dcfa5d1913ac70af32b931170bfe6ee2f7..c331e91457ca8346cab9975ebc407949c4365537 100644 GIT binary patch delta 72 zcmZ23zEyR@a_-49S&|t=C;w%6$^CHl4F)g}7MuK$brz8S2+9|q{Fkwr8OYz<$HvLT S!o=XFKUtAWY_mOQ1``03wHDd{ delta 7 Ocmdn0x?Ft2a&7<&-~#&q diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap index 0b368ce14fbcdffc79d020bc00b88646cda52674..1253ec8ad8c6db053a75de6169f668d2efcd4ee5 100644 GIT binary patch delta 7 OcmY!|n4mCGKmY&-Isvi( delta 4 LcmXp|n4kav0%QRJ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap index 0b368ce14fbcdffc79d020bc00b88646cda52674..1253ec8ad8c6db053a75de6169f668d2efcd4ee5 100644 GIT binary patch delta 7 OcmY!|n4mCGKmY&-Isvi( delta 4 LcmXp|n4kav0%QRJ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources index 7e7af5ef3f437afa2446e50302527d2494b6b9e3..2fb0a9d3e40c6572b45eb67e86d491cc28ff941a 100644 GIT binary patch delta 29 lcmX>v)uyMeCT&KEi8_BLPiB@0d0L{x00t}xKq?-}KES{r;hR{QlV;K;WQZ6;3(%gw5Vp1}1A{mgM`b0JB?8^VA_#TU itW1b{rZOOH4PkTiGaQKc{aJYrgNRh%=bq}_<;MVpvpk*v delta 7 Ocmeyyf0S#3D=PpEy8_Pu diff --git a/.metadata/.plugins/org.eclipse.jdt.core/1508644233.index b/.metadata/.plugins/org.eclipse.jdt.core/1508644233.index index 44cd70791b0a2ebc72355cb2ebd075a2718266fb..a61b7d498393b033f7efbc4441d7acd26b2fd6d1 100644 GIT binary patch literal 17035 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 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png new file mode 100644 index 0000000000000000000000000000000000000000..c1396b16db1400b72dcd2ddb89cd1d8d13a79aec GIT binary patch literal 159 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 delta 14307 zcmY+qV{j%+7p@yjY}>Xmu|2VEClfn)V%xUuC$??dwv$QD`<)+W@6)L2Uh7^}{ijiV zE#NbFz$ZAoqAd6?bP#B0XpnyJ2KZ=TlAZ{1QaO+l06@3E`H|-ww@ocbMoC?RZT=7z^dM>BV719&2u@M)qd1c6b zUg_=2dpdm0S;v<}g?{&Ge4OE(z4z_8eH8ewz4lV&f!1UEs4ErZ@8HdEC#mbdvKrU# zdA0(~(D}TnZPH`?h;5?b$~Im2jbJ3jO9Hdv@QOlnIjW6(fA$;`9#mE7%A0bGeCwH6 zjlDXsF;dGEXlOL;kGE!`_n%=$*&9!!0kz&EauzEN+nf*_-6!>C9uSh$nvTz}IawPt zje(_z*cB-I(x#tqxy@C?U2G{F42w1z$TEPXSDNyx=0(!zER5>gMAA-p4VR7fE<2PB zf@4F{aO03jZ3r*zvr>xrtRmyJF&GU&`o?w95ltu@Y1mbc&=5ZQNDIOnliKC{_ELNu|c|j zM7(2ZE}XJ-#z81ou0{v#*~~tC1P{P;-og+NJ58%E^n#T*Uk{;!QSPLc0WQ}e_HTUwnQ(CY>%x-b2^=k*ErK`yy&$6EyTZ$8^u!?=64*30*)}{?DVYa5?$g(#%zYfoNKP&qd1)n`5-m8 z_)8RPVT7=`sy)gyxQPdC+M4RVh!73)-06NNm17O4T;nK4 zW!U7dKn^%wWyOS|V85W>!`9wgEn3WJFJ9FrTcRZ$T`rZmZg3{5^o99^^yxct!rl6& zYzs{??hcIh`fDm-ya4+WbJMadab{{dhe+zbVk$R21xC<=@IbN@R8NIs*(?=LW_T6Q z;&T)PEiGL#db$#E4dDsmzt3cue*XC_PXUT8T-o zL?OLFnCPa^EOqVdHNj%TW1p55S#9o;{gm{4PayNz2N8O;48X;8TIUhYLu#<<9yjv^ z7|QP3eZXClJ$QN4@bv*P_aq&`W$l5sGu5!uWtU=TQ1Y9Gt^yb zXCRjVTAFpYWPck~IEGieH1GsZ7Bz4(Eq0@_z%XK2w?38Q4Md>$An2Hmb!LXNY=6)r z_%uQ6oH1W;N-M9ds_7o0%$7U!hJC3(lfS9);B*L0Gwa0e4%Fg;mOO_2puuzG9e zt1=Dzl_Q3oS5U&xi1tw(I=c_AwKu99rk<6)85eR75r}wj(ab<+c~|_*Wc9|{gNnUo z5=p;W%+DhEvk`Uli=pV|k_~NU+~n0qYa=Zp_+IT`7l1ngApnnowGOU-tR&(sGq`%^ zg6yH}fs?g{$Ox(PgP-v}2T2L@difR_Y2gXRL|(Ly+B4o|_-GqfKX9FHA^XHs83KK{ z3Gb6*z2!vi${%;uwSNXz z7km>OzBVQpq$0I~U?A~IMDo_a0haEl_+|q)?b>#l2cB+dfn-3tkzM>_ek~Z%fRfV1 z9Z9VY!jfaR*L_qvSF-LaD`n$28ieK4U4qOKfL8S>DA54`gI4p=b8x>c^!3j>W&&2G z*6p&-Vtq0jmt$#&!aI~szn z(1kw#O|R{hncMd-t)aNW5!GA4#HzWhrLm#b2^FgNG5(fMz8OC9q);y(m#E@*GcfzpO*D8xZ*_$O9zh>{Yb#jVV*@j8^+- z_`U=?ovJvMrltq>rq_9LYKzDFNuI~z3XGeR0Fb}*dt4$OX@2UxRpQ-oY z-42jdlO?W#F$PD)Uw-^vo$`3rf=84KW9~!V5glt;3wuoj!dl;qe2(dadu81NzMUYs z;sr25U`wes7m17hI}STCQ7vZn_s=9FJzN&a1u~ME;vP#H!WZXf6%L~Cv#%4H6dYdg zRe+lB?38h#g&{lAd=+;TF6>KlIzwzVDauzmJ!>0@b7m*Mdwsc(tE!IPplZ~VZ!D5+ z66O6+3aS5aq?lF~*N`b6X`ufGATUTn_geAA31&ZIJuC5zP{6j?SnPmqW`wyrmu(Gh zZ3>5K&--(-HYLsPz=bJOd6M{GzbXNPMz0w8V&!vlJALh6Kfdxv;v{|SXWy9p_H0HcH6!Afp@|AZ)_l-r%7rIY`iRc~M%UHG)}1~((#&g+U>k_*I2ptm z@Y}qVYb$5Bh0ZGE(Czi0zQsF+yKDmXEGs4%N7hzm7!ux3J}MU1)U>*o1G#k*7h*!4 zl1O-MoS=^<;w*c7$-5tbjfh)l??p>bU9@8NWsI>XvcziB{4 znrI=u%HFGCW#0hZRXzjfoSn9M&CYiLx7naCvLmtj@Tqhc7)~brtjS zZ*?E})DjDv2Aqc%LKS~1rFGH;rml4*Ruju=&~Gp_rVPnZK3!1*N63JUjx)_zcE+}5 z8GE~)SRQ(02jGOS6p?;ob!fcM>4xpflmwWbxj;Niv{)Z2xOb!UBs6^byDf1ZTO*D( zV-<`7u?;z@bkuM)itI0Ab>eIQg8K{3G;AwpAo}cx7k&F{2oEkYX8G8Bft>^+*5&ax z)oRRPg`K``6a^uD4>jbKI)N-jAVw+<$1CCl1?UUdcQ_LR}P2DVkzo zJUUbz^*7<9X62uOF8xu+tuc_Td`K$%=3%#W?B#h%Ji4r8VfiX70*^YVENos4;+;~} z9!igl-|7qI;9GDUeT|Cfu*APP{*_*1dk6#A*2ewqVxR;Q|B*q_<=+ zELpP1V}4;S>+OIaO0RPwR3so^4Z5tc4&I9?u-eqoj!W*OM`lElGf41dFr(tyqe1gL zQj;XHsE>xs%*thwQCz3)~T&;ai3gp z48YEpSqSIhvF^bDILMK9JJJ4SHu%2Z5~&FkqFIzx8lw#V!hE*K&lRSn% zpUd9dE3q44MIZJ+?<_HH_UsLAi$TrtFRR6IvWtCMpeKX=SG{wwC4MDGWULu#ejKQ+JH<)ezAI8EF)Z!+ zozzs5w0uyZuIiyhzYgPLd(&nf9R}QPI`Mb=jF1RBxZM$t=*emhp$SXfr}^eH@EHn@|%NLQ#l~oXsO;hC+jlh7&8YYpe*kiw@}t&6>qbe%oB@ z(*TYZ?sk%m2A5+9eX1;HhZ#)e6qF^j)LdNlnDJ#7q7N2aYSZp*$5f`=U40Y^uVqen zJ~+PE047D-Q*KmTIO@uSi(u1Rqw1cm5#^>N&)fHR0y;Q}8HCP63V&%btKB-8Bu8(G zc4&b-ULV!5fPQDbQ(GKgZCC?oxly&zQ=H|O2V6g?rekf~?-*2;jb8|Yg}lkEri-}W zK>?c0l7q7F_b7{#R$B@#9{E-tTKReOf1|Eh0bsv*v>y}`Ucuqj~JOwiHJW?i~y(aLv>dG=)oO$Pzz zZy~nj)+{tKk?2m|jprIX0-=Jdce`K(ES_vev98NfC&?nOHUvLpOd`iRZCoXRxZfIv z01hCdjp^SNj$a$o{MPOdV}@&G#$^0nN#lgeJz-EI2kJX>_qUGgd{$;rd65-4V?KQ0Rh%gLR+8%TN`V8 z%!ohbub}Y7wL3`G(&4*F3)BREN*Np!zyme$7JQd6ls*h8C?Q+0BvxjZg~v6f=j8ma z{zc#evN>H^wwOg+&5Ygvp=L=Gj8i^k)wK~?g%K?3sild7uXSR1DP@H8)T*3#S_<)> zrMq%tBzJieC!?KPT5=ZKk_eA`?43Fo{k^Ybs|DvcAJZv+CG;>|a3)0KQbuzafT!~$ zZZMPm*jKapG`Bm~pQ+O2d!HHBMQh-1-etG&_KtKa57$RK&V>_u(Va@2Ci4z8n%OVM zg&7Zb%|BB>nCkF9#*VbDcUvY`@|m6sA~m+){8{!7(8k&-$t@>73P@b(ZPGhuYnZg9 zN|Fy(UUks0`l}P-;8~Z9D`FX60P!46@~pa&>{#|qlk3ea&BCY>W1Ra90@>pX!k;%i zSM1))@)rH}k>`%^F}{8ER|TymWvttTgtOSPDSQ~Gpgvs*qtm)NZk7l;&1C-k0EUJx)`TKqw{2UR<=>Y=U`o;A%05-jhH47NU zs|JL6B@bl2JDjukR{gu8)|ZBKkZz#SME+r37C@h-2c#G^O*B#pqIbXtu4lXda1NN}2BGc-7*<)Jhky%Y(o0lP!D2ePmU5?AB8l5C+gkno46FWJ6~rp9T$#WU%$B94`Fsfp<-g(H^-olwjyHl$0BK8 zpCV$)dy|-tH)COsw+3}zpE7@7vC`#B(UyU_7yRYX>Ik@IwOouP;G4DA8~Xa2b(O{T zsZ*h_X%cwN{XJBNVEjpJuhdDs$L)^pJOQ5HU9up=r1w8+f$WlA z<__WWMR|IFws^oi-m|@Q38gR!OR47Ts~RPg8@0{$8M7eCiX*Q^P-v2*l9AdA6HN77c1Xgj^Bca}+nDZui7) z;e&1B_`~unW3u1Kw;Q{nc^;V3_xNr!+J95$iF4g88Dxq2@?QFJfKpQH4bLSH=5xLiPv&Djb#I3nMgVP^ z4MmDyO>q~Xqa(2QuW%QP$X*H+Ja6F;RJ#}sRr@3P&BcT70k;4K0>Z)KXF{2R0B>+F zPryI0YY2LM4=@7^!@ic~DrCHYe<*3Y;tRQCkGjv~HMh5!S?h#11VG|T)?%<@F)j=RGE=PwgP1Z@n}-`chf%~`+Jf{-EW zv*&6^g&2a(`GwbqJ{WJ#eY?nS`lz@MlB(a)y?rwMedYUmCw9uf(Be-^oISGXLZMG2 zH8lpb%Jw&}ZV$3?dqn-WvuiLF_LN?d6nn99;Y_ol487Zu!&Y$@Y!SEILcDfliN-b} z8@Aa2(CQ%5gnVv<&Tl?Zn@n6vR1K8Dyf*qr3=ZqD1T@W=xqVBys zS2s1;nFXMy4&zI$ zAnn9e?A7s7T9wyQY)xJLr$%f|@5D{7qv9K5WuEP79bPTb{Tyw`x`|kDp^$(&OFkvD zf9YYT<_Mlu@VDiV3VeN81KO-1liH{K4lz-2octk_^^V-ct^$*?7zROxUv|E`Ig+R5qJn&p~w$y|xF zuS+d7k9qT7^2a?Zig(B}piVj4PhcW(!${VeKowusTw2ym<;m8Xf;&y@Uh$t=3z`x( zI@^ZG^QfW@0~iUbiPY5ZK9DNRmIXwbf42EAz&vzUJu2~fn}W->azVxc<^7VyYvHK# zH|vJ2lkt4beRqV&5ioN}-6DwG7V(hR&Nh=Ujw5iYwWx_d6X~3;}OC^4OTn>l!a1r<3BjyRQrBrSV{#F7*Wza=mN|KM?WbFc{ zh)<6eLMj~ZxLwQkOYnbx3jPDIusFydAPoc{ApeKJlz}x#EUkiqm4PJ@t%v}QTLe!h z$zRQ#)=^R6FYBSlgUP{ANsL&6hlQZWddj)SbrS=|<+3wC91Rq0?6&J$HMy$YY;AOe z2=d?PHw0?7FPmC7tUsGSJ~lRbS~pfO$3OFKcQVLLh3EwV&b`k*r@WIt*^k4wxo;zE zV(g;Z=JCcnybawvexAimJo5m1pbG`+yi`6N$~G=yu<W~?W*FwMdJYDOx}9LV}u;UUF! zP~FL*!}_?Qhw!*r0>ywjANq%R4@whB;w`hfwFy<_)(XBT?Bk;dOdQj|b1`pdQr4mb zag^WWd8LZ&!e(-!pIaTgx%IsC4=NChc-Jzfzlb8$>w?8l!{ULIhzB^eL2L}4(;#c$dS z7P6g3mL1_3vz>!c-k_c{v{>SB^gBD;hgwQX5~G?{j#FOs z{L;xuVH9^KDxQOP%#nb-8E8vOjgmHyszT5nKKi7dz^o}~k%Mr=BQ^vE5c;JiTQ4itT#oI%b!j-K%Y(^^EtLhz!IVIhH3mw4*luB;6oL1*}+cGYSY zy<@`q&kTSzIO_auL9?_)xb_|a%<1AjD!5s zfmpSH7BS;t=lVR8!&_zS#*8haDm=E#65m3Qt&R9*7X#7Cvw&4rnTwJwz=mBjBV{bB z8?=Y%-k*A7sbMQC>9w0Gl|Q&cYF)K~87FZPCJG=Z7}~Nr&32Bx^9&O2JeT0U5fLk4 zMn65vv2s#3!Dcp{n~o1#3rDWg@9+|L_NB)>ds+D75+&sq+HBu)rt)MpB(>H`uQlH| zZ688BOKal-Pv5kj0jj-=cnAZD3d*!C?G4`nhn;O!FxQP&?I5V?Xc51L6WL9{9o-(XVx=R#fdfPzazpr@=>WC9{ig%aJ&X5EVIM#xJREn8$e! z6_-4>Vn)8Tj_7Pvp|_rf)tw!?_#5ehtI%?!6_tyI|72J$D)+RB`HzYp=}mHAq0O{G zvrA%SG1G#lAinsB7qeSxHzZUiyWcf2_>9+Xg5oq!Lvb$*^Iy0hJvDOcwLEBD2_k^6 z%XA(vKgqniQj1+px&L-Qj_Z^l#Mxy$Kim9D##V3AP&*SWTn82?Z|*6Kbu|~8@dQ_D z-47A#z4uN5te9 zr@hwOEhpY%u@LBTB`vln@x+;L9|(~C8AL{Ge&|Kj@f&TfXSxo35wdOZ)k=%u>$p)p z)LOD#AQIBkIVNKGK>L?B*2RV|lPyx0)s*lCmsFWe$-a|x_3$r=c=9=|y6lIbZ1m3u z$UYBPzuU-_hi>y7lZT{+srN5M>d@B$ajJ4CWi2}@-6oyXkZ!==VjqHh|8;;dMX6OY z)WP(f*D7HdJjZXOqA24AOIyC^$5UI8$!tKPlY-}XvlB`|dtaf?11?{X0Poz(Zd#ApYShO3T5*E@$nIz*5}=`#;BOSam4YZCSi8B!e4=rxbq8; zHCK9LeVOvJUBQL~h{FmFG4uclaJJ2hv-zstntdUB#|%)&AayFRnoT9dbFY!Th<}YR zVQfL8h88D%ZT%_>q%mtSs+RjT^O|75F#?Kcxx<*wBKO*vqw_sGhN-s39t32whxT}1$|yj*v1C?#nvF+l zf4R6!qe`O(XVC|>n0A|tE_bdb4meSRn7iBQl=j13{BO)zGxYo*lyqFO96kGaa!*aq zQlU#WC913$V4J=}xuV5~q7!)o^#U#eEGbK6{8oz%rpC;}1F60-^F$1bv0%WAkWFXJ zA{q5C%A6kJo?RnXV2_Y)&vbuo-KV~rWp~KiHSV)rr zx6M;fFG33#i8{-Z0&8?yAhr9@!UPl|*-QyeTYZ!W;sSw_Pa&5 zhJ_uKWYP32|0A)pT`+62c9=lfQe!Zo&Eu3oQ~y{X2eLGG8)MV}raQA(7E};o@FA6% zfEDt#DQwugo>bfuN~tQSIr+sL3&lN`OOsRPI4^6?Ipytyi+Q?_XQ^}TxQ00o+n*ku z#R`^pZ5P8 zS`BY{C|??1-Bg5?8X}H#_B?fvSSh*Bherl-|Bl_gg_urhp9GtW>4QZB?u!wWFN$~B ztS5oAm@nmRi0jG+tR*L4=iu|r?-a*ayjVlSQTp`r1ki;r@36*k4dxer!}dlp6lwbi zDHuKNy9+}ap;)--n?Swi`xQPM2g{7jt;#L#aZ)@Scb`_@pnu9gW1MVg>|FbgBd67W z%J}b}GUGyd!6FJ5V|y8}leK1d8)~pMclk-@Y65OwYu2@H@}xhiDLE%y0faO>yq5Q9 zU*w3jNPsXlC#DNB*H<+pD?O4jdV!&_6=&j>IQh6OlHbR8m_*Brt817Mg^bHz6GH&a zuV}=y=Ni<}Eu8t0|MC`&PeI1Z7DkK{(2@7p-Dfam<-R#ppi6sD)a*7$J9+I4sBfH| zTWAe@r(Oy!o*{gEAATFKhXx3^3GQmBZ&T2H&;$DX4aG;8hSqX{ZxEjAbm51jlPoBf zK{j3Ca}b;hk~Is<9SU-wH~0ME?gFi!dkr?hymJVaDD7dv&BP5NrqAF}fU!@KVTy-D zDh-3f;_NSzC;;j4Ry+kN$l(0iL3u9Qd+(nAECs^16%V?V-KDPV&SKYBBcF!dNuJIZ zEua_D#8wx=SdWDoe!eJ=A-lK18F)yjB0kp(G7>eMs!V{-o&!rd9HKmQ3}aeoU@&3`|4+zQ`C z2l+7y3Q=Se;q>;S^<@!rTVCw4ZT?^&3{d{n%GhzrI?Dgz#g%64ms8g62F?s}3Q)ff6N{8kq4hm(rbv&+dIiMc| zy#kvTd>@f_B{afgW7^cr-BmTJ#mko+6OmJ_s3E^3w9<&Vbw-HZ{uR+?3;(P*>Io|T z{vNRc?In_)Ll=WLj^20{ZeV`pT5fS-CR*DZE<8rDB$Nkke0FrhvLeAc8BNeM+UjDI z8@DWWUlN`pwc<+dRjPT8=qG~+9H2Q%3^rwZLNjol9jPLE*2SapXQ06MyJNqr`g2H} zR4+$hiMl79LBSVft+J992K_cly8CY>YoBHk+uk8#umK7?wTu3VU0Og%>{H^=8Uq@0E5+J4_0=((cM-Y~(EK%Px)mJ^FR_7U}6eL*Hq%sY}5>howp>c>k zDyAt25+$V&0KSz8I~y%Cig*eOvmfbvzFy0a^Rtjkau)~m8`IUwI%2tLfn(ASTfrAf zdd1qN9W8l&Io%)qJ&Nn88?@4vx!*y?_!SY>Kvk(mt-3=P9@$?M01rRSK+hZb^*9v! zK={_1DZabcPXE-|8QX{PDXiK?-a=m6hSK2%%TZ&7W47vOu8c~!eKXmCn===Bn;`A* z@)|d-N*z5$rbWgnwiupc*{pbBBNk0`H4I?D&V$EQ3C)GItRC69Xuwy*9K+`Db8XYo z^9AHJRN)H8Jbh>vKw3~^z$phWW1whpD#~h8NOTezK{i$&&6S*_f7}zxZXs2L7zs$= zHh1o+LH5_Cg+NBs>&IM$qD(e4;)8327>UI#dju^zES&EsrI+>`$Q&g1bux*U`i&VM zq82o#&Ym7>;?OAS)4-4?Dv{Qlfy^v^H|60Kz3SAYy4*xsI2x#+seC9q z+amkb#v}9CxAOi?rkW@EJwQQY%_lR-(o8B&m(%l@Rp=^8g;Zo3$ysu?@cd0h4PDww zSYn6QZ`5`Upcdy+$1j{r4e}{WQ|L{dCm%bq#g$F!zecw%X4RHIb|Eq65*DdpPuVC} z-t9lVJKr%vyJ=5y+sCYl_v6y54RI1b(SOt>(F!}4>80w7Hs5>IJ+m|?!qLLP(Mu{# zaVC)WM|^)FzkR{d&nmohEXz8Q&$}x=O9}y&oW%|RW{c07oCarCy%KfRE`Ez3v2th- z7V+9R%R1+9#FbKOWu@KtYI#XiD7|?^_D~8!G1ag{{dq<{rZ`6`8BsK7$S73(y}Mo`d{-d5$35LI zzBo`DaBK7-9qD%=C?mM5`L;pwVP>Ttsjn~(I7|)crSYK>?`8P%johhuPW8&W=Mzz{ zSY_*OC6<=h=WT%~fd~QkB}+`6ECdcdXJP;&?(zmhE~$%8rJ#Z-dsW@ZQ=(G%)4 z@&PU?cf_U6n=lVhm1pz_)17&0N2sXpXD>goy7fq0o{4Vs5e{7lmm7u7i~C^eO)Xji z;AV?KW(zR&#f0t2vsM>;c0}xKRd^@!vP7G6>PnbzOV@qy#9P++;n{+$+Raaor=Kt| z2k~a%Jh8D3Vi!G0vF;tV%rWEkjTr-eGoFw|k{OY9O%j!crl67=RdsN>^kRPa{E1bXFenNL%cy z#GIB*!d&}fVc}lHt6x*;{b8Cf5cw+y_g&u`>+;xf$PHBN; zHh^SE`)A;QWc-eo;MXg8b`NmwsS<2%)4F8JyYPUhTk10y#Co8egPgjz)(0QU3HEYf zSUC<%t>DNlE8&Y(MN(7Ar9*fD;OUy&DK|%49H$-MMlp`qxsoYL4;$$NeJ+xG<{wRA zSFY3Y=e!B(5J|Z9>bHI4o5=^AVE)e2pDr->B!eT@)f=M{l^H?SjZVRwiRPVKE!@X0 zLHaot#tDQ(*^?ecYzlJ>v%9 z&x7&#aEWAABA=|6UdL*#Y44NU#ZD}FT&h0s=34&2@LaFJ+npk#*gfTjKe@P9>K1of zmg1ZXkx>sy7i_Ipe~7CM-~grhuZPXuq_zFu%+~b!$&K5I{WvFZGNY4Yb4z??tE_1{ z$6yFJ>AqsM63uwPd(7L#&IP6YEC2L&TP{_f&z=4QKJ_%iw09)a0F>8GQoyk{J3U^_jolzSa~chV)8$gpx+VIg_JhX6M2zDK)hiEqHb5UlX;u56GHV3}{qK&~+5cE~?B zk8n)$TCZNAP{*(cnD|wP_LIK}s_6~_eS09YF?c#>0iyoufaZ$`(uoD~>Dd!|1KuXk z_j))KW=SL{gY;wF^b zl~kxem8r;Z(d3u|D77T#s!z@vDC{onB!RK^e=qI?feqXfTKVEIl<0sJ{O+Kbxh~*q zk@-|-yon!-vk9x4YQ|+_;9cxsT^b?qQB=yZF;T&M^c(@r76NgHr@wB}weI2id)IB`o#~$Te0zd>bMp-mhp?5dh@8 zc3Q3=j>E{u@Q*=#ZOAEqEwSh$Y1&kJ1WXOMCmvOB<1F`xi$B@bq@h{>dl-zGg~B+g zJhX~q7cH|rd$O~b{@&kIFbQ!r)*+OsKk+_~>976x&zHR}ticL;@J#Ivl^yF>)>0q* zCD{K_O)icAV8jA^puPjv`8ULSET*LmyCC zlhQ!%1h1W2ICUBFK|2vjpEzEvJ&$NIDo03a1t(|QVJ=hJlF6&xKan0^ksjkx6~uGB zio*>=NLR1MT34Kt4R$=j4JxLmD*`s-7@pBjOWrI1VeeSp2|_2BrvxWI^7p)#?x&6o zVp2S9b*Bh12<D7rEf^1Z`0^MFrF0^s~&+!3(y%4x*NRb ze-brRs_uCTyC7UnI6Y%M$6Bfrej@cugXk8f%I zYin58;zob;M%q|)o|G=t1*PWCmz8Mn&ysq2r3JgTVbAsxE;>)64$%*z=n9Z~)~F9$ zP4MoC$bMw#2;M0L=?*eJ1CB}iNvXn zkk4Khvg=yBKbabmK(z8W1tZ3icl%h%xLZG-+VI7*h zfGsm6#ufO$>O~(~q&^LDKNy6IfOv$U*OGn9#BX1muo$85V^I-aL-|InoEdczhKWO@ z@_q0|dE$1nr_nYO+3$eIhvQjN#;$6B`{dj_lvVIg_=H+>S}2cQU7<;{Ct#nqJHB*M znKQxrRE5TVT_-hG9fIC6?;-aWiag zPR>ykdN?8L8%aEXB|7TEG-OZ@O-Q14geFgbq)Y)PUa|`n=l5~deYos|=cXb6jh#s4 zS3xZi|L0r&j@u-D<=f=ZbjwZ1mi&5o)ik&qc~3bvD^Y$2*GxnxSo z&j&FmsrEiXs^%!AHo;K!vT#*oy)jZ`9m>Y@7+hyvUC78P1-Hk=r!^5WYe=3a)Gb>|V(VTy%PN@Xtq2FItWvlTz196y0t8lu*TuqdBwjHbb~ zb1RS|Mb-%OWkhO}+SyIiGR<$E) zZRna>J|;xu#8ulcUP}hNlQR|nEoAr0O`D?|^Uyywd!lRv_7?i$i=)9u!6{N>6pCen z_|2R=>ki|2AZ|o?pm9A6?>(aStzzB?fpkUdG&2y0R)-yzr;O!5SS3R<1!2UK-s`3rRUS!Pe@WFyR!%=R z#V){R0PvR{O_3JXlv&Z9o<`Yj-4aJ4xsU{g|V!J?CEEUdoM*86d6?P-5- zB>n@wc@3Rb6?AWN-%1b;aNV2sWc>4yJ;^EXk5m;CpU>LsnI3xsHuo28l?GL+=!No* zAm5W~psTp*@C|WrQH2JNrGzaZri<9whoD!T z^2}zH(YT&DDm_>t(<0v++codvM6h~Exemv4T-n7KQalW!Z zdtx{-01B7Dlg2#pxv;_8+Sp9srg6OlLJYsGe$8x>?DNLMUI|A!a7~|jTY}z}h<|xn zi_x}rjT>ekYki_;u3ugV8WbnaGZvF%U h;$Z7)VP((gX=ke_3jz7R0D}K2%YV7*JkS4|{Xap(*5m*H diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/Commands.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/Commands.class index 06133e0c58a96a55f917c66dbab9675e93b4a585..6874aefc755f4db1a13d5ec252f57c1f79e72d4d 100644 GIT binary patch delta 482 zcmXYtOGs2<6vuy`qoXEs%WE-rnwdnbMYjtQ;i4uG!-eV2O&|o43!zQqDhQG?a2tF( z7p=4#NMYDxQW0I)Lz%J67v>{m(lPOsLS@=`oLqgs56=0Y^E-QyhnG8J{-PuqWP-}K z-{H645>vEd2!s^orzdRbHGiQR(uP%5+v1qhuZgsB)8(#X&ZN1_<(6a4r8(kK@0j1x zT;p=hF&ENY;8JaOk+99hC}S=)_PHoYm#Twz#pQ}_v#xp?3F!^%LQ@BydBzmanWvNQ zydX&zE4*ZrS8Vf!KSbH3n-o1NlU|iYpURj9n_SIiHuO9|ycDTek-`E)Gi7dvf`J!AD6RCP<7@;#^{ci0oO(D0O_{ z4r4rGoTp6C&!mo@Z1PRZ7GI@vmJ`hB+TiWLg5)LeiIbm2$y(wR%bekdP6Sh>s~llX zrmPbZ(_(&dT5L=BMLEB@F4i~Lp@F~L6N_g4(LqXE;r4tFUb%r!c`@V;L6xiH;gWqI Cf{H%? delta 449 zcmXAkJxE(&6o#KKrfLhh;uT5KtBs-#y>C8d-8kXqA5p#I&UWA4ro9;U;k+c6Uvu6OBl%pV!9acOnT{R}s|ymidO z3>UaG+A|#6=4pg&mu9;%!kNpP|L=u%15H`)v2;4{s%@M&6C{}AkSR`>=8PGV%yP{f zKbhw@QEpjKibdsNNj>3{^07=FU_ZJrK(746iaz>Ll#(r(m*RS>hk_-_tH*<>+7+3u z@{~0U)+N7z#U|Cnc+F?RY|+RUTKP&h-}t~bW72M!9UXt(>-#RZb|smhkUiaIbp;P( z-w{5J@k?`yQ(j2>3eNR~bzgnSGp^)Hk|I)+iBCCcs>G>*U$k&TySR1mhaUcl!5ts@ Yr$faf`5v;B7oV6KDhEsD>UeS017v=Kt^fc4 diff --git a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java index e152ef5..b68b6a6 100644 --- a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java +++ b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java @@ -168,6 +168,7 @@ public class Commands implements CommandExecutor { break; case "getlasterror": DoGetLastError(player, args); + break; //<-- 2015.08.10. case "confirm": if(ReloadPlayer==player) DoReload(player); //2015.08.09. diff --git a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java index 9e93192..721a62a 100644 --- a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java +++ b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java @@ -416,7 +416,7 @@ public class PluginMain extends JavaPlugin writer.write(currentLine + System.getProperty("line.separator")); } writer.close(); - reader.close(); + reader.close(); return tempFile.renameTo(inputFile); } catch (IOException e) { System.out.println("Error!\n"+e);