[1.6.4] WorldSavedData

435
1
В общем есть WorldSavedData, на клиенте все работает, но на сервере - увы нет. Точнее клиент не хочет ее ловить. Регистрирую я так:
Код:
            World world = null;
            for(int ii = 0; ii < tickData.length; ii++)
                if(tickData[ii] instanceof World)
                    world = (World)tickData[ii];
            if(world == null){
                return;
            }
            worldData = SSWWorldData.forWorld(world);
            worldData.markDirty();
 worldData = SSWWorldData.forWorld(world);
 worldData.markDirty();

Тип тикера: WORLDLOAD

Пример получения:
Код:
    public SSWWorldData data;

    public void tickStart(EnumSet type, Object ... tickData) 
    {

        data = TickHandlerWorldData.worldData;
Теперь вопрос: как получить мою дату на клиент?
 
Норм ты так тем посоздавал. Три дублирующиеся.
Это, ты там поаккуратнее будь.

А теперь поясни к чему тебе эти же данные на каждом из клиентов? Сервера не хватает, чтоли?
Лучше задумку свою раскрой, иначе ты заколебешься по крупицам мод собирать форумом.
 
Нужно получать данные из моей WorldSavedData, для использования части их на клиенте. Проблема в том, что я не знаю как WorldSavedData с сервера передать на клиент. Или получить ее в клиенте.
 
MrCreppo написал(а):
Проблема в том, что я не знаю как WorldSavedData с сервера передать на клиент. Или получить ее в клиенте.
Отправляй нужные данные отдельным пакетом.
WorldSavedData, очевидно, хранит доп.информацию о мире (на самом деле о чём угодно), но хранит инфу он только о серверном мире. И это норма, что на клиенте её не достать просто так.

MrCreppo написал(а):
Код:
              worldData = SSWWorldData.forWorld(world);
            worldData.markDirty();
 worldData = SSWWorldData.forWorld(world);
 worldData.markDirty();
Точно знаешь для чего markDirty() нужен?
 
markDirty() как раз помечает, что мир при следующем сохранении должен сохранить и твои данные. Поэтому этот метод следует вызывать после каждого изменения (лучше делать изменения блоками) данных, чтобы при рестарте сервера ничего не терялось.
А так вполне можешь сохранять все данные в НБТ (как ты и делал в прошлой теме), преобразовывать его в массив байтов (сериализация) и кидать пакетом, на клиенте массив байтов десериализовывать обратно в НБТ. Другой вопрос - эффективность. Сырой набор данных из координат будет ЗНАЧИТЕЛЬНО дешевле передавать пакетами, особенно если блоков много. Тут выбор за тобой.
 
И еще вопрос - я с помощью предмета отправляю пакет с координатами при клике на ПКМ (метод onItemUse), но на сервере получаю You cannot send a bare packet without a target on the server!
Как с этим бороться?
 
А зачем? ПКМ выполняется как на клиенте, так и на сервере. Какой смысл отсылать пакет в тот момент?
 
Назад
Сверху