diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java index 586a7f6..817587e 100644 --- a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java +++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java @@ -4,6 +4,7 @@ import com.google.common.base.Joiner; import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableList; import com.google.common.collect.Multimap; +import com.google.common.collect.Multiset; import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; @@ -229,13 +230,7 @@ public class RedisBungeeListener implements Listener { } serializeMultimap(human, true, out); } else { - // Due to Java generics, we are forced to coerce UUIDs into strings. This is less - // expensive than looking up names, since we just want counts. - Multimap flunk = HashMultimap.create(); - for (Map.Entry entry : multimap.entries()) { - flunk.put(entry.getKey(), entry.getValue().toString()); - } - serializeMultimap(flunk, false, out); + serializeMultiset(multimap.keys(), out); } break; case "Proxy": @@ -252,8 +247,16 @@ public class RedisBungeeListener implements Listener { } } + private void serializeMultiset(Multiset collection, ByteArrayDataOutput output) { + output.writeInt(collection.elementSet().size()); + for (Multiset.Entry entry : collection.entrySet()) { + output.writeUTF(entry.getElement()); + output.writeInt(entry.getCount()); + } + } + private void serializeMultimap(Multimap collection, boolean includeNames, ByteArrayDataOutput output) { - output.writeInt(collection.size()); + output.writeInt(collection.keySet().size()); for (Map.Entry> entry : collection.asMap().entrySet()) { output.writeUTF(entry.getKey()); if (includeNames) {