
VynAPI
Vyn脚本语言,嵌入在Minecraft中。

Vyn 脚本语言,现已嵌入 Minecraft。
在资源包内编写 .vyn 脚本,让它们在游戏内运行,对玩家周围发生的事件做出反应——无需 Java。
✅ Minecraft 1.21.5 · 1.21.11 · 26.1 · 26.2 — Fabric · NeoForge · Forge(Forge 仅支持 1.21.x)
📜 什么是 Vyn?
Vyn 是一种以语句驱动的脚本语言,专为可读性而设计,将蓝图(面向对象编程)和并发作为一等特性。它的语法读起来像英语:
~ 变量
make name "Steve"
~ 条件判断
check name == "Steve" do
say "Hi, Steve!"
otherwise
say "Who are you?"
end
~ 循环
cycle i from 1 to 5 do
say "Iteration: " + i
end
~ 函数
task double takes x do
reply x * 2
end
~ 蓝图(面向对象)
blueprint Pet do
build takes name do
make me.name name
end
end
VynAPI 将此语言嵌入 Minecraft 并将其与游戏连接——每个资源包都可能成为脚本包:
my_pack/
└── assets/
└── example/
└── scripts/
└── hello.vyn ← 纯文本脚本,由 VynAPI 加载
✨ 它能做什么?
- 🎮 响应事件 — 每个游戏刻(
onTick)、挥动手臂(onSwingHand)、播放任何声音(onPlaySound) - 📊 读取游戏状态 — 玩家生命值、饥饿值、位置、速度、你正看着的方块、附近的方块、生物群系、一天中的时间、颜色等
- 🔊 执行操作 — 在 HUD 上绘制文本(
debugText)、发送聊天消息、在指定位置播放声音 - ⏱ 延迟逻辑 — 非阻塞的
wait语句,以游戏刻为单位 - 📦 分发库 — 在脚本和包之间使用
importScript/excludeScript - ♻️ 热重载 — 开发时按
F3 + T;脚本会立即重新加载 - 🧩 可扩展 — 模组开发者可以通过
VynAddon注册自定义事件和函数
📥 安装
- 下载与你Minecraft 版本和加载器(Fabric / Forge / NeoForge)匹配的 jar 文件
- 将其放入客户端的
mods文件夹 - 启动游戏,并启用包含
.vyn脚本的资源包
快速开始
task onTick do
debugText("Health: " + player.getHealth())
debugText("Looking at: " + player.getTargetBlock().getName())
end
加载资源包后,按 F3 + T —— 你的 HUD 左上角会出现两行文本,每刻更新一次。
📡 事件
| 事件 | 触发时机 | 参数 |
|---|---|---|
onTick |
每个客户端游戏刻(每秒 20 次) | — |
onSwingHand |
本地玩家挥动手臂时 | — |
onPlaySound |
世界中播放声音时(排除环境音) | sound |
task onPlaySound takes sound do
player.sendMessage(sound.getName() + " @ " + sound.getPosition())
end
🧰 脚本 API(核心部分)
常量: player · world · key · modLoader
玩家: getName() · getHealth() · getFoodLevel() · getPosition() · getX/Y/Z() · getVelocityX/Y/Z() · getYaw() · getPitch() · getTargetBlock() · getSteppingBlock() · getNearbyBlocks(radius) · sendMessage(text) · playSound(id, volume, pitch) · playSoundWorld(pos, id, volume, pitch) ...
世界: getBlock(x, y, z) · getDimension() · getDayTime() · getGameTime() · getBiomeAt(pos) · getGrassColor(pos) · getFoliageColor(pos) · getWaterColor(pos) · calculateDistanceBetweenPositions(a, b)
方块: getName() · getPosition() · isAir() · hasBlockTag(id) · getLightBlock() · getLightEmission() · canBeReplaced() · instrument() ...
类型: new Position(x, y, z) · new Sound(id, volume, pitch, position)
函数: debugText(text) · importScript(packId, name) · excludeScript(packId, name)
语句: wait <ticks> do ... end — 在 N 个游戏刻后运行一次代码块,且不会阻塞游戏。
📖 完整 API 参考: VynAPI README
🧩 面向模组开发者
继承 VynAddon 以注册自定义事件,并将原生函数、类型和常量绑定到每个脚本环境中:
public final class MyAddon extends VynAddon {
public MyAddon() {
super("onMyEvent"); // 自定义事件,脚本可以监听
}
@Override
public Consumer<Environment> onEnable() {
return env -> {
NativeBinder.bind(env, MyType.class); // 脚本中可使用 new MyType(...)
NativeBinder.defineConstant(env, "myVersion", "1.0.0");
env.defineFunction("myFunction", new NativeFunction((e, args) -> null));
};
}
}
从模组的任何位置触发事件:
ScriptHandler.fireEvent("onMyEvent", someValue);
任何已加载的脚本,只要定义了 task onMyEvent takes value do ... end,都会接收到该事件。
🔨 从源码构建
# 1) 将 Vyn 引擎发布到本地 Maven 仓库
git clone https://github.com/Abdelaziz1586/Vyn.git
cd Vyn && mvn clean install
# 2) 为你想要的版本构建 VynAPI
git clone https://github.com/omardotcontent/VynAPI.git
cd VynAPI && git checkout 1.21.11 # 或:1.21.5, 26.1, 26.2
./gradlew :fabric:build # 或 :neoforge:build / :forge:build(仅 1.21.x)

❗ 重要说明
- 仅限客户端 — 将其安装在客户端的
mods文件夹中;脚本永不在服务器上运行。在单人游戏和多人游戏中均有效。 - 选择正确的构建版本 — 每个 Minecraft 版本都有对应的 jar 文件:
| Minecraft | Java | Fabric | Forge | NeoForge |
|---|---|---|---|---|
| 1.21.5 | 21 | ✅ + Fabric API | ✅ | ✅ |
| 1.21.11 | 21 | ✅ + Fabric API | ✅ | ✅ |
| 26.1 | 25 | ✅ + Fabric API | ❌ | ✅ |
| 26.2 | 25 | ✅ + Fabric API | ❌ | ✅ |
- 切勿阻塞客户端线程 — 请使用
wait而非hold进行延迟,并保持onTick内的操作轻量(它每秒运行 20 次)。 - 脚本仅在客户端运行 — 它们所做的所有事情都只影响玩家本地。这是有意设计的:资源包本就是客户端内容。
❓ 支持与链接
- GitHub:omardotcontent/VynAPI
- 问题与建议:GitHub Issues
- 语言本身:Abdelaziz1586/Vyn
鸣谢: OmarDotContent 和 Abdelaziz_Mohamed — Vyn 移植作者:Abdelaziz_Mohamed,模组移植作者:OmarDotContent。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。