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:
104
CraftBukkit-Patches/0078-Fix-links-in-chat.patch
Normal file
104
CraftBukkit-Patches/0078-Fix-links-in-chat.patch
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user