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

Версия 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 написал(а):
Nix13 написал(а):
Это отключается(как и весь дебаг) XD

Я такой дебаг в конфиг выношу, а не final boolean)

Если игрок не знает что не работает у меня в моде, то это проблемы игрока. :D


Теперь начало писать это
Код:
[01:22:43] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 100 packets have leaked. Top offenders
[01:22:43] [Client thread/ERROR] [FML]: rcc : 100
[01:22:46] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 200 packets have leaked. Top offenders
[01:22:46] [Client thread/ERROR] [FML]: rcc : 200
[01:22:50] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 300 packets have leaked. Top offenders
[01:22:50] [Client thread/ERROR] [FML]: rcc : 300

Я так понимаю пакеты пропадают...
Код:
public class ExtendedPlayer implements IExtendedEntityProperties {

 public final static String EXT_PROP_NAME = "ExtendedPlayer";

 private final EntityPlayer player;

 private double currentTemp;

 public ExtendedPlayer(EntityPlayer player)
 {
 this.player = player;
 this.currentTemp = 36.6;
 }
 
 public static final void register(EntityPlayer player)
 {
 player.registerExtendedProperties(ExtendedPlayer.EXT_PROP_NAME, new ExtendedPlayer(player));
 }

 @Override
 public void saveNBTData(NBTTagCompound compound)
 {
 NBTTagCompound properties = new NBTTagCompound();
 
 properties.setDouble("PlayerTemp", currentTemp);
 
 compound.setTag(EXT_PROP_NAME, properties);
 }

 @Override
 public void loadNBTData(NBTTagCompound compound)
 {
 NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME);
 this.currentTemp = properties.getDouble("PlayerTemp");
 System.out.println("[TUT PROPS] PlayerTemp from NBT: " + this.currentTemp);
 }

 @Override
 public void init(Entity entity, World world)
 {
 }

 public void setPlayerTemp(double count, EntityPlayer player) {
 this.currentTemp = count;
 this.syncTemp(player);
 }
 
 public double getPlayerTemp() {
 return this.currentTemp;
 }
 
 public void syncTemp(EntityPlayer player) {
 if (!player.worldObj.isRemote) {
 NetworkHandler.INSTANCE.sendTo(new SyncPlayerPropsMessage(this), (EntityPlayerMP) player);
 }
 }

 public static final ExtendedPlayer get(EntityPlayer player) {
 IExtendedEntityProperties props = player.getExtendedProperties(ExtendedPlayer.EXT_PROP_NAME);
 ExtendedPlayer eplayer = null;
 if (props != null && props instanceof ExtendedPlayer) {
 eplayer = (ExtendedPlayer) props;
 } else {
 eplayer = new ExtendedPlayer(player);
 player.registerExtendedProperties(EXT_PROP_NAME, eplayer);
 }
 return eplayer;
 }
}

Код:
public class SyncPlayerPropsMessage extends AbstractPacket<SyncPlayerPropsMessage> implements IMessage
{
 private double playerTemp;

 public SyncPlayerPropsMessage() {
 }
 
 public SyncPlayerPropsMessage(ExtendedPlayer data) {
 this.playerTemp = data.getPlayerTemp();
 }

 @Override
 public void fromBytes(ByteBuf buf) {
 playerTemp = buf.readDouble();
 }

 @Override
 public void toBytes(ByteBuf buf) {
 buf.writeDouble(playerTemp);
 }

 @Override
 public void handleClientSide(SyncPlayerPropsMessage message, EntityPlayer player) {
 if (player != null && player.worldObj != null) {
 ExtendedPlayer.get(player).setPlayerTemp(message.playerTemp, player);
 }
 }

 @Override
 public void handleServerSide(SyncPlayerPropsMessage message, EntityPlayer player) {
 if (player != null && player.worldObj != null) {
 ExtendedPlayer.get(player).setPlayerTemp(message.playerTemp, 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()
   {
   }
   
   //Метод который отправляет пакеты всем на клиенте/сервере(Зависит от ситуации)
   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 static void registerPackets() {
   NETWORK.registerMessage(SyncPlayerPropsMessage.class, SyncPlayerPropsMessage.class, dec++, Side.SERVER);//Регистрация пакета для работы на серверной стороне.
   }
}
 
1,200
37
237
CoomingSoon написал(а):
А чего у тебя и клиент, и сервер присваивает температуру?

Я ему сказал попробовать.


Nix13 написал(а):
Код:
NETWORK.registerMessage(SyncPlayerPropsMessage.class, SyncPlayerPropsMessage.class, dec++, Side.SERVER);//Регистрация пакета для работы на серверной стороне.

А разве регистрация не на ту сторону, куда пакет приходит? /Я так и не разобрался, но мои пакеты с сервера зарегистрированы на Side.CLIENT/
 
1,470
19
189
MJaroslav написал(а):
[quote pid='114135' dateline='1509226449']
Код:
NETWORK.registerMessage(SyncPlayerPropsMessage.class, SyncPlayerPropsMessage.class, dec++, Side.SERVER);//Регистрация пакета для работы на серверной стороне.

А разве регистрация не на ту сторону, куда пакет приходит? /Я так и не разобрался, но мои пакеты с сервера зарегистрированы на Side.CLIENT/
[/quote]

Ну да...

Но гуи сломано
 
1,470
19
189
Thunder написал(а):
Пакет приходит на клиент, значит CLIENT


Уже давно бы с нуля написал, нежели рылся в костылях и искал иголку



Я с нуля переписывал :/
 
1,200
37
237
1,470
19
189
MJaroslav написал(а):
Nix13 написал(а):
Thunder написал(а):
Пакет приходит на клиент, значит CLIENT


Уже давно бы с нуля написал, нежели рылся в костылях и искал иголку



Я с нуля переписывал :/



В том числе, сам мод?


Его-то зачем?
 
1,200
37
237
Nix13 написал(а):

Это также как фиксить баги на винде: вместо того, чтобы переустановить программу (и словить тот же баг), лучше переустановить винду (и ничего не пофикситься).
 
1,470
19
189
MJaroslav написал(а):
Nix13 написал(а):

Это также как фиксить баги на винде: вместо того, чтобы переустановить программу (и словить тот же баг), лучше переустановить винду (и ничего не пофикситься).

Буду делать везде синхронизацию


Я сделал...


It's Alive!


В методе получения температуры делаю синхронизацию
 
Сверху