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 }