
意图
意图将你的按键绑定转换为上下文感知动作,使单个按键能够根据不同条件执行不同功能。
Intent
Minecraft的上下文感知按键绑定
Intent 将你的按键绑定转变为智能、上下文感知的操作。你无需为不同模组记住繁多的按键,而是可以将多个功能分配给同一个按键,这些功能会根据你的生命值、装备或移动状态等特定条件自动触发。
特性
- 上下文绑定: 将单个物理按键(例如
R)绑定为根据当前情况执行不同的操作。- 示例: 手持末影珍珠时按
R会将其投掷出去,但若手上什么都没有,则会打开你的物品栏。
- 示例: 手持末影珍珠时按
- 放射菜单系统: 若按下一个键时有多个有效操作,长按该键会打开一个放射菜单供你选择要执行的操作。轻按该键则会立即触发优先级最高的操作。
- 游戏内编辑器: 无需手动编辑 JSON 文件。按
I(默认)打开 Intent 编辑器,即可直观地配置你的规则。 - 默认条件库:
- 玩家状态: 潜行、疾跑、空中、骑乘。
- 物品栏: 持有特定物品或物品标签。
- 世界: 看向特定的方块或实体。
- 属性: 生命值或物品耐久的阈值(例如,“当生命值低于50%时自动进食”)。
- 战斗: 检测你是否正在战斗。
- GUI: 检测特定界面(如物品栏)是否打开。
如何使用
编辑器
按下 I 打开 Intent 编辑器。
- 选择一个按键: 在左侧选择一个物理按键(例如
Key R)。 - 添加规则: 向规则堆栈中添加“Intent 条目”。
- 定义上下文: 为每个条目定义它应该何时触发(例如
is_sneaking)。 - 设置优先级: 规则会从上到下依次检查。使用上/下箭头键调整特定操作的优先级。
虚拟化
Intent 允许你“虚拟化”一个按键绑定。此操作会将该动作从原版的按键控制选项中解绑,从而避免与你自定义的 Intent 规则产生冲突。
开发者 API
Intent 导出了一个专门的 API jar 文件,允许其他模组添加自定义的上下文类型(条件)和编辑器。
使用方式 (Gradle)
Intent 可通过 JitPack 获取。将以下内容添加到你的 build.gradle 文件中:
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
// 编译时仅引用 API(推荐)
implementation "com.github.kjmaster1:Intent:v1.0.0:api"
// 或者,在运行时测试时包含完整模组
// implementation "com.github.kjmaster1:Intent:v1.0.0"
}
注册自定义上下文
要添加新的条件(例如,检测当前是否在下雨),需要实现 IIntentContext 并注册一个 ContextType。
创建上下文:
public record RainingContext() implements IIntentContext { public static final MapCodec<RainingContext> CODEC = MapCodec.unit(new RainingContext()); @Override public boolean test(LocalPlayer player) { return player.level().isRaining(); } @Override public ContextType<?> getType() { return MyRegistries.IS_RAINING.get(); } }注册类型: 使用
IntentAPI.CONTEXT_TYPE_REGISTRY_KEY将你的类型注册到 Intent 注册表中。public static final DeferredRegister<IIntentContext.ContextType<?>> CONTEXT_TYPES = DeferredRegister.create(IntentAPI.CONTEXT_TYPE_REGISTRY_KEY, "my_mod_id"); public static final DeferredHolder<IIntentContext.ContextType<?>, IIntentContext.ContextType<RainingContext>> IS_RAINING = CONTEXT_TYPES.register("is_raining", () -> () -> RainingContext.CODEC);
添加 GUI 编辑器
如果你想让你定义的自定义上下文能在 Intent 的 GUI 中进行编辑,请注册一个 IContextEditor。
// 在你的客户端设置中
ContextEditorRegistry.register(MyRegistries.IS_RAINING.get(), () -> new SimpleStateEditor<>(RainingContext::new));
许可证
本项目基于 MIT License 许可。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。