3 votos

¿Cómo puedo probar si un jugador está tocando una telaraña en absoluto?

Actualmente estoy trabajando en un datapack que, entre muchas otras cosas, permite a ciertos jugadores moverse rápidamente a través de telarañas, en lugar de ser ralentizados por ellas. Sin embargo, me encuentro con el problema de que al probar el bloque en la posición ~ ~ ~ solo detectará la telaraña si el jugador está en el centro, no si están tocando el borde. Por lo tanto, el jugador tiene que abrirse paso a través de una pequeña cantidad de telaraña antes de recibir la velocidad aumentada.

¿Existe alguna manera de remediar esto efectivamente? Mi solución actual es simplemente probar el bloque en los pies del jugador y para el bloque a 0.3 bloques de distancia en todas las direcciones cardinales, lo cual parece funcionar en mi mundo de pruebas, pero ha estado causando problemas en el servidor para el que se creó el datapack. Además, es simplemente un código dolorosamente ineficiente.

Dado que estoy utilizando un datapack, los predicados y los avances están, por supuesto, sobre la mesa. Un predicado sería preferible, aunque entiendo que no siempre es posible.

Mi código actual ineficiente es el siguiente:

execute as @a[scores={Species=007}] at @s if block ~0.3 ~ ~ cobweb run scoreboard players set @s species007-01 2
execute as @a[scores={Species=007}] at @s if block ~-0.3 ~ ~ cobweb run scoreboard players set @s species007-01 2
execute as @a[scores={Species=007}] at @s if block ~ ~ ~0.3 cobweb run scoreboard players set @s species007-01 2
execute as @a[scores={Species=007}] at @s if block ~ ~ ~-0.3 cobweb run scoreboard players set @s species007-01 2
execute as @a[scores={Species=007}] at @s if block ~0.21 ~ ~0.21 cobweb run scoreboard players set @s species007-01 2
execute as @a[scores={Species=007}] at @s if block ~-0.21 ~ ~0.21 cobweb run scoreboard players set @s species007-01 2
execute as @a[scores={Species=007}] at @s if block ~-0.21 ~ ~-0.21 cobweb run scoreboard players set @s species007-01 2
execute as @a[scores={Species=007}] at @s if block ~0.21 ~ ~-0.21 cobweb run scoreboard players set @s species007-01 2

1voto

DaedalusMind Puntos 49

Puedes detectar cuando un jugador está tocando una telaraña con avances usando el requisito minecraft:enter_block. Aquí tienes un archivo de avance de ejemplo que ejecuta la función example:touched_cobweb cuando un jugador toca una telaraña.

{
  "criteria": {
    "requirement": {
      "trigger": "minecraft:enter_block",
      "conditions": {
        "block": "minecraft:cobweb"
      }
    }
  },
  "rewards": {
    "function": "example:touched_cobweb"
  }
}

También podrías prescindir de la sección de rewards del JSON y verificar si un jugador tiene el avance en otra función, de esta manera.

execute as  if entity @s[advancements={example:nombre_del_avance=true}] run 

Ten en cuenta que necesitarás revocar el avance del jugador tú mismo; no se quita automáticamente cuando el jugador sale de una telaraña.

JugonesTop.com

Jugonestop es una comunidad para amantes del gaming. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X