MFF

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

    Multiblock plus compacte

    Planifier Épinglé Verrouillé Déplacé Résolu 1.15.x
    1.15.2
    9 Messages 3 Publieurs 497 Vues 2 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.
    • DailyCraftD Hors-ligne
      DailyCraft
      dernière édition par

      Bonjour,

      je viens de faire un multiblock mais je me demander si je pouvais le faire plus compacte ou plus optimiser.

      Voici ma class :

      public class BlockPersonalBlock extends Block
      {
          public BlockPersonalBlock()
          {
              super(Block.Properties.create(Material.IRON));
              setRegistryName("personal_block");
          }
      
          @Override
          public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack)
          {
              if (!world.isRemote)
              {
                  if (placer instanceof PlayerEntity)
                  {
                      Block diamond = Blocks.DIAMOND_BLOCK;
                      Block gold = Blocks.GOLD_BLOCK;
                      Block iron = Blocks.IRON_BLOCK;
                      Block bars = Blocks.IRON_BARS;
                      Block water = Blocks.WATER;
      
                      if (
                              getBlock(world, pos.down()) == diamond &&
                                      getBlock(world, pos.down().north().west()) == diamond &&
                                      getBlock(world, pos.down().north()).getBlock() == diamond &&
                                      getBlock(world, pos.down().north().east()) == diamond &&
                                      getBlock(world, pos.down().west()) == diamond &&
                                      getBlock(world, pos.down().east()) == diamond &&
                                      getBlock(world, pos.down().south().west()) == diamond &&
                                      getBlock(world, pos.down().south()) == diamond &&
                                      getBlock(world, pos.down().south().east()) == diamond &&
      
                                      getBlock(world, pos.north()) == water &&
                                      getBlock(world, pos.north().east()) == water &&
                                      getBlock(world, pos.north().west()) == water &&
                                      getBlock(world, pos.west()) == water &&
                                      getBlock(world, pos.south()) == water &&
                                      getBlock(world, pos.south().west()) == water &&
                                      getBlock(world, pos.south().east()) == water &&
                                      getBlock(world, pos.east()) == water &&
      
                                      getBlock(world, pos.north(2).west()) == gold &&
                                      getBlock(world, pos.north(2).west(2)) == gold &&
                                      getBlock(world, pos.north(2)) == gold &&
                                      getBlock(world, pos.north(2).east()) == gold &&
                                      getBlock(world, pos.north(2).east(2)) == gold &&
                                      getBlock(world, pos.east(2).north()) == gold &&
                                      getBlock(world, pos.east(2)) == gold &&
                                      getBlock(world, pos.east(2).south()) == gold &&
                                      getBlock(world, pos.south(2).east()) == gold &&
                                      getBlock(world, pos.south(2).east(2)) == gold &&
                                      getBlock(world, pos.south(2)) == gold &&
                                      getBlock(world, pos.south(2).west()) == gold &&
                                      getBlock(world, pos.south(2).west(2)) == gold &&
                                      getBlock(world, pos.west(2).north()) == gold &&
                                      getBlock(world, pos.west(2)) == gold &&
                                      getBlock(world, pos.west(2).south()) == gold &&
      
                                      getBlock(world, pos.up().north(2).west(2)) == iron &&
                                      getBlock(world, pos.up().north(2).east(2)) == iron &&
                                      getBlock(world, pos.up(2).north(2).west(2)) == iron &&
                                      getBlock(world, pos.up(2).north(2).east(2)) == iron &&
                                      getBlock(world, pos.up(3).north(2).west(2)) == iron &&
                                      getBlock(world, pos.up(3).north(2).east(2)) == iron &&
                                      getBlock(world, pos.up().south(2).west(2)) == iron &&
                                      getBlock(world, pos.up().south(2).east(2)) == iron &&
                                      getBlock(world, pos.up(2).south(2).west(2)) == iron &&
                                      getBlock(world, pos.up(2).south(2).east(2)) == iron &&
                                      getBlock(world, pos.up(3).south(2).west(2)) == iron &&
                                      getBlock(world, pos.up(3).south(2).east(2)) == iron &&
                                      getBlock(world, pos.up(4).north(2).west()) == iron &&
                                      getBlock(world, pos.up(4).north(2).east()) == iron &&
                                      getBlock(world, pos.up(5).north(2)) == iron &&
                                      getBlock(world, pos.up(4).east(2).north()) == iron &&
                                      getBlock(world, pos.up(4).east(2).south()) == iron &&
                                      getBlock(world, pos.up(5).east(2)) == iron &&
                                      getBlock(world, pos.up(4).south(2).west()) == iron &&
                                      getBlock(world, pos.up(4).south(2).east()) == iron &&
                                      getBlock(world, pos.up(5).south(2)) == iron &&
                                      getBlock(world, pos.up(4).west(2).south()) == iron &&
                                      getBlock(world, pos.up(4).west(2).north()) == iron &&
                                      getBlock(world, pos.up(5).west(2)) == iron &&
      
                                      getBlock(world, pos.up(6).north(2)) == bars &&
                                      getBlock(world, pos.up(7).north()) == bars &&
                                      getBlock(world, pos.up(7).north(2)) == bars &&
                                      getBlock(world, pos.up(6).west(2)) == bars &&
                                      getBlock(world, pos.up(7).west()) == bars &&
                                      getBlock(world, pos.up(7).west(2)) == bars &&
                                      getBlock(world, pos.up(6).south(2)) == bars &&
                                      getBlock(world, pos.up(7).south()) == bars &&
                                      getBlock(world, pos.up(7).south(2)) == bars &&
                                      getBlock(world, pos.up(6).east(2)) == bars &&
                                      getBlock(world, pos.up(7).east()) == bars &&
                                      getBlock(world, pos.up(7).east(2)) == bars &&
                                      getBlock(world, pos.up(8)) == bars &&
                                      getBlock(world, pos.up(8).north()) == bars &&
                                      getBlock(world, pos.up(8).west()) == bars &&
                                      getBlock(world, pos.up(8).south()) == bars &&
                                      getBlock(world, pos.up(8).east()) == bars &&
                                      getBlock(world, pos.up(9)) == bars
                      ) {
                          Main.loggger.info("Structure good");
                      }
                  }
              }
          }
      
          private Block getBlock(World world, BlockPos pos)
          {
              return world.getBlockState(pos).getBlock();
          }
      }

      Mes créations :

      Mod en cours de développement : Personal Robot (1.15.2)

      Datapacks : DailyCraft's Craft (beta)

      Je suis un membre apprécié et joueur, j'ai déjà obtenu 2 point(s) de réputation.

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

        Je ne connaît pas la structure mais tu peux essayer de mettre des boucles for et de ne garder juste qu’un boolean donc tu le met à true puis si un Block n’est pas bon tu le met sur false (après peut être que ca ne marchera pas, mais tu pourrais t’inspirer du beacon :winking_face: )
        EDIT : tu pourrais carrément break si un Block n’est pas bon comme ça ça continue pas

        Le java c'est comme une boîte de chocolat, on sait jamais sur quoi on va tomber !

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

          Oui mais moi et les boucles (même si je sais que c’est hyper simple) ça va pas trop bien ensemble, si j’arrive à en comprendre une, le temps que j’essaye d’en comprendre une autre j’ai déjà l’ai déjà oublié.

          J’ai quand même déjà essayer voir si j’avait compris if (i = 0; i < 10; i++) et il n’y à aucun problème à part que c’est for mais c’est la seul que je comprends bien sinon les autres behhhh

          Mes créations :

          Mod en cours de développement : Personal Robot (1.15.2)

          Datapacks : DailyCraft's Craft (beta)

          Je suis un membre apprécié et joueur, j'ai déjà obtenu 2 point(s) de réputation.

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

            Pourtant c’est très simple :upside-down_face:

            for (int x = 0; x < 3; x++)
                     for (int y = 0; y < 3; y++)
                              for (int z = 0; z < 3; z++)
                                      world.setBlockState (new BlockPos (posX + x, posY + y, posZ + z), Blocks.DIRT);
            

            La ca va te faire un cube de 3x3 de dirt

            Le java c'est comme une boîte de chocolat, on sait jamais sur quoi on va tomber !

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

              Ouai mais pour ce que je veux faire je ne vois pas comment je peux faire.

              Et ton exemple est assez pourrie car il y a juste à faire world.setBlockState(new BlockPos(posX + 3, posY + 3, posZ + 3), Blocks.DIRT);

              et la boucles que tu as faites et celle que je comprends le mieux, mais sinon il y à le while qui se répète jusqu’à que ce qui à en les parenthèses soit vrai (comme un if mais voila) et le for (Block block : blocks) je ne sais pas ce qui fais.
              Il y en à d’autre ou pas ?

              Et pour le while je sens que je me suis mal exprimer dans mon explication voir si j’ai compris :

              int i = 1
              
              while (i == 2)
                  i++;
              

              donc la il s’execute que une, et pour faire une boucle infinie, il faut utiliser while (true)

              Mes créations :

              Mod en cours de développement : Personal Robot (1.15.2)

              Datapacks : DailyCraft's Craft (beta)

              Je suis un membre apprécié et joueur, j'ai déjà obtenu 2 point(s) de réputation.

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

                Si tu es en 1.15 tu peux essayer de mettre en relation une boucle for avec la classe Direction pour aller plus vite. Sinon tu peux faire une HashMap avec les BlockPos et les BlockState.

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

                  Mon block n’a pas de direction et le multiblock à les même block au nord sud est et ouest donc j’ai pas besoin de faire de vérification dans la quel il est fait.

                  Mes créations :

                  Mod en cours de développement : Personal Robot (1.15.2)

                  Datapacks : DailyCraft's Craft (beta)

                  Je suis un membre apprécié et joueur, j'ai déjà obtenu 2 point(s) de réputation.

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

                    J’ai testé d’utiliser des boucles for pour ta structure mais le haut est trop complexe à réaliser avec, la base elle est plutôt simple.

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

                      Mais sinon c’est pas très grave mais merci quand même 🙂

                      Mes créations :

                      Mod en cours de développement : Personal Robot (1.15.2)

                      Datapacks : DailyCraft's Craft (beta)

                      Je suis un membre apprécié et joueur, j'ai déjà obtenu 2 point(s) de réputation.

                      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