Эгида
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
  • PlayerCloneEvent
  • Пример
  • PlayerChestLootEvent
  • Пример
  • ColonyCreatedEvent
  • Пример
  • FillBiomesFromNoiseEvent
  • Пример
  • StructureSpawnEvent
  • Пример
  1. Модификации
  2. Создание контента
  3. SDM CraftTweaker Plus

Ивенты

PlayerCloneEvent

Время от времени многим разработчикам проектов в Minecraft необходимо записывать в игрока свои параметры и для этого обычно используют player.customData, но вот беда, всё, что Вы запишите в игрока - пропадёт после его возрождения. Чтобы этого избежать, Вам пригодится следующий ивент - mods.sdmcrtplus.events.entity.player.PlayerCloneEvent. У него есть 2 метода.

  • getOriginal() - позволит получить игрока до его смерти.

  • isWasDeath() - можно проверить умер игрок или зашёл в портал в Эндер мире.

Пример

import crafttweaker.api.events.CTEventManager;
import mods.sdmcrtplus.events.entity.player.PlayerCloneEvent;
CTEventManager.register<mods.sdmcrtplus.events.entity.player.PlayerCloneEvent>((event) => {
    var player = event.player;
    if(player.level.isClientSide || !event.isWasDeath()) return;
    player.updateCustomData(event.getOriginal().customData);
});

PlayerChestLootEvent

Когда Вы хотите создать свою RPG сборку, Вам может понадобиться возможность изменить лут в генерируемых сундуках, а для этого пригодится ивент mods.sdmcrtplus.events.entity.player.PlayerChestLootEvent. Он вызывается каждый раз, когда лут в сундуке или любом контейнере с генерируемым лутом заполняется содержимым. Существует 4 метода:

  • getPos() - позволяет получить координаты, на которых был открыт контейнер

  • getInventory() - предоставляет возможность получить инвентарь контейнера

  • getQueriedLootTableId() - разрешает получить ID таблицы, которой заполняется контейнер

  • getContext() - повзоляет получить условие заполнения контейнера

Пример

import crafttweaker.api.events.CTEventManager;
import mods.sdmcrtplus.events.entity.player.PlayerChestLootEvent;

CTEventManager.register<mods.sdmcrtplus.events.entity.player.PlayerChestLootEvent>((event) => {
    var player = event.player;
    if(player.level.isClientSide) return;
    var inventory = event.getInventory();

    if(inventory.countItem(<item:minecraft:potato>) > 2){
        var count = 0;
        for i in 0 .. inventory.getMaxStackSize(){
            if(count >= 2) {
                player.sendMessage("Ну я у тебя заберу 2 картошечки, а то кушац хочетца");
                break;
            }

            var item = inventory.getItem(i).asIItemStack();
            if(item.registryName == <item:minecraft:potato>.registryName){
                if(item.amount > 2){
                    count += 2;
                    item.asMutable().shrink(2);
                } else {
                    count++;
                    item.asMutable().shrink();
                }
            }
        }
    }
});

ColonyCreatedEvent

Ивент работает только в том случае, когда у Вас установлен MineColonies.

Для одного из наших проектов нужно было сделать следующий функционал - когда колония создавалась, игрок получает сообщение. Для этого можно использовать ивент mods.sdmcrtplus.integration.api.events.colony.ColonyCreatedEvent. Он вызывается всякий раз, когда игрок создаёт колонию.

Пример

import crafttweaker.api.events.CTEventManager;
import mods.sdmcrtplus.integration.api.events.colony.ColonyCreatedEvent;
import stdlib.List;
import crafttweaker.api.world.Level;
import crafttweaker.api.world.ServerLevel;
import crafttweaker.api.entity.Entity;
import crafttweaker.api.entity.LivingEntity;
import crafttweaker.api.entity.type.player.Player;

CTEventManager.register<mods.sdmcrtplus.integration.api.events.colony.ColonyCreatedEvent>((event) => {
    val colony = event.getColony();
    if(colony.getWorld().isClientSide) return;
    
    val level as ServerLevel = colony.getWorld() as ServerLevel;
    val entityList as List<Entity> = level.getEntities((entity as Entity) => (entity.uuid == colony.getPermissions().getOwner() ? true : false), <entitytype:minecraft:player>);
    
    if(entityList.isEmpty) return; 
    if!(entityList[0] is Player) return;
    
    println("[INFO] : (ColonyCreatedEvent) Player Detected !");

    val player as Player;
    try {
        player = entityList[0] as Player;

        player.sendMessage("Колония создана, и Вы являетесь её создателем!");
    } catch ex as Exception{
        println("ERROR ON SCRIPT !\n" + (ex as string));
    }
});

FillBiomesFromNoiseEvent

Допустим, Вам хочется сделать сборку про выживание в пустыне, и Вы не можете найти мод на пустыню. Но это совершенно не проблема с данной модификацией. Можете воспользоваться mods.sdmcrtplus.events.level.generation.FillBiomesFromNoiseEvent - он позволяет заменять нежелательные биомы и может даже что-то ещё. Доступны 4 метода:

  • getBiome() - позволяет получить ID биома в виде ResourceLocation

  • setBiome(biome) - разрешает установить биом

  • getChunkpos() - даёт возможность получить координаты в чанке

  • getPlayer() - можно получить игрока, который генерирует биом

Пример

import crafttweaker.api.events.CTEventManager;
import mods.sdmcrtplus.events.level.generation.FillBiomesFromNoiseEvent;

CTEventManager.register<mods.sdmcrtplus.events.level.generation.FillBiomesFromNoiseEvent>((event) => {
    event.setBiome(<resource:minecraft:biomes/desert>)
});

StructureSpawnEvent

Ох, нет. Я не хочу, чтобы у меня в мире спавнились пирамиды! Что же мне делать? Воспользуюсь-ка ивентом mods.sdmcrtplus.events.level.generation.StructureSpawnEvent, он позволит избавиться от любых структур или заменить их!

У нас есть 7 методов:

  • getStructure() - позволяет получить структуру

  • setStructure() - делает возможным изменение структуры

  • getChunkpos() - разрешает получить координаты структуры в чанке

  • getSectionpos() - разрешает полчить координаты структуры в секции

  • getStructureManager() - позволяет получить менеджера структур

  • getLevel() - можно получить мир, в котором создаётся структура

  • @Nullable getPlayer() - предоставляет право получить данные об игроке, который спавнит структуру при генерации чанков

Пример

import crafttweaker.api.events.CTEventManager;
import mods.sdmcrtplus.events.level.generation.StructureSpawnEvent;

CTEventManager.register<mods.sdmcrtplus.events.level.generation.StructureSpawnEvent>((event) => {
    if(!event.getLevel().isClientSide) {
        if(event.getStructure().registryName == <resource:minecraft:desert_pyramid>){
            event.setStructure(<resource:minecraft:end_city>);
        }
    }
});

Last updated 11 months ago

🧱
💿