mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2024-11-14 22:56:29 +01:00
830bb6b70d
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: f559558 Updated Upstream (Paper) Purpur Changes: 1eaac71 Updated Upstream (Paper & Tuinity) 137523f Fix allowing color codes in signs
199 lines
9.9 KiB
Diff
199 lines
9.9 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..f9e97d28ab182ff1b9e216b2c451642855d52738 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 net.yatopia.server.list.GlueList<>();
|
|
+ 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 net.yatopia.server.list.GlueList<>();
|
|
+ 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 b5dd5f44dc6583559b9cb5803af15e9a040cf7ea..1aa9e6e939ac23b7e08e24d14ea585f287b97ac7 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() {
|
|
@@ -1883,6 +1884,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 22792d8097351c5d1c2e085a20429b28f7f90b6e..5847bbf4d8250522dd39323212f619c32159c385 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -1969,6 +1969,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();
|