HyCraft 跨平台联机

HyCraft 跨平台联机

让 Minecraft 玩家连接您的 Hytale 服务器!

游戏玩法

HyCraft

HyCraft 是一个 Hytale 服务器插件,用作协议桥,允许 Minecraft Java 版 (1.21.11) 客户端直接连接到 Hytale 服务器。

其工作原理是在 Hytale 服务器进程中启动一个并行的 TCP 服务器。它拦截传入的 Minecraft 数据包,实时将其转换为 Hytale 的内部协议,并转发给游戏引擎。这使得 Minecraft 玩家无需任何客户端修改即可加入 Hytale 世界。

⚠️ 早期开发状态

该项目目前处于 早期开发 阶段。功能不完整,预计存在错误,并且 API 可能会发生变化。

测试服务器: mytale.online(默认 MC 端口 25565,默认 Hytale 端口 5520)

功能

  • 协议转换: 在 Minecraft 1.21.11(协议 774)和 Hytale 之间进行实时转换。
  • 身份验证: 通过 sessionserver.mojang.com 提供完整的 Mojang 身份验证支持(在线模式)。
  • 世界渲染:
    • 动态区块转换(Hytale 区块 → Minecraft 区块)。
    • 方块调色板映射。
    • 生物群系转换。
  • 实体同步:
    • 实体生成、移动和旋转。
    • 元数据同步(名称、生命值、装备)。
    • 动画转换(挥动、受伤、死亡)。
  • 交互:
    • 方块破坏和放置逻辑。
    • PVP 和 PvE 战斗系统(计算伤害、击退和冷却)。
    • 复杂交互处理(连锁、充能交互)。
  • 物品栏:
    • 快捷栏和物品栏同步。
    • 物品映射(Hytale 物品 → Minecraft 等效物品)。

……更多功能即将推出!

安装

前提条件

  • 一个 Hytale 服务器实例。
  • Java 25

设置

  1. 下载或构建最新的 HyCraft-1.0-SNAPSHOT.jar 版本。
  2. 进入你的 Hytale 服务器目录。
  3. 将 jar 文件放入 mods/ 文件夹。
  4. 启动 Hytale 服务器。
  5. HyCraft 将在端口 25565(可配置)上启动一个 Minecraft 监听器。

HyCraft Mixins(可选)

HyCraft Mixins 是一个可选模块,它使用 Hyxin 将 Mixin 补丁应用到 Hytale 服务器内部。这使得能够实现常规插件 API 无法实现的更深层次集成,例如拦截交互链和玩家档案查找。

工作原理

Hytale 在服务器完全启动之前加载早期插件,这允许 Hyxin 在加载时转换服务器类。HyCraft Mixins 挂接到此过程,以修改特定的服务器行为,如交互处理和玩家档案解析。

由于 Hytale 的 TransformingClassLoader 存在类加载器限制,mixin 注入的代码无法直接引用插件环境中的类。因此,HyCraft Mixins 通过 System.getProperties() 桥使用 MethodHandle 在运行时调用钩子与核心插件通信。这与 OrbisGuard 等其他 Hytale mixin 插件使用的方法相同。

要求

  • earlyplugins/ 文件夹中的 Hyxin jar。
  • mods/ 文件夹中的 HyCraft 核心插件(必需的依赖项)。

设置

  1. 下载或构建 Hyxin.jar 并将其放入服务器 earlyplugins/ 文件夹。
  2. 下载 或构建 HyCraft-Mixins.jar 并将其放入服务器 earlyplugins/ 文件夹。
  3. 确保像往常一样在 mods/ 中安装了核心 HyCraft 插件。
  4. 启动服务器。你应该会在控制台中看到 HyCraft mixins loaded!

类加载器限制

Hytale 的 TransformingClassLoader 仅委托给平台类加载器(JDK 类),并且不会回退到早期插件类所在的应用程序类加载器。这意味着 mixin 注入的代码无法使用 CallbackInfo.cancel()CallbackInfoReturnable.setReturnValue() 或直接引用任何早期插件类。所有跨类加载器的通信都必须通过 JVM 全局机制(如 System.getProperties())进行。这是已知的 Hytale 平台限制,而非 Hyxin 或 Mixin 的错误。

LuckPerms 支持

HyCraft 在 Minecraft 玩家用户名前添加配置的 player_prefix(默认为 "."),导致用户名变为 .PlayerName。LuckPerms 默认认为这些用户名无效,从而阻止诸如 /lp user .PlayerName 之类的命令正常工作。

要解决此问题,请打开你的 Luckperms/config.yml 并设置:

allow-invalid-usernames: true

这允许 LuckPerms 正确识别和管理带有前缀的玩家名称。

配置

首次运行时,配置文件将在 mods/HyCraft/main.json 生成。

选项 描述 默认值
port Minecraft 服务器将监听的 TCP 端口。 25565
player_prefix 添加到通过 Minecraft 连接的玩家用户名前的字符串。 "."
item_notification 接收物品时,动作栏消息的格式。 ...
log_debug 启用详细调试日志以诊断问题。 false
server_icon MC 服务器图标文件的路径,相对于 HyCraft 目录(必须是 64x64 PNG)。 icon.png

从源代码构建

此项目需要 Java 25 来构建。

  1. 克隆仓库:

    git clone https://github.com/EdwardBelt/HyCraft.git
    cd HyCraft
    
  2. 使用 Gradle 构建:

    # Linux/macOS
    ./gradlew shadowJar
    
    # Windows
    gradlew.bat shadowJar
    
  3. 编译后的工件将位于 core/build/libs/

贡献

欢迎并高度赞赏所有贡献。请随时提出问题、建议功能或提交拉取请求。

许可证

根据 MIT 许可证分发。有关更多信息,请参阅 LICENSE

联系方式