Перейти к содержимому

RTStrucures Framework

Библиотека, посвящённая механике структур в RTS

NeoForge
Загрузчики
NeoForge
Скачиваний на Modrinth
271
Подписчиков на Modrinth
0
версии
4
Обновлён
26 мая 202626 мая
Опубликован
в 2026
Это библиотека — она нужна другим модам и сама ничего не добавляет в игру
Logo · свайп

Коротко о моде

Библиотека — нужна другим модам
Работает на NeoForge
Для Minecraft 1.21.1
Нужен и в игре, и на сервере
Последняя версия — 0.1.5 от 26 мая 2026
Лицензия MIT — бесплатно
Где нужен
В игреобязателенНа сервереобязателен

Нужен и в игре, и на сервере

Версии игры1.21.1
Описание переведено автоматическиПоказать оригинал (EN)

Этот мод добавляет функционал для многоблочных структур в RTS. Его также можно использовать для копирования и вставки структур.

Внутриигровые функции

  • Сохранение структур
  • Вставка структур Чтобы сохранить структуру, нужен инструмент структур — используйте /give или вкладку оператора; ПКМ — позиция 1; ЛКМ — позиция 2; Shift + ПКМ — позиция якоря CTRL + клик мышью — расширить область (можно изменить в настройках клавиш) Shift + ЛКМ — якорь размещения

**/rtstrucutres save ** — сохраняет структуру **/rtstrucutres load ** — предзагружает структуру + отображает рамку вставки /rtstrucutres execute <build_type> — вставляет предзагруженную структуру в мир **/rtstrucutres execload <build_type>** — вставляет структуру в мир /rtstrucutres toggle_boxes <true/false> — всегда отображает область выделения инструмента

Функции для разработчиков модов

Руководство по установке

repositories {
    maven {
        url = "https://api.modrinth.com/maven"
    }
}

dependencies {
    implementation "maven.modrinth:rtstrucures-framework:0.1.4"
}

Руководство по моду

Вот пример команды /execload

ServerLevel level = ctx.getSource().getLevel();
String filename = "house";

Path worldDir = level.getServer().getWorldPath(LevelResource.ROOT);
StructureTemplate template = StructureCache.get(worldDir, filename);

BlockPos anchorPos = StructureToolState.placeAnchor; // Позиция размещения
PlacementAnchor anchorMode = PlacementAnchor.CUSTOM; // Рекомендуется использовать пользовательский якорь
StructureInstance instance = new StructureInstance(level, template, anchorPos, anchorMode);

StructureManager.add(instance);
instance.build(BuildType.FAST, 2.0f); // Выполнить в мире; послойное строительство

Класс StructureInstance предоставляет больше методов для управления структурами;

Базовое использование

Сохранение структуры

StructureTemplate template = StructureCapture.capture(level, pos1, pos2, customAnchor);
Path path = worldDir.resolve("generated/rtstructures/house.rtstructure");

StructureSerializer.save(template, path);

Загрузка структуры

Path path = worldDir.resolve("generated/rtstructures/house.rtstructure");

StructureTemplate template = StructureDeserializer.load(path);

Регистрация структуры

StructureManager.add(instance);

Начало строительства

instance.build(BuildType.FAST,10);
  • BuildType = логика строительства
  • speed = блоков за тик

Система проверки

Проверка повреждений

boolean damaged = instance.isDamaged();

Процент завершения

float percent = instance.getCompletionPercent();

Процент повреждений

float percent = instance.getDamagePercent();

Полный результат проверки

ValidationResult result = instance.validate();

Режимы строительства

ВНИМАНИЕ! Если структура не сможет завершить строительство, она будет бесконечно тикать. Учитывайте это (максимальное количество шагов будет добавлено в следующей версии)

FAST

Мгновенное послойное строительство

  • быстро
  • без ограничений
  • заменяет блоки Лучше всего для:
  • отладки
  • кинематографичного строительства
  • мгновенного строительства в RTS

FAST_SAFE

Послойное строительство без замены существующих блоков

  • сохраняет мир
  • более безопасное размещение
  • медленнее завершается Лучше всего для:
  • выживания
  • защищённых миров

CONNECT

Строит только соединённые блоки

  • реалистичное распространение
  • зависит от опор
  • может остановиться при разрыве Лучше всего для:
  • симуляции RTS
  • органических систем строительства

SEPARATED

Строительство в стиле роста от якоря

  • эффект распространяющегося строительства
  • направленное расширение
  • органический вид Лучше всего для:
  • инопланетных структур
  • растительных конструкций
  • визуальных эффектов

SEPARATED_DIAGONAL

То же, что SEPARATED, но угловые блоки также используются как якорь

DEMOLISH

Разрушает структуру сверху вниз

Продвинутое использование (0.1.4+)

Регистрация структуры

Мод предоставляет DefferedRegistered структуру

public final class StructuresInit {
    private StructuresInit() {}

    public static final DeferredRegister<StructureType> STRUCTURES =
            DeferredRegister.create(RTSRegistries.STRUCTURES, RTStructureFramework.MOD_ID);


    public static final Supplier<StructureType> SIMPLE_HOUSE = STRUCTURES.register("simple_house", SimpleHouseStructure::new);
    public static final Supplier<StructureType> AIRFIELD = STRUCTURES.register("airfield", AirfieldStructure::new);
    public static final Supplier<StructureType> CRYSTAL = STRUCTURES.register("crystal", CrystalStructure::new);
    public static final Supplier<StructureType> PROTECTED_STRUCTURE = STRUCTURES.register("protected_structure", ProtectedStructure::new);


    public static void register(IEventBus bus) {
        STRUCTURES.register(bus);
    }
}

Класс структуры

public class SimpleHouseStructure extends StructureType {

    public SimpleHouseStructure() {
        super("simple_house", StructureProperties.create()
                // Файл структуры
                .modPath("basic/simple_house", RTStructureFramework.MOD_ID) // В ваших resources/data/mod_id/...

                // Размещение по умолчанию
                .defaultAnchor(PlacementAnchor.CENTER)

                // Поведение строительства по умолчанию
                .defaultBuildType(BuildType.FAST)
                .defaultBuildSpeed(2f)

                // Проверка
                .damagedThreshold(0.15f)
                .destroyedThreshold(0.5f)
        );
    }
}

Библиотека предоставляет несколько методов для управления

    public void onCompleted(StructureInstance instance) {}

    public void onDamaged(StructureInstance instance) {}

    public void onDestroyed(StructureInstance instance) {}

    public void onDemolished(StructureInstance instance) {}

Пример использования:

public class AirfieldStructure extends StructureType {
    private int productionTick;

    public AirfieldStructure() {
        super("airfield", StructureProperties.create()
                .modPath("basic/airfield", RTStructureFramework.MOD_ID)
                .defaultAnchor(PlacementAnchor.CENTER)
                .defaultBuildType(BuildType.FAST)

                .defaultBuildSpeed(3f)
                .damagedThreshold(0.2f)
                .destroyedThreshold(0.6f)
        );
    }

    @Override
    public void onCompleted(StructureInstance instance) {
        System.out.println("[RTS] Airfield completed");
    }

    @Override
    public void onTick(StructureInstance instance) {
        if (!instance.isCompleted()) return;

        productionTick++;
        if (productionTick >= 100) {
            productionTick = 0;

            System.out.println("[RTS] Kirov reporting...");
            // Do your stuff. E.g spawn unit
        }
    }

    @Override
    public void onDestroyed(StructureInstance instance) {
        System.out.println("[RTS] Airfield destroyed!");
    }
}

Спавн структуры

    StructureInstance instance = StructuresInit.AIRFIELD.get().create(level, anchorPos);
    StructureManager.add(instance);
    
    instance.build();

Внимание!

StructureManager.add(instance); — собственно создаёт вашу структуру; instance.build(); — только строит вашу структуру; Если нужно удалить структуру, используйте instance.destroy(); (Внимание! может вызвать stackoverflow при спаме. Никогда не вставляйте это в tick();) Пример использования:

public class CrystalStructure extends StructureType {

    public CrystalStructure() {
        super("crystal", StructureProperties.create()
                .modPath("crystal", RTStructureFramework.MOD_ID)
                .defaultBuildType(BuildType.FAST)
                .defaultBuildSpeed(1f)
                .defaultAnchor(PlacementAnchor.CUSTOM)

                .damagedThreshold(0.05f)
                .destroyedThreshold(0.8f)
        );
    }

    @Override
    public void onTick(StructureInstance instance) {
        if (instance.isDamaged()) {
            if (!instance.isBuilding()) {
                instance.build(BuildType.FAST, 0.5f);
            }
        }
    }

    @Override
    public void onDestroyed(StructureInstance instance) {
        if (instance.getDamagePercent() >= 0.95f) {
            instance.destroy();
        }
    }

    @Override
    public void onCompleted(StructureInstance instance) {
        System.out.println(instance.debugInfo());
    }
}

Это описание будет доработано до нормального описания мода. Документацию смотрите в вики на github

Частые вопросы

Как установить RTStrucures Framework?

Установите NeoForge под свою версию Minecraft, скачайте RTStrucures Framework под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть RTStrucures Framework?

У RTStrucures Framework есть сборки для Minecraft 1.21.1.

Нужен ли RTStrucures Framework на сервере?

Нужен и в игре, и на сервере

Лицензия и источник
MIT Licenseможно свободно использовать и распространять с указанием автора
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее