1.15.2 Multiblock plus compacte



  • 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();
        }
    }


  • 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 😉 )
    EDIT : tu pourrais carrément break si un Block n'est pas bon comme ça ça continue pas



  • 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



  • Pourtant c'est très simple 🙃

    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



  • 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)



  • 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.



  • 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.



  • 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.



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


Log in to reply