Program: 42113
Project: 42113
Buggy source:
@Override public void init(){
  Validate.notNull(FunkyRegistry.INSTANCE).registerProxy(BlockMultipart.class,FunkyCapabilities.STICKY_BLOCK,(world,pos,side) -> {
    TileEntity tile=world.getTileEntity(pos);
    if (tile != null && tile instanceof TileMultipart) {
      TileMultipart multipart=(TileMultipart)tile;
      TMultiPart sidePart=multipart.partMap(side.ordinal());
      if (sidePart != null) {
        if (sidePart instanceof Microblock) {
          Microblock sideMicro=(Microblock)sidePart;
          return sideMicro.getIMaterial().getMaterialID().startsWith(FLBlocks.FRAMES[0].getRegistryName().toString());
        }
      }
    }
    return false;
  }
);
  Validate.notNull(FunkyRegistry.INSTANCE).registerMoveFactoryBlockClass(BlockMultipart.class,new IMoveFactory(){
    private DefaultMoveFactory defaultFactory=new DefaultMoveFactory();
    @Override public boolean recreateBlock(    World world,    BlockPos pos,    NBTTagCompound tag){
      Block block=ForgeRegistries.BLOCKS.getValue(new ResourceLocation(MultipartMod.modID(),"String_Node_Str"));
      Chunk chunk=world.getChunkFromBlockCoords(pos);
      BlockHelper.silentSetBlock(chunk,pos,block,0);
      TileMultipart multipart=TileMultipart.createFromNBT(tag,world);
      for (      TMultiPart p : multipart.jPartList())       TileMultipart.addPart(world,pos,p);
      return true;
    }
    @Override public NBTTagCompound destroyBlock(    World world,    BlockPos pos){
      NBTTagCompound tag=new NBTTagCompound();
      TileEntity te=world.getTileEntity(pos);
      if (te != null && te instanceof TileMultipart) {
        TileMultipart multipart=(TileMultipart)te;
        multipart.writeToNBT(tag);
      }
      tag.merge(defaultFactory.destroyBlock(world,pos));
      return tag;
    }
  }
);
}

Fixed version (ground truth):
@Override public void init(){
  Validate.notNull(FunkyRegistry.INSTANCE).registerProxy(BlockMultipart.class,FunkyCapabilities.STICKY_BLOCK,(world,pos,side) -> {
    TileEntity tile=world.getTileEntity(pos);
    if (tile instanceof TileMultipart) {
      TileMultipart multipart=(TileMultipart)tile;
      TMultiPart sidePart=multipart.partMap(side.ordinal());
      if (sidePart != null) {
        if (sidePart instanceof Microblock) {
          Microblock sideMicro=(Microblock)sidePart;
          return sideMicro.getIMaterial().getMaterialID().startsWith(FLBlocks.FRAMES[0].getRegistryName().toString());
        }
      }
    }
    return false;
  }
);
  Validate.notNull(FunkyRegistry.INSTANCE).registerMoveFactoryBlockClass(BlockMultipart.class,new IMoveFactory(){
    private DefaultMoveFactory defaultFactory=new DefaultMoveFactory();
    @Override public boolean recreateBlock(    World world,    BlockPos pos,    NBTTagCompound tag){
      Block block=ForgeRegistries.BLOCKS.getValue(new ResourceLocation(MultipartMod.modID(),"String_Node_Str"));
      Chunk chunk=world.getChunkFromBlockCoords(pos);
      BlockHelper.silentSetBlock(chunk,pos,block,0);
      TileMultipart multipart=TileMultipart.createFromNBT(tag,world);
      for (      TMultiPart p : multipart.jPartList())       TileMultipart.addPart(world,pos,p);
      return true;
    }
    @Override public NBTTagCompound destroyBlock(    World world,    BlockPos pos){
      NBTTagCompound tag=new NBTTagCompound();
      TileEntity te=world.getTileEntity(pos);
      if (te instanceof TileMultipart) {
        TileMultipart multipart=(TileMultipart)te;
        multipart.writeToNBT(tag);
      }
      tag.merge(defaultFactory.destroyBlock(world,pos));
      return tag;
    }
  }
);
}