It should infact be null but there should be a check when fetching online players for a server
what the behavior you actually saw
When trying to fetch online players, if there is a connection that is still in the initial state (not connected yet) its serverid is null and there are no checks related to it being null and this causes an exception on multimap
Steps to reproduce
Somehow force a client to stay in "connecting..." and fetch online players
Velocity or Bungeecord Versions
Velocity 3.3.0-SNAPSHOT (git-9e42049a-b376)
RedisBungee Version & Redis Version
redis_version:7.2.4
ValioBungee: 0.12.4
Other
ham1255 edit: included thrown error
[00:35:04 INFO]: Exception occurred while running command for HyperionDev
java.util.concurrent.CompletionException: java.lang.RuntimeException: Unable to invoke command queue test-1 for [connected player] HyperionDev (/195.175.104.130:63610)
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1770) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]
Caused by: java.lang.RuntimeException: Unable to invoke command queue test-1 for [connected player] HyperionDev (/195.175.104.130:63610)
at com.velocitypowered.proxy.command.VelocityCommandManager.executeImmediately0(VelocityCommandManager.java:252) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at com.velocitypowered.proxy.command.VelocityCommandManager.lambda$executeImmediatelyAsync$1(VelocityCommandManager.java:279) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?]
... 3 more
Caused by: java.lang.RuntimeException: java.lang.NullPointerException: null key in entry: null=a2aded80-15d4-38c5-8a6f-e532eedf9bde
at com.imaginarycode.minecraft.redisbungee.api.PlayerDataManager.serversToPlayersBuilder(PlayerDataManager.java:270) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.LocalLoadingCache.lambda$newMappingFunction$3(LocalLoadingCache.java:183) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2688) ~[?:?]
at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2686) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2669) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:112) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.LocalLoadingCache.get(LocalLoadingCache.java:58) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.api.PlayerDataManager.serversToPlayers(PlayerDataManager.java:238) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.AbstractRedisBungeeAPI.getServerToPlayers(AbstractRedisBungeeAPI.java:116) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.AbstractRedisBungeeAPI.getPlayersOnServer(AbstractRedisBungeeAPI.java:126) ~[?:?]
at tr.com.efekurban.queue.server.QueueManager.getCurrentPlayers(QueueManager.java:128) ~[?:?]
at tr.com.efekurban.queue.server.QueueManager.getCurrentPlayersOnGroup(QueueManager.java:140) ~[?:?]
at tr.com.efekurban.queue.server.QueueManager.addPlayer(QueueManager.java:194) ~[?:?]
at tr.com.efekurban.queue.command.QueueCommand.execute(QueueCommand.java:63) ~[?:?]
at tr.com.efekurban.queue.command.QueueCommand.execute(QueueCommand.java:15) ~[?:?]
at com.velocitypowered.proxy.command.registrar.InvocableCommandRegistrar.lambda$createLiteral$1(InvocableCommandRegistrar.java:81) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:262) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at com.velocitypowered.proxy.command.VelocityCommandManager.executeImmediately0(VelocityCommandManager.java:230) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at com.velocitypowered.proxy.command.VelocityCommandManager.lambda$executeImmediatelyAsync$1(VelocityCommandManager.java:279) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?]
... 3 more
Caused by: java.lang.NullPointerException: null key in entry: null=a2aded80-15d4-38c5-8a6f-e532eedf9bde
at com.google.common.collect.CollectPreconditions.checkEntryNotNull(CollectPreconditions.java:31) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at com.google.common.collect.ImmutableMultimap$Builder.put(ImmutableMultimap.java:171) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at com.imaginarycode.minecraft.redisbungee.api.PlayerDataManager$1.lambda$doPooledPipeline$0(PlayerDataManager.java:254) ~[?:?]
at java.base/java.util.HashMap.forEach(HashMap.java:1429) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.api.PlayerDataManager$1.doPooledPipeline(PlayerDataManager.java:254) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.api.PlayerDataManager$1.doPooledPipeline(PlayerDataManager.java:243) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.api.tasks.RedisPipelineTask.unifiedJedisTask(RedisPipelineTask.java:33) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask.execute(RedisTask.java:59) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.api.tasks.RedisTask.call(RedisTask.java:35) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.api.PlayerDataManager.serversToPlayersBuilder(PlayerDataManager.java:268) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.LocalLoadingCache.lambda$newMappingFunction$3(LocalLoadingCache.java:183) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2688) ~[?:?]
at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2686) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2669) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:112) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.internal.caffeine.cache.LocalLoadingCache.get(LocalLoadingCache.java:58) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.api.PlayerDataManager.serversToPlayers(PlayerDataManager.java:238) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.AbstractRedisBungeeAPI.getServerToPlayers(AbstractRedisBungeeAPI.java:116) ~[?:?]
at com.imaginarycode.minecraft.redisbungee.AbstractRedisBungeeAPI.getPlayersOnServer(AbstractRedisBungeeAPI.java:126) ~[?:?]
at tr.com.efekurban.queue.server.QueueManager.getCurrentPlayers(QueueManager.java:128) ~[?:?]
at tr.com.efekurban.queue.server.QueueManager.getCurrentPlayersOnGroup(QueueManager.java:140) ~[?:?]
at tr.com.efekurban.queue.server.QueueManager.addPlayer(QueueManager.java:194) ~[?:?]
at tr.com.efekurban.queue.command.QueueCommand.execute(QueueCommand.java:63) ~[?:?]
at tr.com.efekurban.queue.command.QueueCommand.execute(QueueCommand.java:15) ~[?:?]
at com.velocitypowered.proxy.command.registrar.InvocableCommandRegistrar.lambda$createLiteral$1(InvocableCommandRegistrar.java:81) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:262) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at com.velocitypowered.proxy.command.VelocityCommandManager.executeImmediately0(VelocityCommandManager.java:230) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at com.velocitypowered.proxy.command.VelocityCommandManager.lambda$executeImmediatelyAsync$1(VelocityCommandManager.java:279) ~[velocity.jar:3.3.0-SNAPSHOT (git-07f1f9e7-b396)]
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?]
... 3 more
intended behavior
It should infact be null but there should be a check when fetching online players for a server
what the behavior you actually saw
When trying to fetch online players, if there is a connection that is still in the initial state (not connected yet) its serverid is null and there are no checks related to it being null and this causes an exception on multimap
Steps to reproduce
Somehow force a client to stay in "connecting..." and fetch online players
Velocity or Bungeecord Versions
Velocity 3.3.0-SNAPSHOT (git-9e42049a-b376)
RedisBungee Version & Redis Version
redis_version:7.2.4 ValioBungee: 0.12.4
Other
ham1255 edit: included thrown error
Discussed on the discord. my discord:
@efekurban