本帖最后由 inuyasha01 于 2020-3-2 22:42 编辑
望着作者git迟迟不来的更新。。NPC伙伴职业从2016年到今天还是WIP(未完成)。。。
自己用的2019Oct的最新版NPC,所以。。估计这BUG已经存在四年多了。
描述一下:
MOD:自定义NPC (CustomNPC 作者noppes) 2019Oct - 1.12.2
问题:
曾想过用脚本来解决的。。。
但。。作者在官网http://www.kodevelopment.nl/minecraft/customnpcs/roles/
http://www.kodevelopment.nl/customnpcs/api/1.12.2/noppes/npcs/api/event/package-summary.html
都没有提供修改NPC饥饿的API (无论你搜food hunger,都是plyaer实体才可被操作的,npc的没写接口,调用直接报错)
此外discord的npc脚本大佬的讨论版里,也没人能解决饱食度的问题。。
(他们给的建议是改NBT,但他们改完端崩了,我改完没崩但无效)
此外通过【治疗者】NPC给【伙伴】增加【饱腹BUFF】,也无法增加伙伴职业NPC的饱食度
此外通过脚本addPotionEffect id23给NPC,也无效
此外通过myitems手持道具buff,让NPC手持饱腹BUFF道具,也无效
此外由于npc的git没开源https://github.com/Noppes/CustomNPCsAPI 作者只给了API的开源,无法动及mod里的代码。。
此外自己也尝试过通过反汇编直接删掉BUG代码,但部分代码丢失,无法给mod进行完善和重编译。。
此外NPC最近也在停更状态。。他主discord的邀请链接也过时了,不知道怎么能有效地联系上作者本人。。
因此。。。
望着作者git迟迟不来的更新。。NPC伙伴职业从2016年到今天还是WIP(未完成)。。。
自己用的2019Oct的最新版NPC,所以。。估计这BUG已经存在四年多了。
描述一下:
MOD:自定义NPC (CustomNPC 作者noppes) 2019Oct - 1.12.2
问题:
【伙伴】职业在吃完背包内 最后一个物品 后,会进入一个【无限死亡】的状态。
无法互动,无法被更改,无法复活。
然而【伙伴】职业 是所有NPC里唯一一个带饱食度的种类
然而【伙伴】职业无论通过何种方法都 无法取消饱食度的自动下降问题
(即使NPC被关闭了背包功能,无法进食,但他的饥饿值仍然会被更新)
但。。作者在官网http://www.kodevelopment.nl/minecraft/customnpcs/roles/
http://www.kodevelopment.nl/customnpcs/api/1.12.2/noppes/npcs/api/event/package-summary.html
都没有提供修改NPC饥饿的API (无论你搜food hunger,都是plyaer实体才可被操作的,npc的没写接口,调用直接报错)
此外discord的npc脚本大佬的讨论版里,也没人能解决饱食度的问题。。
(他们给的建议是改NBT,但他们改完端崩了,我改完没崩但无效)
此外通过nbtEdit查看NPC的NBT,发现关于food类的所有项,无论改成-1,还是删除tag,都无法停止foodticktimer的运转(会自动重置)
此外通过【治疗者】NPC给【伙伴】增加【饱腹BUFF】,也无法增加伙伴职业NPC的饱食度
此外通过脚本addPotionEffect id23给NPC,也无效
此外通过myitems手持道具buff,让NPC手持饱腹BUFF道具,也无效
此外由于npc的git没开源https://github.com/Noppes/CustomNPCsAPI 作者只给了API的开源,无法动及mod里的代码。。
此外自己也尝试过通过反汇编直接删掉BUG代码,但部分代码丢失,无法给mod进行完善和重编译。。
此外NPC最近也在停更状态。。他主discord的邀请链接也过时了,不知道怎么能有效地联系上作者本人。。
因此。。。
能做的都做了。。但。。
NPC饿了还是该扣血就扣血,吃完物品该卡死就卡死。
但有没有什么办法可以从根本上解决伙伴NPC饥饿的问题?
——如何让一个实体不会饿?
比如锁定单一实体的NBT, FoodTickTimer这个tag,理论上可以。
如果有人知道方法的话。。
所以 感谢阅读。。也感谢帮忙。。。。 Orz
版本是1.12.2吗?还是1.7.10?
理论上用脚本可以解决问题
因此我个人不建议直接修改npcmod
如果修改这个NPC的职业 他会离开"无限死亡"状态吗
理论上用脚本可以解决问题
因此我个人不建议直接修改npcmod
如果修改这个NPC的职业 他会离开"无限死亡"状态吗
本帖最后由 inuyasha01 于 2020-3-2 22:41 编辑
感谢回复, 版本是最新的2019 Oct 1.12.2
脚本。。。。。的话。。http://www.kodevelopment.nl/customnpcs/api/1.12.2/noppes/npcs/api/event/package-summary.html
最新的脚本API。。作者并没有提供对NPC进行饱食度控制的接口。。。
你可以看看我spolier起来的那块,在discord脚本区的发帖记录。。
强行调取IPlyaer的函数NPC会直接报错,提示setHunger不存在于npc类中。
然后职业就是因为【伙伴】才会有BUG。。。所以如果要用伙伴的话,这BUG不修很不方便。。
Hueihuea 发表于 2020-3-2 22:05
版本是1.12.2吗?还是1.7.10?
理论上用脚本可以解决问题
因此我个人不建议直接修改npcmod
感谢回复, 版本是最新的2019 Oct 1.12.2
脚本。。。。。的话。。http://www.kodevelopment.nl/customnpcs/api/1.12.2/noppes/npcs/api/event/package-summary.html
最新的脚本API。。作者并没有提供对NPC进行饱食度控制的接口。。。
你可以看看我spolier起来的那块,在discord脚本区的发帖记录。。
强行调取IPlyaer的函数NPC会直接报错,提示setHunger不存在于npc类中。
然后职业就是因为【伙伴】才会有BUG。。。所以如果要用伙伴的话,这BUG不修很不方便。。
inuyasha01 发表于 2020-3-2 22:37
感谢回复, 版本是最新的2019 Oct 1.12.2
脚本。。。。。的话。。http://www.kodevelopment.nl/customnpcs ...
所以 不使用该职业 就不会出现该bug?是这样吗?
Hueihuea 发表于 2020-3-2 22:48
所以 不使用该职业 就不会出现该bug?是这样吗?
对的。但问题是 如果想用,就会出现。。这BUG是固定存在的
本帖最后由 Hueihuea 于 2020-3-9 13:32 编辑
现在 你甚至可以尝试这个
https://www.mcbbs.net/thread-979548-1-1.html
论坛代码功能好像不太喜欢我 放粘贴板了
https://paste.ubuntu.com/p/JrzQzwJCsk/
复制代码
现在 你甚至可以尝试这个
https://www.mcbbs.net/thread-979548-1-1.html
论坛代码功能好像不太喜欢我 放粘贴板了
https://paste.ubuntu.com/p/JrzQzwJCsk/
- /**
- *@author Hueihuea
- */
- //注意要在tick事件使用
- function tick(event) {
- //让当前NPC吃饱
- Satiate(event.npc);
- }
- /**
- * void **Satiate(ICustomNpc npc)
- * @param {"ICustomNpc"} npc 要喂饱的npc
- * @description 让这个该死的NPC吃饱吧
- */
- function Satiate(npc) {
- var RoleCompanion = Java.type("noppes.npcs.roles.RoleCompanion");
- var CompanionFoodStats = Java.type("noppes.npcs.roles.companion.CompanionFoodStats");
- var role = npc.getMCEntity().roleInterface;
- if (!(role instanceof RoleCompanion)) {
- return;
- }
- var foodstats = role.foodstats;
- var CompanionFoodStatsClass = CompanionFoodStats.class;
- var foodLevelField = CompanionFoodStatsClass.getDeclaredField("foodLevel");
- var foodTimerField = CompanionFoodStatsClass.getDeclaredField("foodTimer");
- foodLevelField.setAccessible(true);
- foodTimerField.setAccessible(true);
- foodLevelField.set(foodstats, 20);
- foodTimerField.set(foodstats, 0);
- }