Да ладн, я просто шутканул.
Суть в чём: есть главный блок и фантомный. В данном случае у нас получается структура вида 3х3, где по центру главный блок, а по контуру фантомные. Это единственное положение для твоей мультиблочной структуры.
Наша цель в том, чтобы связать блоки, сделать так, чтобы они знали, что каждый из блоков является частью какой-то структуры. В качестве определителя берём положение главного блока.
Так как вариант расположения всех блоков всего один, то нам хватит 4 бита (метадата блока) для однозначной идентификации положения каждого фантомного блока (их всего 8) относительно главного.
Связка идёт при установке главного блока:
public int onBlockPlaced(World par1World, int par2, int par3, int par4, int par5, float par6, float par7, float par8, int par9
(лучше поставь аннотацию @Override, чтобы не напутать параметры метода, я вырезал его из каких-то старых сообщений)
Здесь мы ставим вокруг нашего блока фантомные блоки и тут же даём им метадату, в зависимости от положения фантомного блока, что ставится, чтобы они в будущем могли "найти" главный блок.
Нам хватит 8 чисел для идентификации положения, пусть будет так:
0 - N, 1 - E, 2 - S, 3 - W, 4 - NE, 5 - SE, 6 - SW, 7 - NW
Здесь (вроде очевидно) указывается сторона света, в направлении которой находится главный блок. Расстояние всегда в 1 блок.
Остаётся подправить методы onBlockActivated и onBlockDestroyed. В них мы просто-напросто вызываем тот же метод из главного блока (второй метод в главном блоке удаляет себя и все свои фантомные блоки).