RTStrucures Framework
Библиотека, посвящённая механике структур в RTS
- Загрузчики
- NeoForge
- Скачиваний на Modrinth
- 271
- Подписчиков на Modrinth
- 0
- версии
- 4
- Обновлён
- 26 мая 202626 мая
- Опубликован
- в 2026
Коротко о моде
Нужен и в игре, и на сервере
Этот мод добавляет функционал для многоблочных структур в 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 на сервере?
Нужен и в игре, и на сервере