diff --git a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/commands/BukkitCommandSender.java b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/commands/BukkitCommandSender.java index 073f2e0a3..1588f6ab1 100644 --- a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/commands/BukkitCommandSender.java +++ b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/commands/BukkitCommandSender.java @@ -19,7 +19,7 @@ package com.viaversion.viaversion.bukkit.commands; import com.viaversion.viaversion.api.command.ViaCommandSender; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; +import org.bukkit.entity.Entity; import java.util.UUID; @@ -42,10 +42,10 @@ public class BukkitCommandSender implements ViaCommandSender { @Override public UUID getUUID() { - if (sender instanceof Player) { - return ((Player) sender).getUniqueId(); + if (sender instanceof Entity) { + return ((Entity) sender).getUniqueId(); } else { - return UUID.fromString(getName()); + return new UUID(0, 0); } } diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommandSender.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommandSender.java index 57b7f6416..6e858efc2 100644 --- a/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommandSender.java +++ b/bungee/src/main/java/com/viaversion/viaversion/bungee/commands/BungeeCommandSender.java @@ -45,7 +45,7 @@ public class BungeeCommandSender implements ViaCommandSender { if (sender instanceof ProxiedPlayer) { return ((ProxiedPlayer) sender).getUniqueId(); } else { - return UUID.fromString(getName()); + return new UUID(0, 0); } } diff --git a/common/src/main/java/com/viaversion/viaversion/commands/defaultsubs/DumpSubCmd.java b/common/src/main/java/com/viaversion/viaversion/commands/defaultsubs/DumpSubCmd.java index 49b5b4673..780341c5f 100644 --- a/common/src/main/java/com/viaversion/viaversion/commands/defaultsubs/DumpSubCmd.java +++ b/common/src/main/java/com/viaversion/viaversion/commands/defaultsubs/DumpSubCmd.java @@ -19,10 +19,13 @@ package com.viaversion.viaversion.commands.defaultsubs; import com.google.common.io.CharStreams; import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.command.ViaCommandSender; import com.viaversion.viaversion.api.command.ViaSubCommand; +import com.viaversion.viaversion.api.connection.UserConnection; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import com.viaversion.viaversion.dump.DumpTemplate; import com.viaversion.viaversion.dump.VersionInfo; import com.viaversion.viaversion.util.GsonUtil; @@ -34,7 +37,12 @@ import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.UUID; import java.util.logging.Level; public class DumpSubCmd extends ViaSubCommand { @@ -64,14 +72,13 @@ public class DumpSubCmd extends ViaSubCommand { ); Map configuration = Via.getPlatform().getConfigurationProvider().getValues(); - - DumpTemplate template = new DumpTemplate(version, configuration, Via.getPlatform().getDump(), Via.getManager().getInjector().getDump()); + DumpTemplate template = new DumpTemplate(version, configuration, Via.getPlatform().getDump(), Via.getManager().getInjector().getDump(), getPlayerSample(sender.getUUID())); Via.getPlatform().runAsync(new Runnable() { @Override public void run() { - HttpURLConnection con = null; + HttpURLConnection con; try { con = (HttpURLConnection) new URL("https://dump.viaversion.com/documents").openConnection(); } catch (IOException e) { @@ -125,4 +132,50 @@ public class DumpSubCmd extends ViaSubCommand { private String getUrl(String id) { return String.format("https://dump.viaversion.com/%s", id); } + + private JsonObject getPlayerSample(UUID senderUuid) { + JsonObject playerSample = new JsonObject(); + // Player versions + JsonObject versions = new JsonObject(); + playerSample.add("versions", versions); + Map playerVersions = new TreeMap<>((o1, o2) -> ProtocolVersion.getIndex(o2) - ProtocolVersion.getIndex(o1)); + for (UserConnection connection : Via.getManager().getConnectionManager().getConnections()) { + ProtocolVersion protocolVersion = ProtocolVersion.getProtocol(connection.getProtocolInfo().getProtocolVersion()); + playerVersions.compute(protocolVersion, (v, num) -> num != null ? num + 1 : 1); + } + for (Map.Entry entry : playerVersions.entrySet()) { + versions.addProperty(entry.getKey().getName(), entry.getValue()); + } + + // Pipeline of sender + Set> pipelines = new HashSet<>(); + UserConnection senderConnection = Via.getAPI().getConnection(senderUuid); + if (senderConnection != null && senderConnection.getChannel() != null) { + pipelines.add(senderConnection.getChannel().pipeline().names()); + } + + // Other pipelines if different ones are found (3 max) + for (UserConnection connection : Via.getManager().getConnectionManager().getConnections()) { + if (connection.getChannel() == null) { + continue; + } + + List names = connection.getChannel().pipeline().names(); + if (pipelines.add(names) && pipelines.size() == 3) { + break; + } + } + + int i = 0; + for (List pipeline : pipelines) { + JsonArray senderPipeline = new JsonArray(pipeline.size()); + for (String name : pipeline) { + senderPipeline.add(name); + } + + playerSample.add("pipeline-" + i++, senderPipeline); + } + + return playerSample; + } } diff --git a/common/src/main/java/com/viaversion/viaversion/dump/DumpTemplate.java b/common/src/main/java/com/viaversion/viaversion/dump/DumpTemplate.java index cc5a22ae5..e1c3d38a8 100644 --- a/common/src/main/java/com/viaversion/viaversion/dump/DumpTemplate.java +++ b/common/src/main/java/com/viaversion/viaversion/dump/DumpTemplate.java @@ -18,7 +18,9 @@ package com.viaversion.viaversion.dump; import com.google.gson.JsonObject; +import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.Collection; import java.util.Map; public class DumpTemplate { @@ -26,12 +28,14 @@ public class DumpTemplate { private final Map configuration; private final JsonObject platformDump; private final JsonObject injectionDump; + private final JsonObject playerSample; - public DumpTemplate(VersionInfo versionInfo, Map configuration, JsonObject platformDump, JsonObject injectionDump) { + public DumpTemplate(VersionInfo versionInfo, Map configuration, JsonObject platformDump, JsonObject injectionDump, JsonObject playerSample) { this.versionInfo = versionInfo; this.configuration = configuration; this.platformDump = platformDump; this.injectionDump = injectionDump; + this.playerSample = playerSample; } public VersionInfo getVersionInfo() { @@ -49,4 +53,8 @@ public class DumpTemplate { public JsonObject getInjectionDump() { return injectionDump; } + + public JsonObject getPlayerSample() { + return playerSample; + } } diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongeCommandSender.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongeCommandSender.java index cfbd4c2da..e37763f8a 100644 --- a/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongeCommandSender.java +++ b/sponge/src/main/java/com/viaversion/viaversion/sponge/commands/SpongeCommandSender.java @@ -47,7 +47,7 @@ public class SpongeCommandSender implements ViaCommandSender { if (source instanceof Identifiable) { return ((Identifiable) source).uniqueId(); } else { - return UUID.fromString(getName()); + return new UUID(0, 0); } } diff --git a/velocity/src/main/java/com/viaversion/viaversion/velocity/command/VelocityCommandSender.java b/velocity/src/main/java/com/viaversion/viaversion/velocity/command/VelocityCommandSender.java index 9d76f5eb6..248ddb664 100644 --- a/velocity/src/main/java/com/viaversion/viaversion/velocity/command/VelocityCommandSender.java +++ b/velocity/src/main/java/com/viaversion/viaversion/velocity/command/VelocityCommandSender.java @@ -46,7 +46,7 @@ public class VelocityCommandSender implements ViaCommandSender { if (source instanceof Player) { return ((Player) source).getUniqueId(); } - return UUID.fromString(getName()); + return new UUID(0, 0); } @Override