1 地面行走
效果:
1.1 原理
当玩家陷入方块时,每个方块之间的碰撞箱都是独立的,玩家也不会立即被那方块推出。因此只要地面厚度多于一格(两个或更厚),玩家被tp到半个身体陷进地下也能移动而且不会被推出(如果没接触到方块之间的边界)。然而,当玩家试图越过方块之间的边界时便会被推出地面。
因此,我们的问题则简化为如何让玩家越过方块之间的边界并不会被推出地面。
首先,我们可以让玩家按shift潜行(减速是不行的)以避免被推出。
其次,我们可以透过把玩家tp ~(-)0.0002格(x及z方向)以突破方块之间的边界。(比如玩家本来在A方块里,被B方块的边界挡住了,如果B方块在+x方向,把玩家tp ~0.0002 ~ ~ 就会变为玩家在B方块里)
虽然0.0002格很少,然而不停tp还是会出问题的,而且方块未必只是在+方向的,所以我们可以先+0.0002然后再-0.0002抵消那效果(不能在同一个游戏刻里,比如需要是在第一个游戏刻+0.0002,第二个游戏刻-0.0002)
1.2 命令
//初始化,为了之后使用分数来决定这gt是+还是-{
scoreboard objectives add scb dummy
scoreboard players set -1 scb -1//注意!!! 玩家的初始分数是1不是0
scoreboard players set @a scb 1//}//真正的循环执行部分{//scb >= 1: +//scb <= -1: -
rcb:tp @a[score_scb_min=1] ~ ~ ~0.0002
tp @a[score_scb=-1] ~ ~ ~-0.0002
tp @a[score_scb_min=1] ~0.0002 ~ ~
tp @a[score_scb=-1] ~-0.0002 ~ ~//当前分数*=-1//如果当前分数为1,则变为-1//如果当前分数为-1,则变为1
scoreboard players operation @a scb *= -1 scb//}
1.3 限制
如果玩家在地上的话就别这样tp他了...你们试试就明白如果撞到障碍物那就是在*方块(前后撞撞撞的)