Где хранить данные нтб для использования в onUpdate?

7,166
329
1,544
Oldestkon:Зачемзачемзачем. Зачем ты постоянно читаешь с НБТ, если данные и так хранятся в ОЗУ? Ой-ей.

Далее, зачем же ты в апдейте записываешь НБТ? Не заставляй людей грустить, не делай лаги. Записывай в НБТ только тогда, когда надо - а именно, в специально выделенных методах - saveToNBT/loadFromNBT.

Вот, собственно, это сообщение заставило меня об этом задуматься. А мне надо, чтобы в методе onUpdate применялось значение из нтб(имя игрока). Что посоветуете?
 
Код:
@Override
public void onUpdate(ItemStack is, World world, Entity entity, int par4, boolean par5) {
    if (entity instanceof EntityPlayer) {
        EntityPlayer player = (EntityPlayer)entity;

        NBTTagCompound nbt = is.getTagCompound();

        //if (nbt == null) nbt = new NBTTagCompound();

        if (nbt != null && !nbt.hasKey("playerName")) {
            nbt.setString("playerName", player.getCommandSenderName());
            is.setTagCompound(nbt);
        }

    }
}
 
не, не, мне надо наоборот: прочитать, а устанавливается при крафте...
то есть: ntb.getString()?
[merge_posts_bbcode]Добавлено: 12.04.2015 23:04:51[/merge_posts_bbcode]

но, это вроде как не оптимально.
 
Код:
if (nbt != null && nbt.hasKey("playerName")) {
String username = nbt.getString("playerName");
}
Код:
String username = null;

if (nbt != null && nbt.hasKey("playerName")) {
username = nbt.getString("playerName");
}

if (username != null) {}
Не знаю зачем тебе подобное и почему тебе не оптимально. (И вряд-ли бы я захотел.)
 
Эм, ты дальше прочитай сообщение, из которого вынул эту цитату.
 
В том и дело, что не понял
NBT Чего? TileEntity, EntityPlayer или ItemStack. (Из World'а я ещё не научился брать.)
[merge_posts_bbcode]Добавлено: 12.04.2015 18:48:56[/merge_posts_bbcode]

TileEntity
Код:
public class TileEntityChair extends TileEntity {

    private int type;

    public TileEntityChair() {
        type = 0;
    }

    public int getType() {
        return type;
    }

    public void setType(int i) {
        type = i;
    }

    @Override
    public void readFromNBT(NBTTagCompound nbt) {
        super.readFromNBT(nbt);
        if (nbt.hasKey("Type")) type = nbt.getInteger("Type");
    }

    @Override
    public void writeToNBT(NBTTagCompound nbt) {
        super.writeToNBT(nbt);
        nbt.setInteger("Type", type);
    }

    public Packet getDescriptionPacket() {
        NBTTagCompound nbt = new NBTTagCompound();
        writeToNBT(nbt);
        return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 0, nbt);
    }

    public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) {
        readFromNBT(packet.func_148857_g());
    }

}
Из игрока и итемСтакомне не помогу подобным образом.
 
мне в итем стаке
 
Назад
Сверху