Перейти к публикации
Форум - ComputerCraft
JLevi

Загрузчик чанков

Рекомендованные сообщения

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

Решил добавить свои. Простые загрузчики работают только в присутствии владельца, креативные не зависимо от владельца. Перед установкой необходимо активировать (щелкнуть правой кнопкой с загрузчиком в руке).

Имя компонента "chunkloader"

Методы:

getOwner()

setActive(boolean)

isActive()

При включении в конфиге registerCardChunkloader для крафта нужна будет использоваться специальная карта, которая может покупаться в магазине за UU.

Зона охвата 3х3 чанка.

Самому негде проверить работоспособность, думаю поможете.

https://my-files.ru/acgt2w

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Но в самом моде они не подходят.

???

что в чанклодырях из ОС не так? они вполне нормально работали. к тому же их недавно проапгрейдили.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не знал про новые возможности, Надеюсь что Alex это учтет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@JLevi, владелец присваивается чанклоадырю при активации  и записывается в nbt предмета? Такой ЧЛ должн работать и в микроконтроллерах и компьютерах. В моём варианте я получаю владельца через интерфейс Agent. А его реализуют только роботы и дроны; у мк нет владельца, а владельцем компьютера можно назначить любого игрока. Поэтому, если ЧЛ должны работать только при онлайне игрока, то работать они будут только в роботах и дронах.
 
Кстати, в твоём варианте игрок, который постоянно зависает на сервере, может активировать ЧЛ-карты другим игрокам. :)
 
Можно глянуть на сорцы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Игрок записывается в нбт. проверка идет по событиям playerLoggedIn и playerLoggedOut

https://my-files.ru/8mzear

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А ты на сервере тестировал? Учёл то, что спавн подгружен постоянно?

 

Пробежался по коду, если правильно понял, вот что происходит при запуске сервера:

  • сервер стартует
  • загружаются миры
  • при загрузке миров - загружаются тикеты
  • загружаются тикеты - загружаются чанки с ЧЛ
  • загружаются чанки с ЧЛ - вызывается метод onConnect
  • в методе onConnect - ЧЛ добавляется в список и тикет освобождается
  • тикет освобождается - чанки выгружаются
  • чанки выгружаются - вызывается метод onDisconnect
  • в методе onDisconnect - ЧЛ удаляется из списка

Игрок заходит на сервер - а в списке нет его ЧЛ.  Упс.

Тоже будет если игрок вышел с сервера - ЧЛ удалится из списка и активировать его не получится.
 
Я тоже думал поначалу, что достаточно подписаться на события входа/выхода игрока на сервер. При входе - грузим чанки; При выходе - выгружаем. Оказалось не всё так просто...
 
В общем случае, нельзя освобождать тикет, если onDisconnect вызывается при выгрузке чанка. Его надо где-то сохранить для последующего восстановления. Так мы приходим к необходимости отслеживать событие ChunkUnload. Я в этом событии скидываю тикет обратно в restoredTickets и устанавливаю поле ticket в null, что предотвращает его освобождение.
 
Прекрасно. Но что будет если в мире не осталось загруженных чанков? Он будет выгружен.
Что будет, если мы попробуем форсировать чанк для тикета в выгруженном мире? Получим NullPointerException в ForgeChunkManager. Поэтому пришлость отслеживать событие WorldUnload. В этом событии я удаляю тикеты выгружаемого мира из restoredTickets.
 
Буду рад если ошибаюсь, и твой код работает.

 

И ещё. В методе updateLoadedChunk, ты сначала отменяешь форсирование всех 9 чанков тикета. А затем форсируешь чанки для новой позиции. Так как чанки выгружаются не мгновенно, то это будет работать. Но данный код будет вызываться при каждом перемещении робота, и с частотой tickFrequency для дрона. Лучше брать дельту. Как это сделано в OC.

 

PS

 

Мод не запускал. Попробую  завтра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всё-таки попробовал запустить, на сервере:
Скрин https://imgur.com/a/pIM6zwj

Чанки не форсировались. Проверял через F6 (мод DimensionalAnchor) и команду /chunkloaders (не знаю кто ее добавляет, forge или ChickenChunks)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доработал мод. Вроде работает. Для проверки сделал Test Block. Он просто пишет сообщения в лог, если чанк загружен.

https://my-files.ru/hxg738

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не работает. Чанки не форисруются. Тикеты не запрашиваются. Установи моды Dimensional Anchor и ChickenChunks. Первый подсвечивает форсированные чанки. Второй добавляет команду /chunkloaders, которая открывает карту загруженных чанков.

 

https://imgur.com/a/pWQ4cqi

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

  vx13 спасибо за подсказки, особенно за  ChickenChunks. Благо валяется ноутбук со сломанным монитором. Сделал из него сервер для проверки. Но времени не хватает катастрофически. Выкладываю для проверки https://my-files.ru/rt7wfc. 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@JLevi, как ты вообще ссылки вставляешь?

[...]

Банально и невероятно очевидно же, что точка там случайно захватилась. Убери её просто.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×