Avoid calling #stream on the result of Bukkit getOnlinePlayers

This commit is contained in:
Luck 2020-06-25 10:24:33 +01:00
parent 21ae1dbac0
commit 0f23b7a460
No known key found for this signature in database
GPG Key ID: EFA9B3EC5FD90F8B
2 changed files with 16 additions and 13 deletions

View File

@ -75,6 +75,8 @@ import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.ServicePriority;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -379,9 +381,10 @@ public class LPBukkitPlugin extends AbstractLuckPermsPlugin {
@Override @Override
public Stream<Sender> getOnlineSenders() { public Stream<Sender> getOnlineSenders() {
List<Player> players = new ArrayList<>(this.bootstrap.getServer().getOnlinePlayers());
return Stream.concat( return Stream.concat(
Stream.of(getConsoleSender()), Stream.of(getConsoleSender()),
this.bootstrap.getServer().getOnlinePlayers().stream().map(p -> getSenderFactory().wrap(p)) players.stream().map(p -> getSenderFactory().wrap(p))
); );
} }

View File

@ -25,9 +25,7 @@
package me.lucko.luckperms.bukkit.inject.server; package me.lucko.luckperms.bukkit.inject.server;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import me.lucko.luckperms.bukkit.LPBukkitPlugin; import me.lucko.luckperms.bukkit.LPBukkitPlugin;
import me.lucko.luckperms.common.util.ImmutableCollectors; import me.lucko.luckperms.common.util.ImmutableCollectors;
@ -40,12 +38,12 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.WeakHashMap; import java.util.WeakHashMap;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors;
/** /**
* A replacement map for the 'permSubs' instance in Bukkit's SimplePluginManager. * A replacement map for the 'permSubs' instance in Bukkit's SimplePluginManager.
@ -228,18 +226,20 @@ public final class LuckPermsSubscriptionMap extends HashMap<String, Map<Permissi
@Override @Override
public @NonNull Set<Permissible> keySet() { public @NonNull Set<Permissible> keySet() {
// gather players (LPPermissibles) // start with the backing set
Set<Permissible> players = LuckPermsSubscriptionMap.this.plugin.getBootstrap().getServer().getOnlinePlayers().stream() Set<Permissible> set;
.filter(player -> player.hasPermission(this.permission) || player.isPermissionSet(this.permission))
.collect(Collectors.toSet());
ImmutableSet<Permissible> backing;
synchronized (this.backing) { synchronized (this.backing) {
backing = ImmutableSet.copyOf(this.backing.keySet()); set = new HashSet<>(this.backing.keySet());
} }
// then combine the players with the backing map // add any online players who meet requirements
return Sets.union(players, backing); for (Player player : LuckPermsSubscriptionMap.this.plugin.getBootstrap().getServer().getOnlinePlayers()) {
if (player.hasPermission(this.permission) || player.isPermissionSet(this.permission)) {
set.add(player);
}
}
return set;
} }
@Override @Override