Résolu OnItemRightClick sur une entity.
-
Niquel merci
-
Juste une dernière question si je veux faire baisser le niveau d’alcoolémie de 1 au bout de 15 minutes je dois faire comment ?
-
TickHandler avec la variable getTotalWorldTime() + modulo
-
TickEvent.PlayerTickEvent*
L’interface ITickHandler n’existe plus depuis la 1.7 -
J’ai trouvais ça sur internet je dois définir le nombre de tick comment?
@SubscribeEvent public void onPlayerTickEvent(TickEvent.PlayerTickEvent event) { if (event.phase == TickEvent.Phase.START && !event.player.worldObj.isRemote) { IExtendedEntityProperties properties = event.player.getExtendedProperties(PlayerExtendedProperties.ID); if (properties instanceof PlayerExtendedProperties) { PlayerExtendedProperties playerExtendedProperties = (PlayerExtendedProperties) properties; playerExtendedProperties.tick(); } properties = event.player.getExtendedProperties(PlayerPreferencesProperties.ID); if (properties instanceof PlayerPreferencesProperties) { PlayerPreferencesProperties preferencesProperties = (PlayerPreferencesProperties) properties; preferencesProperties.tick(RFToolsMessages.INSTANCE); } } }
-
Le nombre de tick à la seconde est déjà défini.
Ton code va logiquement crash car worldObj sera null lorsque le menu principal sera ouvert.
Du coup null-check pour le world et pour faire vérifier un code tous les x nbre de tick, c’est comme çaif(event.player.worldObj.getTotalWorldTime() % (nbreDeSecondes * 20) == 0 { System.out.println("ton code à exécuter avec ton ExtProp"); }
-
PlayerTickEvent n’est que appelé en jeu, donc normalement event.player.worldObj ne sera jamais nul. Pas besoin de null check.
-
Ok je reverrai mes sources la prochaine fois
-
J’ai fais sa je suis pas trop sur que ça marche…
@SubscribeEvent public void onPlayerTickEvent(TickEvent.PlayerTickEvent event) { if(event.player.worldObj.getTotalWorldTime() % (60 * 20) == 0) { ExtendedEntityPropAlcool prop = ExtendedEntityPropAlcool.get(event.player); prop.setAlcool(prop.getAlcool() - 1); System.out.println("Test!"); } }
-
Normalement ça devrait être bon.
Regardes en jeu si Test ! s’affiche. Si ce n’est pas le cas c’est surement car ta classe n’est pas enregistré avec FMLCommonHandler.instance().bus().register(new NomDeTaClasseD’event()); -
D’acc je vais voir ça, sinon aussi des fois je rencontre quelques problème par exemple: lorsque je bois un verre d’alcool mon niveau d’alcoolémie devrais normalement augmenté que de 1 bah des fois même souvent, il augmente de 2
-
Ouais merci je l’avais enregistré avec MinecraftForge.EVENT_BUS … Par j’ai un soucis le message TEST il me l’envois 4 fois (2 fois server 2 fois clients ) au lieux de 2 fois (1 fois client 1 fois server) .
-
@‘floriangabet’:
D’acc je vais voir ça, sinon aussi des fois je rencontre quelques problème par exemple: lorsque je bois un verre d’alcool mon niveau d’alcoolémie devrais normalement augmenté que de 1 bah des fois même souvent, il augmente de 2
Sûrement un problème client/serveur ajoutes un if(!player.worldObj.isRemote) avant d’exécuter le code qui augmente le niveau d’alcoolémie pour le faire seulement côté serveur.
@‘floriangabet’:
Ouais merci je l’avais enregistré avec MinecraftForge.EVENT_BUS … Par j’ai un soucis le message TEST il me l’envois 4 fois (2 fois server 2 fois clients ) au lieux de 2 fois (1 fois client 1 fois server) .
Ne retire pas la ligne MinecraftForge.EVENT_BUS si tu as aussi des événements Forge dans la classe. Il faut mettre les deux en même temps (c’est un peu confus, en 1.8 ils ont changé ça, MinecraftForge.EVENT_BUS suffit).
Pour le message en quadruple, ajoutes une condition if(event.phase == TickEvent.Phase.END) (l’event est appelé deux fois, au début du tick et à la fin du tick). -
Merci j’essaye ça!
-
Merci c’est nickel par contre j’ai aperçu que après de nombreuse heure de jeu on pouvais atteindre le niveau -1 etc jusqu’à l’infinie et moi je voudrais que il s’arrête a 0 et que une fois a 0 ou le timer se bloque ou alors on cancelled l’action vous pouvez m’aider pour ça ?.
Code:
@SubscribeEvent public void onPlayerTickEvent(PlayerTickEvent event) { if(event.player.worldObj.getTotalWorldTime() % (900 * 20) == 0) { if(event.phase == TickEvent.Phase.END) { ExtendedEntityPropAlcool prop = ExtendedEntityPropAlcool.get(event.player); prop.setAlcool(prop.getAlcool() - 1); //faire un truc ici du genre if(prop.setAlcool(ETC j'ai essayer avec = 0 j'ai une érreur .. } } }
-
if(prop.getAlcool() > 0) { prop.setAlcool(prop.getAlcool() - 1); }
Rien de compliqué.
-
Merci
-
Dernière question après je close si je veux privilégier un item lors de la mort je dois faire comment ?
En gros faire en sorte que lorsque le mec a un bloc de terre des que il meurt le bloc de terre reste dans son inventaire mais le reste de ses item disparaissent .
if(player.inventory.mainInventory.equals(Blocks.dirt)){ -
Pas facile à faire. Avec l’event de mort il faut check ses items de l’inventaire pour voir s’il a l’item en question, si c’est le cas le retirer de l’inventaire et le mettre dans une map de joueur, itemstack.
Avec l’event de respawn, si le joueur est présent dans cette map on lui remet l’item associer et on retire l’entrée de la map. -
En gros faut faire sa sur deux event sur l’event de mort et de respawn si j’ai bien compris .
EDIT: Est-ce que tu pourrais me redirigé vers un tutoriel ou alors m’aider ?
Merci