⚙️ Класс "ModalFormData"
Публикация на этом заканчивается! Не забывайте оставлять отклики в виде комментариев и реакциями. А мы ещё свидимся
Помогите :3
Это форма, которую отличает от других разные виды ввода данных, а именно: текстовые поля, ползунки(слайдеры), выпадающий список и переключатель. В них можно также как и в других вводить заголовок формы, его тело, но вместо кнопок тут другие виды ввода данных, описанные выше. Пример кода ниже:
import { world } from "@minecraft/server";
import { ModalFormData } from "@minecraft/server-ui";
world.beforeEvents.itemUse.subscribe((ev) => {
const player = ev.source;
let form = new ModalFormData();
form.title("Заголовок формы");
form.textField("Введите сюда ваше имя для заказа", "Андрей");
form.dropdown("Выберите пиццу:", ["Моцарелла", "Пеперонни", "Ещё я не придумал"]);
form.slider("Выберите диаметр пиццы(в сантиметрах)", 25, 30, 40);
form.toggle("Хотите в подарок стринги?");
form.show(player).then((res) => {
const [ textField, dropdown, slider, toggle ] = res.formValues;
if (res.canceled) return;
player.sendMessage(`Вы заказали пиццу "${dropdown}" на имя ${textField}, размер пиццы - ${slider} сантиметров, стринги в подарок - ${toggle}`);
});
});Тут мы вводим в параметры текстовое поля, выпадающий список, слайдер и переключитель, после выводим игроку в чат какую пиццу он заказал.
Публикация на этом заканчивается! Не забывайте оставлять отклики в виде комментариев и реакциями. А мы ещё свидимся
Помогите :3
👍9❤2🔥2🥰1
На днях наткнутся на видео по созданию кастомного интерфейса в формах(его мы обсуждали в прошлой публикации), правда оно на английском, но я планирую сделать его перевод на русский, и все 5 частей вместить в 1 статью
Вот кстами сами видео:
• 1 часть - https://youtu.be/QhJkCDIZ-NU
• 2 часть - https://youtu.be/CWm-KU5ALOQ
• 3 часть - https://youtu.be/zWecyvsbKHY
• 4 часть - https://youtu.be/Hrpp2Ihg8lU
• 5 часть - https://youtu.be/E21eNDjtAow
Вот кстами сами видео:
• 1 часть - https://youtu.be/QhJkCDIZ-NU
• 2 часть - https://youtu.be/CWm-KU5ALOQ
• 3 часть - https://youtu.be/zWecyvsbKHY
• 4 часть - https://youtu.be/Hrpp2Ihg8lU
• 5 часть - https://youtu.be/E21eNDjtAow
YouTube
CREATING CUSTOM UI'S WITH JSON UI (Minecraft Bedrock Scripting API and JSON UI)
In this video, I demonstrate how to use JSON UI in combination with the scripting api in the Minecraft Bedrock Edition
🔗Links :
Like What I Am Doing? Concider Supporting Me! : https://ko-fi.com/dingsel
Join my Discord! : https://discord.gg/tzrmH56JXC
My…
🔗Links :
Like What I Am Doing? Concider Supporting Me! : https://ko-fi.com/dingsel
Join my Discord! : https://discord.gg/tzrmH56JXC
My…
👍2
whitedevices.mcpack
3.6 KB
Что-то давно в канале не было публикации. Забыл про него и иногда времени не было. Как-то так, так что вот, держите от меня аддон с открытыми исходниками.
Сам аддон проверяет девайс с которого зашёл игрок, и если в конфиге оно запрещено - кикает. Конфиг в исполняемом файле(index.js)
Сам аддон проверяет девайс с которого зашёл игрок, и если в конфиге оно запрещено - кикает. Конфиг в исполняемом файле(index.js)
👍2
Команда разработчиков
whitedevices.mcpack
// Исходники аддона по своей сути являются общественными. Делайте что с ними хотите, хоть украдите и выдавайте за своё.
// По желанию отмечайте меня, автора @shonestew.
// Конфиг, по умолчанию можно зайти со всех 3 платформ. Напишите в строку true - разрешается, false - запрещается.
const allowed_platform = {
allow_desktop: true,
allow_mobile: true,
allow_console: true,
};
// Список игроков, которые попадают под исключение, и не буду кикнуты с запрещенной платформы.
// Проще говоря - вайтлист.
const whiteListPlayers = [
"Notch", "Avogadro",
];
// Причины для кика игрока, зашедшего с запрещенной на сервере платформы.
// Если хотите для всех платформ одинаковую причину, удалите все строки кроме "default_reason".
const reasons = {
desktop_reason: "Вы зашли с запрещенной на сервере платформы,\nИз-за этого вы были кикнуты!",
mobile_reason: "Вы зашли с запрещенной на сервере платформы,\nИз-за этого вы были кикнуты!",
console_reason: "Вы зашли с запрещенной на сервере платформы,\nИз-за этого вы были кикнуты!",
default_reason: "Вы зашли с запрещенной на сервере платформы,\nИз-за этого вы были кикнуты!",
};
console.log("Загружено!");
// Основной код. Как писалось выше, изменяйте как хотите или пиздите исходники, мне по барабану
import { world } from "@minecraft/server";
world.afterEvents.playerSpawn.subscribe((ev) => {
const player = ev.player;
const platform = player.clientSystemInfo.platformType;
if (whiteListPlayers.includes(player.name)) return;
if (platform === "Desktop" && !allowed_platform.allow_desktop) {
world.runCommandAsync(`kick ${player.name} ${reasons.desktop_reason || reasons.default_reason}`);
return;
} else if (platform === "Mobile" && !allowed_platform.allow_mobile) {
world.runCommandAsync(`kick ${player.name} ${reasons.mobile_reason || reasons.default_reason}`);
return;
} else if (platform === "Console" && !allowed_platform.allow_console) {
world.runCommandAsync(`kick ${player.name} ${reasons.console_reason || reasons.default_reason}`);
return;
};
});
Код исполняемого файла(если лень открыть архив)
👍2🤩1
Команда разработчиков
📦 Глава "Модули". Часть 2. Модуль "@minecraft/server-ui". В прошлой части мы разбирали основной модуль, требуемый для взаимодействия с миром во многих случаях. Сегодня же мы будем разбирать модуль для отправки формы, дабы таким образом получать информацию.…
Спустя почти месяц исправил код в посте. Извиняюсь за то что допустил там ошибки
👍1
Код для аддона на промокод. Полностью свободный для использования, как обычно :3
const promocodes = [
{
"promocode": "NEWYEAR2007",
"command": "give @s apple"
},
];
import { world, system } from "@minecraft/server";
import { ModalFormData } from "@minecraft/server-ui";
world.beforeEvents.itemUse.subscribe((ev) => {
const player = ev.source;
let form = new ModalFormData();
form.title("Заголовок формы");
form.textField("Введите в текстовое поле ниже промокод", "");
system.run(() => {
form.show(player).then((res) => {
const [ textField ] = res.formValues;
if (res.canceled) return;
promocodes.forEach((data) => {
if (textField === data.promocode) {
player.runCommandAsync(data.command);
return;
} else {
player.runCommandAsync('tellraw @s {"rawtext":[{"text":"Такого промокода не существует!"}]}');
return;
};
});
});
});
});
👍1
🛠 Инструменты разработки: JavaScript
⬆️ Введение
⁉️ Как изучать JavaScript?
Мне сегодня один подписчик писал. И в ходе разговора он упомянул что он изучал JS и хотел бы видить на канале руководство по JS. Я долго не хотел этого делать, и не собираюсь делать. Но обьяснить что это за ЯП(язык программирования) все таки стоило бы. Итак, начнём!
⬆️ Введение
JavaScript - ЯП, что изначально задумывался как ЯП для веб-разработки. Но его начали использовать как скриптовый язык для написания, к примеру, серверной части проекта(NodeJS в помощь) или даже мобильных приложении(React Native позволяет). Но многие тут JavaScript используют для написания скриптов в аддонах для Майнкрафт Бедрока.
⁉️ Как изучать JavaScript?
Немного теории и много практики! Сам я именно так изучал JavaScript более полгода назад и продолжаю +- также изучать. Но совет может не для всех работать, это чисто индивидуально. Но попробовать стоит.
А насчет ресурсов и руководств - само руководство по JavaScript, можете только 1 главу читать, а остальное после гуглить при необходимости. Также есть другое руководство, от MDN Web Docs. Выбирайте по желанию, но лично я изучал JS по тому первому руководству. Так что вот.
Публикация вышла маленькая, но я попытался некоторые вещички обкашлить, что задавали ребята под комментариями. Повторюсь - полностью изучать JavaScript на этом канале не будем и не собираемся, есть руководства и видео, на котором понятнее чем если бы мы описывали своими словами. Но некоторые функции в ЯП на канале будут изучены. Как-то так
👍1
🆕 Новая релизная версия 1.21.60!
⚙ API Обновление
Какие-то фиксы баков и тому подобное. Но тут будет описано только изменения в Script API. А именно:
⚙ API Обновление
- Числовые JavaScript-перечисления теперь корректно обрабатывают и поддерживают обратное отображение значений.
- Исправлен баг, из-за которого вызовPlayer.hideAllExceptмог вызывать сбой сервера.
InputPermissions
- Следующие значения перечисленияInputPermissionCategoryперенесены в 1.17.0:
-LateralMovement,Sneak,Jump,Mount,Dismount,MoveForward,MoveBackward,MoveLeft,MoveRight.
- Следующие методыPlayerInputPermissionsперенесены в 1.17.0:
-isPermissionCategoryEnabled(permissionCategory: InputPermissionCategory): boolean;
-setPermissionCategory(permissionCategory: InputPermissionCategory, isEnabled: boolean): void;
- Удалено свойствоcompostingChanceиз APIItemStack. Теперь шанс компостирования для ванильных предметов доступен черезCompostableItemComponent->compostingChanceвItem Component API.
- Исправлены редкие случаи, когдаModalFormDataавтоматически прокручивался вниз при открытии UI.
Новые классы в бета-модуле 1.17.0
- Добавлены скриптовые привязки в бета-версию для функции Aim-Assist:
-class AimAssistCategory
-class AimAssistCategorySettings
-class AimAssistPreset
-class AimAssistPresetSettings
-class AimAssistRegistry
-enum AimAssistTargetMode
-interface PlayerAimAssistSettings
-class PlayerAimAssist
- МетодPlayer.getAimAssistдля изменения настроек Aim-Assist у игрока
- МетодWorld.getAimAssistдля добавления предустановок и категорий Aim-Assist
Ошибки и аргументы
- Добавлено перечислениеInvalidArgumentErrorType, предоставляющее дополнительный контекст об ошибках недопустимых аргументов.
- Добавлено свойствоtypeвInvalidArgumentErrorдля проверки типа ошибки аргумента.
Перенесено из бета-модуля в 1.17.0
-Block::isWaterlogged
-Block::setWaterlogged
👍1
Нашёл репозитории с примерами кода. Уже давно про него знал, но не додумался до этого момента его скинуть. Вот сам репозитории:
https://github.com/JaylyDev/ScriptAPI/tree/stable/scripts
https://github.com/JaylyDev/ScriptAPI/tree/stable/scripts
GitHub
ScriptAPI/scripts at stable · JaylyDev/ScriptAPI
Community Driven Scripts for Minecraft's Scripting - JaylyDev/ScriptAPI
👍3
Раз в неделю или того хуже в канале появляется пост))
Так вот, хотел бы с вами поделиться одной мелкой деталью, лично у меня оно возникло час или около того назад.
При попытке отмены события отправки сообщения(ChatSendBeforeEvent) у меня не получается, если эта инструкция отмены находится в system.run.
Тоесть:
Если что, вызовы через system.run мне нужны были для тех команд, которые запрашивали привилегии(в события типа BeforeEvents это частое явление).
Будьте бдительны, и делитесь с такими мелочами под этим постом
Так вот, хотел бы с вами поделиться одной мелкой деталью, лично у меня оно возникло час или около того назад.
При попытке отмены события отправки сообщения(ChatSendBeforeEvent) у меня не получается, если эта инструкция отмены находится в system.run.
Тоесть:
// События, другой код и т.д...
system.run(() => {
ev.cancel = true; // Пытаемся отменить событие, но не получается
// Другой код...
});
Если что, вызовы через system.run мне нужны были для тех команд, которые запрашивали привилегии(в события типа BeforeEvents это частое явление).
Будьте бдительны, и делитесь с такими мелочами под этим постом
👍1
На ChestUI вышло обновление, которое добавляет возможность создать интерфейс в стиле печки через класс FurnaceFormData.
Параметры класса FurnaceFormData:
Как-то так. По туториалу на ChestUI - его не будет, скорее всего.
Параметры класса FurnaceFormData:
declare class FurnaceFormData {
/**
* @param isLit Указывает, включена ли печь в пользовательском интерфейсе.
*/
constructor(isLit?: boolean);
/**
* @remarks Количество слотов в интерфейсе печи.
*/
public slotCount: number;
/**
* @remarks Этот метод устанавливает заголовок для интерфейса печи.
* @param text Текст заголовка для интерфейса печи.
*/
title(text: string | RawMessage): FurnaceFormData;
/**
* @remarks Добавляет кнопку в интерфейс печи с иконкой из ресурспака.
* @param slot Слот, в котором будет отображаться предмет. Значение ограничено от 0 до 2.
* @param itemName Название предмета, которое будет отображаться.
* @param itemDesc Описание (лора) предмета, которое будет отображаться.
* @param texture ID типа или путь к текстуре. **НЕОБХОДИМО УКАЗАТЬ ПРЕФИКС ПРЕДМЕТА!** Для ванильных предметов это `minecraft:`. Смотрите `typeIds.js` для действительных предметов и значений данных.
* @param stackAmount Размер стака предмета. Ограничено значениями от 1 до 99.
* @param durability Прочность предмета. По умолчанию 0. Ограничено значениями от 1 до 99.
* @param enchanted Если предмет зачарован, укажите true.
*/
button(slot: number, itemName?: string | RawMessage, itemDesc?: (string | RawMessage)[], texture?: string, stackAmount?: number, durability?: number, enchanted?: boolean): FurnaceFormData;
/**
* @remarks
* Создает и отображает всплывающее окно. Возвращает результат
* асинхронно, когда игрок подтверждает или отменяет
* диалог.
*
* Этот метод не может быть вызван в режиме только для чтения.
*
* @param player
* Игрок, для которого будет отображен этот диалог.
*/
show(player: Player): Promise<ActionFormResponse>;
};Как-то так. По туториалу на ChestUI - его не будет, скорее всего.
GitHub
GitHub - Herobrine643928/Chest-UI
Contribute to Herobrine643928/Chest-UI development by creating an account on GitHub.
❤1👍1
Команда разработчиков
На ChestUI вышло обновление, которое добавляет возможность создать интерфейс в стиле печки через класс FurnaceFormData. Параметры класса FurnaceFormData: declare class FurnaceFormData { /** * @param isLit Указывает, включена ли печь в пользовательском…
И да, спустя 5 дней освещаю об этом))
👍2
А мы то дожили, увидели на свет кастомные команды. С настраиваемым синтаксисом. Но обо всём по-подробнее.
В альфа-версии особо ничего не было добавлено, пока в бета-версии модуля добавили создание команд. Делается оно через класс CustomCommandRegistry, содержащийся в классе World.
В официальной документации пример написан на TS, но нам будет легче на JS написать. Понятнее и удобнее. Сам пример:
import { world, system } from "@minecraft/server";
system.beforeEvents.startup.subscribe(({ customCommandRegistry }) => {
customCommandRegistry.registerCommand({
name: 'example:example',
description: 'Пример команды',
permissionLevel: 'Any',
optionalParameters: [{
type: 0,
name: 'example'
}]
}, (example) => {
world.sendMessage(`Число в числовом типе: ${example}`);
});
});Давайте же разберём что тут да как. Я через событие старта скриптов создаю методом "registerCommand" новую команду "example:example". Задаю ему описание(при частичном вводе команды выводит подсказку и описание команды), после задаю разрешения.
Типы разрешения:
Any - все,
GameDirectors - игроки с оператором и командный блок,
Admin - игроки с оператором, но не командные блоки,
Host - только хост мира(предположительно работает только в локальном мире),
Owner - только с терминала(консоли) сервера.
После идут опции команды. name, логично, название параметра, а type - тип опции, оно может быть числовым, строковым, булевым и другим. Получать значение параметров надо, вводя их название в функцию callback(в этом примере мы через имя параметра example возвращаем параметр).
А вердикт то ясен - пока создание кастомных команд сырое. Оно требует доработок, к примеру чтобы возвращал экземпляр игрока(дабы взаимодействовать с отправителем команды). Лучшее используйте команды через chatSend, в них больше функционала, как по мне. Ждём доработок и новых возможностей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
👍1
Давно не было постов. На какую тему выпустить публикацию первым?
Final Results
43%
ChestUI 🌰 🌰
2%
Введение в LeviLamina 🍃
43%
Использование нейросетей для аддонов + переделка публикации про слушатели событии 📗
11%
Узнать результат 📊
👏1
Команда разработчиков
Давно не было постов. На какую тему выпустить публикацию первым?
Итог - ChestUI. Пост будет написан на днях, после него будет 2 по количеству голосов выбранная тема и после 3-ая.
👍2
На этот раз захотелось в телеграф статье расписать всё. Держите:
ChestUI: Введение
UPD: следующий пост будет про использование нейросетей при создании аддонов и скриптов
ChestUI: Введение
UPD: следующий пост будет про использование нейросетей при создании аддонов и скриптов
Telegraph
ChestUI: Введение
📦 Глава "Сторонние модули". Часть 1. Модуль "ChestUI" В прошлых частях мы разобрались с формами из @minecraft/server-ui, которые позволяют создавать модальное окно, слайдеры и кнопки. Но что, если мы хотим что-то более "ванильное"? Представьте: игрок открывает…
👏1
Anonymous Poll
81%
Да
5%
Нет
14%
Узнать результат
🔥2