Температура равна нулю

Версия Minecraft
1.7.10
1,470
19
189
Что-то у меня пакеты не работают, температуру нулевую возвращает.
Код:
public class NetworkHandler {
 
 public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel("RCCChannel");
 private static int dec;

 public NetworkHandler()
 {
 NETWORK.registerMessage(TempSync.class, TempSync.class, 0, Side.CLIENT);
 }
   
 //Метод который отправляет пакеты всем на клиенте/сервере(Зависит от ситуации)
 public void sendToAll(final IMessage message) 
 {
 NETWORK.sendToAll(message);
 }

   //Метод который отправляет пакет конкретному игроку.
   public void sendTo(final IMessage message, final EntityPlayerMP player) 
   {
       NETWORK.sendTo(message, player);
   }

   //Наш пользовательский метод, который использует LocationDoublePacket для упрощения отправки пакетов методом sendToAllAround.
   public void sendToAllAround(final LocationDoublePacket message, final World world) 
   {
       sendToAllAround(message, message.getTargetPoint(world));
   }

   //Метод который отправляет пакет всем игрокам от отправителя, в определённом радиусе.
   public void sendToAllAround(final IMessage message, final NetworkRegistry.TargetPoint point) 
   {
       NETWORK.sendToAllAround(message, point);
   }

   //Метод который отправляет пакет в определённое измерение.
   public void sendToDimension(final IMessage message, final int dimensionId) 
   {
       NETWORK.sendToDimension(message, dimensionId);
   }

   //Метод который отправляет пакет на сервер.
   public void sendToServer(final IMessage message)
   {
       NETWORK.sendToServer(message);
   }
}

Код:
public class ExtendedPlayer implements IExtendedEntityProperties {
 
 private double temp;
 
 @Override
 public void saveNBTData(NBTTagCompound compound) {
 NBTTagCompound tag = new NBTTagCompound(); 
 tag.setDouble("temp", temp);
    compound.setTag("customAbilities", tag);
 }
 @Override
 public void loadNBTData(NBTTagCompound compound) {
 NBTTagCompound tag = (NBTTagCompound)compound.getTag("customAbilities");
 temp = tag.getDouble("temp");
 }

 @Override
 public void init(Entity entity, World world) {
 this.temp = 36.6;
 }
 
 public void setTemp(double count, final EntityPlayer player) {
 if(RCC.DEBUG) {
 System.out.println("Count: " + count + "\n" + "Temp: " + temp);
 }
 this.temp = count;
 syncTemp(player);
 }
 
 public double getTemp() {
 return this.temp;
 }
 
 public void syncTemp(final EntityPlayer player)
 {
 if(!player.getEntityWorld().isRemote) {
 NetworkHandler.NETWORK.sendTo(new TempSync(this), (EntityPlayerMP) player);
 }
 } 
}

Код:
public class TempSync extends AbstractPacket<TempSync> {

 private double temp;
 
 public TempSync(ExtendedPlayer data){
 this.temp = data.getTemp();
 }
   
 @Override
 /* Получаем данные с сервера */
 public void fromBytes(ByteBuf buf)
 {
 temp = buf.readDouble();
 }

 @Override
 /* Записываем данные в пакет для клиента */
 public void toBytes(ByteBuf buf)
 {
 buf.writeDouble(temp);
 }

 @Override
 public void handleClientSide(EntityPlayer player) {
 if(player != null && player.worldObj != null) {
 ExtendedPlayer data = (ExtendedPlayer) Minecraft.getMinecraft().thePlayer.getExtendedProperties("temp");
 data.setTemp(temp, player);
 }
 }
 
 @Override
 public void handleServerSide(EntityPlayerMP player) {
 
 }
}
 
Решение
Короче, я всё это пофиксил, но вот со своими костылями (и моими, ибо на костылях получатся только костыли) разбирайся сам:

https://www.dropbox.com/s/3uefblr4kxuklbj/TempFix.zip?dl=0

/гита у тебя нет, так что лови мусор-коробку/




Кстати, зачем писать температуру в модах, если есть энвиромайн? Как раз на 1.7.10.
1,470
19
189
MJaroslav написал(а):
Значение temp нужно брать из пришедшего пакета, а не из нового.

/Вроде, понятно написал/

Какой из них пришедший? 
У меня такой код, что я сам не разбираюсь...


MJaroslav написал(а):
Значение temp нужно брать из пришедшего пакета, а не из нового.

/Вроде, понятно написал/

Какой из них пришедший? 
У меня такой код, что я сам не разбираюсь...
 
1,200
37
237
Nix13 написал(а):
MJaroslav написал(а):
Значение temp нужно брать из пришедшего пакета, а не из нового.

/Вроде, понятно написал/

Какой из них пришедший? 
У меня такой код, что я сам не разбираюсь...


MJaroslav написал(а):
Значение temp нужно брать из пришедшего пакета, а не из нового.

/Вроде, понятно написал/

Какой из них пришедший? 
У меня такой код, что я сам не разбираюсь...



Ну... у меня пакет приходил в метод обработчика, а в качестве его я использовал, вроде, тот, что в IMessage
 
1,470
19
189
Ivasik написал(а):
Ты синхронизацию не вызываешь.
Код:
@SubscribeEvent
 public void PlayerLoggedIn(PlayerLoggedInEvent e) {
 if(!e.player.worldObj.isRemote) {
 ExtendedPlayer props = new ExtendedPlayer();
 props.syncTemp((EntityPlayerMP)e.player);
 }
 }

Это в EventHadler'е
 
1,200
37
237
Мог бы ответить кодом, но все тестовые пакеты я удалил из-за ненадобности


А, не, код есть.

Вот мой (моё тут только использование взятого из тутора пакета) костыль, не забудь про класс абстрактного (посмотри его тоже, короче).


Тык
 
1,470
19
189
Код:
public class NetworkHandler {
 public static final NetworkHandler INSTANCE = new NetworkHandler();
 public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel(RCC.MODID);
 private static int dec;

 public NetworkHandler()
 {
 NETWORK.registerMessage(TempSync.class, TempSync.class, dec++, Side.CLIENT);
 }
   
 //Метод который отправляет пакеты всем на клиенте/сервере(Зависит от ситуации)
 public void sendToAll(final IMessage message) 
 {
 NETWORK.sendToAll(message);
 }

   //Метод который отправляет пакет конкретному игроку.
   public void sendTo(final IMessage message, final EntityPlayerMP player) 
   {
       NETWORK.sendTo(message, player);
   }

   //Наш пользовательский метод, который использует LocationDoublePacket для упрощения отправки пакетов методом sendToAllAround.
   public void sendToAllAround(final LocationDoublePacket message, final World world) 
   {
       sendToAllAround(message, message.getTargetPoint(world));
   }

   //Метод который отправляет пакет всем игрокам от отправителя, в определённом радиусе.
   public void sendToAllAround(final IMessage message, final NetworkRegistry.TargetPoint point) 
   {
       NETWORK.sendToAllAround(message, point);
   }

   //Метод который отправляет пакет в определённое измерение.
   public void sendToDimension(final IMessage message, final int dimensionId) 
   {
       NETWORK.sendToDimension(message, dimensionId);
   }

   //Метод который отправляет пакет на сервер.
   public void sendToServer(final IMessage message)
   {
       NETWORK.sendToServer(message);
   }
}

Код:
public class TempSync extends AbstractPacket<TempSync> {

 private double temp;
 
 public TempSync(ExtendedPlayer data){
 this.temp = data.getTemp();
 }
   
 @Override
 /* Получаем данные с сервера */
 public void fromBytes(ByteBuf buf)
 {
 temp = buf.readDouble();
 }

 @Override
 /* Записываем данные в пакет для клиента */
 public void toBytes(ByteBuf buf)
 {
 buf.writeDouble(temp);
 }

 @Override
 public void handleClientSide(TempSync message, EntityPlayer player) {
 if(player != null && player.worldObj != null) {
 ExtendedPlayer data = (ExtendedPlayer) Minecraft.getMinecraft().thePlayer.getExtendedProperties("temp");
 this.temp = message.temp;
 data.setTemp(temp, player);
 } 
 }

 @Override
 public void handleServerSide(TempSync message, EntityPlayer player) {
 
 }
}
 Поправил классы, но это не дало результата


Код:
public class NetworkHandler {
 public static final NetworkHandler INSTANCE = new NetworkHandler();
 public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel(RCC.MODID);
 private static int dec;

 public NetworkHandler()
 {
 NETWORK.registerMessage(TempSync.class, TempSync.class, dec++, Side.CLIENT);
 }
   
 //Метод который отправляет пакеты всем на клиенте/сервере(Зависит от ситуации)
 public void sendToAll(final IMessage message) 
 {
 NETWORK.sendToAll(message);
 }

   //Метод который отправляет пакет конкретному игроку.
   public void sendTo(final IMessage message, final EntityPlayerMP player) 
   {
       NETWORK.sendTo(message, player);
   }

   //Наш пользовательский метод, который использует LocationDoublePacket для упрощения отправки пакетов методом sendToAllAround.
   public void sendToAllAround(final LocationDoublePacket message, final World world) 
   {
       sendToAllAround(message, message.getTargetPoint(world));
   }

   //Метод который отправляет пакет всем игрокам от отправителя, в определённом радиусе.
   public void sendToAllAround(final IMessage message, final NetworkRegistry.TargetPoint point) 
   {
       NETWORK.sendToAllAround(message, point);
   }

   //Метод который отправляет пакет в определённое измерение.
   public void sendToDimension(final IMessage message, final int dimensionId) 
   {
       NETWORK.sendToDimension(message, dimensionId);
   }

   //Метод который отправляет пакет на сервер.
   public void sendToServer(final IMessage message)
   {
       NETWORK.sendToServer(message);
   }
}

Код:
public class TempSync extends AbstractPacket<TempSync> {

 private double temp;
 
 public TempSync(ExtendedPlayer data){
 this.temp = data.getTemp();
 }
   
 @Override
 /* Получаем данные с сервера */
 public void fromBytes(ByteBuf buf)
 {
 temp = buf.readDouble();
 }

 @Override
 /* Записываем данные в пакет для клиента */
 public void toBytes(ByteBuf buf)
 {
 buf.writeDouble(temp);
 }

 @Override
 public void handleClientSide(TempSync message, EntityPlayer player) {
 if(player != null && player.worldObj != null) {
 ExtendedPlayer data = (ExtendedPlayer) Minecraft.getMinecraft().thePlayer.getExtendedProperties("temp");
 this.temp = message.temp;
 data.setTemp(temp, player);
 } 
 }

 @Override
 public void handleServerSide(TempSync message, EntityPlayer player) {
 
 }
}
 Поправил классы, но это не дало результата
 
1,200
37
237
Проверь, отправляется ли пакет (тыкни куда-то лог сообщение), какие значения приходят, особенно проверь значения игрока, вдруг он null. Кстати, ты пакет-то отсылаешь (правильно ли)? По своему примеру скажу, что я долго с ними возился...
 
1,470
19
189
Успех! Краш.
Код:
java.lang.NullPointerException: Unexpected error
 at com.rcp.rcc.temp.TempSync.<init>(TempSync.java:29)

Код
Код:
NBTTagCompound compound = new NBTTagCompound();
 ExtendedPlayer.get(player).saveNBTData(compound);
 
1,470
19
189
MJaroslav написал(а):
Я тут не причём :D


Забей, на утро моментом (ну почти) исправишь эту вещь, говорю, как испытавший на себе это


О, нет. Я уже 3 недели это делаю(с постоянными забивами)
 
1,470
19
189
1,200
37
237
Ля, ты зачем всё упаковал в папку 'src'? Я подумал, что ты мне только код скинул и я создавал воркспейс свой..


И папка 'build' не нужна, как и 'bin'.

Блин, всё, что тебе нужно:

'src/', 'gradle/', 'eclipse/', 'gradlew', 'gradlew.bat'. 'build.gradle', ну и 'libs/', если используешь.
 
Сверху