mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2024-10-01 08:38:00 +02:00
4da7b3aefc
Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Tuinity Changes: 3e77330 Updated Upstream (Paper) EMC Changes: e45a78e4 Update the API as well - setTargetRange to Double where null is default FOLLOW_RANGE 9fc6891d Default target range to the follow range a1e2e2a3 Fix an issue with players in vehicles in vehicles desyncing b6e2f202 Add a Dead vehicle reason to VehicleExitEvent 72b0da43 Use the correct entity local variable ad32d0d6 Fix bug with entity passengers not executing entity tasks 194aaafb Updated Paper cb3a7bb7 Always convert Lore/Name of an item to ensure consistency 6c63538d Revert "Updated Paper" 8837d5a9 Limit fortress spawns to the nether 005cdda9 Updated Paper 1476d693 Fix Lore comparisons to use legacy format 588f30f9 Quick fix the rcon log issue for now 475e626a Fix World Meta loading 3ad5f8a7 Remove RCON Thread Logs 7f3c4a25 Fix dismounting from vehicle when teleporting cross dimension 595bd307 Prevent NPE for PathfinderGoalMeleeAttack 0a64d9e9 Fix EntityDismountEvent reason c25ef322 Updated Paper Origami Changes: 36c0e05 Fix wrong circular dependency error if plugin depends on own provides 655fa5f Add option to disable legacy plugin support Purpur Changes: 79d304f Updated Upstream (Paper) bef678f [ci-skip] Simpler method of merging metadata files 3b18ff8 Updated Upstream (Paper) 25c7772 Apply the AppendingTransformer for `META-INF/services/java.sql.Driver` faf0db9 Bump config version to 10 3d1926e More base attribute stuff 43d6dab Updated Upstream (Paper) 2fd92fe [ci-skip] Setup repo for api publishing 26b0736 Updated Upstream (Paper) e704540 [ci-skip] Fix the remaining javadoc warnings a541703 [ci-skip] Fix import mc-dev task 64f5f9d Fix dependency relocations d7f1884 [ci-skip] Skip compiling tests as well as running them when using the `-Pfast` flag 3e08321 [ci-skip] Fix javadoc warnings (missing @param and @return) 1bfe697 [ci-skip] Remove paper's unsafe util 63b647c [ci-skip] Make it easier to fork Purpur using our scripts c453170 Fix relocations 7e331c2 Fix #118 Phantom fire time not working 844337c Fix lag from villager lobotomize check 2ec0dba Updated Upstream (Paper) 69c6484 Build using Toothpick scripts (#122) AirplaneLite Changes: ff087b7 Changes from Purpur 7263c2f Fix maven subproject URL 819c731 Switch to Purpur's Toothpick
199 lines
9.8 KiB
Diff
199 lines
9.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Ivan Pekov <ivan@mrivanplays.com>
|
|
Date: Tue, 22 Sep 2020 10:09:08 +0300
|
|
Subject: [PATCH] Optimize whitelist command for multiple additions / removals
|
|
|
|
Previously the whitelist command was adding players 1 by 1. This caused massive overload
|
|
when you were adding multiple players due to the fact it saves every time a player was
|
|
added.
|
|
|
|
These changes aim to reduce that load whenever you are using the /whitelist command.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/CommandWhitelist.java b/src/main/java/net/minecraft/server/CommandWhitelist.java
|
|
index 893d2c1c74ed28dcdb83b71762ccdcbfd50a8f9d..107091a4cae0e4eaba93f69ae91239ab891a90d9 100644
|
|
--- a/src/main/java/net/minecraft/server/CommandWhitelist.java
|
|
+++ b/src/main/java/net/minecraft/server/CommandWhitelist.java
|
|
@@ -12,8 +12,8 @@ public class CommandWhitelist {
|
|
|
|
private static final SimpleCommandExceptionType a = new SimpleCommandExceptionType(new ChatMessage("commands.whitelist.alreadyOn"));
|
|
private static final SimpleCommandExceptionType b = new SimpleCommandExceptionType(new ChatMessage("commands.whitelist.alreadyOff"));
|
|
- private static final SimpleCommandExceptionType c = new SimpleCommandExceptionType(new ChatMessage("commands.whitelist.add.failed"));
|
|
- private static final SimpleCommandExceptionType d = new SimpleCommandExceptionType(new ChatMessage("commands.whitelist.remove.failed"));
|
|
+ private static final SimpleCommandExceptionType c = new SimpleCommandExceptionType(new ChatMessage("commands.whitelist.add.failed")); private static final SimpleCommandExceptionType ADD_FAILED = c; // Yatopia - OBFHELPER
|
|
+ private static final SimpleCommandExceptionType d = new SimpleCommandExceptionType(new ChatMessage("commands.whitelist.remove.failed")); private static final SimpleCommandExceptionType REMOVE_FAILED = d; // Yatopia - OBFHELPER
|
|
|
|
public static void a(com.mojang.brigadier.CommandDispatcher<CommandListenerWrapper> com_mojang_brigadier_commanddispatcher) {
|
|
com_mojang_brigadier_commanddispatcher.register((LiteralArgumentBuilder) ((LiteralArgumentBuilder) ((LiteralArgumentBuilder) ((LiteralArgumentBuilder) ((LiteralArgumentBuilder) ((LiteralArgumentBuilder) ((LiteralArgumentBuilder) CommandDispatcher.a("whitelist").requires((commandlistenerwrapper) -> {
|
|
@@ -27,11 +27,25 @@ public class CommandWhitelist {
|
|
}))).then(CommandDispatcher.a("add").then(CommandDispatcher.a("targets", (ArgumentType) ArgumentProfile.a()).suggests((commandcontext, suggestionsbuilder) -> {
|
|
PlayerList playerlist = ((CommandListenerWrapper) commandcontext.getSource()).getServer().getPlayerList();
|
|
|
|
+ // Yatopia start - optimize this
|
|
+ /*
|
|
return ICompletionProvider.b(playerlist.getPlayers().stream().filter((entityplayer) -> {
|
|
return !playerlist.getWhitelist().isWhitelisted(entityplayer.getProfile());
|
|
}).map((entityplayer) -> {
|
|
return entityplayer.getProfile().getName();
|
|
}), suggestionsbuilder);
|
|
+ */
|
|
+ for (EntityPlayer player : playerlist.getPlayers()) {
|
|
+ if (!playerlist.getWhitelist().isWhitelisted(player.getProfile())) {
|
|
+ String remaining = suggestionsbuilder.getRemainingLowercase();
|
|
+ String playerName = player.getName();
|
|
+ if (ICompletionProvider.a(remaining, player.getNameLowercase())) {
|
|
+ suggestionsbuilder.suggest(playerName);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ return suggestionsbuilder.buildFuture();
|
|
+ // Yatopia end
|
|
}).executes((commandcontext) -> {
|
|
return a((CommandListenerWrapper) commandcontext.getSource(), ArgumentProfile.a(commandcontext, "targets"));
|
|
})))).then(CommandDispatcher.a("remove").then(CommandDispatcher.a("targets", (ArgumentType) ArgumentProfile.a()).suggests((commandcontext, suggestionsbuilder) -> {
|
|
@@ -52,6 +66,8 @@ public class CommandWhitelist {
|
|
|
|
private static int a(CommandListenerWrapper commandlistenerwrapper, Collection<GameProfile> collection) throws CommandSyntaxException {
|
|
WhiteList whitelist = commandlistenerwrapper.getServer().getPlayerList().getWhitelist();
|
|
+ // Yatopia start - rewrite this
|
|
+ /*
|
|
int i = 0;
|
|
Iterator iterator = collection.iterator();
|
|
|
|
@@ -72,10 +88,27 @@ public class CommandWhitelist {
|
|
} else {
|
|
return i;
|
|
}
|
|
+ */
|
|
+ java.util.List<WhiteListEntry> toAdd = new java.util.ArrayList<>();
|
|
+ for (GameProfile profile : collection) {
|
|
+ if (!whitelist.isWhitelisted(profile)) {
|
|
+ toAdd.add(new WhiteListEntry(profile));
|
|
+ commandlistenerwrapper.sendMessage(new ChatMessage("commands.whitelist.add.success", ChatComponentUtils.a(profile)), true);
|
|
+ }
|
|
+ }
|
|
+ if (toAdd.isEmpty()) {
|
|
+ throw CommandWhitelist.ADD_FAILED.create();
|
|
+ } else {
|
|
+ whitelist.addAll(toAdd);
|
|
+ return toAdd.size();
|
|
+ }
|
|
+ // Yatopia end
|
|
}
|
|
|
|
private static int b(CommandListenerWrapper commandlistenerwrapper, Collection<GameProfile> collection) throws CommandSyntaxException {
|
|
WhiteList whitelist = commandlistenerwrapper.getServer().getPlayerList().getWhitelist();
|
|
+ // Yatopia start - rewrite this
|
|
+ /*
|
|
int i = 0;
|
|
Iterator iterator = collection.iterator();
|
|
|
|
@@ -97,6 +130,22 @@ public class CommandWhitelist {
|
|
commandlistenerwrapper.getServer().a(commandlistenerwrapper);
|
|
return i;
|
|
}
|
|
+ */
|
|
+ java.util.List<JsonListEntry<GameProfile>> toRemove = new java.util.ArrayList<>();
|
|
+ for (GameProfile profile : collection) {
|
|
+ if (whitelist.isWhitelisted(profile)) {
|
|
+ toRemove.add(new WhiteListEntry(profile));
|
|
+ commandlistenerwrapper.sendMessage(new ChatMessage("commands.whitelist.remove.success", ChatComponentUtils.a(profile)), true);
|
|
+ }
|
|
+ }
|
|
+ if (toRemove.isEmpty()) {
|
|
+ throw CommandWhitelist.REMOVE_FAILED.create();
|
|
+ } else {
|
|
+ whitelist.removeAll(toRemove);
|
|
+ commandlistenerwrapper.getServer().kickNotWhitelisted(commandlistenerwrapper);
|
|
+ return toRemove.size();
|
|
+ }
|
|
+ // Yatopia end
|
|
}
|
|
|
|
private static int b(CommandListenerWrapper commandlistenerwrapper) throws CommandSyntaxException {
|
|
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
|
index 50ba26eafcfd5024e2795f13a0b04877b2cd6688..fea2e70a92bfd9798a4a8e256069dc20889e1259 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
|
@@ -77,6 +77,7 @@ public abstract class EntityHuman extends EntityLiving {
|
|
// CraftBukkit start
|
|
public boolean fauxSleeping;
|
|
public int oldLevel = -1;
|
|
+ private String nameLowercase = null; // Yatopia
|
|
|
|
@Override
|
|
public CraftHumanEntity getBukkitEntity() {
|
|
@@ -1890,6 +1891,15 @@ public abstract class EntityHuman extends EntityLiving {
|
|
return this.getProfile().getName();
|
|
}
|
|
|
|
+ // Yatopia start
|
|
+ public String getNameLowercase() {
|
|
+ if (nameLowercase == null) {
|
|
+ nameLowercase = getProfile().getName().toLowerCase(java.util.Locale.ROOT);
|
|
+ }
|
|
+ return nameLowercase;
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
@Override
|
|
public float b(EntityPose entitypose, EntitySize entitysize) {
|
|
switch (entitypose) {
|
|
diff --git a/src/main/java/net/minecraft/server/JsonList.java b/src/main/java/net/minecraft/server/JsonList.java
|
|
index 0224a6d0e47e836fa485b39e7b4ce5b83ea554bf..fe578d306575bbdc8ca4a993a648e889a4ec2111 100644
|
|
--- a/src/main/java/net/minecraft/server/JsonList.java
|
|
+++ b/src/main/java/net/minecraft/server/JsonList.java
|
|
@@ -66,6 +66,20 @@ public abstract class JsonList<K, V extends JsonListEntry<K>> {
|
|
|
|
}
|
|
|
|
+ // Yatopia start
|
|
+ public void addAll(Iterable<V> values) {
|
|
+ for (V value : values) {
|
|
+ d.put(getMappingKey(value.getKey()), value);
|
|
+ }
|
|
+
|
|
+ try {
|
|
+ this.save();
|
|
+ } catch (IOException io) {
|
|
+ JsonList.LOGGER.warn("Could not save the list after adding a user.", io);
|
|
+ }
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
@Nullable
|
|
public V get(K k0) {
|
|
// Paper start
|
|
@@ -96,6 +110,20 @@ public abstract class JsonList<K, V extends JsonListEntry<K>> {
|
|
this.remove(jsonlistentry.getKey());
|
|
}
|
|
|
|
+ // Yatopia start
|
|
+ public void removeAll(Iterable<JsonListEntry<K>> values) {
|
|
+ for (JsonListEntry<K> entry : values) {
|
|
+ this.d.remove(getMappingKey(entry.getKey()));
|
|
+ }
|
|
+
|
|
+ try {
|
|
+ this.save();
|
|
+ } catch (IOException io) {
|
|
+ JsonList.LOGGER.warn("Could not save the list after removing a user.", io);
|
|
+ }
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
public String[] getEntries() {
|
|
return (String[]) this.d.keySet().toArray(new String[this.d.size()]);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index eb9d61b5e76c7b40faebfa8308cd3348b7e31fac..ba62404dae5b4c8af41921eb7a3fbcf9b2e0b58e 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -1967,6 +1967,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
|
return new DataPackConfiguration(list, list1);
|
|
}
|
|
|
|
+ public final void kickNotWhitelisted(CommandListenerWrapper sender) { a(sender); } // Yatopia - OBFHELPER
|
|
public void a(CommandListenerWrapper commandlistenerwrapper) {
|
|
if (this.aN()) {
|
|
PlayerList playerlist = commandlistenerwrapper.getServer().getPlayerList();
|