diff --git a/CraftBukkit-Patches/0068-Fix-links-in-chat.patch b/CraftBukkit-Patches/0068-Fix-links-in-chat.patch new file mode 100644 index 0000000000..a84f5a2e5d --- /dev/null +++ b/CraftBukkit-Patches/0068-Fix-links-in-chat.patch @@ -0,0 +1,75 @@ +From 55f17d7a2a29d0d8f377748eedc53f6425253e7a Mon Sep 17 00:00:00 2001 +From: Thinkofdeath +Date: Sun, 1 Dec 2013 10:33:55 +0000 +Subject: [PATCH] Fix links in chat + + +diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java +index 2e163f2..7d1ad13 100644 +--- a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java +@@ -3,11 +3,15 @@ package org.bukkit.craftbukkit.util; + import java.util.ArrayList; + import java.util.List; + import java.util.Map; ++import java.util.regex.Matcher; ++import java.util.regex.Pattern; + + import net.minecraft.server.ChatComponentText; + import net.minecraft.server.ChatModifier; + import net.minecraft.server.EnumChatFormat; + import net.minecraft.server.IChatBaseComponent; ++import net.minecraft.server.ChatClickable; ++import net.minecraft.server.EnumClickAction; + + import com.google.common.collect.ImmutableMap; + import com.google.common.collect.ImmutableMap.Builder; +@@ -29,6 +33,7 @@ public final class CraftChatMessage { + private ChatModifier modifier = new ChatModifier(); + private StringBuilder builder = new StringBuilder(); + private final IChatBaseComponent[] output; ++ private static final Pattern url = Pattern.compile("^(?:(https?)://)?([-\\w_\\.]{2,}\\.[a-z]{2,4})(/\\S*)?$"); + + private FromString(String message) { + if (message == null) { +@@ -37,6 +42,8 @@ public final class CraftChatMessage { + } + + EnumChatFormat format = null; ++ Matcher matcher = url.matcher(message); ++ int lastWord = 0; + + for (int i = 0; i < message.length(); i++) { + char currentChar = message.charAt(i); +@@ -76,6 +83,28 @@ public final class CraftChatMessage { + finishComponent(); + } + } else { ++ if (currentChar == ' ' || i == message.length() - 1) { ++ Matcher urlMatcher = matcher.region(lastWord, i == message.length() - 1 ? message.length() : i); ++ lastWord = i + 1; ++ if (urlMatcher.find()) { ++ String fullUrl = urlMatcher.group(0); ++ String protocol = urlMatcher.group(1); ++ String url = urlMatcher.group(2); ++ builder.delete(builder.length() - fullUrl.length() + (i == message.length() - 1 ? 1 : 0), builder.length()); ++ if (builder.length() > 0) { ++ appendNewComponent(); ++ } ++ builder.append(fullUrl); ++ ChatClickable link = new ChatClickable(EnumClickAction.OPEN_URL, (protocol!=null?protocol:"http") + "://" + url); ++ modifier.a(link); ++ appendNewComponent(); ++ modifier.a((ChatClickable) null); ++ if (i == message.length() - 1) { ++ finishComponent(); ++ break; ++ } ++ } ++ } + builder.append(currentChar); + } + } +-- +1.8.4.msysgit.0 +