|
14 | 14 | [30m# Выдаём сущности временный тег raycaster, чтоб рейкаст не мог столкнуться с тем, кто его запустил
|
15 | 15 | [35mtag [36m@s [34madd [0mraycaster
|
16 | 16 | [30m# Выставляем количество шагов рейкаста. В этом примере сделаем максимальную длину рейкаста - 100 блоков, а каждый шаг рейкаста будет длиной в 0.1 блок, поэтому 100/0.1=1000
|
17 |
| -[35mscoreboard [34mplayers set [36m@s [0mraycast [32m1000 |
| 17 | +[35mscoreboard [34mplayers set [36m#distance [0mraycast [32m1000 |
18 | 18 | [30m# Выставляем позицию запуска рейкаста на глазах сущности и запускаем основную функцию рейкаста
|
19 | 19 | [35mexecute [34mat [36m@s [34manchored eyes positioned [32m^ ^ ^ [34mrun [35mfunction [33mnamespace:raycast/ray
|
20 | 20 | [30m# Убираем временный тег
|
|
25 | 25 | {mcf}`raycast/ray.mcf`:
|
26 | 26 | ```ansi
|
27 | 27 | [30m# Убираем единицу из скорборда шагов рейкаста. Когда число достигнет нуля, рейкаст перестанет идти дальше.
|
28 |
| -[35mscoreboard [34mplayers remove [36m@s [0mraycast [32m1 |
| 28 | +[35mscoreboard [34mplayers remove [36m#distance [0mraycast [32m1 |
29 | 29 | [30m# Если блок на текущем расположении не является тем, что в теге (группе) namespace:raycast_ignore, то тогда запускается функция столкновения с блоком.
|
30 | 30 | [35mexecute [34munless block [32m~ ~ ~ [33mnamespace:raycast_ignore [34mrun [35mfunction [33mnamespace:raycast/hit_block
|
31 | 31 | [30m# Если текущее расположение находится внутри хитбокса любой сущности из тега (группы) namespace:raycast_entities (кроме самого запускателя рейкаста), то запустить функцию столкновения с сущностью.
|
32 | 32 | [35mexecute [34mas [36m@e[33m[[37mtype[34m=[33mnamespace:raycast_entities[34m,[37mdx[34m=[32m0[34m,[37mlimit[34m=[32m1[33m] [34mpositioned [32m~-0.99 ~-0.99 ~-0.99 [34mif entity [36m@s[33m[[37mdx[34m=[32m0[33m] [34mrun [35mfunction [33mnamespace:raycast/hit_entity
|
33 | 33 | [30m# Здесь можно писать ещё команды, которые будут запускаться на каждом шагу луча. Для примера заспавним партикл:
|
34 | 34 | [35mparticle [0mcomposter [32m~ ~ ~ 0 0 0 0 1
|
35 | 35 | [30m# Если скорборд шагов рейкаста равен 1 или больше, то передвинуться немного вперёд и запустить эту же функцию снова.
|
36 |
| -[35mexecute [34mif score [36m@s [0mraycast [34mmatches [32m1[35m.. [34mpositioned [32m^ ^ ^0.1 [34mrun [35mfunction [33mnamespace:raycast/ray |
| 36 | +[35mexecute [34mif score [36m#distance [0mraycast [34mmatches [32m1[35m.. [34mpositioned [32m^ ^ ^0.1 [34mrun [35mfunction [33mnamespace:raycast/ray |
37 | 37 | ```
|
38 | 38 | 4. В функциях `raycast/hit_block` и `raycast/hit_entity` обязательно нужно написать команду обнуления скорборда шагов рейкаста, а дальше можно писать команды, которые будут запускаться при столкновении с блоком и сущностью соответственно:
|
39 | 39 | {mcf}`raycast/hit_block.mcf`:
|
40 | 40 | ```ansi
|
41 |
| -[35mscoreboard [34mplayers set [36m@a[33m[[37mtag[34m=[32mraycaster[33m] [0mraycast [32m0 |
| 41 | +[35mscoreboard [34mplayers set [36m#distance [0mraycast [32m0 |
42 | 42 | [30m# Дальше свои команды... Например спавн молнии:
|
43 | 43 | [35msummon [0mlightning_bolt [32m~ ~ ~
|
44 | 44 | ```
|
45 | 45 | {mcf}`raycast/hit_entity.mcf`:
|
46 | 46 | ```ansi
|
47 |
| -[35mscoreboard [34mplayers set [36m@a[33m[[37mtag[34m=[32mraycaster[33m] [0mraycast [32m0 |
| 47 | +[35mscoreboard [34mplayers set [36m#distance [0mraycast [32m0 |
48 | 48 | [30m# Дальше свои команды... Например нанесение урона:
|
49 | 49 | [35mdamage [36m@s [32m5
|
50 | 50 | ```
|
|
0 commit comments