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        private final String field_78311_g;
022    
023        public ChatClickData(FontRenderer par1FontRenderer, ChatLine par2ChatLine, int par3, int par4)
024        {
025            this.fontR = par1FontRenderer;
026            this.line = par2ChatLine;
027            this.field_78312_d = par3;
028            this.field_78313_e = par4;
029            this.field_78310_f = par1FontRenderer.trimStringToWidth(par2ChatLine.getChatLineString(), par3);
030            this.field_78311_g = this.func_78307_h();
031        }
032    
033        public String func_78309_f()
034        {
035            return this.field_78311_g;
036        }
037    
038        /**
039         * computes the URI from the clicked chat data object
040         */
041        public URI getURI()
042        {
043            String var1 = this.func_78309_f();
044    
045            if (var1 == null)
046            {
047                return null;
048            }
049            else
050            {
051                Matcher var2 = pattern.matcher(var1);
052    
053                if (var2.matches())
054                {
055                    try
056                    {
057                        String var3 = var2.group(0);
058    
059                        if (var2.group(1) == null)
060                        {
061                            var3 = "http://" + var3;
062                        }
063    
064                        return new URI(var3);
065                    }
066                    catch (URISyntaxException var4)
067                    {
068                        Logger.getLogger("Minecraft").log(Level.SEVERE, "Couldn\'t create URI from chat", var4);
069                    }
070                }
071    
072                return null;
073            }
074        }
075    
076        private String func_78307_h()
077        {
078            int var1 = this.field_78310_f.lastIndexOf(" ", this.field_78310_f.length()) + 1;
079    
080            if (var1 < 0)
081            {
082                var1 = 0;
083            }
084    
085            int var2 = this.line.getChatLineString().indexOf(" ", var1);
086    
087            if (var2 < 0)
088            {
089                var2 = this.line.getChatLineString().length();
090            }
091    
092            return StringUtils.stripControlCodes(this.line.getChatLineString().substring(var1, var2));
093        }
094    }