76 lines
3.4 KiB
Diff
76 lines
3.4 KiB
Diff
|
From 55f17d7a2a29d0d8f377748eedc53f6425253e7a Mon Sep 17 00:00:00 2001
|
||
|
From: Thinkofdeath <purggames@gmail.com>
|
||
|
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
|
||
|
|