• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
[26.1][Fabric/NeoForge]可热重载的强大 Minecraft Kotlin 脚本开发框架

原创 开源 [26.1][Fabric/NeoForge]可热重载的强大 Minecraft Kotlin 脚本开发框架 0.0.1

完成注册/登录后下载
版权类型
原创
版权链接
#
语言支持
English
模组加载器
  1. Fabric
  2. NeoForge
前置组件
(Fabric侧)Fabric API: https://modrinth.com/mod/fabric-api
适配版本(Java)
  1. 1.21

1773936193893.webp

什么是 Katton?​

Katton 是一个强大的 Minecraft 模组开发框架,允许你使用 Kotlin 脚本创建和修改游戏内容。借助热重载脚本,你可以实时查看更改,无需重启游戏。

Katton 同时支持 Fabric 和 NeoForge。我们会尽可能保持 API 在两者之间保持一致,但是仍然可能会存在一些些的差别。

基于 26.1 以后 Minecraft 代码混淆的取消,Kotlin脚本现在可以非常简单的直接访问 Minecraft 的类。对于26.1之前的版本,虽然理论上可以做到相同的功能,但是暂时没有解决反混淆和混淆的方案(你也不希望你的脚本里面的类名全是abc叭233)

为什么选择 Katton?​

  • 易用:Katton 直观的 API 和热重载功能让各水平的模组开发者都能快速创建和测试他们的脚本。
  • 灵活:借助 Kotlin 的强大功能,你可以创建与 Minecraft 交互的复杂脚本。
  • 高性能:Katton 使用 Kotlin 脚本在 Minecraft 运行时直接与 Java 对象交互,确保高性能和无缝集成。
  • 强大的 API:Katton 提供了全面的 API,允许你访问和修改游戏的各个方面,从方块和物品到实体和世界生成,甚至包括类似 Mixin 的代码注入,并且全部支持热重载
  • 数据包开发者友好:Katton在保留数据包热重载优势的同时,实现堪比模组的强大功能。Katton提供了一系列的函数,封装了原版命令的所有功能。即使你对 Fabric 模组开发一无所知,你仍然可以使用这些函数实现至少你能在数据包中能做到的一切。

一个简单的展示用例喵,实现了一个爆炸箭:
代码:
//不——为什么代码高亮不支持 kotlin
fun main() {
    // 当实体加载时执行
    ServerEntityEvent.onAfterEntityLoad += load@
    fun(arg: EntityLoadArg) {
        val (entity, _) = arg
        if (entity !is Arrow) return
        // 如果玩家射出一支箭,检查手持弓的数据
        val owner = entity.owner
        if (owner is ServerPlayer) {
            onArrowShot(owner, entity)
        }
    }
    
    // 每 tick 执行
    onStartServerTick += tick@
    fun(_) {
        // 检查 TNT 箭是否击中地面并使其爆炸
        processTNTArrow()
    }
}

// 一个集合,暂存了所有被标记为 TNT 箭的箭实体
val tntArrow = HashSet<Arrow>()

fun onArrowShot(player: ServerPlayer, arrow: Arrow) {
    tell(player, Component.empty() + "你手中的武器是: " + player[Weapon.MainHand]?.itemName)
    // 这支箭是由 TNT 弓射出的,将会在击中地面后爆炸
    if (player.mainHandItem.nbt["tnt"](false)) {
        tntArrow.add(arrow)
    }
}

fun processTNTArrow() {
    val iterator = tntArrow.iterator()
    while (iterator.hasNext()) {
        val arrow = iterator.next()

        // 通过检查 NBT 数据来检查箭是否击中地面
        if (getEntityNbt(arrow).getBooleanOr("inGround", false)) {
            // 让箭爆炸
            // 这个方法来自原版代码
            arrow.level().explode(
                arrow,
                arrow.damageSources().explosion(arrow, arrow.owner),
                null,
                arrow.position(),
                16.0f,
                false,
                Level.ExplosionInteraction.TNT
            )
            iterator.remove()
            // 爆炸后移除箭实体
            arrow.kill(arrow.level() as ServerLevel)
        }
    }
}

⚠️早期开发阶段:Katton 仍然处于早期开发测试阶段,我们不建议任何想要进行正式开发的开发者现在就使用 Katton 进行开发,但是我们仍然非常推荐开发者们来快照版本尝尝鲜,并为我们提供宝贵的建议和反馈喵!
作者
Alumopper
下载
4
查看
170
首次发布
最后更新

评分

0.00 星 0 次评分
后退
顶部 底部