Remove getCubes patch as under some circumstances it can loop around itself forever. For anyone wishing to reimplement this patch, the rationale behind it is quite simple, get all cubes within each chunk at the same time.

By: md_5 <git@md-5.net>
This commit is contained in:
Spigot
2013-12-22 09:59:17 +11:00
parent 3d37af4544
commit 5261962003
74 changed files with 7044 additions and 68 deletions

View File

@@ -0,0 +1,104 @@
From e550640b2f560ef5af9f93c5d7002ac79d3ecbd6 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 cc8e715..5607df1 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,8 @@ 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("^(\u00A7.)*?((?:(https?)://)?([-\\w_\\.]{2,}\\.[a-z]{2,4})(/\\S*?)?)(\u00A7.)*?$");
+ private int lastWord = 0;
private FromString(String message) {
if (message == null) {
@@ -38,10 +44,14 @@ public final class CraftChatMessage {
list.add(currentChatComponent);
EnumChatFormat format = null;
+ Matcher matcher = url.matcher(message);
+ lastWord = 0;
for (int i = 0; i < message.length(); i++) {
char currentChar = message.charAt(i);
if (currentChar == '\u00A7' && (i < (message.length() - 1)) && (format = formatMap.get(message.charAt(i + 1))) != null) {
+ checkUrl(matcher, message, i);
+ lastWord++;
if (builder.length() > 0) {
appendNewComponent();
}
@@ -73,11 +83,18 @@ public final class CraftChatMessage {
}
i++;
} else if (currentChar == '\n') {
+ checkUrl(matcher, message, i);
+ lastWord = i + 1;
if (builder.length() > 0) {
appendNewComponent();
}
currentChatComponent = null;
} else {
+ if (currentChar == ' ' || i == message.length() - 1) {
+ if (checkUrl(matcher, message, i)) {
+ break;
+ }
+ }
builder.append(currentChar);
}
}
@@ -89,6 +106,31 @@ public final class CraftChatMessage {
output = list.toArray(new IChatBaseComponent[0]);
}
+ private boolean checkUrl(Matcher matcher, String message, int i) {
+ Matcher urlMatcher = matcher.region(lastWord, i == message.length() - 1 ? message.length() : i);
+ lastWord = i + 1;
+ if (urlMatcher.find()) {
+ String fullUrl = urlMatcher.group(2);
+ String protocol = urlMatcher.group(3);
+ String url = urlMatcher.group(4);
+ String path = urlMatcher.group(5);
+ 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 + (path!=null?path:""));
+ modifier.a(link);
+ appendNewComponent();
+ modifier.a((ChatClickable) null);
+ if (i == message.length() - 1) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private void appendNewComponent() {
IChatBaseComponent addition = new ChatComponentText(builder.toString()).setChatModifier(modifier);
builder = new StringBuilder();
--
1.8.3.2