Войти или зарегистрироваться

Помогите Восстановление блока по прохождению времени

Lite-craft

Активный участник
Пользователь
Баллы
46
Имя в Minecraft
shiroihana
Как сделать чтобы заменив блок он возвращался обратно через промежуток времени.
Многие пишут через HashMap но я им никогда не пользовался и не знаю как
Подскажите по этому вопросу.
 
Как сделать чтобы заменив блок он возвращался обратно через промежуток времени.
Многие пишут через HashMap но я им никогда не пользовался и не знаю как
Подскажите по этому вопросу.
Никто тебе HashMap и не писал. Он используется для совсем других целей. В твоём случае нужен sheduler.

UPD: можно использовать HashMap, но тогда придётся хранить блок который заменили, а после прошествия времени возвращать его назад. Но есть способ проще.
 
Последнее редактирование:
можно использовать HashMap, но тогда придётся хранить блок который заменили, а после прошествия времени возвращать его назад. Но есть способ проще.
Ну я смотрел другие темы, там и говорили про HashMap. Ты говоришь про scheduler но ведь нужно сначало получить этот блок и как то его хранить, пока для этого моих знаний не достаточно.
 
Ну я смотрел другие темы, там и говорили про HashMap. Ты говоришь про scheduler но ведь нужно сначало получить этот блок и как то его хранить, пока для этого моих знаний не достаточно.
Не обязательно его получать и совсем не обязательно его хранить.
Тебе нужно менять его на карте или изменять его лишь визуально?
 
Тогда создавай мапу с блоком и в методе, где тебе нужно менять блок, помещай старый блок в мапу и меняй на новый. После прошествия таймера, вынимай из мапы старый блок и ставь его на своё место.
 
Я искал но там все на англ. трудно, ну да ладно буду пробовать спасибо и на этом
Но есть способ проще.
Вот я думаю я нашел его (или другой но простой так же) перед изменением блока получить его тип и поставить в мире на каких либо координатах, а потом просто брать его от туда заменять обратно и удалять с тех координат
 
Я искал но там все на англ. трудно, ну да ладно буду пробовать спасибо и на этом
HashMap <Material, Location> block = new HashMap <Material, Location> ();

В методе где ты меняешь блок:
берёшь блок, берёшь тип, дальше
block.put([материал блока], [его локация]);

Также с возвращением. Но если у блока есть дата, то придётся и дату где-то хранить.
 
HashMap <Material, Location> block = new HashMap <Material, Location> ();

В методе где ты меняешь блок:
берёшь блок, берёшь тип, дальше
block.put([материал блока], [его локация]);

Также с возвращением. Но если у блока есть дата, то придётся и дату где-то хранить.
Можно пример?
 
Если задание замены блока отменять не требуется, то map не нужен. Просто создаём задание с задержкой и всё.
Мне нужно чтобы блок заменялся на 10 секунд песчанником
 
Будет довольно удобно сделать так:
Создаём класс (например ModificatedBlock), в котором будем хранить Long timestamp, Location position и Material block, конструктор, геттер времени (long getTimestamp(), например), метод для восстановления блока - recoveryBlock().
Все объекты класса храним в каком-нибудь List. В шедулере регулярно проходимся циклом по всему листу. Сравниваем текущее время со временем создания - если разница больше определённого значения, вызываем метод recoveryBlock() объекта, а из списка удаляем.
Нужно учесть, что после перезагрузки сервера список объектов будет пустым, поэтому если нужно сохранять изменённые блоки, то опять же в цикле это делать.
 
Будет довольно удобно сделать так:
Создаём класс (например ModificatedBlock), в котором будем хранить Long timestamp, Location position и Material block, конструктор, геттер времени (long getTimestamp(), например), метод для восстановления блока - recoveryBlock().
Все объекты класса храним в каком-нибудь List. В шедулере регулярно проходимся циклом по всему листу. Сравниваем текущее время со временем создания - если разница больше определённого значения, вызываем метод recoveryBlock() объекта, а из списка удаляем.
Нужно учесть, что после перезагрузки сервера список объектов будет пустым, поэтому если нужно сохранять изменённые блоки, то опять же в цикле это делать.
Жирновато будет.
Если задание замены блока отменять не требуется, то map не нужен. Просто создаём задание с задержкой и всё.
 
Жирновато будет.
Каждый шедулер - поток. Много потоков - это плохо.
Такой вариант будет уместен при маленьком онлайне и при маленькой задерке перед восстановлением. А если один из параметров увеличится?
К тому же сохранение изменённых блоков на диск при таком раскладе будет неудобным.
По поводу использования ОЗУ, кстати, тоже однозначно нельзя однозначно ничего сказать. Лично я понятия не имею, что в себе хранит шедулер, ты, думаю, тоже не интересовался.

В общем спорить можно бесконечно. Оба варианта имеют право на существование. Однако всё зависит от конкретной ситуации.
 
Назад
Верх