diff --git a/Paper b/Paper index a0b8b886c..d35903e6f 160000 --- a/Paper +++ b/Paper @@ -1 +1 @@ -Subproject commit a0b8b886c894e14db15c6ab720d2831f83b2a848 +Subproject commit d35903e6fa3ec9c2ecb77ba2273ccd4a0c39a6c4 diff --git a/current-paper b/current-paper index 0ffe89dba..d79569099 100644 --- a/current-paper +++ b/current-paper @@ -1 +1 @@ -1.16.3--1ecdab9bcef4e16833a40e9637f335822c5d5a20 +1.16.3--61eec1654f42a8e0092870650ef958ac4b06b7fa diff --git a/patches/server/0001-Tuinity-Server-Changes.patch b/patches/server/0001-Tuinity-Server-Changes.patch index 98a9818a5..84f6aa357 100644 --- a/patches/server/0001-Tuinity-Server-Changes.patch +++ b/patches/server/0001-Tuinity-Server-Changes.patch @@ -279,6 +279,10 @@ Simply return. Do not run vanilla update logic when eigencraft is enabled +Optimise tab complete + +Some of the toLowerCase calls can be expensive. + diff --git a/pom.xml b/pom.xml index add3a9c1a..5e25ae55e 100644 --- a/pom.xml @@ -481,6 +485,88 @@ index e7624948e..77df68888 100644 // good thing this is only used in debug reports // TODO check on update int ret = 0; +diff --git a/src/main/java/com/mojang/brigadier/CommandDispatcher.java b/src/main/java/com/mojang/brigadier/CommandDispatcher.java +index 103576715..e8fdbe7b8 100644 +--- a/src/main/java/com/mojang/brigadier/CommandDispatcher.java ++++ b/src/main/java/com/mojang/brigadier/CommandDispatcher.java +@@ -590,10 +590,11 @@ public class CommandDispatcher { + final String truncatedInput = fullInput.substring(0, cursor); + @SuppressWarnings("unchecked") final CompletableFuture[] futures = new CompletableFuture[parent.getChildren().size()]; + int i = 0; ++ final String remainingLower = truncatedInput.substring(start).toLowerCase(); // Tuinity + for (final CommandNode node : parent.getChildren()) { + CompletableFuture future = Suggestions.empty(); + try { +- future = node.listSuggestions(context.build(truncatedInput), new SuggestionsBuilder(truncatedInput, start)); ++ future = node.listSuggestions(context.build(truncatedInput), new SuggestionsBuilder(truncatedInput, start, remainingLower)); // Tuinity + } catch (final CommandSyntaxException ignored) { + } + futures[i++] = future; +diff --git a/src/main/java/com/mojang/brigadier/arguments/BoolArgumentType.java b/src/main/java/com/mojang/brigadier/arguments/BoolArgumentType.java +index cb993ca10..849686f7b 100644 +--- a/src/main/java/com/mojang/brigadier/arguments/BoolArgumentType.java ++++ b/src/main/java/com/mojang/brigadier/arguments/BoolArgumentType.java +@@ -34,10 +34,10 @@ public class BoolArgumentType implements ArgumentType { + + @Override + public CompletableFuture listSuggestions(final CommandContext context, final SuggestionsBuilder builder) { +- if ("true".startsWith(builder.getRemaining().toLowerCase())) { ++ if ("true".startsWith(builder.getRemainingLowercase())) { // Tuinity + builder.suggest("true"); + } +- if ("false".startsWith(builder.getRemaining().toLowerCase())) { ++ if ("false".startsWith(builder.getRemainingLowercase())) { // Tuinity + builder.suggest("false"); + } + return builder.buildFuture(); +diff --git a/src/main/java/com/mojang/brigadier/suggestion/SuggestionsBuilder.java b/src/main/java/com/mojang/brigadier/suggestion/SuggestionsBuilder.java +index bc0024adb..0343f6663 100644 +--- a/src/main/java/com/mojang/brigadier/suggestion/SuggestionsBuilder.java ++++ b/src/main/java/com/mojang/brigadier/suggestion/SuggestionsBuilder.java +@@ -14,9 +14,16 @@ public class SuggestionsBuilder { + private final String input; + private final int start; + private final String remaining; ++ private String remainingLowercase; public final String getRemainingLowercase() { return this.remainingLowercase == null ? this.remainingLowercase = this.remaining.toLowerCase() : this.remainingLowercase; } // Tuinity + private final List result = new ArrayList<>(); + + public SuggestionsBuilder(final String input, final int start) { ++ // Tuinity start ++ this(input, start, null); ++ } ++ public SuggestionsBuilder(final String input, final int start, final String remainingLowercase) { ++ this.remainingLowercase = remainingLowercase; ++ // Tuinity end + this.input = input; + this.start = start; + this.remaining = input.substring(start); +diff --git a/src/main/java/com/mojang/brigadier/tree/LiteralCommandNode.java b/src/main/java/com/mojang/brigadier/tree/LiteralCommandNode.java +index 772057879..e5db29d4c 100644 +--- a/src/main/java/com/mojang/brigadier/tree/LiteralCommandNode.java ++++ b/src/main/java/com/mojang/brigadier/tree/LiteralCommandNode.java +@@ -20,11 +20,11 @@ import java.util.concurrent.CompletableFuture; + import java.util.function.Predicate; + + public class LiteralCommandNode extends CommandNode { +- private final String literal; ++ private final String literal; private final String literalLower; // Tuinity + + public LiteralCommandNode(final String literal, final Command command, final Predicate requirement, final CommandNode redirect, final RedirectModifier modifier, final boolean forks) { + super(command, requirement, redirect, modifier, forks); +- this.literal = literal; ++ this.literal = literal; this.literalLower = this.literal.toLowerCase(); // Tuinity + } + + public String getLiteral() { +@@ -66,7 +66,7 @@ public class LiteralCommandNode extends CommandNode { + + @Override + public CompletableFuture listSuggestions(final CommandContext context, final SuggestionsBuilder builder) { +- if (literal.toLowerCase().startsWith(builder.getRemaining().toLowerCase())) { ++ if (literalLower.startsWith(builder.getRemainingLowercase())) { // Tuinity + return builder.suggest(literal).buildFuture(); + } else { + return Suggestions.empty(); diff --git a/src/main/java/com/tuinity/tuinity/chunk/SingleThreadChunkRegionManager.java b/src/main/java/com/tuinity/tuinity/chunk/SingleThreadChunkRegionManager.java new file mode 100644 index 000000000..b57006d04 diff --git a/scripts/importmcdev.sh b/scripts/importmcdev.sh index feee10094..fd6933818 100755 --- a/scripts/importmcdev.sh +++ b/scripts/importmcdev.sh @@ -106,6 +106,10 @@ done # # group # lib # prefix # many files #importLibrary com.mojang datafixerupper com/mojang/datafixers/util Either.java +importLibrary com.mojang brigadier com/mojang/brigadier CommandDispatcher.java +importLibrary com.mojang brigadier com/mojang/brigadier/tree LiteralCommandNode.java +importLibrary com.mojang brigadier com/mojang/brigadier/suggestion SuggestionsBuilder.java +importLibrary com.mojang brigadier com/mojang/brigadier/arguments BoolArgumentType.java ################ (