MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    OnItemRightClick sur une entity.

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    125 Messages 8 Publieurs 21.6k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • GabsG Hors-ligne
      Gabs
      dernière édition par

      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;
       }
      
      }
      
      
      1 réponse Dernière réponse Répondre Citer 0
      • Snowy_1803S Hors-ligne
        Snowy_1803
        dernière édition par

        Le getAlcool tu mets juste return alcool, c’est tout ! Pourquoi tout ce code ?

        Moddeur 1.8

        Développeur Java

        1 réponse Dernière réponse Répondre Citer 0
        • GabsG Hors-ligne
          Gabs
          dernière édition par

          J’essaye ça je vous dis

          1 réponse Dernière réponse Répondre Citer 0
          • BrokenSwingB Hors-ligne
            BrokenSwing Moddeurs confirmés Rédacteurs
            dernière édition par

            @‘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;

            1 réponse Dernière réponse Répondre Citer 0
            • GabsG Hors-ligne
              Gabs
              dernière édition par

              Niquel merci

              1 réponse Dernière réponse Répondre Citer 0
              • GabsG Hors-ligne
                Gabs
                dernière édition par

                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 ?

                1 réponse Dernière réponse Répondre Citer 0
                • DeletedD Hors-ligne
                  Deleted
                  dernière édition par

                  TickHandler avec la variable getTotalWorldTime() + modulo

                  1 réponse Dernière réponse Répondre Citer 0
                  • robin4002R Hors-ligne
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                    dernière édition par

                    TickEvent.PlayerTickEvent*
                    L’interface ITickHandler n’existe plus depuis la 1.7

                    1 réponse Dernière réponse Répondre Citer 0
                    • GabsG Hors-ligne
                      Gabs
                      dernière édition par

                      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);
                              }
                          }
                      }
                      
                      1 réponse Dernière réponse Répondre Citer 0
                      • DeletedD Hors-ligne
                        Deleted
                        dernière édition par

                        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 ça

                        
                        if(event.player.worldObj.getTotalWorldTime() % (nbreDeSecondes * 20) == 0
                        {
                        System.out.println("ton code à exécuter avec ton ExtProp");
                        }
                        
                        
                        1 réponse Dernière réponse Répondre Citer 0
                        • robin4002R Hors-ligne
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                          dernière édition par

                          PlayerTickEvent n’est que appelé en jeu, donc normalement event.player.worldObj ne sera jamais nul. Pas besoin de null check.

                          1 réponse Dernière réponse Répondre Citer 0
                          • DeletedD Hors-ligne
                            Deleted
                            dernière édition par

                            Ok je reverrai mes sources la prochaine fois 😉

                            1 réponse Dernière réponse Répondre Citer 0
                            • GabsG Hors-ligne
                              Gabs
                              dernière édition par

                              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!");
                                }
                                }
                              
                              1 réponse Dernière réponse Répondre Citer 0
                              • robin4002R Hors-ligne
                                robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                dernière édition par

                                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());

                                1 réponse Dernière réponse Répondre Citer 0
                                • GabsG Hors-ligne
                                  Gabs
                                  dernière édition par

                                  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 😕

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • GabsG Hors-ligne
                                    Gabs
                                    dernière édition par

                                    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) .

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • robin4002R Hors-ligne
                                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                      dernière édition par

                                      @‘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).

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • GabsG Hors-ligne
                                        Gabs
                                        dernière édition par

                                        Merci j’essaye ça!

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • GabsG Hors-ligne
                                          Gabs
                                          dernière édition par

                                          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 .. 
                                          }
                                            }
                                            }
                                          
                                          1 réponse Dernière réponse Répondre Citer 0
                                          • robin4002R Hors-ligne
                                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                                            dernière édition par

                                            if(prop.getAlcool() > 0)
                                            {
                                              prop.setAlcool(prop.getAlcool() - 1);
                                            }
                                            

                                            Rien de compliqué.

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 6
                                            • 7
                                            • 5 / 7
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB