Minecraft(我的世界)中文论坛

标题: 【教程???】让你的自定义NPC不再受到伤害脚本——免疫指定伤害

作者: Hueihuea    时间: 2018-7-6 17:15
标题: 【教程???】让你的自定义NPC不再受到伤害脚本——免疫指定伤害
本帖最后由 skpsk自己家 于 2019-8-6 09:30 编辑

或许NPC的脚本在国内有点小众吧……
你如果是一个RPG服腐竹(服务器还加了拔刀and自定义NPC)
是否因为NPC被拔刀之类的逆天武器连上天而烦恼呢
或许没有

需要用到的东西:


这个帖子能让你NPC怎么样:


第一步:配置环境①
如果你之前给服务器和本地添加了nashorn.jar 可以跳过
(其实其他脚本语言一样可行但是需要修改一些东西 因为API是不变的 但是语**有变化)

找到你安装的java
然后打开
X:xxxx\jre-xxxx\lib\ext
里面会有一个nashorn.jar
请和装mod一样 把他塞到mods文件夹

如果有服务端 请把服务端mod也装上nashorn.jar

第二步:配置环境②
打开你的游戏
找到你要修改的NPC 拿出脚本魔杖 对他右键
看“语言”是不是ECMAScript
把“开启”设为是


第三步:了解代码


  1. var getItem=null;
  2. var getType=null;
  3. try{
  4. getItem=event.getSource().getHeldItem().getName()
  5. getType=event.getType()
  6. }
  7. catch(err){}//上面的都不用改

  8. for(var i=0;i<1;i++){
  9. switch(i){
  10. case 0:
  11. if((getItem+"").indexOf("slashblade")!=-1)event.setCancelled(true)
  12. case 1:
  13. if(getType=="directMagic")event.setCancelled(true)
  14. if(getType=="directMagic")event.setDamage(0)
  15. }
  16. }
  17. //npc.say("item:"getItem)
  18. //npc.say("type:"getType)
复制代码

                                    这是一串非常简单易懂的代码(我也写不出NB的好吧)
目前已经是预设好免疫拔刀和幻影剑伤害了
现在我们来说说怎么改
首先 我们认识两个变量:

getItem和getType
getItem就是玩家攻击时手里拿的武器
(除非他切换武器的速度比你电脑计算速度还快 否则就是攻击所使用的物品)
getType就是伤害类型(也不知道怎么解释)

然后 我们要配置更多的禁用
下面这段是调试用的代码
//npc.say("item:"+getItem)
//npc.say("type:"+getType)
它是被注释过的
                    我们怎么让他运行呢 把前面的”//“删掉就可以了(加上去又不能运行了)
npc.say("item:"+getItem)
npc.say("type:"+getType)
删掉以后,我们攻击他时 就会反顾数据给我们
item就是物品的注册名
                                          type就是伤害类型(玩家 药水 幻影剑 爆炸 掉落等)
那我们要怎么禁止物品或者伤害类型呢
  1. for(var i=0;i<1;i++){
  2. switch(i){
  3. case 0:
  4. if((getItem+"").indexOf("slashblade")!=-1)event.setCancelled(true)
  5. case 1:
  6. if(getType=="directMagic")event.setCancelled(true)
  7. if(getType=="directMagic")event.setDamage(0)
  8. }
  9. }
复制代码
重要的事先说:
如上代码
i<1
这里的”1“就是你要禁止的物品数量(从0开始)


对没有编程基础的同学有点难解释
还是举例子吧
比如我用钻石剑打了NPC一下
返回的是
item:minecraft:diamond_sword
type:player

minecraft:diamond_sword就是钻石剑的注册名
player就代表是type是玩家伤害
那我们可以改写下代码
  1. for(var i=0;i<2/*这里改成了2*/;i++){
  2. switch(i){
  3. case 0:
  4. if((getItem+"").indexOf("slashblade")!=-1)event.setCancelled(true)
  5. case 1:
  6. if(getType=="directMagic")event.setCancelled(true)
  7. if(getType=="directMagic")event.setDamage(0)
  8. case 2:
  9. if((getItem()+"")).indexOf("minecraft:diamond_sword")!=-1)event.setCancelled(true)
复制代码
也就是 i小于的数量一定要比有的case大或者等于
如 我有0~100个case 但是我i<1000也可以
但是 如果我有0~100个case 但是我i<1就不可以了

其实也不一定把注册名写完 选一段他独有的就可以
比如
minecraft:diamond_sword可以写成diamond_sword甚至d_sword
建议全部写完

type也是差不多的道理(type不能像item取一段 必须写完)
  1. for(var i=0;i<3/*这里改成了3*/;i++){
  2. switch(i){
  3. case 0:
  4. if((getItem+"").indexOf("slashblade")!=-1)event.setCancelled(true)
  5. case 1:
  6. if(getType=="directMagic")event.setCancelled(true)
  7. if(getType=="directMagic")event.setDamage(0)//这串代码不用管一般情况下用不上
  8. case 2:
  9. if((getItem()+"")).indexOf("minecraft:diamond_sword")!=-1)event.setCancelled(true)
  10. case = 3:
  11. if(getType=="player")event.setCancelled(true)
  12. }
  13. }
复制代码
一些注意事项:

1.“player”这样子 一定要加“”不能写成player
2.如果你不是很懂编程 千万别动{}括号 尽管有 也别手贱吧
3.有什么问题 可以回帖问我
4.本代码目前仅支持1.7.10的自定义NPCmod 更高版本过几天会写一下 弄在下面
(其实只是语法的不同 思路还是这个样子 甚至API都差不多)
5.我第一次发这种贴如果发错版了 那就发错了吧
6.我可能表达得不是很好 所以不懂就问吧……





作者: 星层    时间: 2018-7-6 18:28
这个因该在mod教程更好点吧
作者: 粘兽    时间: 2018-7-15 13:52
帖子真是惨淡
还有最后面那串代码
<font color="#ff0000">3</font>

作者: Hueihuea    时间: 2018-7-15 20:04
粘兽sama 发表于 2018-7-15 13:52
帖子真是惨淡
还有最后面那串代码

emm 颜色的锅 本来是红色的 放到里面就变成代码了

作者: 暗流你不行?    时间: 2018-8-1 23:27
好像不是挺懂 楼主能加下QQ吗
作者: 2048028141    时间: 2018-8-2 10:31
很有帮助 楼主辛苦了
作者: yuan_kun    时间: 2018-9-1 21:53
服务端和客服端也要装?
作者: Hueihuea    时间: 2018-9-1 22:00
yuan_kun 发表于 2018-9-1 21:53
服务端和客服端也要装?

客户端写的人装就行(似乎是这样)
服务端一定要装
作者: 我心不变    时间: 2018-9-2 15:31
正是我想找的东西 ,谢谢,楼主辛苦了
作者: Colin_Sakuya    时间: 2019-7-22 14:17
看起来挺实用的,顶起来
作者: qq1829842455    时间: 2019-8-6 08:27
我复制你的第一段代码,控制台返回下列信息,是什么意思啊?
<eval>:18:15 Expected , but found getItem
npc.say("item:"getItem)
               ^ in <eval> at line number 18 at column number 15

作者: Hueihuea    时间: 2019-8-6 09:29
qq1829842455 发表于 2019-8-6 08:27
我复制你的第一段代码,控制台返回下列信息,是什么意思啊?
:18:15 Expected , but found getItem
npc.say ...

我忘记打+了
字符串用+连接
作者: qq1829842455    时间: 2019-8-6 09:54
skpsk自己家 发表于 2019-8-6 09:29
我忘记打+了
字符串用+连接

好的,谢谢
作者: xiaohei52142    时间: 2019-8-6 13:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: 小学妹    时间: 2019-8-23 18:21
怎么加?????

作者: 小学妹    时间: 2019-8-23 18:25
file:///C:/Users/Administrator/Desktop/%E6%97%A0%E6%A0%87%E9%A2%98.png
作者: 小学妹    时间: 2019-8-23 18:25
eeeeeeeeeee
作者: 小学妹    时间: 2019-8-23 18:27
C:\MCLDownload\Game\.minecraft\mods

作者: 小学妹    时间: 2019-8-23 18:29
加在这里之后打开游戏就出问题了
让我卸载组件后重试,我不加的话就没事,而且一打开游戏他会自动删除这个东西?

作者: 小学妹    时间: 2019-8-23 18:30
我的地图文件是这个C:\MCLDownload\Game\.minecraft\saves\LanGame-d8ec6ac8-bed0-4e0d-9405-aefbfad1ad20

作者: M.A.G.M.A    时间: 2019-9-7 17:54
楼主的思路是好的
但是拔刀剑配置文件里可以改
简单粗暴的让NPC免疫部分SA、剑气、右键等等伤害
除了NPC之外....
还可以设置其它生物吗?


作者: 静虚之锤    时间: 2020-2-20 09:46
楼主,我不是很懂我想做剧情,能加QQ吗?

作者: walle1996    时间: 2020-3-27 19:47
我想知道NPC路径怎么弄