Катализатор превращающий одну жидкость в другую, 1.12.2, для аддона к Galacticraft

Версия Minecraft
1.12.2
198
1
24
Здравствуйте! Я занимаюсь разработкой мода для проекта, на котором играю, и суть мода заключается в том, чтобы мобы из Lycanites Mobs (вообще-то, любые мобы но ванильных я внес в черный список в самом коде) не дохли на планетах Galacticraft или его аддонов, а так же дает возможность настраивать шанс спавна мобов в кислородных масках которыми кишит галактикрафт. На данный момент, мод работает и делает всё описаное, хотя конфиг сделан коряво и должен находиться в самом jar файле мода, и имеет ужасный формат. Но суть не в этом. Водоплавающие Lycanites Mobs теперь не дохнут в океанах Европы и других планет и лун с водой. Но вода там не ванильная, а какая то химическая дрянь, из за чего они, хоть и могут жить в ней, вертятся на месте и никуда не плывут, видимо, считая соседний блок не-водой. Хочу добавить в мод нанитов, которые, будучи вылитыми в океан, преобразуют воду в ванильную (а чтобы не лагало, преобразование должно происходить не каждый тик). А также нанитов, которые, будучи распылёнными в атмосфере, преобразовали бы ее в земную в 3 этапа: 1 - дышать нельзя, 2 - можно но с дебаффами, 3 - можно. И на стадии 2 должны рандомно спавнится и расползаться трава или мицелий, в зависимости от планеты. Как терраформировать океан, я примерно понял из исходников Abyssalcraft (никакой копипасты, просто читал их), а как менять атмосферу - догадался сам, когда учил ликанитов дышать на луне и марсе. Но - чего я совершенно не понимаю, это как зарегистрировать ивент выливания пробирки нанитов и на клиенте, и на сервере, и сохранить для измерения переменные, содержащие информацию: 1) Терраформируется ли океан; 2) Терраформируется ли атмосфера; 3) Процент терраформирования атмосферы; 4) Блок живой почвы (трава, подзол или мицелий) в случае терраформирования атмосферы.
Хранить переменные готов хоть в файле в папке по умолчанию, но КАК СООБЩИТЬ СЕРВЕРУ ЧТО ПРОЦЕСС НАЧАТ? (Извините за капс, это от отчаяния)
 
7,099
324
1,509
Держи четкий конфиг)

это как зарегистрировать ивент выливания пробирки нанитов
Переопредели onItemRightClick в предмете пробирки

Чтобы хранить прогресс можно сделать сущность нанитов. Которая бы находясь в воде сразу уничтожалась. А находясь в заменяемой жидкости ждала несколько тиков, заменяла текущий блок на блок воды и спаунила в соседних блоках свою копию. Для подсчета процентов нужно знать кол-во блоков жижы в океане, а для этого нужно их все обойти(что потенциально лагодром, поэтому не советую)

Хранить переменные готов хоть в файле в папке по умолчанию
Это плохая идея. Хранить данные надо в оперативной памяти, т.е. в полях своих классов, в капабилити, нбт и т.д. Сохранять только при сохранении мира
 
Последнее редактирование:
198
1
24
Переопредели onItemRightClick в предмете пробирки

Чтобы хранить прогресс можно сделать сущность нанитов. Которая бы находясь в воде сразу уничтожалась. А находясь в заменяемой жидкости ждала несколько тиков, заменяла текущий блок на блок воды и спаунила в соседних блоках свою копию. Для подсчета процентов нужно знать кол-во блоков жижы в океане, а для этого нужно их все обойти(что потенциально лагодром, поэтому не советую)
onItemRightClick это понятно, а считать на сколько терраформирован океан никто не собирается, это только для атмосферы, и там никакого подсчёта блоков, только подсчет продолжительности процесса и изменение степени урона от вдыхания не-терраформированного воздуха, от дефолтного при 0% терраформинга, до полного отсутствия урона начиная с 80% или около того, но с дебаффами, и при 95 или около того пропадают дебаффы а при 100% начинает спавнится живая почва.
Это плохая идея. Хранить данные надо в оперативной памяти, т.е. в полях своих классов, в капабилити, нбт и т.д. Сохранять только при сохранении мира
Знаю что так неправильно и надо в NBT, но как синхронизировать это между сервером и клиентом? Хранить то надо и там и там...
Меня вгоняет в ступор та часть написания модов где клиент и сервер общаются через сеть.
 
7,099
324
1,509
Ты хочешь, чтобы каждый блок преобразовывался некоторое время?
А находясь в заменяемой жидкости ждала несколько тиков
Ну вот сущность как раз ждет несколько тиков.

Почва пусть спаунится когда соприкасается с нормальным воздухом

а считать на сколько терраформирован океан никто не собирается
Мне показалось, что ты хочешь выводить инфу типо 10 блоков из 100 преогбразовано
 
198
1
24
Ты хочешь, чтобы каждый блок преобразовывался некоторое время?
Ну если блок жидкости будет преобразоваться как только соприкоснётся с нормальной водой, это же вызовет цепную реакцию и ужасные лаги?
Почва пусть спаунится когда соприкасается с нормальным воздухом
Насколько мне известно, в Galacticraft нет блоков воздуха, вакуума, и инопланетных атмосфер, и вообще, разьве воздух - блок? Есть такой мод, называется WarpDrive, вот там воздух реализован как блок и выглядит это коряво - заборы стыкуются с воздухом и на воздухе растут грибы... Спавн земных блоков поверхности, где они уместны, может можно списать с появления снега на поверхности в снежную погоду?
 
7,099
324
1,509
Ну если блок жидкости будет преобразоваться как только соприкоснётся с нормальной водой, это же вызовет цепную реакцию и ужасные лаги?
Так пусть не сразу, а через несколько тиков, прочитай еще раз мои сообщения
и вообще, разьве воздух - блок?
Да

Тогда что ты подразумеваешь под созданием атмосферы? Я не работал с GC, но играл и знаю, что там можно дышать либо в маске, либо в радиусе от рассеивающего блока, либо в замкнутом помещении в котором есть другой рассеивающий блок. Видимо, тебе нужно последнее, но для незамкнутых областей?
 
Сверху