[1.7.10]NBT теги, можно ли их сохранить?

102
0
Всем примет.
Код:
NBTTagCompound d = player.getEntityData();
d.setInteger("test", 1);
Можно ли сохранить данный тег у игрока, что бы он работал и после перезахода?
 
Agravaine написал(а):
Да, оно и так сохранится, но надо это делать на сервере.
Подскажи тогда как заставить глобальные ивенты выполняться на сервере
Код:
public class GlobalEvents {
    
    @SubscribeEvent
    public void onEntityAttacked(LivingAttackEvent event){
        
        if (!(event.source instanceof EntityDamageSource))
        {return;}
        
        EntityDamageSource dmgSource = (EntityDamageSource) event.source;
        Entity ent = dmgSource.getEntity();
        
        if (!(ent instanceof EntityPlayer))
        {return;}
        
        EntityPlayer player = (EntityPlayer) ent;
        NBTTagCompound d = player.getEntityData();
            
            if (event.source.getDamageType().equals("player")) {
                if (event.entityLiving instanceof EntityZombie) {
                    if (d.getInteger("RPGEXP") > 0) {
                        d.setInteger("RPGEXP", d.getInteger("RPGEXP")+1);
                    } else {
                        d.setInteger("RPGEXP", 1);
                    }
                }
            }
     System.out.println(String.format("RPG EXP %s Player %s", d.getInteger("RPGEXP"), player.getDisplayName()));
}
регистрирую ивент
Код:
MinecraftForge.EVENT_BUS.register(new GlobalEvents());
 
LazyRavenMan написал(а):
Надо еще регистрировать через FMLCommonHandler.instance().bus().register
еще или можно только через FMLCommonHandler.instance().bus().register зарегистрировать?
[merge_posts_bbcode]Добавлено: 31.10.2014 15:50:21[/merge_posts_bbcode]

Сделал две регистрации

MinecraftForge.EVENT_BUS.register(new GlobalEvents());
FMLCommonHandler.instance().bus().register(new GlobalEvents());
ничего не изменилось с перезаходом счетчик обнуляется
[merge_posts_bbcode]Добавлено: 31.10.2014 16:22:48[/merge_posts_bbcode]

Поменял местами

[font=Verdana, Helvetica, Arial, sans-serif]FMLCommonHandler.instance().bus().register(new GlobalEvents());[/font]
[font=Verdana, Helvetica, Arial, sans-serif]MinecraftForge.EVENT_BUS.register(new GlobalEvents());[/font][font=Verdana, Helvetica, Arial, sans-serif] и все заработало.[/font]
 
Можешь регать евент в конструкторе. А потом в методе инициализации инициализировать класс
 
FMLCommonHandler.instance().bus().register для тех событий, класс которых находится в пакете cpw.mods.fml.common.gameevent.
MinecraftForge.EVENT_BUS.register для тех событий, класс которых находится в пакете net.minecraftforge.event.
 
помогите получить тег для игрока d.getInteger("RPGEXP") на стороне сервера.
[merge_posts_bbcode]Добавлено: 31.10.2014 19:04:08[/merge_posts_bbcode]

извиняюсь, за мои донные вопросы. но это как раз те моменты которые я не понимаю.
 
Agravaine написал(а):
Ну так ты и получил же.
не я просто не правельно поставил вопрос, надо выполнить это на стороне сервера и передать полученое значение от сервера в гуи игрока например. я для этого создал отдельную гуи с одним текстом.
 
Agravaine написал(а):
Лучше юзай IExtendedEntityProperties.
Да я только рад был бы, но там ничего не понял из-за того, что на англиском, переводчик очень подводит от гуглла, да и не знаю чем в 1710 стала
@NetworkMod(clientSideRequired=true, serverSideRequired=false, channels = {"tutchannel"}, packetHandler = TutorialPacketHandler.class)
 
Agravaine написал(а):
Убрали.
А тутор есть на 1.7.10.
можешь поделиться ссылкой? Так может если тутор будет только под 1.7.10 а не как там, в верху описано где менять ти чтто под 1.7.2, ниже весь код под 1.5.2, да еще и разбросан не пойми как. Ну для меня не пойми как.
 
В чем ошибка? Решил попробовать передать от сервера клиенту пакет
Код:
    public void onEntityAttacked(LivingAttackEvent event){
        
        if (!(event.source instanceof EntityDamageSource))
        {return;}
        
        EntityDamageSource dmgSource = (EntityDamageSource) event.source;
        Entity ent = dmgSource.getEntity();
        
        if (!(ent instanceof EntityPlayer))
        {return;}
        
        EntityPlayer player = (EntityPlayer) ent;
        NBTTagCompound d = player.getEntityData();
            
            if (event.source.getDamageType().equals("player")) {
                if (event.entityLiving instanceof EntityZombie) {
                    if (d.getInteger("RPGEXP") > 0) {
                        d.setInteger("RPGEXP", d.getInteger("RPGEXP")+1);
                    } else {
                        d.setInteger("RPGEXP", 1);
                    }
                }
            }

            Main.network.sendTo(new SomeMessage(d.getInteger("RPGEXP"), "LOLOLOLOLO"), (EntityPlayerMP) ent);
            System.out.println(String.format("RPG EXP %s Player %s", d.getInteger("RPGEXP"), player.getDisplayName()));
    }
Ругается на вот эту строку в краше
Код:
Main.network.sendTo(new SomeMessage(d.getInteger("RPGEXP"), "LOLOLOLOLO"), (EntityPlayerMP) ent);
[merge_posts_bbcode]Добавлено: 31.10.2014 21:24:34[/merge_posts_bbcode]

А вот сам
SomeMessage.class
Код:
package spellflex.kuroi.rpg.network.packages;

import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;

public class SomeMessage implements IMessage {
    
    private String text;
    private int item2;

    public SomeMessage() { }

    public SomeMessage(int i, String string) {
        this.text = string;
        this.item2 = i;
    }


    @Override
    public void fromBytes(ByteBuf buf) {
        text = ByteBufUtils.readUTF8String(buf);
        item2 = ByteBufUtils.readVarShort(buf);
    }

    @Override
    public void toBytes(ByteBuf buf) {
        ByteBufUtils.writeUTF8String(buf, text);
        ByteBufUtils.writeVarShort(buf, item2);
    }

    public static class Handler implements IMessageHandler<SomeMessage, IMessage> {

        @Override
        public IMessage onMessage(SomeMessage message, MessageContext ctx) {
            System.out.println(String.format("%s %s from %s", message.item2, message.text, ctx.getServerHandler().playerEntity.getDisplayName()));
            return null;
        }
    }

}

[merge_posts_bbcode]Добавлено: 31.10.2014 21:25:26[/merge_posts_bbcode]

вот так зарегистрированы пакеты в главном классе
Код:
           network = NetworkRegistry.INSTANCE.newSimpleChannel("MyChannel");
           network.registerMessage(SomeMessage.Handler.class, SomeMessage.class, 0, Side.CLIENT);
           network.registerMessage(UpWeaponsPackages.Handler.class, UpWeaponsPackages.class, 0, Side.SERVER);

[merge_posts_bbcode]Добавлено: 31.10.2014 21:29:27[/merge_posts_bbcode]

Похоже ему не нравится [font=monospace, sans-serif]([/font][font=monospace, sans-serif]EntityPlayerMP[/font][font=monospace, sans-serif])[/font][font=monospace, sans-serif] ent, помогите правильно заполнить данный пункт.[/font]
 
Назад
Сверху