Créer un achievement
-
mas la methode je ne la trouve pas
-
La méthode, c’est celle qui débloque ton achievement.
-
if ( event.entityPlayer != null) ; ``` ?
-
C’est pas une méthode, c’est une condition.
Une méthode s’est: ```java@Override
public void notifyPickup(EntityItem item, EntityPlayer player)
{}
-
La l’achievement s’active mais les nv s’acumulent
package bdbladx.common; import cpw.mods.fml.common.network.Player; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.stats.Achievement; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.player.EntityItemPickupEvent; public class PlayerEvent { @ForgeSubscribe public void onBlockPickedUp(EntityItemPickupEvent event) { if(event.item.getEntityItem().itemID == eryliablocks.BlockUranium.blockID) { if(event.entityPlayer != null) event.entityPlayer.triggerAchievement(eryliablocks.achievementUraniumBrut); event.entityPlayer.addExperienceLevel(30); } } }
___@‘Gugu42’:
if(!player.hasAchieved / je sais plus la méthode )){
code pour give les niveau
}
sachant que la methode est ```java
@ForgeSubscribe
public void onBlockPickedUp(EntityItemPickupEvent event)
{
if(event.item.getEntityItem().itemID == eryliablocks.BlockUranium.blockID)
{
if(event.entityPlayer != null);et que le code pour give les niveaux ```java event.entityPlayer.addExperienceLevel(30)
je dois mettre comment ?
-
Essayes ceci:
package bdbladx.common; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.stats.AchievementList; import cpw.mods.fml.common.IPickupNotifier; public class PickupHandler implements IPickupNotifier { @Override public void notifyPickup(EntityItem item, EntityPlayer player) { if(item.getEntityItem().itemID == eryliablocks.BlockUranium.blockID && !player.hasAchieved(eryliablocks.achievementUraniumBrut)) { player.addStat(eryliablocks.achievementUraniumBrut); player.addExperienceLevel(30); } } }
Dans la class principale:
GameRegistry.registerPickupHandler(new PickupHandler());
-
Hm … plutôt cette ligne :
player.addExperienceLevel(30);
Dans cette condition :
if(item.getEntityItem().itemID == eryliablocks.BlockUranium.blockID) { player.addStat(eryliablocks.achievementUraniumBrut); }
Avec une petite modif :
if(item.getEntityItem().itemID == eryliablocks.BlockUranium.blockID && !player.hasAchieved(eryliablocks.achievementUraniumBrut)) { player.addStat(eryliablocks.achievementUraniumBrut); player.addExperienceLevel(30); }
Histoire de faire d’une pierre deux coups
-
Exact, j’avais oublié que je pouvais mettre une condition avec un ET dedans.
-
j’essaye et je vous dit quelque chose =)___
Erreur sur .hasAchieved et .addstatEdit: j’ai resolu le .addstat en metant ```java
player.addStat(eryliablocks.achievementUraniumBrut, 1);
ajout du 1 =)
-
Pour le .hasAchieved, tu as quel erreur exactement?
-
“The method hasAchieved(Achievement) is undefined for the
type EntityPlayer” -
Eclipse te propose de le remplacer? Si oui, par quoi?
-
non pas de proposition juste le ttruc de create a field ….
-
Essayes de mettre .isAchieved ou un truc qui s’y rapproche.
-
mtn ça me dit de creer une methode isAchieved(Achievement) ^^’
-
Je vois pas du tout comment faire, alors.
-
Peut etre que c’est tout simplement impossible ?
-
En effet, je viens de faire de recherche, et ça va être possible ou du moins très compliqué. En fait le code qui enclenche l’achievement est du côté serveur. Ajouter de l’expérience, c’est aussi du côté serveur. Lorsqu’un joueur débloque un achievement, le serveur envoie un paquet au client, et ensuite le client regarde si il a déjà l’achievement. Si c’est le cas, rien ne se passe, sinon l’achievement get s’affiche.
Donc il faudrait check côté client s’il a l’achievement avec Minecraft.getMinecraft().statFileWriter.hasAchievementUnlocked(achievement), et envoyer un paquet au serveur s’il ne l’ai pas.
Mais même si tu t’amuse a faire ça, on pourra facilement faire du bug abuse en supprimant le fichier de stat dans le .minecraft.Le plus simple est donc de mettre un tag nbt dans le joueur lorsqu’il la première, et s’il n’a pas ce tag ça donne de l’xp.
Comme j’ai fais pour le cadeau de noël sur Cube³ : https://github.com/robin4002/Cube3/blob/master/cube3_common/fr/cube3/common/Cube3PlayerTracker.java#L15-L22 -
oulà ^^’ ca me parait tres tres compliqué tout cela xD je vais attendre les tutos 1.7 pour voir si ça a changé quelque chose et mci robin
EDIT : j’ai mis le code que robin adis et je vais tester
-
package fr.emergia.EmergiaMod.common; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import net.minecraft.block.Block; import net.minecraftforge.event.entity.player.EntityItemPickupEvent; public class EventAch { @SubscribeEvent public void OnBlockPickedUp(EntityItemPickupEvent event) { if(event.item.getEntityItem().getItem() == EmergiaMenu.PIS) { if(event.entityPlayer != null) event.entityPlayer.triggerAchievement(ACH1); } } }
Je suis en 1.7 et le nom que j’ai mis a mon Achievement est ACH1
pourtant il ne le reconnait pas.//Achievement ACH1 = new Achievement("EmergiaACH1","ACH1", -3,4, PIS, null).registerStat();