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

Версия 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 написал(а):
Посмотри в какой шине регистрируется событие конструкции, я просто на него забил тогда x)
хм.. get метод, вроде, нормальный

Во, но температура на гуи не та
 
1,470
19
189
MJaroslav написал(а):
То есть, всё пашет, но гуи лжёт? Так исправляй его)

И как же?) Хоть наводку дай
 
1,201
37
238
Не знаю, скорее всего дело в получении значения температуры в методе, где рисуется цифра

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

Может с пакетами нарукожопил, возможно, нужно запрашивать пакет с сервера при рисовании цифры.

Странно, в изменение температуры отображение работает нормально, а в гуи что бы нормальное было значение нужно поменять биом.(Надеюсь понятно)
 
1,470
19
189
MJaroslav написал(а):
Так у тебя температура от биома и меняется, не?

Код:
@SubscribeEvent
 public void onPlayerTick(PlayerTickEvent event) {
 if (event.player != null && !event.player.worldObj.isRemote) {
 int x = (int) event.player.posX;
 int z = (int) event.player.posZ;
 BiomeGenBase biome = event.player.worldObj.getBiomeGenForCoords(x, z);
 ExtendedPlayer ep = ExtendedPlayer.get(event.player);
 //Температуры
 if (biome == BiomeGenBase.forest) {
 ep.setTemp(36.2, event.player);
 }
 if (biome == BiomeGenBase.desert) {
 ep.setTemp(37.0, event.player);
 }
 if(RCC.DEBUG) {
 System.out.println(ep.getTemp());
 }
 }
 }
Там так
 
1,201
37
238
Ну.. если ты в лесу, температура 36.2, если в пустыне - 37, в других случаях, остаётся та, что была.

/Кстати, сделай определение температуры биома не через его экземпляр и дерево if'ов, а через температуру и влажность биома (найди в BiomeGenBase)/
 
1,470
19
189
MJaroslav написал(а):
Ну.. если ты в лесу, температура 36.2, если в пустыне - 37, в других случаях, остаётся та, что была.

Я не про это, в этом методе всё работает, а в методе гуи нет.
 
1,470
19
189
MJaroslav написал(а):
/Кстати, сделай определение температуры биома не через его экземпляр и дерево if'ов, а через температуру и влажность биома (найди в BiomeGenBase)/

Нашёл float getFloatTemperature(int p_150564_1_, int p_150564_2_, int p_150564_3_), что за аргументы


Кстати, а чем дерево if'ов плохо?
 
1,201
37
238
Nix13 написал(а):
MJaroslav написал(а):
/Кстати, сделай определение температуры биома не через его экземпляр и дерево if'ов, а через температуру и влажность биома (найди в BiomeGenBase)/

Нашёл float getFloatTemperature(int p_150564_1_, int p_150564_2_, int p_150564_3_), что за аргументы


Кстати, а чем дерево if'ов плохо?



Вот будут у тебя другие биомы, скажем, из модов других, вот поймёшь.

Да и, к примеру, есть OCEAN и DEEP_OCEAN, вроде бы океан, а if'ов два...

Да, юзай temperature (температура) и humidity (влажность) у биомов, по их значениям определяй холодные и тёплые биомы (сразу (!) все). Значения для каждого биома можно посмотреть в самом классе BiomeGenBase.

Ещё для температуры можешь проверять дождь (ну.. и небо над игроком), горючие блоки рядом и т. д., но это ты уже сам. /Опять же, чем enviromine хуже?/
 
1,470
19
189
1,201
37
238
Thunder написал(а):
А на клиент тогда что приходит? И еще, каждый тик слать пакет это плохо

В этом случае лечится, думаю, проверкой на неизменность температуры перед сетом новой.
 
1,470
19
189
MJaroslav написал(а):
Nix13 написал(а):
Может переписать пакеты?

Дыа, всё с нуля напиши, особенно ту часть, которая при просмотре на главное меню, флудит в консоль ;p

Это отключается(как и весь дебаг) XD
 
Сверху