Команда разработчиков
100 subscribers
2 files
16 links
Именно тут мы научим вас создавать аддоны, объясним что и как использовать, и будем помогать вам, удачи в разработке!

По поводу рекламы - @NoHaijeSo1o
Если у вас есть какие либо предложения то можете написать нам:
@ShoneStew
@qspkp
Download Telegram
Код для аддона на промокод. Полностью свободный для использования, как обычно :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
Мне сегодня один подписчик писал. И в ходе разговора он упомянул что он изучал JS и хотел бы видить на канале руководство по JS. Я долго не хотел этого делать, и не собираюсь делать. Но обьяснить что это за ЯП(язык программирования) все таки стоило бы. Итак, начнём!


⬆️ Введение
JavaScript - ЯП, что изначально задумывался как ЯП для веб-разработки. Но его начали использовать как скриптовый язык для написания, к примеру, серверной части проекта(NodeJS в помощь) или даже мобильных приложении(React Native позволяет). Но многие тут JavaScript используют для написания скриптов в аддонах для Майнкрафт Бедрока.


⁉️ Как изучать JavaScript?
Немного теории и много практики! Сам я именно так изучал JavaScript более полгода назад и продолжаю +- также изучать. Но совет может не для всех работать, это чисто индивидуально. Но попробовать стоит.
А насчет ресурсов и руководств - само руководство по JavaScript, можете только 1 главу читать, а остальное после гуглить при необходимости. Также есть другое руководство, от MDN Web Docs. Выбирайте по желанию, но лично я изучал JS по тому первому руководству. Так что вот.


Публикация вышла маленькая, но я попытался некоторые вещички обкашлить, что задавали ребята под комментариями. Повторюсь - полностью изучать JavaScript на этом канале не будем и не собираемся, есть руководства и видео, на котором понятнее чем если бы мы описывали своими словами. Но некоторые функции в ЯП на канале будут изучены. Как-то так
👍1
🆕 Новая релизная версия 1.21.60!
Какие-то фиксы баков и тому подобное. Но тут будет описано только изменения в 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 из API ItemStack. Теперь шанс компостирования для ванильных предметов доступен через 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
👍3
Раз в неделю или того хуже в канале появляется пост))
Так вот, хотел бы с вами поделиться одной мелкой деталью, лично у меня оно возникло час или около того назад.
При попытке отмены события отправки сообщения(ChatSendBeforeEvent) у меня не получается, если эта инструкция отмены находится в
system.run.
Тоесть:

// События, другой код и т.д...
system.run(() => {
ev.cancel = true; // Пытаемся отменить событие, но не получается
// Другой код...
});

Если что, вызовы через system.run мне нужны были для тех команд, которые запрашивали привилегии(в события типа BeforeEvents это частое явление).
Будьте бдительны, и делитесь с такими мелочами под этим постом
👍1
На ChestUI вышло обновление, которое добавляет возможность создать интерфейс в стиле печки через класс FurnaceFormData.
Параметры класса 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 - его не будет, скорее всего.
1👍1
⚙️ Создание кастомных комманд?
А мы то дожили, увидели на свет кастомные команды. С настраиваемым синтаксисом. Но обо всём по-подробнее.


Версия Script API 2.0.0-beta
В альфа-версии особо ничего не было добавлено, пока в бета-версии модуля добавили создание команд. Делается оно через класс 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
И да, хайпово раз в месяц выпускать посты
👍2👏1
Команда разработчиков
Давно не было постов. На какую тему выпустить публикацию первым?
Итог - ChestUI. Пост будет написан на днях, после него будет 2 по количеству голосов выбранная тема и после 3-ая.
👍2
Заливать сюда аддон на открытие шалкера в инвентаре(сырой, в посте к аддону опишу что там недоделанно)
Anonymous Poll
81%
Да
5%
Нет
14%
Узнать результат
🔥2