/cnps_event_pattern

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

Primary LanguageJavaScriptGNU General Public License v3.0GPL-3.0

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.