Ты умеешь писать код для нпс в моде на майнкрафт C...
Créé le : 27 juillet 2025
Créé le : 27 juillet 2025
Ты умеешь писать код для нпс в моде на майнкрафт Custom Npc? мне нужно чтобы при нажатии на npc выполнясь команда от лица npc "/say фраза" при нажатии на него, при повтором выводется следующая фраза, которая берётся из списка фраз
Вот самый простой скрипт (JavaScript / ECMAScript) для вкладки “Interact” в редакторе Custom NPCs.
Он перебирает список реплик и при каждом клике даёт команду /say … от имени NPC:
js// ====== настроить под себя ====== var lines = [ "Привет, путник!", "Как погода за пределами деревни?", "Береги себя в шахтах.", "Увидимся позже!" ]; // ================================= function interact(event) { var npc = event.npc; // сам NPC var data = npc.getStoreddata(); // память, переживает перезагрузку мира var index = data.get("lineIndex"); // читаем индекс фразы // если ещё не было кликов – начинаем с 0 if (index == null) index = 0; else index = parseInt(index); // выполняем /say как NPC (слэш убираем!) npc.executeCommand("say " + lines[index]); // /say Привет … // альтернатива без команд: npc.say(lines[index]); // готовим следующий индекс index = (index + 1) % lines.length; data.put("lineIndex", index); }
| Шаг | Что происходит |
|---|---|
| 1. | getStoreddata() даёт объект‑хранилище, который сохраняется даже после перезапуска сервера. (kodevelopment.nl) |
| 2. | Там мы храним номер текущей строки lineIndex. |
| 3. | При каждом клике скрипт берёт фразу lines[index], даёт NPC команду say … через executeCommand() — она запускается именно “от лица” NPC. (kodevelopment.nl) |
| 4. | Индекс увеличивается, а когда список заканчивается — начинаем с первой строки. |
| 5. | Поскольку executeCommand() фактически выполняет OP‑команду, убедитесь, что в CustomNPCs.cfg включено NpcUseOpCommands=true, иначе «/say» может быть заблокирована. (kodevelopment.nl) |
JavaScript (ECMAScript).lines или меняйте логику (например, сбрасывать индекс таймером).getStoreddata() на getTempdata().executeCommand() писать не нужно; команда передаётся без него (см. пример dummy.executeCommand в справке). (Pastebin)npc.say(text) — игроки увидят тот же вывод, но без необходимости править конфиг.Пробуйте — скрипт готов к копированию и сразу работает!
замены команду /say на /tellraw, обрати внимание на мой пример использования /tellraw @p "" кавычки должны быть обязательными, в них нужна фраза: "[имя нпс]" перед основным текстом
Ниже — обновлённый скрипт для вкладки Interact.
Он использует /tellraw (строгий формат — цель @p, далее ОБЯЗАТЕЛЬНЫ двойные кавычки), добавляя в начале каждой реплики тег [Имя NPC].
js// ====== Список ваших фраз ====== var lines = [ "Привет, путник!", "Как погода за пределами деревни?", "Береги себя в шахтах.", "Увидимся позже!" ]; // ================================= function interact(event) { var npc = event.npc; var data = npc.getStoreddata(); // сохраняем индекс между перезапусками var i = data.get("lineIndex"); i = (i == null) ? 0 : parseInt(i); // формируем текст сообщения: [ИмяNPC] ваша_фраза var rawMsg = '[' + npc.getName() + '] ' + lines[i]; /* /tellraw @p "<текст>" ─── кавычки внутри команды ОБЯЗАТЕЛЬНЫ ─── экранируем возможные " внутри строки, чтобы не сломать сам JavaScript‑литерал */ var cmd = 'tellraw @p "' + rawMsg.replace(/"/g, '\\"') + '"'; npc.executeCommand(cmd); // выполняем от лица NPC // следующий индекс data.put("lineIndex", (i + 1) % lines.length); }
lines[] — массив всех реплик. При каждом клике берётся текущая, после чего индекс циклически увеличивается.tellraw @p "…”. Глобальное сообщение [NPC] текст увидит только ближайший игрок @p." — они экранируются (\"), иначе команда бы оборвалась.Storeddata, так что цикл не сбросится после перезапуска. Нужен временный счётчик? Замените на getTempdata().CustomNPCs.cfg должно быть NpcUseOpCommands=true, иначе NPC не сможет запускать команды.В Minecraft допускается простой «строковый» вариант
/tellraw, например
/tellraw @a "Hello, world!"(то, что нам и нужно) (UMA Technology, Sportskeeda)
Скрипт можно вставлять «как есть» — он сразу начнёт выводить фразы с меткой [Имя NPC] и чётким соблюдением кавычек внутри /tellraw.