'Бекап' и восстановление мира по условию

AlexSocol

Золотая лига
Сообщения
1,950
Лучшие ответы
65
Симпатии
180
#1
Всем здрасти :D
Делаю что-то вроде откатывалки мира на день назад, но столкнулся с парой вопросов.. Помогите, пожалуйста:
1. Как можно копировать чанки из Овера в своё измерение (и обновлять их, даже если в измерении есть игроки), допустим, каждые 20 минут (стандартный майн-день, если не ошибаюсь)?
2. Обратно первому вопросу, как очистить Овер и запихнуть в него чанки из 'бэкап' мира (даже в присутствии игроков) по условию, выполняемому в самом мире? То есть, допустим, поставил губку на координаты (71; 16; 8) и мир клонировался в папку Овера.
Заранее спасибо =)
 

Tuborg

Каменная лига
Сообщения
212
Лучшие ответы
0
Симпатии
0
#2
Ну, по моему, world - это объект, так? Ну а там дальше Outputstream - это сохранение,а насчет загрузки - беда, хз можно ли приравнивать переменную world.
 

AlexSocol

Золотая лига
Сообщения
1,950
Лучшие ответы
65
Симпатии
180
#3
Вот именно... Если бы надо было просто скопировать в отдельную папку - это просто манипуляция с файлами методами из обычной java. А тут надо не выходя из игры изменять сейв и измерение с игроками. Я надеюсь, что такое вообще возможно...
 

Agravaine

Золотая лига
Сообщения
3,858
Лучшие ответы
135
Симпатии
372
#4
Сервер будет висеть.
 

svk

Каменная лига
Сообщения
1,186
Лучшие ответы
0
Симпатии
1
#5
А не легче сделать скрипт для хоста?
 

AlexSocol

Золотая лига
Сообщения
1,950
Лучшие ответы
65
Симпатии
180
#6
Ты имеешь ввиду, чтобы хостер сервера ручками/программой заменял файлы?
Нет, это не то, мне нужно именно через мод...
[merge_posts_bbcode]Добавлено: 07.02.2016 00:54:58[/merge_posts_bbcode]

Ладно, вот вам моя идея:
Мир вчерашнего дня - каждый рассвет, т.е. 24000*n тиков измерение 'Overworld' будет клонироваться в измерение 'Yesterday', куда можно будет телепортироваться по желанию. Там нельзя будет изменять блоки или подбирать предметы (как сделать это спрошу позже, но никто вам не мешает написать ответ сейчас, если вы знаете :D). Суть такая - вы допустили какую-то ошибку (например, не уследили и ваш ядерный реактор рванул, разнеся пол базы (ибо почти все играют с IC2)). Вам очень хочется её исправить, но ведь все знают, что без мода World State Checkpoint (или аналога, если таков существует) ты никак не перезагрузишься. Вот я и даю возможность отправиться в мир прошлого, сделать там чего-то (это будет можно), что приведёт к "путешествию" назад во времени и Overworld станет таким же, как он был на рассвете вчерашнего дня, т.е. произойдёт обычный откат.
 

MrYarik666

Каменная лига
Сообщения
312
Лучшие ответы
0
Симпатии
1
#7
AlexSocol написал(а):
Ты имеешь ввиду, чтобы хостер сервера ручками/программой заменял файлы?
Нет, это не то, мне нужно именно через мод...
[merge_posts_bbcode]Добавлено: 07.02.2016 00:54:58[/merge_posts_bbcode]

Ладно, вот вам моя идея:
Мир вчерашнего дня - каждый рассвет, т.е. 24000*n тиков измерение 'Overworld' будет клонироваться в измерение 'Yesterday', куда можно будет телепортироваться по желанию. Там нельзя будет изменять блоки или подбирать предметы (как сделать это спрошу позже, но никто вам не мешает написать ответ сейчас, если вы знаете :D). Суть такая - вы допустили какую-то ошибку (например, не уследили и ваш ядерный реактор рванул, разнеся пол базы (ибо почти все играют с IC2)). Вам очень хочется её исправить, но ведь все знают, что без мода World State Checkpoint (или аналога, если таков существует) ты никак не перезагрузишься. Вот я и даю возможность отправиться в мир прошлого, сделать там чего-то (это будет можно), что приведёт к "путешествию" назад во времени и Overworld станет таким же, как он был на рассвете вчерашнего дня, т.е. произойдёт обычный откат.
Идея нормальная, но как ты откатишь зону именно игрока? Ибо если брать именно чанки - тогда ты можешь задеть случайно чужой приват находящийся в том же чанке. Тогда уже проще сделать так: 
1) Игрок вводит команду /back Название_привата
2) Дальше получаешь корды привата игрока.
3) Копируешь чанки с мира Yesterday в OverWorld
5) Возможно может быть баг с TileEntity (они могут обнулиться, что вызовет краш или просто будут пустые сундуки и т.п).
6) Воуля.

Копирование чанков с обычного мира в другой не сложно. Но это очень лагучая тема.
Лучше забей. Ибо если на сервере карта большая и игроков много то твой сервер загнется. Хотя.. если выделить на него 32 Озу + i7. Тогда выдержит. Но не советую. Ибо бред. У меня была такая идея, только востанавливать приват за денюжку. И сделать это плагином. Т.е в ЛК чувак покупает на свой приват откат на 1 день реальный. заносятся данные в БД. Это дело получает плагин. Копирует чанки с бэкапа в обычный мир. Только я не смог разобраться с одним. ССАНЫЙ БАКИТ НЕ ВИДЕЛ БЛОКИ ИЗ МОДОВ. Это прост пздц.. и я забил на эту идею. Хотя можно ее возродить и сделать модом.
 

svk

Каменная лига
Сообщения
1,186
Лучшие ответы
0
Симпатии
1
#8
Yarik написал(а):
AlexSocol написал(а):
Ты имеешь ввиду, чтобы хостер сервера ручками/программой заменял файлы?
Нет, это не то, мне нужно именно через мод...
[merge_posts_bbcode]Добавлено: 07.02.2016 00:54:58[/merge_posts_bbcode]

Ладно, вот вам моя идея:
Мир вчерашнего дня - каждый рассвет, т.е. 24000*n тиков измерение 'Overworld' будет клонироваться в измерение 'Yesterday', куда можно будет телепортироваться по желанию. Там нельзя будет изменять блоки или подбирать предметы (как сделать это спрошу позже, но никто вам не мешает написать ответ сейчас, если вы знаете :D). Суть такая - вы допустили какую-то ошибку (например, не уследили и ваш ядерный реактор рванул, разнеся пол базы (ибо почти все играют с IC2)). Вам очень хочется её исправить, но ведь все знают, что без мода World State Checkpoint (или аналога, если таков существует) ты никак не перезагрузишься. Вот я и даю возможность отправиться в мир прошлого, сделать там чего-то (это будет можно), что приведёт к "путешествию" назад во времени и Overworld станет таким же, как он был на рассвете вчерашнего дня, т.е. произойдёт обычный откат.
Идея нормальная, но как ты откатишь зону именно игрока? Ибо если брать именно чанки - тогда ты можешь задеть случайно чужой приват находящийся в том же чанке. Тогда уже проще сделать так: 
1) Игрок вводит команду /back Название_привата
2) Дальше получаешь корды привата игрока.
3) Копируешь чанки с мира Yesterday в OverWorld
5) Возможно может быть баг с TileEntity (они могут обнулиться, что вызовет краш или просто будут пустые сундуки и т.п).
6) Воуля.

Копирование чанков с обычного мира в другой не сложно. Но это очень лагучая тема.
Лучше забей. Ибо если на сервере карта большая и игроков много то твой сервер загнется. Хотя.. если выделить на него 32 Озу + i7. Тогда выдержит. Но не советую. Ибо бред. У меня была такая идея, только востанавливать приват за денюжку. И сделать это плагином. Т.е в ЛК чувак покупает на свой приват откат на 1 день реальный. заносятся данные в БД. Это дело получает плагин. Копирует чанки с бэкапа в обычный мир. Только я не смог разобраться с одним. ССАНЫЙ БАКИТ НЕ ВИДЕЛ БЛОКИ ИЗ МОДОВ. Это прост пздц.. и я забил на эту идею. Хотя можно ее возродить и сделать модом.
Хах, наш кодер вырос?)
[merge_posts_bbcode]Добавлено: 07.02.2016 02:21:27[/merge_posts_bbcode]

Хоть и откровенный бред написал.

[merge_posts_bbcode]Добавлено: 07.02.2016 02:22:02[/merge_posts_bbcode]

И получишь за маты :)
 

FanKar

Каменная лига
Сообщения
1,087
Лучшие ответы
0
Симпатии
0
#9
А нет, чтобы помочь - о других говорит.
P.S. Лично я не знаю как.
 

AlexSocol

Золотая лига
Сообщения
1,950
Лучшие ответы
65
Симпатии
180
#10
Yarik написал(а):
как ты откатишь зону именно игрока? ты можешь задеть случайно чужой приват находящийся в том же чанке
При чём тут приваты вообще? И TileEntity? Это просто копирование мира, ВСЕГО, не по одному чанку, а ВСЕГО, что есть.
Ты прав в одном - если мир большой, слабому серверу действительно крышка...
 

wilah

Каменная лига
Сообщения
1,138
Лучшие ответы
6
Симпатии
1
#11
Добавить флаг в чанк, при взрыве ставить его на тру. В тикере проверять каждый чанк на тру, и если это так, копировать.
Самое сложное - запись, она будет сильно жрать и тормозить(даже в разных потоках), а как же синхронизация! Пока чанк копируется, игрок может еще взорвать что-нибудь... Забудь
З.Ы. И каждый тик копировать - затратно. Забудь об этом
 

MrYarik666

Каменная лига
Сообщения
312
Лучшие ответы
0
Симпатии
1
#12
svk написал(а):
Хах, наш кодер вырос?)
Хоть и откровенный бред написал.
И получишь за маты :)
Кодер подрос, кодер стал умнее(ну ты понял крч о чем, я уже много чего знаю)))
Получу за маты? Окей, перетерплю, ибо заслужил
Почему бред? Я ничего бредового не вижу :D
[merge_posts_bbcode]Добавлено: 07.02.2016 17:38:47[/merge_posts_bbcode]

AlexSocol написал(а):
Yarik написал(а):
как ты откатишь зону именно игрока? ты можешь задеть случайно чужой приват находящийся в том же чанке
При чём тут приваты вообще? И TileEntity? Это просто копирование мира, ВСЕГО, не по одному чанку, а ВСЕГО, что есть.
Ты прав в одном - если мир большой, слабому серверу действительно крышка...
А я думал, что ты хочешь сделать, что бы игрок ставил какой то блок и у него откатывается часть мира(напрмер его регион). 
Тогда у меня один вопрос, зачем это вообще нужно?
Про тайлы забей тогда.
 

AlexSocol

Золотая лига
Сообщения
1,950
Лучшие ответы
65
Симпатии
180
#13
Yarik написал(а):
Зачем это вообще нужно?

[merge_posts_bbcode]Добавлено: 07.02.2016 17:42:57[/merge_posts_bbcode]

А зачем вообще пишут моды?
 

Tuborg

Каменная лига
Сообщения
212
Лучшие ответы
0
Симпатии
0
#14

Dragon2488

Железная лига
Сообщения
2,962
Лучшие ответы
0
Симпатии
1
#15
Во-первых, мир так просто взять и десериализировать со всем его контентом, существует масса тонкостей и ньюансов, тоже самое относится к его сериализации. Во-вторых, так просто совершать манипуляции над загруженным миром не выйдет. В третьих, сломается множество вещей в майне и других модах. Гораздо проще просто форсить сохранение мира в папку перед бекапом и бекапить всю папку, а при откате отгружать мир без игроков и просто её подменять. ИМХО, идея топикстартера - бред.
 

AlexSocol

Золотая лига
Сообщения
1,950
Лучшие ответы
65
Симпатии
180
#16
Ну короче, вердикт профессионалов - "всё сломается, лучше забей, тебе же лучше"? :D
 
Сверху