MFF

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

    EmotionMod - Bois, Pluie, Nether

    Planifier Épinglé Verrouillé Déplacé Résolu 1.8.x
    1.8
    7 Messages 3 Publieurs 1.9k 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.
    • EmotionFoxE Hors-ligne
      EmotionFox
      dernière édition par

      Mod Emotion

      Bonjour à tous !

      Aujourd’hui j’ai plusieurs chose à vous demander et c’est pourquoi je vais tacher de rendre ça le plus lisible possible, avec pourquoi pas quelques couleurs funky.

      Bon pour le commencement sachez que je mod un mod qui contiens essentiellement des bloques et des items, une sorte d’extension de Minecraft vanillia à ma sauce, j’ai déjà fait énormément de travail depuis le début dont des minerais, de la nourriture, des fleurs, des “fourtinures” style chaise, table de nuit, table etc… Mais aujourd’hui je me suis retrouvé confronté à plusieurs problèmes que je vais vous lister. Si quelqu’un à la moindre réponse à me donner, la moindre aide, je lui serais grandement reconnaissant.

      - 1er problème -
      Bloc de bois

      Voilà j’ai essayé de refaire un bloc de bois Minecraft, j’ai commencé par tester si je ne pouvais pas utiliser l’EnumHelper de forge pour ajouter une ligne en écrivant ceci dans la classe principale des blocs :

      public EnumType enumTypeCherry = EnumHelper.addEnum(EnumType.class, "CHERRY", 0, "cherry");
      

      Étend donné que ça n’as pas fonctionné j’ai créer moi même les différents blocs “BasePlanks” copie de “BlockPlanks”, “BaseLog” copie de “BlockOldLog”, “BaseLog2” copie de “BlockLog”,  “BaseSapling” copie de “BlockSapling”, “BaseLeaf” copie de “BlockOldLeaf” et enfin “BaseLeaves” copie de “BlockLeaves”. Bon le pire c’est que ça fonctionne à pars les feuilles de l’arbre qui ne sont pas transparente, le problème c’est quand je veux les enregistrées dans le “ClientProxy” :

      
      Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(EmotionBlocks.emoLog), 0, new ModelResourceLocation(Strings.MODID + ":cherry_log", "inventory"));
      …
      Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().registerBlockWithStateMapper(EmotionBlocks.emoLog, (new StateMap.Builder()).setProperty(BaseLog.VARIANT).setBuilderSuffix("_log").build());
      ...
      

      La première partie m’as permis de voir les bloques dans l’inventaire sous forme d’item, la seconde m’as permis de voir la texture sur le bloc en jeu et que le bloc de bois s’oriente bien dans les différents sens. Malheureusement et comme vous aurez pue le constater la première partie ne s’applique qu’à un seul bloc tandis que la seconde s’adapte à toutes les variances définie dans le bloc “BasePlanks” :

      
      public static enum EnumType implements IStringSerializable
         {
             CHERRY(0, "emomod:cherry");
             private static final BasePlanks.EnumType[] META_LOOKUP = new BasePlanks.EnumType[values().length];
             private final int meta;
             private final String name;
             private final String unlocalizedName;
             ….
      

      Donc voilà j’aurais aimé savoir comment enregistrer un bloc de bois avec différents type et l’enregistrer ou si il y à une méthode plus simples est envisageable que la mienne.

      - 2eme problème -
      Changer la pluie

      J’ai créer plusieurs bâtons magiques qui permettent différentes choses, comme :

      
      IBlockState block; //Type Of Block Who Appear
      Long time = worldIn.getWorldTime();
      IBlockState state = worldIn.getBlockState(pos);
      IBlockState stateWest = worldIn.getBlockState(pos.west());
      IBlockState stateEast = worldIn.getBlockState(pos.east());
      IBlockState stateNorth = worldIn.getBlockState(pos.north());
      IBlockState stateSouth = worldIn.getBlockState(pos.south());
      
      if (this == EmotionItems.blueStaff)
      {
             block = Blocks.water.getDefaultState();
      
             if (playerIn.isSneaking())
             {
                     if (state != Blocks.air.getDefaultState())
                      {
                             worldIn.setBlockState(pos, block);
      
                             stack.damageItem(1, playerIn);
                      }
              }
             else
             {
                     if (state != Blocks.air.getDefaultState())
                     {
                             worldIn.setBlockState(pos, block);
                             worldIn.setBlockState(pos.west(), block);
                             worldIn.setBlockState(pos.east(), block);
                             worldIn.setBlockState(pos.north(), block);
                             worldIn.setBlockState(pos.south(), block);
      
                             stack.damageItem(2, playerIn);
                     }
             }
      }
      

      Et le blanc est censé lancer un éclair, changer le temps en nuit si celui-ci ne l’est pas déjà et enfin enlever la pluie.

      
      else if (this == EmotionItems.whiteStaff)
      {
             if (time >= 13000 || time <= 1000)
             {
                     worldIn.setRainStrength(0.0F);
             }
             else
             {
                     worldIn.setWorldTime(13000);
             }
      
             worldIn.spawnEntityInWorld(new EntityLightningBolt(worldIn, pos.getX(), pos.getY(), pos.getZ()));
             stack.damageItem(2, playerIn);
      }
      

      Malheureusement la commande “.setRainStrength” ne marche qu’une seconde puis remet la pluie, j’aurais voulue savoir si ce ne serait pas plutôt possible d’envoyer directement la commande “/set weather clear” sur le client où peut-être une autre façon de la changer.

      - 3eme problème -
      Génération dans le nether

      Et pour finir j’ai une classe qui me permet de générer mon minerai le “Purpura Lapidem” ici présent :

      
      package mods.emotion.world;
      
      import java.util.Random;
      …
      
      public class WorldGenEmotion implements IWorldGenerator
      {
      public void generate(Random rand, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
      {
      switch(world.provider.getDimensionId())
      {
      case -1:
      generateNether(world, rand, chunkX * 16, chunkZ * 16);
      case 0:
      generateSurface(world, rand, chunkX * 16, chunkZ * 16);
      case 1:
      generateEnd(world, rand, chunkX * 16, chunkZ * 16);
      }
      }
      
      private void generateEnd(World world, Random rand, int chunkX, int chunkZ)
      {
      
      }
      
      private void generateSurface(World world, Random rand, int chunkX, int chunkZ)
      {
      for (int i = 0; i < 5; i++)
      {
      final Predicate predicate;
      int yMin = 4;
      int yMax = 10;
      
      int randPosX = chunkX + rand.nextInt(16);
      int randPosY = yMin + rand.nextInt(yMax - yMin);
      int randPosZ = chunkZ + rand.nextInt(16);
      
      (new WorldGenMinable(EmotionBlocks.purpuraOre.getDefaultState(), 3)).generate(world, rand, new BlockPos(randPosX, randPosY, randPosZ));
      }
      }
      
      private void generateNether(World world, Random rand, int chunkX, int chunkZ)
      {
      
      }
      }
      

      Malheuresement quand je place une génération de minerais dans la private void generateNether() le bloc en question en ce trouve nul pars dans le monde mais sans erreurs au lancement.

      %(#3366ff)[Merci d’avance à toutes les personnes qui pourrons peut-être m’aider, je suis dispo sur Steam, Skype et Mumble si besoin. Je suis vraiment bloqué, j’ai chercher partout sur le net sans trouver aucune réponse et presque aucun tuto de modding en 1.8 -_… Merci encore !

      -EmotionFox -]

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

        [size=largePs: J’aurais besoin d’aide sur quelques autres détails, donc si une personne expérimentée à quelque temps à consacrer à un mec qui fais un mod pour lui et sa copine pour lui expliquer certaine chose de la 1.8 n’hésitais pas à m’envoyer un MP.]

        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

          1. Je ne sais pas
          2. Suffit de regarder ce que fait la commande weather clear :
            WorldInfo worldinfo = world.getWorldInfo();

          worldinfo.setCleanWeatherTime((300 + (new Random()).nextInt(600)) * 20);
          worldinfo.setRainTime(0);
          worldinfo.setThunderTime(0);
          worldinfo.setRaining(false);
          worldinfo.setThundering(false);

          1. Il faut ajouter en 4ème argument dans WorldGenMinable Blocks.netherrack.getDefaultState() pour préciser que le bloc doit se générer sur de la netherrack et non sur de la pierre.
          1 réponse Dernière réponse Répondre Citer 0
          • EmotionFoxE Hors-ligne
            EmotionFox
            dernière édition par

            1. Pas de problème merci quand même pour ton aide 🙂
            2. Ah merci beaucoup ! Par contre où a tu trouver les effets de la commande /weather clear ? Ça m’intéresse.
            3. tu veux dire ici ? :
            
            (new WorldGenMinable(EmotionBlocks.purpuraOre.getDefaultState(), 3)).generate(world, rand, new BlockPos(randPosX, randPosY, randPosZ));
            
            

            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

              2. net.minecraft.command.CommandWeather.java
              3. (new WorldGenMinable(EmotionBlocks.purpuraOre.getDefaultState(), 3, Blocks.netherrack.getDefaultState())
              Comme ça.

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

                Pour le 1, tu peux passer sur le TS ? si oui, dit moi (par mp) vers quel heure.

                edit : Si tu peux pas donne moi ton skype. Et aussi tu peux envoyer TOUTE la classe de ton bois, les json de ton bois et aussi la classe de l’enum ?

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

                  Je reviens vers vous pour la solution de la génération dans le Nether, merci à robin pour l’aide précieuse.

                  private void generateNether(World world, Random rand, int chunkX, int chunkZ)
                  {
                  for (int i = 0; i < 50; i++)
                  {
                  final Predicate predicate;
                  int yMin = 4;
                  int yMax = 180;
                  
                  int randPosX = chunkX + rand.nextInt(16);
                  int randPosY = yMin + rand.nextInt(yMax - yMin);
                  int randPosZ = chunkZ + rand.nextInt(16);
                  
                  (new WorldGenMinable(EmotionBlocks.purpuraBlock.getDefaultState(), 14,
                  BlockHelper.forBlock(Blocks.netherrack))).generate(world, rand, new BlockPos(randPosX, randPosY, randPosZ));
                  }
                  }
                  

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

                  MINECRAFT FORGE FRANCE © 2024

                  Powered by NodeBB