Скачать Plasmid — Minecraft Моды — MetaMods

Plasmid

Активный

Установок

2

Последнее обновление

1 месяц назад

Версии

1.20.1 — 1.21.8
Сервер
Fabric
Quilt
Библиотеки
Мини-игры

Plasmid

Plasmid представляет собой специализированную библиотеку для создания серверных мини-игр в Minecraft на платформе Fabric. Основная цель этого инструмента — взять на себя всю рутинную работу, связанную с технической реализацией игровых механик, чтобы разработчики могли полностью сосредоточиться на творческой составляющей своих проектов.

Данная библиотека является фундаментальным компонентом проекта Nucleoid — масштабной инициативы по созданию открытой экосистемы для серверных мини-игр в Minecraft. На GitHub-организации Nucleoid можно найти множество готовых примеров игр, реализованных с помощью Plasmid.

Начало работы

Для быстрого старта рекомендуется клонировать репозиторий plasmid-starter, выполнить скрипт init.py, после чего удалить служебные файлы .git, README.md и init.py. Также можно изучить уже реализованные проекты в репозиториях Nucleoid Organisation для лучшего понимания возможностей библиотеки.

Добавление в проект Gradle

После настройки рабочей среды Fabric необходимо добавить Plasmid в файл сборки gradle. Требуется указать репозиторий maven и зависимость plasmid, заменив PLASMID_VERSION на актуальную версию из Maven-репозитория.

repositories {
  maven { url = 'https://maven.nucleoid.xyz/' }
}

dependencies {
  // ...
  modImplementation 'xyz.nucleoid:plasmid:PLASMID_VERSION'
}

Создание типа игры

Ключевым понятием в Plasmid является "тип игры" (GameType) — это основная точка входа для создания мини-игр. Каждый GameType имеет уникальный идентификатор и содержит всю необходимую информацию для запуска игровой логики.

Библиотека построена вокруг концепции конфигураций игр — JSON-файлов, которые определяют конкретные вариации игрового типа. Это позволяет легко создавать различные версии одной игры с разными картами или механиками без дублирования кода.

Регистрация GameType выполняется через вызов GameType.register() в классе ModInitializer:

GameType.register(
        new Identifier("plasmid_example", "example"),
        ExampleGameConfig.CODEC,
        ExampleGame::open
);

Конфигурация игры

Конфигурационные файлы должны располагаться по пути data//games/.json. Обязательным полем является "type", указывающее на зарегистрированный GameType. Дополнительно можно определить название, описание и иконку игры.

Пример конфигурации:

{
  "type": "plasmid_example:example",
  "name": "Hello World Example!",
  "description": ["Look at my cool game!", "It greets you when you join."],
  "icon": "minecraft:apple"
}

Логика игры

Основная игровая логика реализуется через класс игры, который обрабатывает события добавления игроков, настройки мира и игровых правил. Plasmid предоставляет удобные API для работы с игровым пространством (GameSpace), управления игроками и обработки событий.

Пример реализации базовой игры с приветственным сообщением:

public final class ExampleGame {
    private final ExampleGameConfig config;
    private final GameSpace gameSpace;
    private final ServerWorld world;

    public ExampleGame(ExampleGameConfig config, GameSpace gameSpace, ServerWorld world) {
        this.config = config;
        this.gameSpace = gameSpace;
        this.world = world;
    }

    public static GameOpenProcedure open(GameOpenContext<ExampleGameConfig> context) {
        ExampleGameConfig config = context.config();

        MapTemplate template = MapTemplate.createEmpty();
        template.setBlockState(new BlockPos(0, 64, 0), Blocks.STONE.getDefaultState());

        TemplateChunkGenerator generator = new TemplateChunkGenerator(context.server(), template);

        RuntimeWorldConfig worldConfig = new RuntimeWorldConfig()
                .setGenerator(generator)
                .setTimeOfDay(6000);

        return context.openWithWorld(worldConfig, (activity, world) -> {
            ExampleGame game = new ExampleGame(config, activity.getGameSpace(), world);

            activity.deny(GameRuleType.FALL_DAMAGE);
            activity.listen(GamePlayerEvents.OFFER, game::onPlayerOffer);
            activity.listen(GamePlayerEvents.ADD, game::onPlayerAdd);
        });
    }

    private PlayerOfferResult onPlayerOffer(PlayerOffer offer) {
        ServerPlayerEntity player = offer.player();
        return offer.accept(this.world, new Vec3d(0.0, 64.0, 0.0))
                .and(() -> {
                    player.changeGameMode(GameMode.ADVENTURE);
                });
    }

    private void onPlayerAdd(ServerPlayerEntity player) {
        LiteralText message = new LiteralText(this.config.greeting);
        this.gameSpace.getPlayers().sendMessage(message);
    }
}

Тестирование

После успешной компиляции проекта можно запустить Minecraft и протестировать игру с помощью команды /game open , где соответствует имени JSON-файла конфигурации. Другие игроки могут присоединиться через команду /game join или по ссылке в чате.

Plasmid значительно упрощает процесс создания серверных мини-игр, предоставляя мощные инструменты для работы с игровыми мирами, управления игроками и обработки событий, что позволяет разработчикам сосредоточиться на создании увлекательного игрового опыта.

Участники проекта
Gegy

Gegy

Разработчик

Создан: 29 июл 2023

ID: 13360