PackManager.java 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. package com.hexdragon.util.network;
  2. import net.minecraft.network.PacketBuffer;
  3. import net.minecraft.util.ResourceLocation;
  4. import net.minecraftforge.fml.network.NetworkEvent;
  5. import net.minecraftforge.fml.network.NetworkRegistry;
  6. import net.minecraftforge.fml.network.simple.SimpleChannel;
  7. import java.util.function.BiConsumer;
  8. import java.util.function.Function;
  9. import java.util.function.Supplier;
  10. public class PackManager {
  11. // 获取数据包的种类 ID
  12. private static int ID = 0;
  13. private static int nextID() {return ID++;}
  14. // 创建 channel
  15. private static SimpleChannel channel;
  16. public static void create(String modid) {
  17. PackManager.channel = NetworkRegistry.newSimpleChannel(new ResourceLocation(modid + ":packets"), () -> "1.0", (s) -> true, (s) -> true);
  18. }
  19. // 注册数据包
  20. public static <Packet> void registerPack(Class<Packet> messageType, BiConsumer<Packet, PacketBuffer> encoder, Function<PacketBuffer, Packet> decoder, BiConsumer<Packet, Supplier<NetworkEvent.Context>> messageConsumer) {
  21. channel.registerMessage(nextID(), messageType, encoder, decoder, messageConsumer);
  22. }
  23. // 将数据包发送至服务器
  24. public static <Packet> void sendToServer(Packet message) {
  25. channel.sendToServer(message);
  26. }
  27. }