MFF

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

    Crash lors d'un give via la casse d'un bloc

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    25 Messages 6 Publieurs 4.3k 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

      public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int l) {
      if(!world.isRemote){
      Minecraft.getMinecraft().thePlayer.inventory.addItemStackToInventory(new ItemStack(Items.apple, 1 + rand.nextInt(5)));
      world.setBlock(x, y, z, ModAltisCraft.blockPomme, 0, 2);
      }
      La classe Minecraft est une classe client et n’existe pas côté serveur.

      1 réponse Dernière réponse Répondre Citer 0
      • Benjamin LoisonB Hors-ligne
        Benjamin Loison
        dernière édition par

        Oui je sais mais comment résoudre ça j’ai essayer avec des SideOnly ou avec des conditions if(world.isRemote) etc mais je n’y arrive pas :S

        >! Développeur de Altis-Life (Arma III) sur Minecraft !
        >! Site web     : https://lemnoslife.com

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

          Essaie en retirant le ! d’exclamation de ta condition :

          if(world.isRemote)
          {}

          Ou essaie en la retirant complétement

          1 réponse Dernière réponse Répondre Citer 0
          • Benjamin LoisonB Hors-ligne
            Benjamin Loison
            dernière édition par

            Quand j’enlève le !, le bloc ne respawn pas mais je gagne les pommes et si j’enlève la condition, ça crash avec ce crash-report : http://pastebin.com/2wgABSd5

            >! Développeur de Altis-Life (Arma III) sur Minecraft !
            >! Site web     : https://lemnoslife.com

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

              Voilà le bon code 😃

              
              if(!world.isRemote){
                  world.spawnEntityInWorld(new EntityItem(world, x, y, z, new ItemStack(Items.apple, 1 + rand.nextInt(5))))
                  world.setBlock(x, y, z, ModAltisCraft.blockPomme, 0, 2);
                  }
              
              

              Par-contre c’est un peu différent, ça le fait spawn mais ne l’ajoute pas directement à l’inventaire du joueur. Mais au final c’est pareil…

              1 réponse Dernière réponse Répondre Citer 0
              • Benjamin LoisonB Hors-ligne
                Benjamin Loison
                dernière édition par

                Ce que je veux c’est que ça spawn directement dans son inventaire 😕 ….

                >! Développeur de Altis-Life (Arma III) sur Minecraft !
                >! Site web     : https://lemnoslife.com

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

                  Dans ce cas essaie avec les event

                  
                  @SubscribeEvent
                  public void onBlockDestroyed(BreakEvent event)
                  {
                  if(event.block == TaClassePrincipale.blockPomme)
                  {
                  event.getPlayer().inventory.addItemStackToInventory(new ItemStack(Items.apple, 1 + rand.nextInt(5)));
                     event.world.setBlock(x, y, z, ModAltisCraft.blockPomme, 0, 2);
                  }
                  }
                  
                  
                  1 réponse Dernière réponse Répondre Citer 0
                  • Benjamin LoisonB Hors-ligne
                    Benjamin Loison
                    dernière édition par

                    Pas moyen d’éviter les events ?

                    >! Développeur de Altis-Life (Arma III) sur Minecraft !
                    >! Site web     : https://lemnoslife.com

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

                      Non je ne connais pas d’autre méthode dans la classe Block appelé lorsqu’il est cassé. Mais tu sais tu devras bien y passer en + ce n’est pas compliqué.
                      Tu rajoutes cette ligne là dans ta méthode init :
                      MinecraftForge.EVENT_BUS.register(new TaClasseDEvent());

                      EDIT = Y’a moyen de faire autrement, il suffit d’envoyer un packet.

                      1 réponse Dernière réponse Répondre Citer 0
                      • Benjamin LoisonB Hors-ligne
                        Benjamin Loison
                        dernière édition par

                        Ouai mais bon les events et moi… :S

                        >! Développeur de Altis-Life (Arma III) sur Minecraft !
                        >! Site web     : https://lemnoslife.com

                        1 réponse Dernière réponse Répondre Citer 0
                        • Benjamin LoisonB Hors-ligne
                          Benjamin Loison
                          dernière édition par

                          Et tout mais pas les packets :') enfin bon je suis sûr que c’est possible avec mon code de base quelqu’un d’autre a des idées ? 😕

                          >! Développeur de Altis-Life (Arma III) sur Minecraft !
                          >! Site web     : https://lemnoslife.com

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

                            Nop je suis la seule personne ce soir =D
                            Essaie ça, je n’y avais pas du tout pensé

                            
                            public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int l) {
                               if(world.isRemote){
                               Minecraft.getMinecraft().thePlayer.inventory.addItemStackToInventory(new ItemStack(Items.apple, 1 + rand.nextInt(5)));
                               }
                               else
                               {
                               world.setBlock(x, y, z, ModAltisCraft.blockPomme, 0, 2);
                               }
                               }
                            
                            
                            1 réponse Dernière réponse Répondre Citer 0
                            • Benjamin LoisonB Hors-ligne
                              Benjamin Loison
                              dernière édition par

                              Ca marche impec’ merci beaucoup 😛

                              >! Développeur de Altis-Life (Arma III) sur Minecraft !
                              >! Site web     : https://lemnoslife.com

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

                                Nop ça ne marche pas j’ai testé.
                                Regarde bien, fais toi giver l’item par le block, déco-reco et tu verras qu’il n’est pas sauvegardé dans ta barre d’action….
                                C’est sûrement un prob de Sides, on a dû placer le code au mauvais endroit (dans la mauvaise condition). Il faut regarder dans les autres classes de Minecraft, par-exemple la vache et son saut de lait. Pour ça je te laisse tu ne devrais pas avoir trop de mal 😃

                                1 réponse Dernière réponse Répondre Citer 0
                                • Benjamin LoisonB Hors-ligne
                                  Benjamin Loison
                                  dernière édition par

                                  Alors voilà ma nouvelle classe :

                                  package fr.altiscraft.altiscraft.common;
                                  
                                  import java.util.ArrayList;
                                  import java.util.Random;
                                  
                                  import net.minecraft.block.BlockBush;
                                  import net.minecraft.block.material.Material;
                                  import net.minecraft.client.Minecraft;
                                  import net.minecraft.item.Item;
                                  import net.minecraft.item.ItemStack;
                                  import net.minecraft.world.IBlockAccess;
                                  import net.minecraft.world.World;
                                  import net.minecraftforge.common.IShearable;
                                  
                                  public class CannabisPlante extends BlockBush implements IShearable {
                                  protected CannabisPlante() {
                                  super(Material.leaves);
                                  float f = 0.4F;
                                  setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.8F, 0.5F + f);
                                  }
                                  
                                  public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int l) {
                                  if (world.isRemote) {
                                  Minecraft.getMinecraft().thePlayer.inventory.addItemStackToInventory(new ItemStack(ModAltisCraft.itemCannabis, 1));
                                  } else {
                                  world.setBlock(x, y, z, ModAltisCraft.CannabisPlante, 0, 2);
                                  }
                                  }
                                  
                                  public boolean isShearable(ItemStack item, IBlockAccess world, int x, int y, int z) {
                                  return false;
                                  }
                                  
                                  public ArrayList <itemstack>onSheared(ItemStack item, IBlockAccess world, int x, int y, int z, int fortune) {
                                  return null;
                                  }
                                  
                                  public int quantityDropped(Random rdm) {
                                  return 0;
                                  }
                                  
                                  public Item getItemDropped(int int1, Random rdm, int int2) {
                                  return Item.getItemFromBlock(this);
                                  }
                                  }
                                  

                                  Le problème est celui que tu as dis ça ne sauvegarde pas j’ai regardé du côté sceau de lait mais je n’ai vu que ça qui ne m’aide pas trop…

                                      /**
                                       * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig.
                                       */
                                      public boolean interact(EntityPlayer p_70085_1_)
                                      {
                                          ItemStack itemstack = p_70085_1_.inventory.getCurrentItem();
                                  
                                          if (itemstack != null && itemstack.getItem() == Items.bucket && !p_70085_1_.capabilities.isCreativeMode)
                                          {
                                              if (itemstack.stackSize-- == 1)
                                              {
                                                  p_70085_1_.inventory.setInventorySlotContents(p_70085_1_.inventory.currentItem, new ItemStack(Items.milk_bucket));
                                              }
                                              else if (!p_70085_1_.inventory.addItemStackToInventory(new ItemStack(Items.milk_bucket)))
                                              {
                                                  p_70085_1_.dropPlayerItemWithRandomChoice(new ItemStack(Items.milk_bucket, 1, 0), false);
                                              }
                                  
                                              return true;
                                          }
                                          else
                                          {
                                              return super.interact(p_70085_1_);
                                          }
                                      }
                                  
                                  

                                  Voilà je ne sais pas comment résoudre ça :x Merci d’avance</itemstack>

                                  >! Développeur de Altis-Life (Arma III) sur Minecraft !
                                  >! Site web     : https://lemnoslife.com

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

                                    On te l’a dit utilise les events !
                                    Le give d’objet ça se fait uniquement coté serveur.
                                    Le système a été fait pour te simplifier la vie, tu te compliques la vie en cherchant a le contourner.

                                    –------------------------------------------------------------------------------------
                                    Si tu trouves mon intervention pertinente, n'hésite pas a m…

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

                                      Surtout que le code n’est pas très compliqué :
                                      (code 1.8)

                                      
                                      @SubscribeEvent
                                      public void onPlayerBreakBlock(BreakEvent event)
                                      {
                                      if(event.state.getBlock() == TestMod.plante && !event.getPlayer().capabilities.isCreativeMode) //Ne donne pas le bloc si le joueur est en créatif car ça peut être embêtant
                                      {
                                      event.getPlayer().inventory.addItemStackToInventory(new ItemStack(TestMod.plante));
                                      }
                                      }
                                      
                                      
                                      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

                                        Franchement les événements c’est super simple …
                                        Et sinon il y a cette fonction :

                                        public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int metadata)
                                        {
                                        super.harvestBlock(world, player, x, y, z, metadata);
                                        player.inventory.addItemStackToInventory(new ItemStack(Items.apple, 1 + world.rand.nextInt(5)));
                                        }
                                        
                                        1 réponse Dernière réponse Répondre Citer 0
                                        • Benjamin LoisonB Hors-ligne
                                          Benjamin Loison
                                          dernière édition par

                                          Merci pour la fonction c’est bon en faite je n’aime pas trop passé par les events perso voilà merci beaucoup à tous 🙂 !

                                          EDIT: La fonction ne marche pas en multi comment faire ?? (Encore sans les events de préférences :S)

                                          S’il vous plaît, merci 🙂

                                          EDIT-EDIT:

                                          1. @SubscribeEvent
                                          2. public void onBlockDestroyed(BreakEvent event)
                                          3. {
                                          4. if(event.block == ModAltisCraft.blockPomme)
                                          5. {
                                          6. event.getPlayer().inventory.addItemStackToInventory(new ItemStack(Items.apple, 1));
                                          7.    event.world.setBlock(x, y, z, ModAltisCraft.blockPomme, 0, 2);
                                          8. }
                                          9. }

                                          J’ai mis ça dans ma classe des events mais rien :S

                                          >! Développeur de Altis-Life (Arma III) sur Minecraft !
                                          >! Site web     : https://lemnoslife.com

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • DiabolicaTrixD Hors-ligne
                                            DiabolicaTrix Correcteurs Moddeurs confirmés
                                            dernière édition par

                                            Au pire, fais un packet qui give au joueur.

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB