Posted February 19, 20169 yr Hi, I made an Extended Entity Properties because I want to save some data but when the player dies, the data is not saved and I don't know why. Code: https://www.github.com/DiabolicaTrix/MinecraftLifeRPG
February 19, 20169 yr Author Oh, I forgot, the EEP is only saved on server side. I tried to put a Sysout in my debugItem and the output is: [10:47:10] [Client thread/INFO] [sTDOUT]: [me.diabolicatrix.items.ItemDebug:onItemUse:49]: 0 ! [10:47:10] [server thread/INFO] [sTDOUT]: [me.diabolicatrix.items.ItemDebug:onItemUse:49]: 2 ! and here is my onPlayerClone event: @SubscribeEvent public void onPlayerClone(PlayerEvent.Clone event) { if(event.wasDeath) { NBTTagCompound compound = new NBTTagCompound(); PlayerEEP.get(event.original).saveNBTData(compound); PlayerEEP.get(event.entityPlayer).loadNBTData(compound); } }
February 19, 20169 yr It's worth noting that IEEP has been deprecated in favour of the Capability system and may eventually be removed. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
February 19, 20169 yr Author @diesieben07 No it's not, I want the EEP to be synced with the client @Choonster Oh, I didn't know, I'll give it a try.
February 19, 20169 yr @diesieben07 No it's not, I want the EEP to be synced with the client That doesn't happen automatically. If code on one side (like server) is changing the EEP without similar code running on client, then you'd have to use a custom packet I think to sync it. Also, are you doing this for your own custom entity or adding EEP for vanilla entities. For your own custom entities you don't really need to use the EEP system, but rather can directly override the writeToNBT() and readFromNBT() methods. But again, to sync client to server you need a packet. Check out my tutorials here: http://jabelarminecraft.blogspot.com/
February 19, 20169 yr Author Ok, I tried with the Capabilities but it's doing the exact same thing, the value is saved server-side only. https://github.com/DiabolicaTrix/MinecraftLifeRPG/blob/master/src/main/java/me/diabolicatrix/other/PlayerCapabilities.java
February 19, 20169 yr Author Sorry, I misexplained. The AttachCapabilitiesEvent is called before the PlayerCloneEvent on client-side but it works on server-side. [15:30:19] [server thread/INFO] [sTDOUT]: [me.diabolicatrix.events.CommonEventHandler:onAttachCapability:62]: Attach Server [15:30:19] [server thread/INFO] [sTDOUT]: [me.diabolicatrix.events.CommonEventHandler:onPlayerCloned:49]: Clone (server only) [15:30:19] [Client thread/INFO] [sTDOUT]: [me.diabolicatrix.events.CommonEventHandler:onAttachCapability:62]: Attach Client So even if I try to sync with a packet, the value will be overwritten by the attach event.
February 19, 20169 yr Author In my constructor, I set the default values of my variables. And when I attach the capability, I make a new Instance of PlayerCapabilities.
February 19, 20169 yr Author It's doing exactly what I said before: [16:43:24] [server thread/INFO] [sTDOUT]: [me.diabolicatrix.events.CommonEventHandler:onAttachCapability:62]: Attach Server [16:43:24] [Netty Local Client IO #1/INFO] [sTDOUT]: [me.diabolicatrix.packets.PacketSyncCapabilities$ClientHandler:onMessage:58]: Packet Received [16:43:24] [Client thread/INFO] [sTDOUT]: [me.diabolicatrix.events.CommonEventHandler:onAttachCapability:62]: Attach Client
February 19, 20169 yr Author Oh, that solves all my problems! I just started using forge 1.8 so I didn't know the packets were handled differently. Thanks you very much for your help. EDIT: I tought it would work but it doesn't, the value is still overwritten by the constructor.
February 19, 20169 yr Author Where I attach it: https://github.com/DiabolicaTrix/MinecraftLifeRPG/blob/master/src/main/java/me/diabolicatrix/events/CommonEventHandler.java My capabilities class: https://github.com/DiabolicaTrix/MinecraftLifeRPG/blob/master/src/main/java/me/diabolicatrix/other/PlayerCapabilities.java My packet: https://github.com/DiabolicaTrix/MinecraftLifeRPG/blob/master/src/main/java/me/diabolicatrix/other/PlayerCapabilities.java And https://github.com/DiabolicaTrix/MinecraftLifeRPG/blob/master/src/main/java/me/diabolicatrix/other/ScheduledPacketTask.java Also, how do I save it when the player disconnect?
February 19, 20169 yr Author only my sync packets are two ways? Ok, I'll try. EDIT: It doesn't work, it does the exact same thing.
February 20, 20169 yr Sync should never be two way, it should only be server -> client Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
February 20, 20169 yr Author public static class Storage implements Capability.IStorage<PlayerCapabilities> { @Override public NBTBase writeNBT(Capability<PlayerCapabilities> capability, PlayerCapabilities instance, EnumFacing side) { NBTTagCompound compound = new NBTTagCompound(); compound.setInteger("Test", instance.getTest()); return compound; } @Override public void readNBT(Capability<PlayerCapabilities> capability, PlayerCapabilities instance, EnumFacing side, NBTBase nbt) { NBTTagCompound compound = (NBTTagCompound) nbt; instance.setTest(compound.getInteger("Test")); } }
February 20, 20169 yr Author Like that? @Override public NBTTagCompound serializeNBT() { NBTTagCompound compound = new NBTTagCompound(); compound.setInteger("Test", this.getTest()); return compound; } @Override public void deserializeNBT(NBTTagCompound compound) { this.setTest(compound.getInteger("Test")); }
February 20, 20169 yr Author serialize is called but deserialize is not, do I need to call it by myself?
February 21, 20169 yr No, istorgae is for the default implementation of serialization. If youre attaching to another entitiy that is not your own and you want tonstore data, your icapapbilityprovider must implement inbtserializeable. I do Forge for free, however the servers to run it arn't free, so anything is appreciated. Consider supporting the team on Patreon
February 21, 20169 yr Author @diesieben07 My ResourceLocation was wrong (I used player.getUniqueID() to determine the location), I changed it to MODID + ":PLAYER_CAP" and it works fine. @Lexmanos Thanks for the information!
February 21, 20169 yr Yes, the resoure location should be your mod id : some internal name you want I do Forge for free, however the servers to run it arn't free, so anything is appreciated. Consider supporting the team on Patreon
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.