ShinyBird368 Posted March 4, 2024 Share Posted March 4, 2024 Привет всем! На днях мой приятель спросил, знаю ли я способ автоматизации добычи пластинок? Точного ответа я тогда дать не мог, но помнится, в далёком 2013 я фармил пластинки всех видов чисто для ванильного майнкрафта, чтоб просто слушать музычку и наслаждаться жизнью.. Эх, были времена. Но спустя некоторое время я нашел способ это автоматизировать) 0. Не самое короткое предисловие Спойлер Суть в том, что когда скелет убивает крипера, с него 100% падает случайная пластинка. За эти годы механика никуда не делась, осталось только это использовать в своих целях, так сказать. Изначально я построил полуавтоматическую ферму пластинок, в которой стоит скелет, с другой стороны место для игрока и между ними место для криперов. Скелет агрится на игрока и фармит нам пластинки. Добровольца, который там будет стоять вместо меня я нашел относительно быстро: им оказался снеговик. Так система получила полную автономность и казалось, была завершена. Но возникла следующая проблема: после отчистки все криперы пропадали, а скелет и снеговик мочили друг друга (почему они не пропадали, расскажу позже). По моим подсчётам, спустя несколько отчисток они должны были добить друг друга. Автономность исчезла. Решил я это написанием программы, которая каждые 15 минут (именно так происходит отчистка) активировала поршни, которые изолировали скелета и снеговика друг от друга. Было принято решение писать программу, а не таймеры, потому что таймеры могут делать небольшие погрешности, которые в нашем случае недопустимы и они не так удобны, ой да кого я обманываю, я просто хотел сделать универсальную прогу, чтоб все могли подстроить ее под свои нужды) Одну проблему решил, но потом мы заметили, что после рестарта скелет перестает агрится, по этому пришлось добавить в программу обработку рестартов, то есть 2 раза в сутки на 20 секунд все криперы не поступают в ферму и снеговик может агрить скелета. Следующая подстава была в том, что отчистка идет не всегда строго каждые 15 минут, могут быть погрешности до 10 секунд, что было критично для системы, по-этому было принято решение, заменить "таймер" на проверку наличия мобов в фармилке. На этом варианте я и остановился. На данный момент осталась всего одна проблема: рестарты так же происходят с некоторыми погрешностями, но как это фиксить, я пока не знаю, позже и это исправлю) (Ох и долгое предисловие вышло, кто дочитал, тот красавчик)) 1. Что нужно для создания фермы: Спойлер Систему можно полностью повторить при условии, что у вас есть данные 3 мода: Mine factory reloaded Open computers Ender IO (или любой мод, где есть автоспавнер) Что нужно для крафта: Строительные блоки Липкий поршень - 3 штуки Повторитель - 3 штуки Провода или красная пыль Комплект компа с красным контроллером и кабелями Подсчитыватель мобов (дальше буду его называть ПМ) Коллектор края или любой предмет, который умеет собирать лут с земли Источник криперов (любой спавнер) Скелет Снеговик Именная бирка - 2 штуки Собираем что-то похожее, как на скриншоте. Сверх высокая точность тут не важна, главное - позаботьтесь о следующих моментах: Поставьте поршни и блоки на них перед скелетом и снеговиком так, чтоб при активации они не могли достать друг до друга(кстати, можно поставить всего один поршень любому из них, результат будет тот же) Советую сделать место, куда будут сбрасываться криперы в 1 блок (как в моем случае), так ПМ точно не даст сбоя. Прямо сзади ПМ располагается красный контроллер, к которому уже идут провода красного камня. Как по мне - это самый компактный вариант схемы. Оба поршня, которые блокируют скелета и снеговика нужно выводить на одну сторону красного контроллера. Сверху системы стоит третий поршень, который блокирует доступ криперам в фармилку на время рестарта. Если вы достаточно близко приблизитесь к ПМ, он вас учтёт и откроет поршни, даже если криперов нет в фармилке, будьте осторожны! (на скриншоте ограждена область работы этого механизма забором) 2. Программа Спойлер --powered by ShinyBird368 local fs = require("filesystem") local comp = require("component") local gpu = comp.gpu local reds = comp.redstone --down = 0 --up = 1 --north = 2 --south = 3 --west = 4 --east = 5 local side_dump = 3 local side_clear = 5 local side_count = 2 local time_restart_start = 59 local time_restart_stop = 10 function getHostTime(timezone) timezone = timezone or 2 local file = io.open("/HostTime.tmp", "w") file:write("") file:close() local timeCorrection = timezone * 3600 local lastModified = tonumber(string.sub(fs.lastModified("/HostTime.tmp"), 1, -4)) + timeCorrection fs.remove("/HostTime.tmp") local year = os.date("%Y", lastModified) local month = os.date("%m", lastModified) local day = os.date("%d", lastModified) local hour = os.date("%H", lastModified) local minute = os.date("%M", lastModified) local second = os.date("%S", lastModified) return tonumber(day), tonumber(month), tonumber(year), tonumber(hour), tonumber(minute), tonumber(second) end function real_time() local text = string.format("%02d:%02d:%02d", host_time[4], host_time[5], host_time[6]) return text end function clear_monitor(color_bg, color_fg) local w,h = gpu.getResolution() local oldbg = gpu.getBackground() local oldfg = gpu.getForeground() gpu.setBackground(color_bg) gpu.setForeground(color_fg) gpu.fill(1, 1, w, h, " ") gpu.setBackground(oldbg) gpu.setForeground(oldfg) end function check_clear() local mobs = reds.getInput(side_count) if mobs == 0 then gpu.set(1, 1, "[" .. real_time() .. "] Отчистка!") reds.setOutput(side_clear, 15) else gpu.set(1, 1, "[" .. real_time() .. "]") reds.setOutput(side_clear, 0) end end function restart() if (host_time[4] == 15 and host_time[5] == 59 and host_time[6] > time_restart_start) or (host_time[4] == 16 and host_time[5] == 00 and host_time[6] < time_restart_stop) or (host_time [4] == 00 and host_time[5] == 00 and host_time[6] > time_restart_start) or (host_time[4] == 00 and host_time[5] == 00 and host_time[6] < time_restart_stop) then gpu.set(2, 1, "[Рестарт, смываем криперов]") reds.setOutput(side_dump, 15) else reds.setOutput(side_dump, 0) end end function main() while true do host_time = {getHostTime(3)} clear_monitor(1, 1) check_clear() restart() os.sleep(1) end end main() Как настроить компьютер, я уже писал в прошлых гайдах, вот ссылка) Чтоб добавить программу в комп, пишите в консоль "edit название_программы", потом вставляйте код в программу, после чего пишем "название_программы" (все без кавычек) Как обычно, вывожу переменные, которые нужно менять в самый верх local side_dump = 3 local side_clear = 5 local side_count = 2 Это 3 стороны нашего контроллера. Я уже писал, как их настраивать в гайде выше. local time_restart_start = 59 local time_restart_stop = 10 Эти значения можете не трогать, тут по умолчанию стоит 11 секунд блокировки фермы, но если хотите, можете поэкспериментировать) Комплектующие компа я всегда беру с запасом, тк ещё не до конца разобрался, на сколько программы требовательны. Это моя стандартная сборка для всех программ: 3. "Настройка" скелета и снеговика: Спойлер Чтоб наши участники дуэли не пропадали при отчистке, на них нужно навесить бирку, так они получат имя. Бирку надо переименовать в наковальне на любое название, на 2 бирки у вас уйдет 10 уровней, будьте готовы к тратам) После просто кликайте биркой на каждого бойца и больше он не пропадет! (только, если вы его не убьете) На этом все) Знаю, программа не безупречна, можно было добавить более гибкий контроль (например, вручную остановить фармилку на какое то время или что-то подобное), но это уже в другой раз) Так же на данный момент известно об одной ошибке: рестарт сервера происходит с погрешностью, изза чего снеговик может пропустить пару лишних стрел в тыкву, но как это исправить я пока не знаю, в будущем дополню гайд! Пишите в комментариях любые вопросы, предложения или ошибки, всем отвечу! Спасибо всем, кто дочитал и удачи в постройке! 1 Quote Link to comment Share on other sites More sharing options...
AL523 Posted June 20, 2024 Share Posted June 20, 2024 Как насчёт нажимной плиты под криперами , крипперами падает излучает сигнал поршни открывают двери , на оборот если крипера нет , проход закрыт Quote Link to comment Share on other sites More sharing options...
ShinyBird368 Posted June 21, 2024 Author Share Posted June 21, 2024 10 часов назад, AL523 сказал: Как насчёт нажимной плиты под криперами , крипперами падает излучает сигнал поршни открывают двери , на оборот если крипера нет , проход закрыт Это была изначальная идея и она работала бы, если бы не рестарты, из-за которых снеговик перестает агрится на скелета. В этой ситуации нужно на несколько секунд открыть путь между ними и дать скелету попасть по снеговику. На самом деле, Рестарты именно на этом сервере происходят не ровно в одно время, из-за чего систему все таки надо доработать, но до этого руки никак не доходят) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.