-
Постов
67 -
Зарегистрирован
-
Посещение
Контакты
-
Логин на сайте
MrMafin
Посетители профиля
Блок последних пользователей отключён и не показывается другим пользователям.
Достижения Mr.horse
-
GhostoFBU отреагировал на сообщение в теме:
Помогите выполнить достижение Факторио в датапаке BlazeandCave
-
GhostoFBU отреагировал на сообщение в теме:
Помогите выполнить достижение Факторио в датапаке BlazeandCave
-
Mr.horse отреагировал на сообщение в теме:
Дискорд разблокировали!
-
z, T,FK отреагировал на сообщение в теме:
Пост Советский город
-
GhostoFBU отреагировал на сообщение в теме:
Как проверить, что значение в списке nbt равно значению string?
-
quark-gluon plasma отреагировал на сообщение в теме:
Помогите выполнить достижение Факторио в датапаке BlazeandCave
-
quark-gluon plasma отреагировал на сообщение в теме:
Помогите выполнить достижение Факторио в датапаке BlazeandCave
-
PhoenixTechu отреагировал на сообщение в теме:
Как проверить, что значение в списке nbt равно значению string?
-
1. Обзор подхода (улучшенный): Вместо циклов, которые могут негативно сказаться на производительности, мы будем использовать более эффективный подход: Отслеживание выпавшего камня (касается земли). Проверка соседних блоков. Замена при соблюдении условий. 2. Структура датапака: my_datapack/ ├── data/ │ └── minecraft/ │ ├── functions/ │ │ ├── replace_stone.mcfunction # Основная функция замены │ │ └── helper_functions/ # Папка с вспомогательными функциями │ │ └── get_block_below.mcfunction # Получить блок под предметом │ └── tags/ │ └── functions/ │ └── tick.json # Запускает replace_stone.mcfunction каждый тик 3. Код датапака: data/minecraft/functions/replace_stone.mcfunction (Основная функция): mcфункция # replace_stone.mcfunction # 1. Отслеживаем камень (предмет) на земле: execute as @e[type=minecraft:item,nbt={Item:{id:"minecraft:stone",Count:1b}},distance=..0.2] at @s run { # Проверяем нахождение камня рядом с землёй execute if block ~ ~-0.1 ~ minecraft:stone run { # Проверяем наличие камня под ним execute as @s run function my_datapack:helper_functions/get_block_below # Узнаем блок execute if score #block_below my_datapack:block_type matches <ID_BLOCK> run { setblock ~ ~-0.1 ~ minecraft:deepslate # Заменяем камень на выбранный kill @s # Удаляем предмет } } } data/minecraft/functions/helper_functions/get_block_below.mcfunction (Вспомогательная функция): mcфункция # get_block_below.mcfunction scoreboard players set #block_below my_datapack:block_type 0 # Сбрасываем счётчик execute store result score #block_below my_datapack:block_type run data get block ~ ~-1 ~ Name # Определяем тип блока data/minecraft/tags/functions/tick.json (Триггер): json { "values": [ "my_datapack:replace_stone" ] } 4. Объяснение и настройка: replace_stone.mcfunction: execute as @e[type=minecraft:item,nbt={Item:{id:"minecraft:stone",Count:1b}},distance=..0.2] at @s run { ... }: Находим выпадающий камень и центрируемся на нём. execute if block ~ ~-0.1 ~ minecraft:stone run { ... }: Проверяем, не касается ли он земли. execute as @s run function my_datapack:helper_functions/get_block_below: Запускаем вспомогательную функцию для определения блока. execute if score #block_below my_datapack:block_type matches <ID_BLOCK> run {: Проверяет является ли выбранный блок нужным для замены. setblock ~ ~-0.1 ~ minecraft:deepslate: Заменяет камень на выбранный. kill @s: Удаляет предмет. get_block_below.mcfunction: scoreboard players set #block_below my_datapack:block_type 0: Обнуляет переменную. execute store result score #block_below my_datapack:block_type run data get block ~ ~-1 ~ Name: Получаем ID блока, на который находится булыжник. tick.json: Запускает replace_stone.mcfunction каждый тик. 5. Настройка (Важно!): <ID_BLOCK>Ключевой момент: : В replace_stone.mcfunction замените <ID_BLOCK> на правильный тег для блока, с которым должен взаимодействовать ваш булыжник: Для конкретного блока: Если вам нужен один конкретный блок (например, блок травы), используйте строку: execute if score #block_below my_datapack:block_type matches "minecraft:grass_block" Для нескольких блоков: Для большего удобства, вы можете использовать: scoreboard objectives add blocks_for_replace dummy Создайте еще один scoreboard. Выполните команду: /scoreboard players set #grass blocks_for_replace 1 И в коде replace_stone.mcfunction используйте: execute if score #block_below my_datapack:block_type matches "minecraft:grass_block" run execute scoreboard players set #block_below my_datapack:block_type 1 execute if score #block_below my_datapack:block_type matches "minecraft:dirt" run execute scoreboard players set #block_below my_datapack:block_type 1 execute if score #block_below my_datapack:block_type matches "minecraft:sand" run execute scoreboard players set #block_below my_datapack:block_type 1 И потом в коде replace_stone.mcfunction используйте: execute if score #block_below my_datapack:block_type matches 1 run Целевой блок: Убедитесь, что вы используете правильный идентификатор блока (например, minecraft:dirt, minecraft:grass_block, и т.д.) в команде setblock. 6. Как использовать: Создайте структуру каталогов датапака, как указано выше. Вставьте код в соответствующие файлы. Загрузите датапак в свой мир (поместите папку my_datapack в папку datapacks вашего мира). Выполните команду /reload. Создайте бесконечный генератор булыжников и разместите целевые блоки рядом с ним. Подождите, пока сгенерированный булыжник коснется целевого блока. Проверьте, происходит ли замена. Преимущества этого подхода: Производительность: этот метод, в отличие от перебора блоков, гораздо более эффективен. Гибкость: легко изменить целевой блок, просто отредактировав строку if block .... Более надежно: Меньше вероятности ошибок. Дополнительные улучшения: Более точная фильтрация: можно добавить дополнительные проверки, чтобы убедиться, что булыжник был сгенерирован генератором, а не поставлен игроком. Задержка: можно добавить небольшую задержку перед заменой, чтобы предотвратить мгновенное разрушение булыжника. Эффекты: можно добавить визуальные эффекты (например, частицы) при замене.
-
1. Где искать (в общих чертах): Не существует единого файла для ремонта. Логика ремонта жёстко закодирована в основной игре. Пакеты данных (data packs) позволяют влиять на крафт, в том числе косвенно на ремонт. Ресурсы (resources) не позволяют изменить логику ремонта, но позволяют заменять текстуры, модели и прочее. 2. Что вы можете изменить с помощью датапаков (data packs): Рецепты крафта: вы можете добавлять, удалять и изменять рецепты крафта, в том числе для предметов, используемых при ремонте (например, вы можете создать рецепт для починки алмазного меча с помощью обсидиана, а не алмазов). Торговля с жителями: вы можете настроить торговлю с жителями так, чтобы они предлагали предметы, необходимые для ремонта. Эффекты, триггеры (triggers): это уже более сложная логика, и можно использовать функции (functions), которые будут выполняться при определённых событиях (например, при поломке предмета). 3. Как это «выглядит» в коде (немного упрощённо): Код ремонта наковальни в основном состоит из: Проверка предметов: игра проверяет, какие предметы находятся в наковальне (предмет для ремонта и предмет для починки). Проверки на совместимость: игра проверяет, можно ли починить предмет. Например: Может ли быть починен данный предмет? Совместимы ли материалы? (дерево с деревом, металл с металлом и т.д.) Расчёт стоимости: игра рассчитывает, сколько опыта (XP) нужно потратить и сколько уровней нужно для ремонта. Применение ремонта: Предмет ремонтируется (уменьшается его износ). 4. Изменение ремонта с помощью датапаков: К сожалению, напрямую изменить логику ремонта (какой предмет используется для починки) с помощью датапаков нельзя (в ванильном Minecraft). Вот почему: Система ремонта (проверка на наличие материалов, стоимость опыта) — это «жестко запрограммированная» логика. Вы не можете напрямую заменить код. Что вы можете сделать, чтобы косвенно решить вашу задачу (деревянный меч ремонтируется с помощью досок): Обходной путь: вы можете создать рецепт крафта, который будет создавать деревянный меч, но при крафте будут использоваться доски. Это косвенный способ, но он позволит вам получить деревянный меч, «починенный» досками. Обходной путь (более сложный): вы можете использовать пользовательские предметы, которые будут функционировать как деревянные мечи, но будут основаны на пользовательских рецептах (с использованием датапаков). Это позволит вам более гибко управлять предметами и их ремонтом. В итоге: Вы не можете изменить логику ремонта напрямую в датапаках. Вы можете использовать обходные пути (например, переопределить крафт, сделать пользовательские предметы). Для изменения логики ремонта потребуется мод. Пример (обходной путь с переопределением крафта): Допустим, вы хотите, чтобы деревянный меч всегда «ремонтировался» с помощью досок. Вот как можно было бы попробовать (это не полное решение, а только пример): Удалите стандартный рецепт крафта деревянного меча: это делается в датапаке. Создайте новый рецепт крафта деревянного меча: этот рецепт будет требовать доски вместо палок или включать в себя не только палки, но и доски, как
-
1. Создайте Scoreboard Objective: /scoreboard objectives add random dummy Это создаст цель (objective) с именем «random» и типом «фиктивная». Тип «фиктивная» означает, что мы сами будем устанавливать значения для этой цели. 2. Запустите рандомизатор: mcфункция # run_random.mcfunction scoreboard players set #roll random 0 # Сбрасываем предыдущий результат execute positioned ~ ~ ~ run data modify storage minecraft:global random.result set value 0 # Очищаем предыдущее значение execute positioned ~ ~ ~ run function minecraft:random_number # Запускаем функцию для генерации случайного числа execute store result score #roll random run data get storage minecraft:global random.result # Получаем результат 3. Функция генерации случайного числа (minecraft:random_number): Создайте файл data/minecraft/functions/random_number.mcfunction (или в своем неймспейсе). Внутри файла: data modify storage minecraft:global random.result set value 1 # Устанавливаем базовое значение scoreboard players set #rand random 0 # Сброс переменной execute as @e[type=minecraft:area_effect_cloud, limit=1] at @s run kill @s # Удаление Area Effect Cloud (если осталась) summon area_effect_cloud ~ ~ ~ {Duration:1,Effects:[{Id:14,Amplifier:0,Duration:1,ShowParticles:0b}],Tags:["random_cloud"]} # Создание облака, которое будет генерировать число execute as @e[type=minecraft:area_effect_cloud,tag=random_cloud,limit=1] run { data modify storage minecraft:global random.result append value 1 # Шанс 33% получить 1 execute if score #rand random matches 0 run { data modify storage minecraft:global random.result append value 2 # Шанс 33% получить 2 data modify storage minecraft:global random.result append value 3 # Шанс 33% получить 3 } } 4. Объяснение: scoreboard players set #roll random 0: Обнуляет ваш счетчик. execute positioned ~ ~ ~ run data modify storage minecraft:global random.result set value 0: Сбрасывает прошлый результат. execute positioned ~ ~ ~ run function minecraft:random_number: Запускает функцию random_number. execute store result score #roll random run data get storage minecraft:global random.result: Получает результат из Storage и записывает его в scoreboard. minecraft:random_number.mcfunction: data modify storage minecraft:global random.result set value 1: Устанавливает начальное значение в 1. execute as @e[type=minecraft:area_effect_cloud, limit=1] at @s run kill @s: Удаляет предыдущие Area Effect Cloud (для надёжности). summon area_effect_cloud ~ ~ ~ {Duration:1,Effects:[{Id:14,Amplifier:0,Duration:1,ShowParticles:0b}],Tags:["random_cloud"]}: Спавнит облако. execute as @e[type=minecraft:area_effect_cloud,tag=random_cloud,limit=1] run data modify storage minecraft:global random.result append value 1 # Шанс 33% получить 1: Добавляет в список “1”. execute if score #rand random matches 0 run {: Случайным образом получает два числа из списка (2 и 3). data modify storage minecraft:global random.result append value 2: Добавляет 2. data modify storage minecraft:global random.result append value 3: Добавляет 3. 5. Как использовать: После выполнения run_random.mcfunction у игрока с именем #roll на табло «случайное» будет значение 1, 2 или 3. Чтобы проверить это, используйте команду: /scoreboard players get #roll random Как это работает, если вам интересно (подробнее): minecraft:globalХранилище: используется для временного хранения данных. В данном случае для хранения результата рандома. Облако с эффектом области: Облака могут содержать случайные эффекты, которые игра генерирует на основе вероятностей. Важно: run_random.mcfunction (запускает генерацию). minecraft:random_number.mcfunction (содержит логику рандома). minecraft:global (Namespace для хранилища). Тестирование: запускайте run_random.mcfunction много раз и проверяйте результаты, чтобы убедиться, что распределение примерно равномерное (1/3 вероятности для каждого числа). Производительность: для больших объемов генерации случайных чисел оптимизируйте этот код. Если вам нужно очень много, можно создать более сложную систему. Улучшения: Можно добавить возможность менять диапазон. Учтите, что это не идеально равномерно. Minecraft часто округляет числа, поэтому добиться идеальной равномерности сложно, но для большинства задач этого достаточно. если помог пожалуйста
-
Общие советы: Оптимизация: Постарайтесь, чтобы ваш завод был организован и эффективен. Автоматизация: Старайтесь автоматизировать как можно больше процессов. Расширение: не бойтесь расширять базу, чтобы удовлетворить растущие потребности. Обучение: играйте, экспериментируйте и учитесь на своих ошибках. Используйте конвейеры: конвейеры — это ваш основной способ перемещения ресурсов. Используйте их, чтобы соединить различные части вашего завода. Используйте роботов: роботы могут автоматизировать строительство, ремонт и доставку предметов. Используйте шаблоны: Шаблоны позволяют быстро создавать сложные структуры. Защищайтесь от врагов: Не забывайте защищать свою базу от врагов. Учитесь и совершенствуйтесь: Factorio — это игра, в которой нужно постоянно учиться и совершенствоваться. Заранее продумывайте планировку: план — это ключ к успешному прохождению. думаю тебе эта информация была полезна !
-
Чтобы получить достижение в Factorio, вот что нужно сделать: Откройте карту и начните новую игру. 2 .Начните строить свою базу. Основной принцип — добывать ресурсы, обрабатывать их и производить новые предметы. Начните с базовых вещей: Добывайте руду с помощью шахтеров. Плавите руду в печках (используйте уголь в качестве топлива). Создавайте конвейеры для транспортировки ресурсов. Создавайте сборочные станки для производства других предметов. 3 . Автоматизируйте производство. Основная цель игры — автоматизировать все, что вы можете. Это значит, что вам нужно настроить: Автоматическую добычу ресурсов (шахтеры, насосы). Автоматическую обработку ресурсов (плавка, сборка). Транспортировку ресурсов (конвейеры, роботы). 4 .Обустройте добычу ресурсов: Поставьте угольные шахты. Постройте печи, чтобы плавить ресурсы, добываемые шахтами. Сделайте генераторы, работающие на угле. 5 .Производство: Соберите компоненты, необходимые для производства: шестерни, провода, пластины. Постройте сборочные станки, чтобы производить новые компоненты. Соберите новые машины. 6 . Защита: Стройте стены вокруг базы, чтобы защитить себя от враждебных существ. Установите турели. Автоматизируйте производство боеприпасов. 7 . Исследования: Проводите исследования в лабораториях, чтобы разблокировать новые технологии и улучшения. Используйте научные пакеты для исследований. 8 . Продвижение: Постоянно расширяйте свою базу. Оптимизируйте производство. Исследуйте новые технологии. 9 .Поражение: Ваша база должна быть полностью построена и автоматизирована. Вам нужно произвести 600 ракетных силосов.
-
Mr.horse отреагировал на сообщение в теме:
Как проверить, что значение в списке nbt равно значению string?
-
нифига себе , это ты смам все делал ? если да , тогда от меня огромный респект потому что ты сделал эту карту,как в какой то зомби сборке
-
в общем когда ты оптимизировал майн свой , ты мог по случайности на жать на кнопку убрать все квесты
-
Faithful 3D это мои догадки
-
ема , крутой рассказ про курочку Клара авхзахзвахзвхзав
-
коллеги , с вами полностью солидарен
-
вот что нашел 1. Циклы? Нет (в стандартном Minecraft): Стандартный Minecraft не имеет встроенных циклов. 2. Как это работает (изменение торгов): /execute if data проверяет одно условие. Перебрать все торги = проверить каждый торг вручную. Использовать отдельные функции для каждой проверки и замены. 3. Пример (ограничен, но рабочий): Главная функция (replace_boots.mcfunction): Проверяет первые 3 предложения. Вспомогательные функции (replace_item_0.mcfunction, replace_item_1.mcfunction, replace_item_2.mcfunction): заменяют ботинки, сохраняя зачарования. Нужно создавать отдельные условия, если нужно проверить больше 3х торгов 4. Важно! В pack.mcmeta pack_format. Следите за индексами Offers.Recipes[X]. Смотрите мой предыдущий ответ для деталей и кода. а в общем , для чего этот дата пак , расскажешь если не секрет ?
