本帖最后由 贰逼 于 2016-3-19 21:59 编辑

在这里我只做了雪球的强制偏移——同样适用于鸡蛋、末影珍珠,但是不适用于其他抛射型实体。

效果:



原理:
主要部分——强制偏移

首先需要了解Mc中实体的运动公式
http://www.mcbbs.net/thread-478493-1-1.html
(此贴中的第二面阐明了公式)

所以在实际游戏中的运动是上面那样的
通过枚举,得出以下高度值:(从97.52000000327826到64.18336154219014)
  1. 97.52000000327826
  2. 97.50379648424558
  3. 97.45775500091926
  4. 97.38217393265768
  5. 97.27734867502846
  6. 97.14357166964640
  7. 96.98113243371292
  8. 96.79031758926017
  9. 96.57141089210276
  10. 96.21469326049981
  11. 96.05044280353057
  12. 95.74893484918611
  13. 95.42044197218024
  14. 85.06523402148224
  15. 94.68357814757424
  16. 94.27573882943612
  17. 93.84197790126048
  18. 93.38255457890047
  19. 92.89772548605322
  20. 92.38774468018130
  21. 91.85286367817510
  22. 91.29331481758490
  23. 90.70939460264047
  24. 90.10129708741533
  25. 89.46728054221374
  26. 88.81357415710733
  27. 88.13444473026932
  28. 87.43209669189348
  29. 86.70677212787382
  30. 85.95870080324768
  31. 85.18811018540420
  32. 84.39522546706077
  33. 83.58026758900979
  34. 82.74346326263785
  35. 81.88502499221977
  36. 81.00517109698973
  37. 80.10411573299159
  38. 79.18207091471085
  39. 78.23924653649017
  40. 77.27585039373078
  41. 76.29208820388187
  42. 75.28816362722011
  43. 74.26427828742136
  44. 73.22063179192660
  45. 72.15742175210437
  46. 71.07484380321135
  47. 69.97309162415354
  48. 68.85235695704974
  49. 67.71282962659936
  50. 66.55469755925667
  51. 65.37814680221314
  52. 64.18336154219014
复制代码

通过进一步简化,得到以下偏移指令:

  1. /execute @e[type=Snowball] ~ ~ ~ scoreboard players add @e[type=Snowball,c=1] flyingt 1
复制代码
记录运动时间
  1. /execute @e[type=Snowball,score_flyingt_min=2] ~ ~ ~ tp @e[type=Snowball,c=1] ~ ~0.09 ~
  2. /execute @e[type=Snowball,score_flyingt_min=5] ~ ~ ~ tp @e[type=Snowball,c=1] ~ ~0.07 ~
  3. /execute @e[type=Snowball,score_flyingt_min=8] ~ ~ ~ tp @e[type=Snowball,c=1] ~ ~0.06 ~
  4. /execute @e[type=Snowball,score_flyingt_min=12] ~ ~ ~ tp @e[type=Snowball,c=1] ~ ~0.06 ~
  5. /execute @e[type=Snowball,score_flyingt_min=15] ~ ~ ~ tp @e[type=Snowball,c=1] ~ ~0.07 ~
  6. /execute @e[type=Snowball,score_flyingt_min=19] ~ ~ ~ tp @e[type=Snowball,c=1] ~ ~0.09 ~
  7. /execute @e[type=Snowball,score_flyingt_min=22] ~ ~ ~ tp @e[type=Snowball,c=1] ~ ~0.11 ~
  8. /execute @e[type=Snowball,score_flyingt_min=26] ~ ~ ~ tp @e[type=Snowball,c=1] ~ ~0.13 ~
  9. /execute @e[type=Snowball,score_flyingt_min=28] ~ ~ ~ tp @e[type=Snowball,c=1] ~ ~0.15 ~
复制代码
位移

再来解释为什么斜抛下抛也是直线:

无论是什么路线,公式都是那个帖子中的计算公式,距离只与t(运动时间)/m(重力常数)(雪球/鸡蛋/末影珍珠都是0.03)有关。

次要部分——伤害

很简单
  1. /execute @e[type=Snowball] ~ ~-0.5 ~ effect @e[type=亡灵生物,r=2] minecraft:instant_health 等级 0
复制代码
-0.5是为了正确得到碰撞体积,r=2是为了预判(因为雪球飞行速度很快)

  1. /execute @e[type=Snowball] ~ ~-0.5 ~ effect @e[type=非亡灵生物,r=2] minecraft:instant_damage 等级 0
复制代码

优点/与其他方法对比


把玩存档
[groupid=546]Command Block Logic[/groupid]