Эгида
Saudade StudioEightySeven GroupTelegram-канал
  • 📌Эгида — База Знаний Minecraft
  • Модификации
    • 🧱Создание контента
      • 📦CraftTweaker
        • 📦Minecraft 1.12.2
          • Начало работы
          • Комментарии
          • Применение нескольких скриптов
          • Элементы крафтов
          • Команды
          • Графический редактор рецептов
          • Приоритеты и переменные
        • 📦Minecraft 1.16.5
          • Начало работы
          • Комментарии
          • Применение нескольких скриптов
          • Команды
          • Приоритеты
          • Менеджер рецептов
          • Удаление рецептов
          • Рецепты для верстака
          • Рецепты для др. блоков
          • Массивы и циклы
          • Работа с тэгами
          • Армированные мобы
          • Эффекты экипировки
          • Стартовые предметы
        • 📦Minecraft 1.19.2
          • Секвенция
          • Реплейсер
          • Классы
          • ООП
          • Интерфейсы
      • 🔗KubeJS
        • Начало работы
        • Ивенты
        • Ваш первый скрипт
        • Удаление рецепта
        • Форменные рецепты
        • Создание предмета
        • Кастомный тир
        • Использование предмета
        • Взаимодействие с миром
        • Смена названия окна и иконки игры
        • Перевод модификаций
      • 📖Interactio
        • Предмет из жидкости
        • Жидкость из жидкости
        • Создание взрывом
        • Удар молнии
        • Падение наковальни
      • 📈Game Stages
        • ZenStages
        • Gamestage Books
        • Recipe Stages
        • Dimension Stages
        • Item Stages
        • MultiBlock Stages
        • TinkerStages
        • Ore Stage Reborn
      • 🏗️Modular Machinery
        • Начало работы
        • Компоненты для создания
        • Создание конструкции
        • Настройка файла
        • Создание крафта
        • Конфигурация
      • 💿SDM CraftTweaker Plus
        • Ивенты
        • Глобальные функции
        • Модули
      • 📚Patchouli
        • Начало работы
        • Создание книги
        • Содержимое книги
        • Стартовая книга
        • Мультиблочные структуры
      • 👀Revelationary
        • Скрытие контента
        • Наименования объектов
    • 📝Квесты
      • 📗FTB Quests
        • Примечания
        • Начало работы
        • Общие настройки
        • Редактирование файла
        • Таблицы вознаграждений
        • Создание лут-коробки
        • Дизайн квестов
        • Главы и группы
        • Создание и настройка квестов
        • Настройка квестов
        • Зависимости квестов
        • Описания квестов
        • Награды
        • Магазин
        • Особые возможности
      • 📘Better Questing
        • Начало работы
        • Квесты
        • Конструктор квестов
        • Редактор квестов
        • Награды
        • Книга Квестов
        • Лутбоксы
        • Сохранение квестов
    • 🖼️Главное меню
      • 🏔️Custom Main Menu
        • Начало работы
        • Изображения
        • Кнопки
        • Лейблы
        • Заставка и панорама
        • Текст
      • 🌋FancyMenu
        • Начало работы
        • Настройки
          • FM Settings
          • Current Menu
          • Universal Layouts
          • Setup
          • Tools
          • Miscellaneous
          • Кнопки - иконки
          • Дополнительные разделы
        • Создание меню
          • Начало создания
          • Оформление фона
            • Вставка изображения в фон
            • Вставка анимации в фон
            • Вставка слайд-шоу в фон
            • Вставка панорамы в фон
          • Смена названия окна
          • Замена иконки окна
          • Макет кнопки
          • Действия кнопки
          • Вставка изображения
          • Создание и вставка текста в макет
      • 🗻PackMenu
        • Начало работы
        • Первые шаги
        • Кнопки
        • Действия кнопки
        • Языковые ключи
        • Текстуры
        • Файл конфигурации
    • 🏕️Атмосфера
      • 🎵Ambience Music
        • Начало работы
        • Настройка конфигурации
        • Обзор событый/тегов/биомов
        • Добавление музыки
    • 📀Разное
      • 📝Tips
        • Начало работы
        • Название подсказки
        • Изменение содержимого
        • Сохранение файла
      • 🎁Daily Rewards
        • Начало работы
        • Игровые команды
        • Настройка наград
        • Вики по моду
        • Пример оформления
      • 🗨️Simple Discord RPC
        • Начало работы
        • Создание приложения
        • Настройка статусов
        • Добавление иконок
        • Описания и иконки
        • Пример оформления
      • 💡InGameTips
        • Структура файлов
        • Создание подсказок
        • Пример оформления
      • 🌴Passive Skill Tree
        • Предисловие
        • Начало
        • Первый скилл
        • Настройка эффекта скилла
        • Условия
        • Настройки скилла
        • Теги
        • Соединения
  • Статьи
    • 🔁Перевод модификаций
      • Стандартный перевод
      • Перевод с помощью Recaf
        • Дисклеймер
        • Установка JRE/JDK
        • Установка Recaf
        • Изменение модификаций
        • Заключение
      • Переводы в структурах
        • Предисловие
        • Перевод блоках или рамках
        • Перевод в сундуках
    • 🥽DataPack для крафтов
    • 🚧Оптимизация сборки
    • 🌺Работа с шейдерами
  • Разработчики
    • 👥Об авторах
      • Журналисты
      • Наш сайт
      • ВКонтакте
      • Discord
      • YouTube
Powered by GitBook
On this page
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Полный код
  1. Модификации
  2. Создание контента
  3. CraftTweaker
  4. Minecraft 1.19.2

Классы

В моде CraftTwekaer используется язык программирования zenScript, так что знания классов Вам будут очень полезны для написания профессионального рода скриптов!

Создадим класс, который будет отвечать за данные entity

Пример

public class EntityData {
    
}

Также нужно создать конструктор, который позволит динамически создавать класс, который не будет постоянно храниться в памяти. В любой другом ЯП мы бы писали следующим образом - public EntityData(){}, но в zenScript стоит писать public this(){}.

Пример

public class  EntityData {
    public this() {
        
    }
}

Следует ещё добавить в класс наше существо или же Entity. Необходимо импортировать его так - import crafttweaker.api.entity.Entity;. Кроме этого, нужно хранить данные или же IData. Импортируем - import crafttweaker.api.data.IData.

Пример

import crafttweaker.api.entity.Entity;
import crafttweaker.api.data.IData;

public class EntityData {
    public val entity as Entity;
    public val data as IData;
    
    public this(entity as Entit, data as IDatay) {
        this.entity = entity;
        this.data = data;
    }
}

Теперь нам важно создать метод, который будет проверять, есть ли у существа или же Entity соответствующие данные. Поможет в этом customData, так как в data мы записать ничего не сможем. Ключевое слово in аналогично contains & includes.

public isHaveData() as bool {
    if (this.data in this.entity.customData) return true;
    else return false;
}

Таким образом, у нас есть метод, который позволит проверить, есть ли у игрока нужные нам данные. После этого создадим нужно класс, который сможет записать в игрока новые данные.

Пример

public sendData() as bool {
    if (isHaveData()) return false;
    else this.entity.updateCustomData(this.data);
}

Теперь нас есть всё необходимое. Остаётся только применить данный класс. crafttweaker.api.event.entity.player.ItemPickupEvent.

Пример

import crafttweaker.api.events.CTEventManager;
import crafttweaker.api.event.entity.player.ItemPickupEvent;
CTEventManager.register<crafttweaker.api.event.entity.player.ItemPickupEvent>((event) => {
    var player = event.player;
    if (player.level.isClientSide) return;
    var myData as EntityData = new EntityData(player, {"firstPickUp" : true});
    myData.sendData();
});

При подборе любого предмета в игрока будут внесены новые данные в customData. Вы можете задаться вопросом, как же мы передали player в наш класс, если в его параметрах Entity? Всё потому, что игрок наследуется от EntityLiving, а он, в свою очередь, от Entity.

Полный код

import crafttweaker.api.entity.Entity;
import crafttweaker.api.data.IData;

public class EntityData {
    public val entity as Entity;
    public val data as IData;
    
    public this (entity as Entit, data as IDatay) {
        this.entity = entity;
        this.data = data;
    }

    public isHaveData() as bool {
        if (this.data in this.entity.customData) return true;
        else return false;
    }
    
    public sendData() as bool {
        if (isHaveData()) return false;
        else this.entity.updateCustomData(this.data);
    }
}

Last updated 9 months ago

🧱
📦
📦