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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      Renvoies ton code actuel.

      1 réponse Dernière réponse Répondre Citer 0
      • 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
                                            • 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