Перейти к содержанию

Mr.horse

Пользователи
  • Постов

    67
  • Зарегистрирован

  • Посещение

Весь контент Mr.horse

  1. 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 .... Более надежно: Меньше вероятности ошибок. Дополнительные улучшения: Более точная фильтрация: можно добавить дополнительные проверки, чтобы убедиться, что булыжник был сгенерирован генератором, а не поставлен игроком. Задержка: можно добавить небольшую задержку перед заменой, чтобы предотвратить мгновенное разрушение булыжника. Эффекты: можно добавить визуальные эффекты (например, частицы) при замене.
  2. 1. Где искать (в общих чертах): Не существует единого файла для ремонта. Логика ремонта жёстко закодирована в основной игре. Пакеты данных (data packs) позволяют влиять на крафт, в том числе косвенно на ремонт. Ресурсы (resources) не позволяют изменить логику ремонта, но позволяют заменять текстуры, модели и прочее. 2. Что вы можете изменить с помощью датапаков (data packs): Рецепты крафта: вы можете добавлять, удалять и изменять рецепты крафта, в том числе для предметов, используемых при ремонте (например, вы можете создать рецепт для починки алмазного меча с помощью обсидиана, а не алмазов). Торговля с жителями: вы можете настроить торговлю с жителями так, чтобы они предлагали предметы, необходимые для ремонта. Эффекты, триггеры (triggers): это уже более сложная логика, и можно использовать функции (functions), которые будут выполняться при определённых событиях (например, при поломке предмета). 3. Как это «выглядит» в коде (немного упрощённо): Код ремонта наковальни в основном состоит из: Проверка предметов: игра проверяет, какие предметы находятся в наковальне (предмет для ремонта и предмет для починки). Проверки на совместимость: игра проверяет, можно ли починить предмет. Например: Может ли быть починен данный предмет? Совместимы ли материалы? (дерево с деревом, металл с металлом и т.д.) Расчёт стоимости: игра рассчитывает, сколько опыта (XP) нужно потратить и сколько уровней нужно для ремонта. Применение ремонта: Предмет ремонтируется (уменьшается его износ). 4. Изменение ремонта с помощью датапаков: К сожалению, напрямую изменить логику ремонта (какой предмет используется для починки) с помощью датапаков нельзя (в ванильном Minecraft). Вот почему: Система ремонта (проверка на наличие материалов, стоимость опыта) — это «жестко запрограммированная» логика. Вы не можете напрямую заменить код. Что вы можете сделать, чтобы косвенно решить вашу задачу (деревянный меч ремонтируется с помощью досок): Обходной путь: вы можете создать рецепт крафта, который будет создавать деревянный меч, но при крафте будут использоваться доски. Это косвенный способ, но он позволит вам получить деревянный меч, «починенный» досками. Обходной путь (более сложный): вы можете использовать пользовательские предметы, которые будут функционировать как деревянные мечи, но будут основаны на пользовательских рецептах (с использованием датапаков). Это позволит вам более гибко управлять предметами и их ремонтом. В итоге: Вы не можете изменить логику ремонта напрямую в датапаках. Вы можете использовать обходные пути (например, переопределить крафт, сделать пользовательские предметы). Для изменения логики ремонта потребуется мод. Пример (обходной путь с переопределением крафта): Допустим, вы хотите, чтобы деревянный меч всегда «ремонтировался» с помощью досок. Вот как можно было бы попробовать (это не полное решение, а только пример): Удалите стандартный рецепт крафта деревянного меча: это делается в датапаке. Создайте новый рецепт крафта деревянного меча: этот рецепт будет требовать доски вместо палок или включать в себя не только палки, но и доски, как
  3. 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 часто округляет числа, поэтому добиться идеальной равномерности сложно, но для большинства задач этого достаточно. если помог пожалуйста
  4. Общие советы: Оптимизация: Постарайтесь, чтобы ваш завод был организован и эффективен. Автоматизация: Старайтесь автоматизировать как можно больше процессов. Расширение: не бойтесь расширять базу, чтобы удовлетворить растущие потребности. Обучение: играйте, экспериментируйте и учитесь на своих ошибках. Используйте конвейеры: конвейеры — это ваш основной способ перемещения ресурсов. Используйте их, чтобы соединить различные части вашего завода. Используйте роботов: роботы могут автоматизировать строительство, ремонт и доставку предметов. Используйте шаблоны: Шаблоны позволяют быстро создавать сложные структуры. Защищайтесь от врагов: Не забывайте защищать свою базу от врагов. Учитесь и совершенствуйтесь: Factorio — это игра, в которой нужно постоянно учиться и совершенствоваться. Заранее продумывайте планировку: план — это ключ к успешному прохождению. думаю тебе эта информация была полезна !
  5. Чтобы получить достижение в Factorio, вот что нужно сделать: Откройте карту и начните новую игру. 2 .Начните строить свою базу. Основной принцип — добывать ресурсы, обрабатывать их и производить новые предметы. Начните с базовых вещей: Добывайте руду с помощью шахтеров. Плавите руду в печках (используйте уголь в качестве топлива). Создавайте конвейеры для транспортировки ресурсов. Создавайте сборочные станки для производства других предметов. 3 . Автоматизируйте производство. Основная цель игры — автоматизировать все, что вы можете. Это значит, что вам нужно настроить: Автоматическую добычу ресурсов (шахтеры, насосы). Автоматическую обработку ресурсов (плавка, сборка). Транспортировку ресурсов (конвейеры, роботы). 4 .Обустройте добычу ресурсов: Поставьте угольные шахты. Постройте печи, чтобы плавить ресурсы, добываемые шахтами. Сделайте генераторы, работающие на угле. 5 .Производство: Соберите компоненты, необходимые для производства: шестерни, провода, пластины. Постройте сборочные станки, чтобы производить новые компоненты. Соберите новые машины. 6 . Защита: Стройте стены вокруг базы, чтобы защитить себя от враждебных существ. Установите турели. Автоматизируйте производство боеприпасов. 7 . Исследования: Проводите исследования в лабораториях, чтобы разблокировать новые технологии и улучшения. Используйте научные пакеты для исследований. 8 . Продвижение: Постоянно расширяйте свою базу. Оптимизируйте производство. Исследуйте новые технологии. 9 .Поражение: Ваша база должна быть полностью построена и автоматизирована. Вам нужно произвести 600 ракетных силосов.
  6. ема , ну ты крут а на какой версии это сделана карта ?
  7. нифига себе , это ты смам все делал ? если да , тогда от меня огромный респект потому что ты сделал эту карту,как в какой то зомби сборке
  8. в общем когда ты оптимизировал майн свой , ты мог по случайности на жать на кнопку убрать все квесты
  9. ема , крутой рассказ про курочку Клара авхзахзвахзвхзав
  10. коллеги , с вами полностью солидарен
  11. вот что нашел 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]. Смотрите мой предыдущий ответ для деталей и кода. а в общем , для чего этот дата пак , расскажешь если не секрет ?
  12. # Цель: Проверить торги и заменить алмазные ботинки на железные, сохраняя зачарования. # Получаем всех жителей в радиусе (настройте радиус по необходимости) execute as @e[type=minecraft:villager,distance=..5] run { # Цикл по всем предложениям (допустим, у жителя максимум 10 предложений) execute as @s run forvalues 0 9 i run { # Получаем текущий номер предложения data modify storage my_datapack:temp current_recipe set value 0 data modify storage my_datapack:temp current_recipe set value $[i] # Проверяем, что текущий торг - это алмазные ботинки (предположим, что мы знаем структуру NBT) execute if data entity @s Offers.Recipes[0].sell.id == "minecraft:diamond_boots" run { # Копируем старое предложение (пока просто предположим, что это первое предложение) data modify storage my_datapack:temp old_recipe set from entity @s Offers.Recipes[0] # Удаляем старое предложение (заменить в оригинальном датапаке будет невозможно) data remove entity @s Offers.Recipes[0] # Создаем новое предложение: Железные ботинки, берем зачарования со старых алмазных ботинок summon minecraft:item ~ ~ ~ {Item:{id:"minecraft:iron_boots", Count:1b, tag:{Enchantments:[]}}, CustomName:'{"text":"Железные ботинки (изменены)"}'} execute store result entity @s Offers.Recipes[0].buy.id byte 1 run data get entity @e[type=minecraft:item,limit=1,sort=nearest] Item.id execute store result entity @s Offers.Recipes[0].buy.Count byte 1 run data get entity @e[type=minecraft:item,limit=1,sort=nearest] Item.Count execute store result entity @s Offers.Recipes[0].buy.tag.display.Name string 1 run data get entity @e[type=minecraft:item,limit=1,sort=nearest] Item.tag.display.Name execute store result entity @s Offers.Recipes[0].sell.id byte 1 run data get entity @e[type=minecraft:item,limit=1,sort=nearest] Item.id execute store result entity @s Offers.Recipes[0].sell.Count byte 1 run data get entity @e[type=minecraft:item,limit=1,sort=nearest] Item.Count execute store result entity @s Offers.Recipes[0].sell.tag.display.Name string 1 run data get entity @e[type=minecraft:item,limit=1,sort=nearest] Item.tag.display.Name data modify entity @s Offers.Recipes[0].sell.tag.Enchantments set from entity @e[type=minecraft:item,limit=1,sort=nearest] Item.tag.Enchantments # Копируем зачарования kill @e[type=minecraft:item,limit=1,sort=nearest] } } } если помог, пожалуйста :)
  13. тебе надо из старой версии на новую перенести этот ресурс пак ? если да , то тебе нужно перенести старый набор текстур (ресурс-пак) в новую версию Minecraft. Вот что нужно сделать: 1. Готовка к работе: Копия — наше всё: сначала создай копию своего старого набора текстур. Если что-то пойдёт не так, ты всегда сможешь вернуться к оригиналу. Версия важна: узнайте, для какой версии Minecraft был создан ваш набор текстур. Это поможет вам понять, что именно нужно будет изменить. Новая версия — наше поле боя: убедитесь, что у вас установлена та версия Minecraft, в которую вы хотите перенести текстуры (например, 1.20.1). 2. Основная работа: Открой секретный сундук: распакуй (если это ZIP-файл) или просто открой папку со своим старым набором текстур. Посмотри, где что лежит: разберись, как устроены папки внутри набора. Главные папки — это assets (там все картинки, модели, звуки) и pack.mcmeta (это такая служебная бумажка, которая рассказывает игре, что это за набор). Перепишите бумажку: откройте файл pack.mcmeta в простом текстовом редакторе (Блокнот подойдёт). Найдите там строку pack_format. Это самое важное! Вам нужно изменить число, которое там написано, на число, соответствующее новой версии Minecraft. Например: Для 1.20.x используй 18 Для 1.19.x используй 15 Для 1.18.x используй 12 Для 1.17.x используй 9 Для 1.16.x используй 7 Для 1.15.x используй 5 Сохрани изменения. Переносим картинки и звуки: Текстуры (изображения блоков, предметов): многие текстуры, скорее всего, будут работать и в новой версии. Просто перенесите их в папку assets/minecraft/textures. Но некоторые текстуры могли измениться (например, блоки). Возможно, вам придётся обновить их. Модели (форма блоков): Это сложнее. Формат моделей мог измениться. Возможно, придётся переделывать модели (файлы .json), чтобы они отображались правильно. Звуки: Звуки обычно можно переносить без проблем. 3. Если что-то пошло не так: Что-то пропало? Если текстуры не отображаются или отображаются неправильно, нужно найти и обновить эти изображения. Блоки не такие? Если модели выглядят странно, нужно обновить файлы моделей (.json). Звук не воспроизводится? Убедитесь, что звуковые файлы имеют формат .ogg и правильно названы. Нет новых блоков? Если в новой версии появились новые блоки, которых нет в твоём наборе, добавь для них текстуры и модели. 4. Проверка: Поместите в нужную папку: поместите свой обновлённый набор текстур в папку resourcepacks (находится в папке .minecraft в вашей игре). Запустите Minecraft: Запустите игру и включите свой набор текстур в настройках. Всё ли в порядке? Проверь всё: блоки, предметы, мобов, интерфейс. Исправляем ошибки: если что-то не так, вернитесь к шагам 3 и 4 и исправьте. 5. Инструменты (полезные помощники): Текстовый редактор: Для правки pack.mcmeta и .json файлов. Графический редактор: Для рисования картинок (текстур). 3D-редактор (например, Blockbench): для создания и изменения моделей. 7-Zip или WinRAR: для распаковки и упаковки ZIP-файлов. Важно помнить: Сохраняй копии! Не спеши, делай всё постепенно. Гугли и спрашивай! Если что-то не получается, ищи информацию в интернете. Терпение — ключ к успеху. Обновляйся: каждый раз, когда выходят новые версии, тебе придётся повторять этот процесс.
  14. /give @p minecraft:shulker_box{display:{Name:'{"text":"Название","italic":false}'}} 1 думаю я тебе помог
×
×
  • Создать...