001 package net.minecraft.client.gui;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import java.net.URI;
006 import java.net.URISyntaxException;
007 import java.util.logging.Level;
008 import java.util.logging.Logger;
009 import java.util.regex.Matcher;
010 import java.util.regex.Pattern;
011 import net.minecraft.util.StringUtils;
012
013 @SideOnly(Side.CLIENT)
014 public class ChatClickData
015 {
016 public static final Pattern pattern = Pattern.compile("^(?:(https?)://)?([-\\w_\\.]{2,}\\.[a-z]{2,3})(/\\S*)?$");
017 private final FontRenderer fontR;
018 private final ChatLine line;
019 private final int field_78312_d;
020 private final int field_78313_e;
021 private final String field_78310_f;
022
023 /** The URL which was clicked on. */
024 private final String clickedUrl;
025
026 public ChatClickData(FontRenderer par1FontRenderer, ChatLine par2ChatLine, int par3, int par4)
027 {
028 this.fontR = par1FontRenderer;
029 this.line = par2ChatLine;
030 this.field_78312_d = par3;
031 this.field_78313_e = par4;
032 this.field_78310_f = par1FontRenderer.trimStringToWidth(par2ChatLine.getChatLineString(), par3);
033 this.clickedUrl = this.findClickedUrl();
034 }
035
036 /**
037 * Gets the URL which was clicked on.
038 */
039 public String getClickedUrl()
040 {
041 return this.clickedUrl;
042 }
043
044 /**
045 * computes the URI from the clicked chat data object
046 */
047 public URI getURI()
048 {
049 String var1 = this.getClickedUrl();
050
051 if (var1 == null)
052 {
053 return null;
054 }
055 else
056 {
057 Matcher var2 = pattern.matcher(var1);
058
059 if (var2.matches())
060 {
061 try
062 {
063 String var3 = var2.group(0);
064
065 if (var2.group(1) == null)
066 {
067 var3 = "http://" + var3;
068 }
069
070 return new URI(var3);
071 }
072 catch (URISyntaxException var4)
073 {
074 Logger.getLogger("Minecraft").log(Level.SEVERE, "Couldn\'t create URI from chat", var4);
075 }
076 }
077
078 return null;
079 }
080 }
081
082 private String findClickedUrl()
083 {
084 int var1 = this.field_78310_f.lastIndexOf(" ", this.field_78310_f.length()) + 1;
085
086 if (var1 < 0)
087 {
088 var1 = 0;
089 }
090
091 int var2 = this.line.getChatLineString().indexOf(" ", var1);
092
093 if (var2 < 0)
094 {
095 var2 = this.line.getChatLineString().length();
096 }
097
098 return StringUtils.stripControlCodes(this.line.getChatLineString().substring(var1, var2));
099 }
100 }