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 0bf1e7e..4a143bd 100644 Binary files a/.metadata/.mylyn/.tasks.xml.zip and b/.metadata/.mylyn/.tasks.xml.zip differ diff --git a/.metadata/.mylyn/tasks.xml.zip b/.metadata/.mylyn/tasks.xml.zip index aaeae30..111b565 100644 Binary files a/.metadata/.mylyn/tasks.xml.zip and b/.metadata/.mylyn/tasks.xml.zip differ 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 0000000..0b368ce Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.markers.snap differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap new file mode 100644 index 0000000..0b368ce Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.projects/RemoteSystemsTempFiles/.syncinfo.snap differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap new file mode 100644 index 0000000..265239d Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.markers.snap differ 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 0000000..0b368ce Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/.syncinfo.snap differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/org.eclipse.jdt.core/state.dat b/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/org.eclipse.jdt.core/state.dat deleted file mode 100644 index 4d8486b..0000000 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.projects/TheButtonAutoFlair/org.eclipse.jdt.core/state.dat and /dev/null differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap new file mode 100644 index 0000000..0b368ce Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap differ 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 e87f8a2..7e7af5e 100644 Binary files a/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources and b/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources differ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.snap b/.metadata/.plugins/org.eclipse.core.resources/.snap new file mode 100644 index 0000000..87ad877 Binary files /dev/null and b/.metadata/.plugins/org.eclipse.core.resources/.snap differ 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 b97e7c9..44cd707 100644 Binary files a/.metadata/.plugins/org.eclipse.jdt.core/1508644233.index and b/.metadata/.plugins/org.eclipse.jdt.core/1508644233.index differ diff --git a/.metadata/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps b/.metadata/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps index 68afc21..00892b2 100644 Binary files a/.metadata/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps and b/.metadata/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps differ 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 9abe3c5..38192cf 100644 Binary files a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/0.png and b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/0.png differ 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 c1396b1..56554ec 100644 Binary files a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/1.png and b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/1.png differ diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/3.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/3.png index 31311ab..d198a93 100644 Binary files a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/3.png and b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/3.png differ 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 834bd74..0000000 Binary files a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/4.png and /dev/null differ diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png deleted file mode 100644 index 56554ec..0000000 Binary files a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/5.png and /dev/null differ diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/6.png b/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/6.png deleted file mode 100644 index a95f608..0000000 Binary files a/.metadata/.plugins/org.eclipse.jdt.ui/jdt-images/6.png and /dev/null differ diff --git a/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml b/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml index 1ad48d3..d9b673e 100644 --- a/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml +++ b/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml @@ -10,4 +10,5 @@ + \ 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 3436167..06133e0 100644 Binary files a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/Commands.class and b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/Commands.class differ diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener.class index d36288a..d1e54ea 100644 Binary files a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener.class and b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PlayerListener.class differ diff --git a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain.class b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain.class index 61fcade..a146909 100644 Binary files a/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain.class and b/TheButtonAutoFlair/bin/tk/sznp/thebuttonautoflair/PluginMain.class differ diff --git a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java index 659cf9d..e152ef5 100644 --- a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java +++ b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Commands.java @@ -35,8 +35,8 @@ public class Commands implements CommandExecutor { { String flair=p.Flair; //2015.08.08. //PluginMain.AppendPlayerDisplayFlairFinal(player, flair); //2015.07.20. - PluginMain.AppendPlayerDisplayFlair(p, player); p.AcceptedFlair=true; //2015.08.08. + PluginMain.AppendPlayerDisplayFlair(p, player); player.sendMessage("§6Your flair has been set:§r "+flair); } else @@ -86,7 +86,7 @@ public class Commands implements CommandExecutor { } if(p.FlairDecided) { - player.sendMessage("§cYou have already set the flair type.§r"); + player.sendMessage("§cYou have already set the flair type or your flair type is known.§r"); break; } //p.Flair="§r(can't press)§r"; diff --git a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PlayerListener.java b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PlayerListener.java index dc0378b..655e1ec 100644 --- a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PlayerListener.java +++ b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PlayerListener.java @@ -21,7 +21,7 @@ public class PlayerListener implements Listener 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\"}]}}}]"; + String json="[\"\",{\"text\":\"§6Hi! If you'd like your flair displayed ingame, write your §6Minecraft 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); } } diff --git a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java index ceca4ee..9e93192 100644 --- a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java +++ b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java @@ -214,7 +214,7 @@ public class PluginMain extends JavaPlugin 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 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<>(); @@ -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) {