这个系列居然还是连续剧
书接上文,最后只要把时间触发器写完就功德圆满了——你以为这么简单?我**的写了五个小时才写完这60行代码首先就是两位重量级选手:KubeJS 7.1和Curios
目前网上几乎找不到kjs7的教程,他的wiki也约等于没有,我只能装上ProbeJS一个一个方法去试,讲实话,要不是ds给了点有用的建议,这一步还得多花几个小时
然后就是Curios,因为某种不明原因,原本低版本用来查询玩家的好几个方法全部失效(尤其是curiosHelper居然没了),导致我最后装了一个别人写的附属才获取到玩家身上的饰品
最后,谁教你往component里面塞私有对象的啊,我研究了半天都没法访问里面的属性,对,说的就是这个b饰品mod,号称高度数据包化,其实所有的材料注册/类型和部件注册,以及新的触发器,我用kjs来写和用数据包写几乎没有任何区别,要不是我对数据包比较熟悉我会全部用kjs,真的是开眼了
最后我用了一个非常奇葩的方式来解决私有对象的问题:我把整个itemStack先储存为一个HashMap,然后再转化成字符串,这样这个物品的所有component都会显示出来;然后用这个字符串做模式匹配……
我不敢想象要是没有ProbeJS和Deepseek得搞多久……
最后展示一下这堆折磨了我5个小时的代码(该脚本需要前置KubeJS Curios才能运行)
要是打开mcr写个mod是不是已经写完了……
PlayerEvents.tick(event => {
const player = event.player;
if (player.level.time % 40 !== 0) return;
let curiosHandler = CuriosApi.getCuriosInventory(player);
if (curiosHandler == null) return;
let ringSlots = player.isCuriosEquipped("irons_jewelry:ring");
if (!ringSlots) return;
let curioItem = player.getEquippedCurios();
if (curioItem==="") return;
let itemComponent = curioItem.getStackInSlot(5).toJson();
let itemString = itemComponent.toString();
if (itemString.includes("fts:mythic_ring")) {
let material = extractMaterialFromString(itemString);
if (material) {
applyEffectsBasedOnMaterial(player, material);
}
}
function extractMaterialFromString(itemString) {
let patterns = [
/fts:cursium/,
/fts:ignitium/,
/fts:shadow_steel/,
/fts:refined_radiance/
];
for (let pattern of patterns) {
if (pattern.test(itemString)) {
return pattern.source;
}
}
return null;
}
function applyEffectsBasedOnMaterial(player, material) {
switch (material) {
case "fts:cursium":
player.potionEffects.add("minecraft:night_vision", 300, 0, false, false);
break;
case "fts:ignitium":
player.potionEffects.add("minecraft:fire_resistance", 300, 0, false, false);
break;
case "fts:shadow_steel":
player.potionEffects.add("apothic_attributes:knowledge", 300, 0, false, false);
break;
case "fts:refined_radiance":
player.potionEffects.add("apothic_attributes:flying", 300, 0, false, false);
break;
default:
break;
}
}
})PS:实际上如果想要适配所有情况需要用for循环来遍历饰品栏,我因为知道戒指栏的精确位置所以直接引用来节省性能
往好处想,这个轮子造好之后,我想加新的就直接在里面加逻辑就行,也算一劳永逸了
PPS:接下来开发高难玩法才是真正的折磨环节,倒不是不懂,单纯就是需要敲的代码太多了
如果你能看到这里,就祝你天天开心
但凡你花一点时间了解一下java / kotlin
{:...:} 本帖最后由 WisW 于 2025-9-25 21:41 编辑
卡了重发了, 管理员看到删一下谢谢 ai确实好用,0基础教我在linux系统上做python脚本( 在座的各位都有责任
页:
[1]