- 积分
- 2139
- Java版ID
- Windy_Secker
- 基岩版ID
- Windy Secker
- UID
- 87449
Lv.8 考古家
人气- 196 点
金粒- 1490 粒
宝石- 3 颗
爱心- 10 颗
钻石- 697 颗
贡献- 3 点
 
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
书接上文,最后只要把时间触发器写完就功德圆满了——你以为这么简单?我**的写了五个小时才写完这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:接下来开发高难玩法才是真正的折磨环节,倒不是不懂,单纯就是需要敲的代码太多了
如果你能看到这里,就祝你天天开心
|
|