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