OnItemRightClick sur une entity.
-
pareil marche toujours pas

-
Quelqu’un ?
-
Renvoies ton code actuel.
-
package com.AltisMine.mod; import cpw.mods.fml.common.eventhandler.SubscribeEvent; 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.world.World; import net.minecraftforge.common.IExtendedEntityProperties; import net.minecraftforge.event.entity.EntityEvent.EntityConstructing; public class ExtendedEntityPropAlcool implements IExtendedEntityProperties { public final static String EXT_PROP_NAME = "ExtPropAlcool"; private int alcool = 0; private final EntityPlayer player; public ExtendedEntityPropAlcool(EntityPlayer player) { this.player = player; } @Override public void saveNBTData(NBTTagCompound compound) { NBTTagCompound properties = new NBTTagCompound(); properties.setInteger("alcool", this.alcool); compound.setTag(EXT_PROP_NAME, properties); } @Override public void loadNBTData(NBTTagCompound compound) { NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME); this.alcool = properties.getInteger("alcool"); } @Override public void init(Entity entity, World world) { // TODO Auto-generated method stub } public static final void register(EntityPlayer player) { player.registerExtendedProperties(ExtendedEntityPropAlcool.EXT_PROP_NAME, new ExtendedEntityPropAlcool(player)); } public static final ExtendedEntityPropAlcool get(EntityPlayer player) { return (ExtendedEntityPropAlcool) player.getExtendedProperties(EXT_PROP_NAME); } public final void sync() { PacketAlcool packetAlcool = new PacketAlcool(this.alcool); if (!player.worldObj.isRemote) { EntityPlayerMP playerClient = (EntityPlayerMP) this.player; AltisMineMod.network.sendTo(packetAlcool, playerClient); } else { AltisMineMod.network.sendToServer(packetAlcool); } } private static String getSaveKey(EntityPlayer player) { return player.getDisplayName() + ":" + EXT_PROP_NAME; } public static void saveProxyData(EntityPlayer player) { ExtendedEntityPropAlcool playerData = ExtendedEntityPropAlcool.get(player); NBTTagCompound savedData = new NBTTagCompound(); playerData.saveNBTData(savedData); CommonProxy.storeEntityData(getSaveKey(player), savedData); } public static void loadProxyData(EntityPlayer player) { ExtendedEntityPropAlcool playerData = ExtendedEntityPropAlcool.get(player); NBTTagCompound savedData = CommonProxy .getEntityData(getSaveKey(player)); if (savedData != null) { playerData.loadNBTData(savedData); } playerData.sync(); } public void setAlcool(int taux) { this.alcool = taux; this.sync(); } public int getAlcool() { this.alcool = 0; if (alcool != 0) alcool = Math.abs(alcool / 2); else if (alcool == 0) { alcool = Math.abs(alcool); } return this.alcool; } }Class bouteille d’alcool:
package com.AltisMine.mod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; public class LIIT extends ItemFood { AT alcohol = new AT(); public LIIT (int itemID, int i, boolean b) { super(itemID, i, b); } public EnumAction getItemUseAction(ItemStack itemstack) { return EnumAction.drink; } public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { if (player.canEat(true)) { player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); } return stack; } public int getMaxItemUseDuration(ItemStack stack) { return 32; } public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player) { –stack.stackSize; ExtendedEntityPropAlcool prop = ExtendedEntityPropAlcool.get(player); prop.setAlcool(prop.getAlcool() + 1); player.getFoodStats().addStats(1, 2); // nombre de demi-gigots + saturation world.playSoundAtEntity(player, "random.burp", 0.5F, world.rand.nextFloat() * 0.1F + 0.9F); player.addPotionEffect(new PotionEffect(Potion.confusion.id, 315,0)); player.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 315,0)); player.addPotionEffect(new PotionEffect(Potion.hunger.id, 315,0)); player.addPotionEffect(new PotionEffect(Potion.weakness.id, 315,0)); return stack; } @Override public boolean hasEffect(ItemStack par1ItemStack){ return true; } } -
Le getAlcool tu mets juste return alcool, c’est tout ! Pourquoi tout ce code ?
-
J’essaye ça je vous dis
-
@‘Snowy_1803’:
Le getAlcool tu mets juste return alcool, c’est tout ! Pourquoi tout ce code ?
Surtout que Robin le lui a déjà dit de mettre return this.alcool (et il l’a pas fait)
@‘robin4002’:
Mets directement return this.alcool;
-
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).