BBSMC Logo
模组
资源包
数据包
整合包
光影
插件
软件资源
论坛
登录
模组插件数据包光影资源包整合包资源
登录
设置

ConnectX - 强大的跨平台异地跨网多人游戏库

一个跨平台的 Minecraft P2P 在线多人库,支持异地跨网联机,采用 C# 开发

538
1

基本信息

我的世界Java版本

平台

Windows
Macos
Linux

其他链接

反馈问题 查看源码 访问 wiki

创作者

CoronaStudio
CoronaStudio Member

详情信息

许可证 MIT
发布于 3 months ago
更新于 3 months ago
简介更新日志版本百科讨论

ConnectX

README in English

CodeFactor Grade GitHub Maintenance GitHub commit activity GitHub closed pull requests GitHub repo size DotNet Version GitHub Actions Workflow Status

一个跨平台的 Minecraft P2P 在线多人库,支持异地跨网联机,采用 C# 开发,使用高性能套接字实现出色的转发性能,由 Zerotier SDK 实现 P2P 功能。

由我们的另一个开源项目提供支持: Hive.Framework

Demo Screenshot

架构图

ConnectX cn drawio ConnectX cn dark drawio

快速开始!

我们使用 MSDI(Microsoft.Extensions.DependencyInjection)作为 DI 容器。最佳做法是在程序中使用 .NET Generic Host。

首先,为服务器配置添加以下方法,ConnectXServerIp 将是 ConnectX.Server 的后台地址。

private static IClientSettingProvider GetConnectXSettings()
{
    var serverIp = IPAddress.None;

    try
    {
        var ips = Dns.GetHostAddresses(ConnectXServerIp);
        var ipv4Addresses = ips
            .Where(ip => ip.AddressFamily == AddressFamily.InterNetwork)
            .Where(ip => !ip.IsLocalIpAddress())
            .ToArray();

        if (ipv4Addresses.Length > 0)
            serverIp = ipv4Addresses[0];
    }
    catch (Exception ex)
    {
        Log.Logger.Error(ex, "Failed to resolve ConnectX server IP.");
    }

    return new DefaultClientSettingProvider
    {
        ServerAddress = serverIp,
        ServerPort = ConnectXServerPort,
        JoinP2PNetwork = true
    };
}

然后,只需要再添加一行即可完成配置!

private static void ConfigureServices(IServiceCollection services)
{
    // ...
+   services.UseConnectX(GetConnectXSettings);
    // ...
}

如何使用?

将 IServerLinkHolder 和 Client 注入要管理房间实例的 ViewModel 当中。

连接到服务器

await _serverLinkHolder.ConnectAsync(CancellationToken.None);

执行任何房间相关操作

[!IMPORTANT]
请确保在执行任何房间操作前您已经成功和服务器建立了连接,否则可能会出现预期之外的结果!

await TaskHelper.WaitUntilAsync(() => _serverLinkHolder is { IsConnected: true, IsSignedIn: true });
var message = new CreateGroup
{
    UserId = _serverLinkHolder.UserId,
    RoomName = createRoomRecord.RoomName,
    RoomDescription = createRoomRecord.RoomDescription,
    RoomPassword = createRoomRecord.RoomPassword,
    IsPrivate = createRoomRecord.IsPrivateRoom,
    MaxUserCount = 3
};

var (groupInfo, status, err) = await _multiPlayerClient.CreateGroupAsync(message, CancellationToken.None);

if (groupInfo == null || status != GroupCreationStatus.Succeeded || !string.IsNullOrEmpty(err))
{
    // Error process
    return;
}

_multiPlayerClient.OnGroupStateChanged += MultiPlayerClientOnGroupStateChanged;

// Other actions

开源协议

MIT。这意味着您可以出于任何目的修改或使用我们的代码,但您的软件的所有副本或重要部分都应包含版权声明和许可声明。

统计信息

Alt

免责声明

ConnectX 与 Mojang 或其软件的任何部分均无关联。

耻辱柱

在此,我们将列出所有使用我们的代码但未遵守 MIT 许可的程序。

设置
"Minecraft"以及"我的世界"为美国微软公司的商标 本站与微软公司没有从属关系

本站与Modrinth无从属关系,网站遵循Modrinth网站程序的LGPL协议开源 开源地址

版权所有 © 2019-2024 青岛柒兮网络科技有限公司 | ICP经营许可证: 鲁B2-20210590 | ICP备案: 鲁ICP备2021009459号-12