ExtendedPlayer не работает

Статус
В этой теме нельзя размещать новые ответы.
Версия Minecraft
1.7.10
1,470
19
189
Вот код класса, который не работает. Что можно сделать?
При попытки использовать метод getTemp в gui, крашит
ExtendedPlayer
Код:
public final static String EXT_PROP_NAME = "ExtendedPlayer";
 
 public final EntityPlayer player;
 
 private double currentTemp, normalTemp, highTemp, lowTemp;
 
 public ExtendedPlayer(EntityPlayer player) {
 this.player = player;
 this.currentTemp = this.normalTemp = 36.6;
 }
 
 public static final void register(EntityPlayer player)
 {
 player.registerExtendedProperties(ExtendedPlayer.EXT_PROP_NAME, new ExtendedPlayer(player));
 }
 
 public static final ExtendedPlayer get(EntityPlayer player)
 {
 return (ExtendedPlayer) player.getExtendedProperties(EXT_PROP_NAME);
 }
 
 @Override
 public void saveNBTData(NBTTagCompound compound) {
 NBTTagCompound properties = new NBTTagCompound();
 
 properties.setDouble("CurrentTemp", this.currentTemp);
 properties.setDouble("LowTemp", this.lowTemp);
 properties.setDouble("HighTemp", this.highTemp);
 properties.setDouble("NormalTemp", this.normalTemp);
 
 compound.setTag(EXT_PROP_NAME, properties); 
 }

 @Override
 public void loadNBTData(NBTTagCompound compound) {
 NBTTagCompound properties = new NBTTagCompound();
 
 properties.getDouble("CurrentTemp");
 properties.getDouble("LowTemp");
 properties.getDouble("HighTemp");
 properties.getDouble("NormalTemp");
 
 if(RCC.DEBUG) {
 Log.info("Temp from NBT:" + this.currentTemp);
 }
 }

 @Override
 public void init(Entity entity, World world) {
 
 }
 
 public boolean consumeTemp(double amount) {
 boolean sufficient = amount <= this.currentTemp;
 
 this.currentTemp -= (amount < this.currentTemp ? amount : this.currentTemp);

 return sufficient;
 }
 
 public boolean addTemp(double amount) {
 boolean sufficient = amount <= this.currentTemp;
 
 this.currentTemp += (amount < this.currentTemp ? amount : this.currentTemp);

 return sufficient;
 }
 
 public double getTemp() {
 return this.currentTemp;
 }
 
Решение
Миллион туторов есть и по IEEP, и по пакетом. Не можешь исправить синтаксическую ошибку в коде - иди учи java. За время существования темы уже мог бы не просто перебрать все туторы и сделать, что нужно, но и досконально изучить, как все работает внутри.

Icosider

Kotliner
Администратор
3,603
99
664
Nix13Chanel написал(а):
У кого есть код(ссылка) рабочего кода для синхронизации способностей для 1.7.10?
Что сложного? Создаёшь IEEP на клиенте, при получении пакета достаёшь свой IEEP и делаешь setMana(message.mana); которые пришли с сервера, всё!
 

Icosider

Kotliner
Администратор
3,603
99
664
Код:
public class ManaSync implements IMessage, IMessageHandler
{
    /* Почему байт? Да потому что "микрооптимизация" */
    private byte mana;
    
    @Override
    /* Получаем данные с сервера */
    public void fromBytes(ByteBuf buf)
    {
        mana = buf.readByte();
    }

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

    @Override
    public IMessage onMessage(IMessage message, MessageContext ctx)
    {
        // На клиенте устанавливаем ману из серверных данных
        if (ctx.side.isClient())
        {
            mana = message.mana;
        } 
        else //На сервере добавляем ману в пакет.
        {
            mana = ctx.getServerHandler().playerEntity.getExtendedProperties("mana").mana;
        }
        return null;
    }
}
На вот, за работоспособность не отвечаю, но суть должна быть понятна.
 
1,470
19
189
Ivasik написал(а):
Код:
public class ManaSync implements IMessage, IMessageHandler
{
    /* Почему байт? Да потому что "микрооптимизация" */
    private byte mana;
    
    @Override
    /* Получаем данные с сервера */
    public void fromBytes(ByteBuf buf)
    {
        mana = buf.readByte();
    }

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

    @Override
    public IMessage onMessage(IMessage message, MessageContext ctx)
    {
        // На клиенте устанавливаем ману из серверных данных
        if (ctx.side.isClient())
        {
            mana = message.mana;
        } 
        else //На сервере добавляем ману в пакет.
        {
            mana = ctx.getServerHandler().playerEntity.getExtendedProperties("mana").mana;
        }
        return null;
    }
}
На вот, за работоспособность не отвечаю, но суть должна быть понятна.

Код:
mana = message.mana;
Подчёркивает поле mana после message

Код:
mana = ctx.getServerHandler().playerEntity.getExtendedProperties("mana").mana;
Подчёркивает поле mana после [font=Monaco, Consolas, Courier, monospace]getExtendedProperties("[/font][font=Monaco, Consolas, Courier, monospace]mana")[/font]
 

Icosider

Kotliner
Администратор
3,603
99
664
Nix13Chanel написал(а):
Ivasik написал(а):
Код:
public class ManaSync implements IMessage, IMessageHandler
{
    /* Почему байт? Да потому что "микрооптимизация" */
    private byte mana;
    
    @Override
    /* Получаем данные с сервера */
    public void fromBytes(ByteBuf buf)
    {
        mana = buf.readByte();
    }

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

    @Override
    public IMessage onMessage(IMessage message, MessageContext ctx)
    {
        // На клиенте устанавливаем ману из серверных данных
        if (ctx.side.isClient())
        {
            mana = message.mana;
        } 
        else //На сервере добавляем ману в пакет.
        {
            mana = ctx.getServerHandler().playerEntity.getExtendedProperties("mana").mana;
        }
        return null;
    }
}
На вот, за работоспособность не отвечаю, но суть должна быть понятна.

Код:
mana = message.mana;
Подчёркивает поле mana после message

Код:
mana = ctx.getServerHandler().playerEntity.getExtendedProperties("mana").mana;
Подчёркивает поле mana после [font=Monaco, Consolas, Courier, monospace]getExtendedProperties("[/font][font=Monaco, Consolas, Courier, monospace]mana")[/font]
Это у тебя переменная должна быть-_-
 
1,470
19
189

Icosider

Kotliner
Администратор
3,603
99
664
Nix13Chanel написал(а):
Ivasik написал(а):
Nix13Chanel написал(а):
Если меняю на temp(она есть в ExtendedPlayer) не меняет ничего

Так кастуй свой IEEP.

Это как?
[font=Monaco, Consolas, Courier, monospace]IEEPCustom name = (IEEPCustom) [/font][font=Monaco, Consolas, Courier, monospace][font=Monaco, Consolas, Courier, monospace]ctx.getServerHandler().playerEntity.getExtendedProperties([/font][/font][font=Monaco, Consolas, Courier, monospace][font=Monaco, Consolas, Courier, monospace]"mana"[/font][/font][font=Monaco, Consolas, Courier, monospace][font=Monaco, Consolas, Courier, monospace]);[/font][/font]
 
1,470
19
189

Icosider

Kotliner
Администратор
3,603
99
664
1,470
19
189
Ivasik написал(а):
Nix13Chanel написал(а):
Ivasik написал(а):
Nix13Chanel написал(а):
:D теперь только в message подчёркивает

Код пакета покажи.

TempSync?
Ну да, если это у тебя пакет.

Какой класс должен наследовать пакет? AbstractPacket?
 

Icosider

Kotliner
Администратор
3,603
99
664
Nix13Chanel написал(а):
Ivasik написал(а):
Nix13Chanel написал(а):
Ivasik написал(а):
Nix13Chanel написал(а):
:D теперь только в message подчёркивает

Код пакета покажи.

TempSync?
Ну да, если это у тебя пакет.

Какой класс должен наследовать пакет? AbstractPacket?

Я тебе уже скинул готовый класс, просто поменяй значения и переменные.
 
1,470
19
189
Код:
package com.rcp.rcc.temp;

import com.rcp.rcc.player.ExtendedPlayer;

import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;

public class TempSync implements IMessage, IMessageHandler {

 private byte temp;
   
   @Override
   /* Получаем данные с сервера */
   public void fromBytes(ByteBuf buf)
   {
       temp = buf.readByte();
   }

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

   @Override
   public IMessage onMessage(IMessage message, MessageContext ctx)
   {
       // На клиенте устанавливаем ману из серверных данных
       if (ctx.side.isClient())
       {
           temp = message.temp;
       } 
       else //На сервере добавляем ману в пакет.
       {
           ExtendedPlayer temp = (ExtendedPlayer) ctx.getServerHandler().playerEntity.getExtendedProperties("temp");
       }
       return null;
   }
 
}
 

Icosider

Kotliner
Администратор
3,603
99
664
В isClient:
ExtendedPlayer temp = (ExtendedPlayer) Minecraft.getMinecraft().theplayer.getExtendedProperties("temp");
set(message.temp); //set это твой метод в extendedPlayer
isClient else:
ExtendedPlayer temp = (ExtendedPlayer) ctx.getServerHandler().playerEntity.getExtendedProperties("temp");
this.temp = getTemp();

Ах да, и желательно сделать конструктор. Забыл про него.
 
1,470
19
189
Так?
Код:
public class TempSync implements IMessage, IMessageHandler {

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

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

	   @Override
	   public IMessage onMessage(IMessage message, MessageContext ctx)
	   {
	       // На клиенте устанавливаем ману из серверных данных
	       if (ctx.side.isClient())
	       {
	    	   ExtendedPlayer temp = (ExtendedPlayer) Minecraft.getMinecraft().theplayer.getExtendedProperties("temp");
	    	   set(message.temp);
	       } 
	       else //На сервере добавляем ману в пакет.
	       {
	    	   ExtendedPlayer temp = (ExtendedPlayer) ctx.getServerHandler().playerEntity.getExtendedProperties("temp");
	    	   this.temp = getTemp();
	       }
	       return null;
	   }
	
}

temp и getTemp() подчёркивает
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху