    001package net.minecraft.client.gui;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import java.net.URI;
    006import java.net.URISyntaxException;
    007import java.util.logging.Level;
    008import java.util.logging.Logger;
    009import java.util.regex.Matcher;
    010import java.util.regex.Pattern;
    011import net.minecraft.util.StringUtils;
    012
    013@SideOnly(Side.CLIENT)
    014public 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}