轻光233
rt,类似于生物走路或者箭矢抛射(到指定点停下)的效果,而不是直接tp

洞穴夜莺
你的Modding API是Forge/Fabric/Bukkit?

William_Shi
Bukkit解答:
箭矢抛射需要绘制抛物线曲线,这点PVPIN已有相关API(JavaScript),可以直接抄(注意开源协议)
另外一个生物就复杂了,涉及到是不是有障碍等问题,推荐采用已有的PathFinderGoal

轻光233
本帖最后由 轻光233 于 2020-8-16 22:04 编辑
William_Shi 发表于 2020-8-16 21:51
Bukkit解答:
箭矢抛射需要绘制抛物线曲线,这点PVPIN已有相关API(JavaScript),可以直接抄(注意开源协 ...

仅仅只是类似像WSAD这样的移动即可,不需要考虑障碍
举箭矢的例子只是为了说明不仅仅是要LivingEntity

南柯郡守
轻光233 发表于 2020-8-16 22:03
仅仅只是类似像WSAD这样的移动即可,不需要考虑障碍
举箭矢的例子只是为了说明不仅仅是要LivingEntity ...

https://www.mcbbs.net/thread-1039885-1-1.html
(得去申请解锁)
试试这个

把玩家改成指定坐标就行

洞穴夜莺
轻光233 发表于 2020-8-16 22:03
仅仅只是类似像WSAD这样的移动即可,不需要考虑障碍
举箭矢的例子只是为了说明不仅仅是要LivingEntity ...

我想知道tp有哪里不自然的?
换句话说,你要的效果和tp有何不同?


南柯郡守
洞穴夜莺 发表于 2020-8-17 00:00
我想知道tp有哪里不自然的?
换句话说,你要的效果和tp有何不同?

走过去和闪现过去效果确实不一样

天辉胡萝卜
1.15下的一个例子

  1.     public class PathfinderGoalMoveTowardsPlayer extends PathfinderGoal {
  2.         private final EntityCreature creature;
  3.         private Vec3D location;
  4.         private double x;
  5.         private double y;
  6.         private double z;
  7.         private final float stopDistance;

  8.         public PathfinderGoalMoveTowardsPlayer(EntityCreature var0, Vec3D var2, float var3) {
  9.           this.creature = var0;
  10.           this.stopDistance = var3;
  11.           this.location = var2;
  12.           a(EnumSet.of(PathfinderGoal.Type.MOVE));
  13.         }

  14.         @Override
  15.         public boolean a() {
  16.           if (this.location == null)
  17.             return false;
  18.           if (this.location.f(new Vec3D(creature.locX(), creature.locY(), creature.locZ())) > (this.stopDistance * this.stopDistance))
  19.             return false;
  20.           Vec3D var0 = this.location;
  21.           if (var0 == null)
  22.             return false;
  23.           this.x = var0.x;
  24.           this.y = var0.y;
  25.           this.z = var0.z;
  26.           return true;
  27.         }

  28.         @Override
  29.         public boolean b() {
  30.           return (!this.creature.getNavigation().m() && this.location.f(new Vec3D(creature.locX(), creature.locY(), creature.locZ())) < (this.stopDistance * this.stopDistance));
  31.         }

  32.         @Override
  33.         public void d() {
  34.          
  35.         }

  36.         @Override
  37.         public void c() {
  38.           this.creature.getNavigation().a(this.x, this.y, this.z, this.stopDistance);
  39.         }
  40.       }
复制代码



将该PathfinderGoalMoveTowardsPlayer覆盖nms entity自身的pathfinder即可
1.16请自行修改

洞穴夜莺
南柯郡守 发表于 2020-8-17 00:43
走过去和闪现过去效果确实不一样

既然不需要考虑障碍物
那就是说不需要寻路
既然如此,连续的tp有啥不自然的吗?

轻光233
洞穴夜莺 发表于 2020-8-17 07:12
既然不需要考虑障碍物
那就是说不需要寻路
既然如此,连续的tp有啥不自然的吗? ...

不寻路不代表就要连续tp
你平常玩游戏走路不自带寻路吧?也不是连续tp啊

轻光233
本帖最后由 轻光233 于 2020-8-17 07:52 编辑

上文回复已经提到不仅仅是要LivingEntity,而且不需要自动寻路,不过还是感谢码这么多代码

洞穴夜莺
轻光233 发表于 2020-8-17 07:24
不寻路不代表就要连续tp
你平常玩游戏走路不自带寻路吧?也不是连续tp啊 ...

我说的是你认为连续tp有什么看起来不自然的地方
连续tp确实麻烦且多余

轻光233
洞穴夜莺 发表于 2020-8-17 07:28
我说的是你认为连续tp有什么看起来不自然的地方
连续tp确实麻烦且多余

连续tp就跟跳ping了一样,而且如果在墙边有可能会卡墙,完全没有移动自然,而且移动才是我想要实现的效果

CyanBillows
本帖最后由 CyanBillows 于 2020-8-18 17:17 编辑

Entity.setVelocity(目的地方向的向量)
不过这个办法遇到障碍物容易卡住