#执行者为被传送的实体
tag @s add portal.teleporting

#execute unless entity @n[type=item_display,tag=portal.blue_portal] unless entity @n[type=item_display,tag=portal.orange_portal] run return fail

#attribute @s fall_damage_multiplier base set 0

execute if entity @n[type=item_display,distance=..1,tag=portal.blue_portal] run function portal:teleport/tag/in_blue
execute if entity @n[type=item_display,distance=..1,tag=portal.orange_portal] run function portal:teleport/tag/in_orange

execute as @n[type=item_display,tag=portal.exit_portal] at @s run function portal:teleport/set_pos/

execute as @n[type=item_display,predicate=portal:portal,distance=..1] run function portal:teleport/decompose_motion

function portal:teleport/calc_vel

execute as @s[type=player] run function portal:teleport/set_motion/player
execute as @s[type=!player] run function portal:teleport/set_motion/other

#function portal:teleport/__debug__

#重置
tag @s remove portal.in_blue
tag @s remove portal.in_orange
tag @s remove portal.teleporting
tag @n[type=item_display,tag=portal.exit_portal] remove portal.exit_portal
#冷却
tag @s add portal.not_teleport
tag @s add portal.not_leave_portal
#用于重置safe_fall_distance属性
#tag @s add portal.reset_fall
scoreboard players set @s portal.tp_cooldown 1


#data modify entity @s Motion set value [0,1,0]