mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2024-11-29 06:05:14 +01:00
d059af01b6
* Updated Upstream and Sidestream(s) (Paper/Purpur/AirplaneLite) 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. Paper Changes: fc4c0bc42 Reset shield blocking on dimension change 1c8b6065e Skip distance map update when spawning is disabled 091e6700f Added PlayerStonecutterRecipeSelectEvent fc885f966 Add toggle for always placing the dragon egg b3a6da3a7 Updated Upstream (Bukkit/CraftBukkit) 18ccc062d [Auto] Updated Upstream (Spigot) Purpur Changes: df9bd08 Config to use infinity bows without arrows (#149) 9d537bc Fix PlayerEditBookEvent not saving new book 3f8816d [ci-skip] Oops 5508728 [ci-skip] Add granny to funding 4c7ab70 Updated Upstream (Paper) 5eefb52 [ci-skip] Update Gradle to 6.8.1 AirplaneLite Changes: 459bb20 Remove patch 515fec7 Remove streams fc94d7b Correct launcher name 0b153bd Update gradle version * add Remove-streams.patch from AirplaneLite
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 91c2756a8708a2f4154905baec20b9ae484fea0d..7a6d5521e42a31723b4f006d0fcf618fd42050e4 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
|
@@ -78,6 +78,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() {
|
|
@@ -1923,6 +1924,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 99580abac1ff30c784b6792d69c9d4cad12c1b1f..1daeb9571663a128a749c735a70f6e92603ffeda 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 240e230725ca685389fe39dfa60ac3ca22d3faa0..9a6bb7b6cb4d4aabae6f7e7915f993e4ebd6f77f 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -1983,6 +1983,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();
|