Tengo una flecha cuyo movimiento quiero escalar para que se mueva más rápido pero siga moviéndose en la misma dirección. Sin embargo, todo lo que puedo averiguar es cómo establecer que a un solo valor, sin cambios con /execute as @e[type=arrow] run data modify entity @s Motion set value [x,y,z]
donde x,y,z son constantes. Lo que quiero hacer es establecer estos tres valores como un valor escalado de lo que los valores son actualmente. ¿Alguien sabe cómo hacer esto o al menos me empuje en la dirección correcta?
Respuesta
¿Demasiados anuncios?El principio básico consiste en almacenar temporalmente el valor en un marcador, utilizando el factor de escala de execute store
y luego ponerlo de nuevo en NBT. Así que algo como esto:
execute store result score foo y run data get entity @e[type=arrow,limit=1] Motion[1] 10
execute store result entity @e[type=arrow,limit=1] Motion[1] double 1 run scoreboard players get foo y
Pero hay un problema: Motion
no permite valores >10.0
. Si escribe, por ejemplo 1000.0
en él, sólo se restablecerá a 0. Usted podría limitar el valor con algo como esto:
execute if score foo y matches 11.. run scoreboard players set foo y 10
Pero si quieres grandes factores de escala, probablemente acabarás con un montón de flechas que van perfectamente en un ángulo de 45°. Alternativamente, usted podría desactivar toda la lógica normal de una flecha dándole Motion=[0.0,0.0,0.0],NoAI=1,NoGravity=1
y teletransportándolo tú mismo la distancia prevista en cada tick. Para ello, tienes que hacer cálculos en marcadores y luego escribir el resultado en Pos
.