Extended Entity Properties
-
J’ai un petit problème, j’utilise
public static final PacketManager rcModPacketHandler = new PacketManager("fr.lmac.packet", "Fr_mod", "Fr_mod"); ``` mais l'information ne change pas :s Savez vous d'où viens le problème ? ```java public class Fr_mod { @Instance("Fr_mod") public static Fr_mod instance; @SidedProxy(clientSide = "fr.lmac.proxy.ClientProxy", serverSide = "fr.lmac.proxy.CommonProxy") public static CommonProxy proxy; public static final PacketManager rcModPacketHandler = new PacketManager("fr.lmac.packet", "Fr_mod", "Fr_mod"); @EventHandler public void initConfig(FMLPreInitializationEvent event) { } @EventHandler public void load(FMLInitializationEvent event) { FMLCommonHandler.instance().bus().register(new PlayerTracker()); MinecraftForge.EVENT_BUS.register(new PlayerTracker()); } @EventHandler public void afterLoad(FMLPostInitializationEvent event) { } }public class PacketFr extends FFMTPacket { public boolean DoubleJump; public PacketFr(){ } public PacketFr(boolean DoubleJump){ this.DoubleJump = DoubleJump; } @Override public void writeData(ByteBuf buffer) throws IOException { buffer.writeBoolean(DoubleJump); } @Override public void readData(ByteBuf buffer) { this.DoubleJump = buffer.readBoolean(); } @Override public void handleClientSide(EntityPlayer player) { ExtendedEntityPropFr props = ExtendedEntityPropFr .get(player); props.DoubleJump = this.DoubleJump; } @Override public void handleServerSide(EntityPlayer player) { ExtendedEntityPropFr props = ExtendedEntityPropFr .get(player); props.DoubleJump = this.DoubleJump; } }public class ExtendedEntityPropFr implements IExtendedEntityProperties { public final static String EXT_PROP_NAME = "ExtPropFr"; private final EntityPlayer player; public boolean DoubleJump; public ExtendedEntityPropFr(EntityPlayer player) { this.player = player; this.DoubleJump = false; } @Override public void saveNBTData(NBTTagCompound compound) { NBTTagCompound properties = new NBTTagCompound(); properties.setBoolean("DoubleJump", this.DoubleJump); compound.setTag(EXT_PROP_NAME, properties); } @Override public void loadNBTData(NBTTagCompound compound) { NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME); this.DoubleJump = properties.getBoolean("DoubleJump"); } @Override public void init(Entity entity, World world) { // TODO Auto-generated method stub } public static final void register(EntityPlayer player) { player.registerExtendedProperties(ExtendedEntityPropFr.EXT_PROP_NAME, new ExtendedEntityPropFr(player)); } public static final ExtendedEntityPropFr get(EntityPlayer player) { return (ExtendedEntityPropFr) player.getExtendedProperties(EXT_PROP_NAME); } public final void sync() { PacketFr packetFr = new PacketFr(this.DoubleJump); Fr_mod.rcModPacketHandler.sendToServer(packetFr); if (!player.worldObj.isRemote) { EntityPlayerMP player1 = (EntityPlayerMP) player; //Ici, même chose que précédemment, sauf que le packet est envoyé au player. Fr_mod.rcModPacketHandler.sendTo(packetFr, player1); } } private static String getSaveKey(EntityPlayer player) { return player.getDisplayName() + ":" + EXT_PROP_NAME; } public static void saveProxyData(EntityPlayer player) { ExtendedEntityPropFr playerData = ExtendedEntityPropFr.get(player); NBTTagCompound savedData = new NBTTagCompound(); playerData.saveNBTData(savedData); CommonProxy.storeEntityData(getSaveKey(player), savedData); } public static void loadProxyData(EntityPlayer player) { ExtendedEntityPropFr playerData = ExtendedEntityPropFr .get(player); NBTTagCompound savedData = CommonProxy.getEntityData(getSaveKey(player)); if (savedData != null) { playerData.loadNBTData(savedData); } playerData.sync(); } public boolean getDoubleJump() { return this.DoubleJump; } public void setDoubleJump(boolean newDoubleJump) { this.DoubleJump = newDoubleJump; this.sync(); } }@SideOnly(Side.CLIENT) int timer; boolean jumpLast = false; @SideOnly(Side.CLIENT) @SubscribeEvent public void onTickPlayer(TickEvent.PlayerTickEvent event) { if(event.player.getCommandSenderName() == Minecraft.getMinecraft().thePlayer.getCommandSenderName()) { EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; ExtendedEntityPropFr prop = new ExtendedEntityPropFr(player); if(player.worldObj.getGameRules().getGameRuleBooleanValue("enableRing")){ if(player.movementInput.jump) { if(!jumpLast) { jumpLast = true; } else if(timer > 2) { prop.setDoubleJump(true); jumpLast = false; } timer = 0; } else{ prop.setDoubleJump(false); } if(jumpLast) { timer ++; if(timer > 20) { jumpLast = false; timer = 0; } } } } }Normalement c’est bon sauf si je me suis encore gourré
-
Dans ta classe "ExtendedEntityPropFr " tu indique un packet et des imports suivant :
package lmac.sonic; import lmac.sonic.packet.PacketSonic; import lmac.sonic.proxy.CommonProxy;En théorie sa devrait être :
package fr.lmac; import fr.lmac.packet.PacketSonic; import fr.lmac.proxy.CommonProxy;Si tu essaye de cacher ton projet laisse tomber, je sais que tu prépare un mod “Sonic” avec le système de double saut ^^, donc sa serai bien que l’on passe à ton problème
car on tourne en boucle a chaque copie que tu fait et que tu remplace des valeurs, il y a des erreurs différentes :p___Bon j’ai vu que tu as crée ton mod dans la section en développement, maintenant ton problème est reglé ou pas ?Si non peut tu vérifier ces points suivant :
@Mod(modid = "Sonic_Mod", […]@Instance("Sonic_Mod")public static final PacketManagerrcModPacketHandler = new PacketManager("lmac.sonic.packet", "Sonic_Mod", "Sonic_Mod");Et que le “PacketSonic.java” se trouve bien dans ton package “lmac.sonic.packet” ?
-
(24h avant un double post ^^')
Les packages changent rien au problème de tout façon prendre ceux que j’ai mis dans les balises codes ou un autre
Je vais enlevé tout mes post qui ne concerne pas ce problème (où on tournait autour du pot) afin de laisser ce topic propreSinon tu as une idée du problème ^^ ?
-
bah sa change rien au fait qu’on a besoin de voir tes scripts pour voir l’erreur qu’y a pu s’y mettre pour t’aider a la résoudre, car si tu as bien suivi le tuto sa devrait marche (j’ai récemment fait le tuto et j’ai pas eu de problème).
Dans ta méthode :
public void onTickPlayer(TickEvent.PlayerTickEvent event)Essai de Modifier pas ça :
if(!jumpLast) { jumpLast = true; System.out.println("Jump : TRUE"); System.out.println("Jump Prop : "+ExtendedEntityPropFr.get(mc.thePlayer).DoubleJump); } else if(timer > 2) { prop.setDoubleJump(true); jumpLast = false; System.out.println("Jump : FALSE"); System.out.println("Jump Prop : "+ExtendedEntityPropFr.get(mc.thePlayer).DoubleJump); }Cela va permettre d’afficher dans la console si la valeur “jumpLast” est égale à “true” ou “false” et donc de vérifier qu’il voit bien le double saut, l’autre ligne va permettre d’aller récupérer la valeur dans le “ExtendedEntityProp” et de savoir si elle a bien été enregistrer ou non.
-
Avant d’utiliser cette méthode pour l’enregistrement des données ça marchait

Donc effectivement ça ne marche pas, il y a bien false lors du double jumpJump : FALSE
Jump Prop : false
Jump : TRUE
Jump Prop : falsePS. I know

-
donc apparemment tu aurais un problème avec le :
prop.setDoubleJump(true);Tu peux me donner la méthode de “setDoubleJump” dans “ExtendedEntityPropFr.java”
Et juste pour information personnel, tu as placé ou la méthode “onPlayerTick”
-
Tiens
public void setDoubleJump(boolean newDoubleJump) { this.DoubleJump = newDoubleJump; this.sync(); }Dans une classe que j’ai enregistrer avec
FMLCommonHandler.instance().bus().register(new PlayerTracker()); MinecraftForge.EVENT_BUS.register(new PlayerTracker()); ``` dans ma classe principale PS.Je sais que j'ai un problème avec mon set ou ma synchro sinon je serais pas là :p PS2.Je t'ai déjà donné la classe entière (donc avec le set) dans mes anciens message :D -
cela ma l’air correct et ta méthode “sync”, peut tu l’a donner ?
-
@‘mindany2’:
public class ExtendedEntityPropFr implements IExtendedEntityProperties { public final static String EXT_PROP_NAME = "ExtPropFr"; private final EntityPlayer player; public boolean DoubleJump; public ExtendedEntityPropFr(EntityPlayer player) { this.player = player; this.DoubleJump = false; } @Override public void saveNBTData(NBTTagCompound compound) { NBTTagCompound properties = new NBTTagCompound(); properties.setBoolean("DoubleJump", this.DoubleJump); compound.setTag(EXT_PROP_NAME, properties); } @Override public void loadNBTData(NBTTagCompound compound) { NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME); this.DoubleJump = properties.getBoolean("DoubleJump"); } @Override public void init(Entity entity, World world) { // TODO Auto-generated method stub } public static final void register(EntityPlayer player) { player.registerExtendedProperties(ExtendedEntityPropFr.EXT_PROP_NAME, new ExtendedEntityPropFr(player)); } public static final ExtendedEntityPropFr get(EntityPlayer player) { return (ExtendedEntityPropFr) player.getExtendedProperties(EXT_PROP_NAME); } public final void sync() { PacketFr packetFr = new PacketFr(this.DoubleJump); Fr_mod.rcModPacketHandler.sendToServer(packetFr); if (!player.worldObj.isRemote) { EntityPlayerMP player1 = (EntityPlayerMP) player; //Ici, même chose que précédemment, sauf que le packet est envoyé au player. Fr_mod.rcModPacketHandler.sendTo(packetFr, player1); } } private static String getSaveKey(EntityPlayer player) { return player.getDisplayName() + ":" + EXT_PROP_NAME; } public static void saveProxyData(EntityPlayer player) { ExtendedEntityPropFr playerData = ExtendedEntityPropFr.get(player); NBTTagCompound savedData = new NBTTagCompound(); playerData.saveNBTData(savedData); CommonProxy.storeEntityData(getSaveKey(player), savedData); } public static void loadProxyData(EntityPlayer player) { ExtendedEntityPropFr playerData = ExtendedEntityPropFr .get(player); NBTTagCompound savedData = CommonProxy.getEntityData(getSaveKey(player)); if (savedData != null) { playerData.loadNBTData(savedData); } playerData.sync(); } public boolean getDoubleJump() { return this.DoubleJump; } public void setDoubleJump(boolean newDoubleJump) { this.DoubleJump = newDoubleJump; this.sync(); } }Voigna ^^
-
Je ne vois rien d’étrange tout a l’air correct dans le codage.
Après je pense qu’il faut attendre des codeurs un peu plus expérimenter dans le codage minecraft, car moi actuellement je suis bloquer dans le “onPlayerTick” il veut pas me le prendre en compte …
donc je n’en suis pas a ton niveau ou tu cherche à enregistrer les valeurs mais ton problème viens d’ici, je pense au sync() principalement, du au test que l’on a fait avec les string out mais c’est peut être pas ta faute c’est peut être un problème dans le tuto.
Je n’est jamais utiliser cette méthode encore… je découvre

-
Ok j’attendrais que quelqu’un d’autre passe

Niveau onPlayerTick t’a bien mis
" @SideOnly(Side.CLIENT)
@SubscribeEvent" -
ouep je suis en train de crée une réponse sur mon poste et je te donne le lien sa sera mieux pour éviter de mélanger les problèmes

Voilà si tu veux jeter un œil au codage où tenter de comprendre mon problème je te donne “le lien” ou j’ai poster mon problème

-
Bonjour, j’ai suivi le tutoriel a la lettre, et pourtant j’ai une erreur dans la classe du common proxy
public class CommonProxy { private static final Map <string, nbttagcompound="">extendedEntityData = new HashMap<string, nbttagcompound="">(); public void registerRender () { System.out.println("Méthode du serveur"); } public static void storeEntityData(String saveKey, NBTTagCompound savedData) { extendedEntityData.put(name, compound); } public static NBTTagCompound getEntityData(String saveKey) { return extendedEntityData.remove(name); } }Chez moi j’ai une erreur sur “name” et “compound”. Si je les déclare dans la classe du CommonProxy, le jeu plante quand je fais clic droit avec l’item.
Quelqu’un aurait-il une idée ?</string,></string,> -
public static void storeEntityData(String name, NBTTagCompound compound) { extendedEntityData.put(name, compound); } -
Merci beaucoup ! C’était surement une erreur de recopiage (je retape tout a la main pour mémorisé
).
Mais même si j’arrive maintenant a compilé, j’ai un autre crash, lorsque je fait le clic droit avec l’item pour testé.
Voici les logs,mais je ne sais pas quel partie du code il faudrait que je poste.
A priori, ça va vient plutôt de l’item ou de l’extented entity ?net.minecraft.util.ReportedException: Ticking memory connection
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:198) ~[NetworkSystem.class:?]
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:720) ~[MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:608) ~[MinecraftServer.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) ~[IntegratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:482) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:746) [MinecraftServer$2.class:?]
Caused by: java.lang.NullPointerException
at com.minefus.principal.ItemExtentedEntity.onItemRightClick(ItemExtentedEntity.java:25) ~[ItemExtentedEntity.class:?]
at net.minecraft.item.ItemStack.useItemRightClick(ItemStack.java:165) ~[ItemStack.class:?]
at net.minecraft.server.management.ItemInWorldManager.tryUseItem(ItemInWorldManager.java:341) ~[ItemInWorldManager.class:?]
at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:572) ~[NetHandlerPlayServer.class:?]
at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74) ~[C08PacketPlayerBlockPlacement.class:?]
at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122) ~[C08PacketPlayerBlockPlacement.class:?]
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:232) ~[NetworkManager.class:?]
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) ~[NetworkSystem.class:?]
… 5 more
[16:19:29] [Server thread/ERROR]: This crash report has been saved to: D:\Minefus Projet\MCP 1.7.2\eclipse.\crash-reports\crash-2014-07-10_16.19.29-server.txt
[16:19:29] [Server thread/INFO]: Stopping server
[16:19:29] [Server thread/INFO]: Saving players
[16:19:29] [Server thread/INFO]: Saving worlds
[16:19:29] [Server thread/INFO]: Saving chunks for level ‘New World’/Overworld
–-- Minecraft Crash Report ----
// My bad.Time: 10/07/14 16:19
Description: Ticking memory connectionjava.lang.NullPointerException: Ticking memory connection
at com.minefus.principal.ItemExtentedEntity.onItemRightClick(ItemExtentedEntity.java:25)
at net.minecraft.item.ItemStack.useItemRightClick(ItemStack.java:165)
at net.minecraft.server.management.ItemInWorldManager.tryUseItem(ItemInWorldManager.java:341)
at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:572)
at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)
at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:232)
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:720)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:608)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:482)
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:746)A detailed walkthrough of the error, its code path and all known details is as follows:
– Head –
Stacktrace:
at com.minefus.principal.ItemExtentedEntity.onItemRightClick(ItemExtentedEntity.java:25)
at net.minecraft.item.ItemStack.useItemRightClick(ItemStack.java:165)
at net.minecraft.server.management.ItemInWorldManager.tryUseItem(ItemInWorldManager.java:341)
at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:572)
at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)
at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:232)– Ticking connection –
Details:
Connection: net.minecraft.network.NetworkManager@2b4beaa5
Stacktrace:
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:720)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:608)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:482)
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:746) -
at com.minefus.principal.ItemExtentedEntity.onItemRightClick(ItemExtentedEntity.jav?a:25)
Ligne 25 de ton item ? (+ toutes la classes). -
Voici les 3 classes en rapport avec l’item (l’extented entity, l’item et les paquets)
Merci de m’accorder du temps !package com.minefus.principal; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class ItemExtentedEntity extends Item { public ItemExtentedEntity() { this.setCreativeTab(CreativeTabs.tabTools); } @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player) { if (!world.isRemote) { PlayerExtendedEntity props = PlayerExtendedEntity.get(player); if (props.att(6)) { System.out .println("Squalala, nous sommes partis!"); } else { System.out .println("Pas d'argent ! Je suis triste !"); } } return itemstack; } }package com.minefus.principal; import com.minefus.commonproxy.CommonProxy; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.Packet; import net.minecraft.world.World; import net.minecraftforge.common.IExtendedEntityProperties; public class PlayerExtendedEntity implements IExtendedEntityProperties { public final static String EXT_PROP_NAME = "ExtendedPlayer" ; private final EntityPlayer player; public long experience ; public short classe ; public short pointsort ; public short pointniveau ; public short niveau; public PlayerExtendedEntity (EntityPlayer player) { this.player = player; this.experience = 0 ; this.classe = 10 ; this.pointsort = 0 ; this.pointniveau = 0 ; this.niveau = 1 ; } public static final void register(EntityPlayer player) { player.registerExtendedProperties(PlayerExtendedEntity.EXT_PROP_NAME, new PlayerExtendedEntity(player)); } public static final PlayerExtendedEntity get (EntityPlayer player) { return (PlayerExtendedEntity) player.getExtendedProperties(EXT_PROP_NAME);} public final void sync() { PaquetPlayer paquetPlayer = new PaquetPlayer ( this.experience,this.classe,this.pointsort,this.pointniveau,this.niveau ); if (!player.worldObj.isRemote) { EntityPlayerMP player1 = (EntityPlayerMP) player; } } private static String getSaveKey(EntityPlayer player) { return player.getDisplayName() + ":" + EXT_PROP_NAME; } @Override public void saveNBTData(NBTTagCompound compound) { NBTTagCompound properties = new NBTTagCompound(); properties.setLong("Experience",this.experience) ; properties.setShort("Classe",this.classe) ; properties.setShort("PointSort",this.pointsort) ; properties.setShort("PointNiveau",this.pointniveau) ; properties.setShort("Niveau",this.niveau) ; } @Override public void loadNBTData(NBTTagCompound compound) { NBTTagCompound properties = (NBTTagCompound) compound .getTag(EXT_PROP_NAME); this.experience = properties.getLong("Experience") ; this.classe = properties.getShort("Classe") ; this.pointsort = properties.getShort("PointSort") ; this.pointniveau = properties.getShort("PointNiveau") ; this.niveau = properties.getShort("Niveau") ; } public static void saveProxyData(EntityPlayer player) { PlayerExtendedEntity playerData = PlayerExtendedEntity.get(player); NBTTagCompound savedData = new NBTTagCompound(); playerData.saveNBTData(savedData); CommonProxy.storeEntityData(getSaveKey(player), savedData); } public static void loadProxyData(EntityPlayer player) { PlayerExtendedEntity playerData = PlayerExtendedEntity.get(player); NBTTagCompound savedData = CommonProxy .getEntityData(getSaveKey(player)); if (savedData != null) { playerData.loadNBTData(savedData); } playerData.sync(); } @Override public void init(Entity entity, World world) { // TODO Auto-generated method stub } public boolean att( long amount) { boolean sufficient = amount <= this.classe; if (sufficient) { this.classe-= amount; this.sync(); } else { return false; } return sufficient; } }package com.minefus.principal; import io.netty.channel.ChannelHandlerContext; import java.io.IOException; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.PacketBuffer; import fr.minecraftforgefrance.ffmtlibs.network.AbstractPacket; public class PaquetPlayer extends AbstractPacket { private short classe, pointsort, pointniveau, niveau ; private long experience ; public PaquetPlayer () {} public PaquetPlayer(long experience ,short classe ,short pointsort ,short pointniveau,short niveau) { this.experience = experience ; this.classe = classe ; this.pointsort = pointsort ; this.pointniveau = pointniveau ; this.niveau = niveau ; } @Override public void encodeInto(ChannelHandlerContext ctx, PacketBuffer buffer) throws IOException { buffer.writeLong(experience); buffer.writeShort(classe); buffer.writeShort(pointsort); buffer.writeShort(pointniveau); buffer.writeShort(niveau); } @Override public void decodeInto(ChannelHandlerContext ctx, PacketBuffer buffer) throws IOException { this.experience = buffer.readLong(); this.classe= buffer.readShort(); this.pointsort = buffer.readShort(); this.pointniveau = buffer.readShort(); this.niveau = buffer.readShort(); } @Override public void handleClientSide(EntityPlayer player) { PlayerExtendedEntity props = PlayerExtendedEntity .get(player); props.experience = this.experience; props.classe = this.classe; props.pointsort = this.pointsort; props.pointniveau = this.pointniveau; props.niveau = this.niveau; } @Override public void handleServerSide(EntityPlayer player) { PlayerExtendedEntity props = PlayerExtendedEntity .get(player); props.experience = this.experience; props.classe = this.classe; props.pointsort = this.pointsort; props.pointniveau = this.pointniveau; props.niveau = this.niveau; } } -
props semble être null, tu n’as pas enregistrés ton custom entity properties ou les event qui le fond.
-
A oui, enfaite j’avais oublier de créer la classe EventHanddler… ^^ Forcement ça marche un peu moins bien sans.
Par contre, j’ai exactement les même erreurs dans les logs, même ligne, même classe, donc je pence que ça doit venir de autre part. Vu que j’ai fait quelques corrections de méthodes qui mettaient des erreurs partout a cause de la classe Event qui manquait et que j’ai ajouté une jauge de mana, je te repost tousa :
Donc l’Extented Enity Properties :
package com.minefus.principal; import com.minefus.commonproxy.CommonProxy; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.Packet; import net.minecraft.world.World; import net.minecraftforge.common.IExtendedEntityProperties; public class PlayerExtendedEntity implements IExtendedEntityProperties { public final static String EXT_PROP_NAME = "ExtendedPlayer" ; private final EntityPlayer player; public short manaMax ; public short mana ; public long experience ; public short classe ; public short pointsort ; public short pointniveau ; public short niveau; public PlayerExtendedEntity (EntityPlayer player) { this.player = player; this.mana = 12; this.manaMax = 12; this.experience = 0 ; this.classe = 0 ; this.pointsort = 0 ; this.pointniveau = 0 ; this.niveau = 1 ; } public static final void register(EntityPlayer player) { player.registerExtendedProperties(PlayerExtendedEntity.EXT_PROP_NAME, new PlayerExtendedEntity(player)); } public static final PlayerExtendedEntity get (EntityPlayer player) { return (PlayerExtendedEntity) player.getExtendedProperties(EXT_PROP_NAME);} public final void sync() { PaquetPlayer paquetPlayer = new PaquetPlayer (this.mana, this.manaMax, this.experience,this.classe,this.pointsort,this.pointniveau,this.niveau ); if (!player.worldObj.isRemote) { EntityPlayerMP player1 = (EntityPlayerMP) player; } } private static String getSaveKey(EntityPlayer player) { return player.getDisplayName() + ":" + EXT_PROP_NAME; } @Override public void saveNBTData(NBTTagCompound compound) { NBTTagCompound properties = new NBTTagCompound(); properties.setShort("Mana",this.mana) ; properties.setShort("ManaMax",this.manaMax) ; properties.setLong("Experience",this.experience) ; properties.setShort("Classe",this.classe) ; properties.setShort("PointSort",this.pointsort) ; properties.setShort("PointNiveau",this.pointniveau) ; properties.setShort("Niveau",this.niveau) ; } @Override public void loadNBTData(NBTTagCompound compound) { NBTTagCompound properties = (NBTTagCompound) compound .getTag(EXT_PROP_NAME); this.mana = properties.getShort("Mana") ; this.manaMax = properties.getShort("ManaMax") ; this.experience = properties.getLong("Experience") ; this.classe = properties.getShort("Classe") ; this.pointsort = properties.getShort("PointSort") ; this.pointniveau = properties.getShort("PointNiveau") ; this.niveau = properties.getShort("Niveau") ; } public static void saveProxyData(EntityPlayer player) { PlayerExtendedEntity playerData = PlayerExtendedEntity.get(player); NBTTagCompound savedData = new NBTTagCompound(); playerData.saveNBTData(savedData); CommonProxy.storeEntityData(getSaveKey(player), savedData); } public static void loadProxyData(EntityPlayer player) { PlayerExtendedEntity playerData = PlayerExtendedEntity.get(player); NBTTagCompound savedData = CommonProxy .getEntityData(getSaveKey(player)); if (savedData != null) { playerData.loadNBTData(savedData); } playerData.sync(); } @Override public void init(Entity entity, World world) { // TODO Auto-generated method stub } public boolean att( long amount) { boolean sufficient = amount <= this.mana; if (sufficient) { this.mana -= amount; this.sync(); } else { return false; } return sufficient; } }L’Item :
package com.minefus.principal; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class ItemExtentedEntity extends Item { public ItemExtentedEntity() { this.setCreativeTab(CreativeTabs.tabTools); } @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player) { if (!world.isRemote) { PlayerExtendedEntity props = PlayerExtendedEntity.get(player); if (props.att(6)) { System.out .println("Squalala, nous sommes partis!"); } else { System.out .println("Pas d'argent ! Je suis triste !"); } } return itemstack; } }Les Events pour l’entity:
package com.minefus.principal; import com.minefus.commonproxy.CommonProxy; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.event.entity.EntityEvent.EntityConstructing; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; public class EntityEventHandler { @SubscribeEvent public void onEntityConstructing(EntityConstructing event) { if (event.entity instanceof EntityPlayer && PlayerExtendedEntity.get((EntityPlayer) event.entity) == null) PlayerExtendedEntity.register((EntityPlayer) event.entity); System.out.println("une entité a rejoint le monde"); } @SubscribeEvent public void onLivingDeathEvent(LivingDeathEvent event) { if (!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer) { NBTTagCompound playerData = new NBTTagCompound(); ((PlayerExtendedEntity) (event.entity.getExtendedProperties(PlayerExtendedEntity.EXT_PROP_NAME))).saveNBTData(playerData); CommonProxy.storeEntityData(((EntityPlayer) event.entity).getDisplayName(), playerData); PlayerExtendedEntity.saveProxyData((EntityPlayer) event.entity); } else {} } @SubscribeEvent public void onEntityJoinWorld(EntityJoinWorldEvent event) { if (!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer) { NBTTagCompound playerData = CommonProxy.getEntityData(((EntityPlayer) event.entity).getDisplayName()); if (playerData != null) { ((PlayerExtendedEntity) (event.entity.getExtendedProperties(PlayerExtendedEntity.EXT_PROP_NAME))).loadNBTData(playerData); } ((PlayerExtendedEntity) (event.entity.getExtendedProperties(PlayerExtendedEntity.EXT_PROP_NAME))).sync(); } } }PaquetPlayer :
package com.minefus.principal; import io.netty.channel.ChannelHandlerContext; import java.io.IOException; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.PacketBuffer; import fr.minecraftforgefrance.ffmtlibs.network.AbstractPacket; public class PaquetPlayer extends AbstractPacket { private short mana, manaMax, classe, pointsort, pointniveau, niveau ; private long experience ; public PaquetPlayer () {} public PaquetPlayer(short mana, short manaMax ,long experience ,short classe ,short pointsort ,short pointniveau,short niveau) { this.mana = mana; this.manaMax = manaMax; this.experience = experience ; this.classe = classe ; this.pointsort = pointsort ; this.pointniveau = pointniveau ; this.niveau = niveau ; } @Override public void encodeInto(ChannelHandlerContext ctx, PacketBuffer buffer) throws IOException { buffer.writeLong(experience); buffer.writeShort(mana); buffer.writeShort(manaMax); buffer.writeShort(classe); buffer.writeShort(pointsort); buffer.writeShort(pointniveau); buffer.writeShort(niveau); } @Override public void decodeInto(ChannelHandlerContext ctx, PacketBuffer buffer) throws IOException { this.mana = buffer.readShort(); this.manaMax = buffer.readShort(); this.experience = buffer.readLong(); this.classe= buffer.readShort(); this.pointsort = buffer.readShort(); this.pointniveau = buffer.readShort(); this.niveau = buffer.readShort(); } @Override public void handleClientSide(EntityPlayer player) { PlayerExtendedEntity props = PlayerExtendedEntity .get(player); props.mana = this.mana; props.manaMax = this.manaMax; props.experience = this.experience; props.classe = this.classe; props.pointsort = this.pointsort; props.pointniveau = this.pointniveau; props.niveau = this.niveau; } @Override public void handleServerSide(EntityPlayer player) { PlayerExtendedEntity props = PlayerExtendedEntity .get(player); props.mana = this.mana; props.manaMax = this.manaMax; props.experience = this.experience; props.classe = this.classe; props.pointsort = this.pointsort; props.pointniveau = this.pointniveau; props.niveau = this.niveau; } }Au passage, comment tu fait pour savoir que props est nul ?
-
Car l’erreur est un NullPointerException, qu’il te donne la ligne et qu’il n’y a pas d’autre objet qui peut être null sur cette ligne.
Tu as enregistrés la classe d’event avec MinecraftForge.EVENT_BUS.register(new EntityEventHandler()) dans ta classe principale ?