本帖最后由 等枫亭丶烟雨阁 于 2022-3-19 22:38 编辑
请问各位大佬如何做到让1.16.5CustomNPC里的NPC可以做到透视玻璃看到周围的生物和玩家,要求只能透过玻璃,其他方块不行
并且发现敌对生物和玩家后会无视玻璃直接发动远程攻击
远程攻击如果击中玻璃玻璃就会碎掉
简单的来说就是NPC如果隔着玻璃发现敌对生物和玩家后就会用远程攻击击破玻璃并且对敌对生物和玩家发起攻击
请问各位大佬如何做到让1.16.5CustomNPC里的NPC可以做到透视玻璃看到周围的生物和玩家,要求只能透过玻璃,其他方块不行
并且发现敌对生物和玩家后会无视玻璃直接发动远程攻击
远程攻击如果击中玻璃玻璃就会碎掉
简单的来说就是NPC如果隔着玻璃发现敌对生物和玩家后就会用远程攻击击破玻璃并且对敌对生物和玩家发起攻击
额,这个的话npcmod估计没法做到
如果只是让np**在这样的玻璃房间里,而且没有地下室,那能否简化一下要求,把“无视玻璃直接发动远程攻击”改成“无视方块直接发动远程攻击”
无敌三脚猫 发表于 2022-3-26 21:40
如果只是让np**在这样的玻璃房间里,而且没有地下室,那能否简化一下要求,把“无视玻璃直接发动远程攻击” ...
这里只是举个例子,实际上可能会出现隔着墙壁的情况,这种情况直接发动攻击就会极不科学,故不行
- var ray=Java.type("net.minecraft.util.math.RayTraceContext")
- var Material=Java.type("net.minecraft.block.material.Material")
- var Result=Java.type("net.minecraftforge.eventbus.api.Event").Result
- function rangedLaunched(e){
- e.projectiles[0].enableEvents()
- }
- function projectileImpact(e){
- if(e.type==0)return
- if(e.target.getMCBlockState().func_185904_a()==Material.field_151592_s){
- e.setResult(Result.DENY)
- e.target.getWorld().getMCWorld().func_175655_b(e.target.getPos().getMCBlockPos(),false)
- }
- }
- function init(e){e.npc.getTimers().forceStart(1,40,true)}
- function timer(e){
- var npc=e.npc
- var world=e.npc.getWorld()
- var target=world.getClosestEntity(npc.getPos(),10,3)
- if(target==null){
- target=world.getClosestEntity(npc.getPos(),10,1)
- if(target==null)return
- if(target.getGamemode()!=0)return
- }
- var pos1=npc.getMCEntity().entity.func_174824_e(1)
- var pos2=target.getMCEntity().func_213303_ch()
- world=world.getMCWorld()
- var ray1=world.func_217299_a(new ray(pos1,pos2,ray.BlockMode.COLLIDER,ray.FluidMode.NONE,npc.getMCEntity()))
- var ray2=world.func_217299_a(new ray(pos2,pos1,ray.BlockMode.COLLIDER,ray.FluidMode.NONE,target.getMCEntity()))
- if(ray1.func_216346_c().ordinal()==1&&ray2.func_216346_c().ordinal()==1)
- if(world.func_180495_p(ray1.func_216350_a()).func_185904_a()==Material.field_151592_s&&world.func_180495_p(ray2.func_216350_a()).func_185904_a()==Material.field_151592_s){
- if(npc.getAttackTarget()==null)
- npc.setAttackTarget(target)
- e.npc.swingMainhand()
- npc.getMCEntity().func_82196_d(target.getMCEntity(),0)
- }
- }