Skip to content

Evanechecssss/cnps_event_pattern

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CustomNPCCUstomEventsPattern

This script pattern to use custom events in Custom NPC Minecraft mod

Tutor by Creman

Установка:

  1. Перенесите папку custom_events в папку мира: .minecraft\saves[Название мира]
  2. Перенесите файл eventAPI в папку скриптов: .minecraft\saves[Название мира]\customnpcs\scripts\ecmascript Использование: Этот скрипт позволяет активировать ивенты в одних нпс/блоках/игроках удалённо - из функций других нпс/блоков/игроков. Для начала создадим ивент в папке custom_events, пример: 1 "event1": { 2 "name": "say_name", 3 "args": { 4 "value1": 0 5 }, 6 "description": "Этот ивент используется для веселья" 7 }

Что здесь к чему, я объясню в процессе создания скрипта, так будет легче, а потому давайте приступим. Напишем скрипт, который при нажатии на нпс заставляет другого нпс произнести имя первого: function interact(e){ SEND_TO_ALL_NPCS(INSTANCE( "event1", {value1:e.npc.name} )) }

Этот скрипт мы вставляем в нпс, на которого будем нажимать. В кавычках здесь - id ивента, которое написано в строке №1 ивента в папке. В фигурных скобках - задаются значения всех аргументов (строки №3 и №4 в скрипте). Эти значения будут переданы во второго нпс. Это могут быть числа, строки (их надо писать в кавычках) или методы (у нас в скрипте метод - e.npc.name, который берёт имя исходного нпс). Теперь напишем скрипт для второго нпс: 1 var npc; 2 function init(e){npc = e.npc} 3 function say_name(e){ 4 npc.say(e.value1)}

Тут say_name в третьей строчке - это название ивента (прописывается в строке №2 скрипта в файле, см. выше). Вообще, чтобы не путаться, вы можете сделать название и id ивента в файле одинаковыми. Тогда и в нпс-отправителе и в нпс-приёмнике вам нужно будет прописать одно и то же. При этом скрипт примут все прогруженные нпс в мире, у которых в окне скрипта есть "function say_name" и все начнут делать свои действия, связанные с этим ивентом. Если вы захотите, они могут быть у всех разные.

Теперь отправим из нпс скрипт в блок: 1 function interact(e){ 2 var w = e.npc.world 3 var blocks = [w.getBlock(15,102,2),w.getBlock(15,108,2)] 4 SEND_TO_BLOCKS(INSTANCE( "event1", {value1:456} ), blocks) }

Эту часть мы вставляем в нпс. В целом, тут всё также, как и в прошлом примере, но только в строке №3 нужно прописать (через getBlock как показано) координаты всех блоков, куда вы отправляете скрипт. И если у них есть "function say_name", то они её активируют.

Эту часть в блок:

var block; function init(e){block = e.block} function say_name(e){ block.world.setBlock(block.x,block.y+1,block.z,'minecraft:stone',0)}

Блок, принявший скрипт, поставит блок камня над собой.

Передача скрипта в игрока осуществляется также, как и в нпс, но вместо SEND_TO_ALL_NPCS используется SEND_TO_ALL_PLAYERS. Пример скрипт в игроке, которому передали ивент:

var player; function interact(e){player = e.player} function say_name(e){ player.showDialog(14,"Скин")}

Скрипт откроет диалог с id 14.

About

This script pattern to use custom events in Custom NPC Minecraft mod

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •