• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved Problème onBlockDestroyed

    1.7.x
    1.7.10
    5
    19
    4021
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • 2
      20cents34 last edited by

      Bonjour, je suis actuellement en train de faire une hache pouvant détruire le bois d’un arbre entier et j’ai réussi à faire disparaître le bois à la verticale, le remplacer par de l’air et faire apparaître l’ItemStack correspondant mais je n’arrive pas à faire la même chose à l’horizontale.

      Classe de l’item :

      package net.mobject.common.item.tool;
      
      import net.minecraft.block.Block;
      import net.minecraft.entity.Entity;
      import net.minecraft.entity.EntityLivingBase;
      import net.minecraft.entity.item.EntityItem;
      import net.minecraft.init.Blocks;
      import net.minecraft.init.Items;
      import net.minecraft.item.ItemAxe;
      import net.minecraft.item.ItemStack;
      import net.minecraft.world.World;
      import net.mobject.common.entity.EntityVoleur;
      
      public class ItemGemmeAxe extends ItemAxe
      {
      public ItemGemmeAxe(ToolMaterial p_i45327_1_) {
      super(p_i45327_1_);
      
      }
      
      public boolean getIsRepairable(ItemStack input, ItemStack repair)
      {
      if(repair.getItem() == Items.diamond)
      {
      return true;
      }
      return false;
      }
      
      public boolean hasEffect(ItemStack stack){
      
      return true;
      
      }
      public boolean onBlockDestroyed(ItemStack stack, World world, Block block, int x, int y, int z, EntityLivingBase living){
      
      for(int i = y; i < 256; i++)
      {
      int m = world.getBlockMetadata(x, y, y);
      System.out.println(m);
      if(world.getBlock(x, i, z).isWood(world, x, y, z)){
      
      float f = 0.7F;
      
      double d0 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
      double d1 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
      double d2 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
      EntityItem entityitem = new EntityItem(world, (double)x + d0, (double)i + d1, (double)z + d2, new ItemStack(world.getBlock(x, i, z), 1,m));
      world.spawnEntityInWorld(entityitem);
      world.setBlockToAir(x, i, z);
      }
      
      else
      {
      System.out.println("blabla");
      return super.onBlockDestroyed(stack, world, block, x, i, z, living);
      }
      }
      
      for(int j = x; j < 25000 || j == 250000 || j > 250000 ; j++)
      
      {
      if(world.getBlock(j, y, z).isWood(world, x, y, z)){
      
      float f = 0.7F;
      double d0 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
      double d1 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
      double d2 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
      EntityItem entityitem = new EntityItem(world, (double)j + d0, (double)y + d1, (double)z + d2, new ItemStack(world.getBlock(x, y, z), 1, world.getBlockMetadata(j, y, y)));
      
      world.
      world.spawnEntityInWorld(entityitem);
      System.out.println("blabla");
      world.setBlockToAir(j, y, z);
      }
      
      else
      {
      return super.onBlockDestroyed(stack, world, block, j, y, z, living);
      }
      }
      return super.onBlockDestroyed(stack, world, block, x, y, z, living);
      
      }
      
      }
      

      Merci d’avance  🙂

      1 Reply Last reply Reply Quote 0
      • SCAREX
        SCAREX last edited by

        @‘20cents34’:

        Bonjour, je suis actuellement en train de faire une hache pouvant détruire le bois d’un arbre entier et j’ai réussi à faire disparaître le bois à la verticale, le remplacer par de l’air et faire apparaître l’ItemStack correspondant mais je n’arrive pas à faire la même chose à l’horizontale.

        Classe de l’item :

        package net.mobject.common.item.tool;
        
        import net.minecraft.block.Block;
        import net.minecraft.entity.Entity;
        import net.minecraft.entity.EntityLivingBase;
        import net.minecraft.entity.item.EntityItem;
        import net.minecraft.init.Blocks;
        import net.minecraft.init.Items;
        import net.minecraft.item.ItemAxe;
        import net.minecraft.item.ItemStack;
        import net.minecraft.world.World;
        import net.mobject.common.entity.EntityVoleur;
        
        public class ItemGemmeAxe extends ItemAxe
        {
        public ItemGemmeAxe(ToolMaterial p_i45327_1_) {
        super(p_i45327_1_);
        
        }
        
        public boolean getIsRepairable(ItemStack input, ItemStack repair)
        {
        if(repair.getItem() == Items.diamond)
        {
        return true;
        }
        return false;
        }
        
        public boolean hasEffect(ItemStack stack){
        
        return true;
        
        }
        public boolean onBlockDestroyed(ItemStack stack, World world, Block block, int x, int y, int z, EntityLivingBase living){
        
        for(int i = y; i < 256; i++)
        {
        int m = world.getBlockMetadata(x, y, y);
        System.out.println(m);
        if(world.getBlock(x, i, z).isWood(world, x, y, z)){
        
        float f = 0.7F;
        
        double d0 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
        double d1 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
        double d2 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
        EntityItem entityitem = new EntityItem(world, (double)x + d0, (double)i + d1, (double)z + d2, new ItemStack(world.getBlock(x, i, z), 1,m));
        world.spawnEntityInWorld(entityitem);
        world.setBlockToAir(x, i, z);
        }
        
        else
        {
        System.out.println("blabla");
        return super.onBlockDestroyed(stack, world, block, x, i, z, living);
        }
        }
        
        for(int j = x; j < 25000 || j == 250000 || j > 250000 ; j++)
        
        {
        if(world.getBlock(j, y, z).isWood(world, x, y, z)){
        
        float f = 0.7F;
        double d0 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
        double d1 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
        double d2 = (double)(world.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
        EntityItem entityitem = new EntityItem(world, (double)j + d0, (double)y + d1, (double)z + d2, new ItemStack(world.getBlock(x, y, z), 1, world.getBlockMetadata(j, y, y)));
        
        world.
        world.spawnEntityInWorld(entityitem);
        System.out.println("blabla");
        world.setBlockToAir(j, y, z);
        }
        
        else
        {
        return super.onBlockDestroyed(stack, world, block, j, y, z, living);
        }
        }
        return super.onBlockDestroyed(stack, world, block, x, y, z, living);
        
        }
        
        }
        

        Merci d’avance  🙂

        Ton code est très étrange, premièrement : ta première boucle va continuer jusqu’à 256 ce qui veut dire que si tu as un bloc de bois à la hauteur 255, il sera aussi cassé alors qu’il n’y a que de l’air entre le block cassé et ce morceau de bois en y = 255. Tu devrais utiliser une boucle do {} while ();, il me semble que robin avait fait un tutoriel pour faire ça dans sa vidéo sur créer des outils, jettes y un coup d’œil.

        Ensuite, ta deuxième boucle est une boucle infinie ce qui n’est vraiment pas à faire. Et pour finir, change cette condition :

        
        if(world.getBlock(j, y, z).isWood(world, x, y, z)){}
        
        

        en :

        
        if(world.getBlock(j, y, z).isWood(world, j, y, z)){}
        
        

        Site web contenant mes scripts : http://SCAREXgaming.github.io

        Pas de demandes de support par MP ni par skype SVP.
        Je n'accepte sur skype que l…

        1 Reply Last reply Reply Quote 0
        • 2
          20cents34 last edited by

          J’ai regardé le code de robin et il est similaire au miens. Pour la boucles allant jusqu’à 256 j’ai changer la valeur en 25 c’est plus précis mais mon problème est que je n’arrive pas à faire la même chose à l’horizontal. Je sais qu’il faut modifier la boucles for mais en quoi ?

          1 Reply Last reply Reply Quote 0
          • isador
            isador Moddeurs confirmés Modérateurs last edited by

            bha au lieu d’incrémenter les y tu incrémente les x

            1 Reply Last reply Reply Quote 0
            • 2
              20cents34 last edited by

              Ouai mais les y ont une valeur max de 256 et ne peuvent pas aller dans les négatifs alors que les x eux ont des valeurs plus grandes donc je ne sais pas quoi mettre pour que le jeu “test” les blocs autours sans faire une boucles infini

              1 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                @‘SCAREX’:

                Ton code est très étrange, premièrement : ta première boucle va continuer jusqu’à 256 ce qui veut dire que si tu as un bloc de bois à la hauteur 255, il sera aussi cassé alors qu’il n’y a que de l’air entre le block cassé et ce morceau de bois en y = 255. Tu devrais utiliser une boucle do {} while ();, il me semble que robin avait fait un tutoriel pour faire ça dans sa vidéo sur créer des outils, jettes y un coup d’œil.

                Non. Regarde le else, une fois qu’il n’y a plus de bois au dessus il sort de la fonction. Donc non, il ne cassera pas le bloc de bois qui se trouve en y=255 si il n’y en a pas en dessous.

                Si tu veux casser les blocs de bois sur toutes les directions il faut partir sur quelques choses de complètement différent, celui-ci n’est pas adapté pour.

                   public boolean onBlockDestroyed(ItemStack stack, World world, Block block, int x, int y, int z, EntityLivingBase living)
                   {
                       if(block.isWood(world, x, y, z))
                       {
                           this.cutWood(world, x, y, z, living.getEquipmentInSlot(0), living);
                       }
                return true;
                
                   }
                
                   public boolean cutWood(World world, int x, int y, int z, ItemStack stack, EntityLivingBase living)
                   {
                       boolean flagxPos = false, flagxNeg = false, flagzPos = false, flagzNeg = false, flagyPos = false, flagyNeg = false;
                
                       if(world.getBlock(x + 1, y, z).isWood(world, x + 1, y, z))
                       {
                           Block b = world.getBlock(x + 1, y, z);
                           int meta = b.damageDropped(world.getBlockMetadata(x + 1, y, z));
                           world.setBlockToAir(x + 1, y, z);
                           this.dropBlockAsItem(world, x + 1, y, z, new ItemStack(Item.getItemFromBlock(b), 1, meta));
                           stack.damageItem(1, living);
                           flagxPos = cutWood(world, x + 1, y, z, stack, living);
                       }
                       else
                       {
                           flagxPos = true;
                       }
                
                       if(world.getBlock(x - 1, y, z).isWood(world, x - 1, y, z))
                       {
                           Block b = world.getBlock(x - 1, y, z);
                           int meta = b.damageDropped(world.getBlockMetadata(x - 1, y, z));
                           world.setBlockToAir(x - 1, y, z);
                           this.dropBlockAsItem(world, x - 1, y, z, new ItemStack(Item.getItemFromBlock(b), 1, meta));
                           stack.damageItem(1, living);
                           flagxNeg = cutWood(world, x - 1, y, z, stack, living);
                       }
                       else
                       {
                           flagxNeg = true;
                       }
                
                       if(world.getBlock(x, y, z + 1).isWood(world, x, y, z + 1))
                       {
                           Block b = world.getBlock(x, y, z + 1);
                           int meta = b.damageDropped(world.getBlockMetadata(x, y, z + 1));
                           world.setBlockToAir(x, y, z + 1);
                           this.dropBlockAsItem(world, x, y, z + 1, new ItemStack(Item.getItemFromBlock(b), 1, meta));
                           stack.damageItem(1, living);
                           flagzPos = cutWood(world, x, y, z + 1, stack, living);
                       }
                       else
                       {
                           flagzPos = true;
                       }
                
                       if(world.getBlock(x, y, z - 1).isWood(world, x, y, z - 1))
                       {
                           Block b = world.getBlock(x, y, z - 1);
                           int meta = b.damageDropped(world.getBlockMetadata(x, y, z - 1));
                           world.setBlockToAir(x, y, z - 1);
                           this.dropBlockAsItem(world, x, y, z - 1, new ItemStack(Item.getItemFromBlock(b), 1, meta));
                           stack.damageItem(1, living);
                           flagzNeg = cutWood(world, x, y, z - 1, stack, living);
                       }
                       else
                       {
                           flagzNeg = true;
                       }
                
                       if(world.getBlock(x, y + 1, z).isWood(world, x, y + 1, z))
                       {
                           Block b = world.getBlock(x, y + 1, z);
                           int meta = b.damageDropped(world.getBlockMetadata(x, y + 1, z));
                           world.setBlockToAir(x, y + 1, z);
                           this.dropBlockAsItem(world, x, y + 1, z, new ItemStack(Item.getItemFromBlock(b), 1, meta));
                           stack.damageItem(1, living);
                           flagyPos = cutWood(world, x, y + 1, z, stack, living);
                       }
                       else
                       {
                           flagyPos = true;
                       }
                
                       if(world.getBlock(x, y - 1, z).isWood(world, x, y - 1, z))
                       {
                           Block b = world.getBlock(x, y - 1, z);
                           int meta = b.damageDropped(world.getBlockMetadata(x, y - 1, z));
                           world.setBlockToAir(x, y - 1, z);
                           this.dropBlockAsItem(world, x, y - 1, z, new ItemStack(Item.getItemFromBlock(b), 1, meta));
                           stack.damageItem(1, living);
                           flagyNeg = cutWood(world, x, y - 1, z, stack, living);
                       }
                       else
                       {
                           flagyNeg = true;
                       }
                       return flagxPos && flagxNeg && flagzPos && flagzNeg && flagyPos && flagyNeg;
                   }
                

                (code de @kevin_68)

                1 Reply Last reply Reply Quote 0
                • SCAREX
                  SCAREX last edited by

                  J’ai supposé que ce que tu voulais faire c’était créer une hache qui détruit tous les blocs autour du bloc détruit, voici ce à quoi je suis arrivé :

                  
                  public class SuperAxe extends ItemAxe
                  {
                  private static final String name = "superAxe";
                  
                  protected SuperAxe() {
                  super(ToolMaterial.EMERALD);
                  GameRegistry.registerItem(this, name);
                  setUnlocalizedName(ST18.MODID + "_" + name);
                  setCreativeTab(CreativeTabs.tabTools);
                  }
                  
                  public static String getName() {
                  return name;
                  }
                  
                  @Override
                  public boolean onBlockDestroyed(ItemStack stack, World worldIn, Block blockIn, BlockPos pos, EntityLivingBase playerIn) {
                  if (!worldIn.isRemote && playerIn instanceof EntityPlayer) {
                  worldIn.destroyBlock(pos, true);
                  destroyNearWood(worldIn, pos, stack, playerIn, stack.getMaxDamage() - stack.getItemDamage());
                  stack.damageItem(1, playerIn);
                  if (stack.stackSize <= 0 || stack.getItemDamage() >= stack.getMaxDamage()) ((EntityPlayer) playerIn).destroyCurrentEquippedItem();
                  }
                  return true;
                  }
                  
                  public int destroyNearWood(World world, BlockPos pos, ItemStack stack, EntityLivingBase player, int maxBlocks) {
                  if (world.getBlockState(pos.up()).getBlock().isWood(world, pos.up())) {
                  if (–maxBlocks > 0) {
                  world.destroyBlock(pos.up(), true);
                  stack.damageItem(1, player);
                  maxBlocks = destroyNearWood(world, pos.up(), stack, player, maxBlocks);
                  }
                  }
                  if (world.getBlockState(pos.down()).getBlock().isWood(world, pos.down())) {
                  if (--maxBlocks > 0) {
                  world.destroyBlock(pos.down(), true);
                  stack.damageItem(1, player);
                  maxBlocks = destroyNearWood(world, pos.down(), stack, player, maxBlocks);
                  }
                  }
                  if (world.getBlockState(pos.east()).getBlock().isWood(world, pos.east())) {
                  if (--maxBlocks > 0) {
                  world.destroyBlock(pos.east(), true);
                  stack.damageItem(1, player);
                  maxBlocks = destroyNearWood(world, pos.east(), stack, player, maxBlocks);
                  }
                  }
                  if (world.getBlockState(pos.west()).getBlock().isWood(world, pos.west())) {
                  if (--maxBlocks > 0) {
                  world.destroyBlock(pos.west(), true);
                  stack.damageItem(1, player);
                  maxBlocks = destroyNearWood(world, pos.west(), stack, player, maxBlocks);
                  }
                  }
                  if (world.getBlockState(pos.north()).getBlock().isWood(world, pos.north())) {
                  if (--maxBlocks > 0) {
                  world.destroyBlock(pos.north(), true);
                  stack.damageItem(1, player);
                  maxBlocks = destroyNearWood(world, pos.north(), stack, player, maxBlocks);
                  }
                  }
                  if (world.getBlockState(pos.south()).getBlock().isWood(world, pos.south())) {
                  if (--maxBlocks > 0) {
                  world.destroyBlock(pos.south(), true);
                  stack.damageItem(1, player);
                  maxBlocks = destroyNearWood(world, pos.south(), stack, player, maxBlocks);
                  }
                  }
                  return maxBlocks;
                  }
                  }
                  
                  

                  NOTE : ce code est pour la 1.8 mais si tu es en 1.7 tu pourras tout de même l’utiliser en changeant quelques valeus.

                  Site web contenant mes scripts : http://SCAREXgaming.github.io

                  Pas de demandes de support par MP ni par skype SVP.
                  Je n'accepte sur skype que l…

                  1 Reply Last reply Reply Quote 0
                  • 2
                    20cents34 last edited by

                    Merci, tu supposais bien c’était mon intention 🙂 Sinon l’équivalent de BlockPos en 1.7.10 est x,y,z mais je vois pas trop comment faire pour adapter ton code . Surtout les fonctions pos.south() etc… A moins que pos.up() ) soit égale à y+1 , pos.down() à y -1 mais alors je vois pas se que peut représenter pos.north() et pos.south(). Bref si tu as une idée donne la moi sinon je mettrais mon mod à jour. Et encore merci pour le code.

                    1 Reply Last reply Reply Quote 0
                    • robin4002
                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                      up -> y + 1
                      down -> y - 1
                      south -> x + 1
                      north -> x - 1
                      est -> z + 1
                      west -> z - 1
                      (de tête, pas sûr).

                      1 Reply Last reply Reply Quote 0
                      • 2
                        20cents34 last edited by

                        J’ai essayé le code de Robin4002 mais j’ai une erreur sur

                        this.dropBlockAsItem(world, x, y - 1, z, new ItemStack(Item.getItemFromBlock(b), 1, meta));
                        

                        Eclipse me dis que dropBlockAsItem est indéfinie pour ma classe.
                        Et Eclipse ne trouve pas non plus player ici

                        this.cutWood(world, x, y, z, player.inventory.getCurrentItem(), player);
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • robin4002
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                          ​
                          private void dropBlockAsItem(World world, int x, int y, int z, ItemStack stack)
                          {
                          if(!world.isRemote && world.getGameRules().getGameRuleBooleanValue("doTileDrops"))
                          {
                          float f = 0.7F;
                          double d0 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D;
                          double d1 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D;
                          double d2 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D;
                          EntityItem entityitem = new EntityItem(world, x + d0, y + d1, z + d2, stack);
                          entityitem.delayBeforeCanPickup = 10;
                          world.spawnEntityInWorld(entityitem);
                          }
                          }
                          

                          Il manquant cette fonction.

                          1 Reply Last reply Reply Quote 0
                          • 2
                            20cents34 last edited by

                            Merci mais j’ai toujours le problème du player. En gros il me le trouve pas et me propose de créer une variable.

                            1 Reply Last reply Reply Quote 0
                            • Deleted
                              Deleted last edited by

                              Ajoutes cette variable dans ta méthode
                              EntityPlayer entityplayer = (EntityPlayer)player;

                              1 Reply Last reply Reply Quote 0
                              • 2
                                20cents34 last edited by

                                J’ai une erreur sur le cast : (EntityPlayer)player et onBlockDestroyed me demande un return non présent dans le code de robin4002.

                                1 Reply Last reply Reply Quote 0
                                • SCAREX
                                  SCAREX last edited by

                                  @‘20cents34’:

                                  Merci, tu supposais bien c’était mon intention 🙂 Sinon l’équivalent de BlockPos en 1.7.10 est x,y,z mais je vois pas trop comment faire pour adapter ton code . Surtout les fonctions pos.south() etc… A moins que pos.up() ) soit égale à y+1 , pos.down() à y -1 mais alors je vois pas se que peut représenter pos.north() et pos.south(). Bref si tu as une idée donne la moi sinon je mettrais mon mod à jour. Et encore merci pour le code.

                                  BlockPos est une classe qui existait déjà avant la 1.8, il te suffit donc de faire BlockPos pos = new BlockPos(x,y,z); et le reste sera adapté, dont le pos.south() etc.

                                  Site web contenant mes scripts : http://SCAREXgaming.github.io

                                  Pas de demandes de support par MP ni par skype SVP.
                                  Je n'accepte sur skype que l…

                                  1 Reply Last reply Reply Quote 0
                                  • 2
                                    20cents34 last edited by

                                    Euh non eclipse le trouve nul part et je suis en 1.7.10

                                    1 Reply Last reply Reply Quote 0
                                    • robin4002
                                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                                      @‘20cents34’:

                                      J’ai une erreur sur le cast :  (EntityPlayer)player et onBlockDestroyed me demande un return non présent dans le code de robin4002.

                                      C’est de ma faute, j’ai édité mon message, maintenant ça devrait être bon.

                                      @‘SCAREX’:

                                      BlockPos est une classe qui existait déjà avant la 1.8, il te suffit donc de faire BlockPos pos = new BlockPos(x,y,z); et le reste sera adapté, dont le pos.south() etc.

                                      Non, elle n’existe pas en 1.7.10

                                      1 Reply Last reply Reply Quote 0
                                      • SCAREX
                                        SCAREX last edited by

                                        @‘robin4002’:

                                        @‘20cents34’:

                                        J’ai une erreur sur le cast :  (EntityPlayer)player et onBlockDestroyed me demande un return non présent dans le code de robin4002.

                                        C’est de ma faute, j’ai édité mon message, maintenant ça devrait être bon.

                                        @‘SCAREX’:

                                        BlockPos est une classe qui existait déjà avant la 1.8, il te suffit donc de faire BlockPos pos = new BlockPos(x,y,z); et le reste sera adapté, dont le pos.south() etc.

                                        Non, elle n’existe pas en 1.7.10

                                        Effectivement mais le principe est le même que ce que robin disait, tu fait x + 1 (east) puis x - 1 (west) puis z + 1 (south) puis z - 1 (north) puis y + 1 (up) (puis y - 1 (down) si tu veux aller vers le bas)

                                        Je peux vite fait adapter le code si tu veux pour la 1.7 ?

                                        Site web contenant mes scripts : http://SCAREXgaming.github.io

                                        Pas de demandes de support par MP ni par skype SVP.
                                        Je n'accepte sur skype que l…

                                        1 Reply Last reply Reply Quote 0
                                        • 2
                                          20cents34 last edited by

                                          Merci a tous et surtout à robin4002 ça marche parfaitement maintenant  🙂

                                          Ça ira merci SCAREX j’utiliserai ton code quand je passerai en 1.8.

                                          1 Reply Last reply Reply Quote 0
                                          • 1 / 1
                                          • First post
                                            Last post
                                          Design by Woryk
                                          Contact / Mentions Légales

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB