Procházet zdrojové kódy

Remove collisions from packet ids

Max před 4 roky
rodič
revize
2d1a9791f6

+ 7 - 5
common/src/main/java/me/shedaniel/architectury/networking/NetworkChannel.java

@@ -34,9 +34,11 @@ import net.minecraft.resources.ResourceLocation;
 import net.minecraft.server.level.ServerPlayer;
 import org.jetbrains.annotations.ApiStatus;
 
+import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.UUID;
 import java.util.function.BiConsumer;
 import java.util.function.Function;
 import java.util.function.Supplier;
@@ -69,16 +71,16 @@ public final class NetworkChannel {
     }
     
     public <T> void register(Class<T> type, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, BiConsumer<T, Supplier<PacketContext>> messageConsumer) {
-        String s = StringUtils.leftPad(String.valueOf(hashCodeString(type.toString())), 10, '0');
-        if (s.length() > 10) s = s.substring(0, 10);
-        MessageInfo<T> info = new MessageInfo<>(new ResourceLocation(id + "_" + s), encoder, decoder, messageConsumer);
+        // TODO: this is pretty wasteful; add a way to specify custom or numeric ids
+        String s = UUID.nameUUIDFromBytes(type.getName().getBytes(StandardCharsets.UTF_8)).toString().replace("-", "");
+        MessageInfo<T> info = new MessageInfo<>(new ResourceLocation(id + "/" + s), encoder, decoder, messageConsumer);
         encoders.put(type, info);
         NetworkManager.NetworkReceiver receiver = (buf, context) -> {
             info.messageConsumer.accept(info.decoder.apply(buf), () -> context);
         };
-        NetworkManager.registerReceiver(NetworkManager.clientToServer(), info.packetId, receiver);
+        NetworkManager.registerReceiver(NetworkManager.c2s(), info.packetId, receiver);
         if (Platform.getEnvironment() == Env.CLIENT) {
-            NetworkManager.registerReceiver(NetworkManager.serverToClient(), info.packetId, receiver);
+            NetworkManager.registerReceiver(NetworkManager.s2c(), info.packetId, receiver);
         }
     }