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 }